[Change] Modulised fleet stuff.
This commit is contained in:
parent
65e54c12fe
commit
1d53467491
207
src/fleet.c
Normal file
207
src/fleet.c
Normal file
@ -0,0 +1,207 @@
|
|||||||
|
/**
|
||||||
|
* @file pilot.c
|
||||||
|
*
|
||||||
|
* @brief Handles the pilot stuff.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <string.h>
|
||||||
|
#include <math.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <limits.h>
|
||||||
|
|
||||||
|
#include "lxml.h"
|
||||||
|
|
||||||
|
#include "lephisto.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "weapon.h"
|
||||||
|
#include "ldata.h"
|
||||||
|
#include "spfx.h"
|
||||||
|
#include "rng.h"
|
||||||
|
#include "hook.h"
|
||||||
|
#include "map.h"
|
||||||
|
#include "explosion.h"
|
||||||
|
#include "escort.h"
|
||||||
|
#include "music.h"
|
||||||
|
#include "pilot.h"
|
||||||
|
|
||||||
|
#define XML_ID "Fleets" /**< XML document identifier. */
|
||||||
|
#define XML_FLEET "fleet" /**< XML individual fleet identifier. */
|
||||||
|
|
||||||
|
#define FLEET_DATA "../dat/fleet.xml" /**< Where to find fleet data. */
|
||||||
|
|
||||||
|
#define CHUNK_SIZE 32 /**< Size to allocate memory by. */
|
||||||
|
|
||||||
|
/* Stack of fleets. */
|
||||||
|
static Fleet* fleet_stack = NULL; /**< Fleet stack. */
|
||||||
|
static int nfleets = 0; /**< Number of fleets. */
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Grabs a fleet out of the stack.
|
||||||
|
* @param name Name of the fleet to match.
|
||||||
|
* @return The fleet mactching name or NULL if not found.
|
||||||
|
*/
|
||||||
|
Fleet* fleet_get(const char* name) {
|
||||||
|
int i;
|
||||||
|
|
||||||
|
for(i = 0; i < nfleets; i++)
|
||||||
|
if(strcmp(fleet_stack[i].name, name)==0)
|
||||||
|
return &fleet_stack[i];
|
||||||
|
|
||||||
|
WARN("Fleet '%s' not found in stack", name);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Parses the fleet node.
|
||||||
|
* @param tmp Fleet to load.
|
||||||
|
* @param parent Parent xml node of the fleet in question.
|
||||||
|
* @return A newly allocated fleet loaded with data in parent node.
|
||||||
|
*/
|
||||||
|
static int fleet_parse(Fleet* tmp, const xmlNodePtr parent) {
|
||||||
|
xmlNodePtr cur, node;
|
||||||
|
FleetPilot* pilot;
|
||||||
|
char* c;
|
||||||
|
int mem;
|
||||||
|
node = parent->xmlChildrenNode;
|
||||||
|
|
||||||
|
/* Sane defaults and clean up. */
|
||||||
|
memset(tmp, 0, sizeof(Fleet));
|
||||||
|
tmp->faction = -1;
|
||||||
|
|
||||||
|
tmp->name = (char*)xmlGetProp(parent, (xmlChar*)"name"); /* Already mallocs. */
|
||||||
|
if(tmp->name == NULL) WARN("Fleet in "FLEET_DATA" has invalid or no name");
|
||||||
|
|
||||||
|
do { /* Load all the data. */
|
||||||
|
if(xml_isNode(node, "faction"))
|
||||||
|
tmp->faction = faction_get(xml_get(node));
|
||||||
|
else if(xml_isNode(node, "ai"))
|
||||||
|
tmp->ai = xml_getStrd(node);
|
||||||
|
else if(xml_isNode(node, "pilots")) {
|
||||||
|
cur = node->children;
|
||||||
|
mem = 0;
|
||||||
|
do {
|
||||||
|
if(xml_isNode(cur, "pilot")) {
|
||||||
|
/* See if must grow. */
|
||||||
|
tmp->npilots++;
|
||||||
|
if(tmp->npilots > mem) {
|
||||||
|
mem += CHUNK_SIZE;
|
||||||
|
tmp->pilots = realloc(tmp->pilots, mem * sizeof(FleetPilot));
|
||||||
|
}
|
||||||
|
pilot = &tmp->pilots[tmp->npilots-1];
|
||||||
|
|
||||||
|
/* Clear memory. */
|
||||||
|
memset(pilot, 0, sizeof(FleetPilot));
|
||||||
|
|
||||||
|
/* Check for name override. */
|
||||||
|
xmlr_attr(cur, "name", c);
|
||||||
|
pilot->name = c; /* No need to free since it will have later. */
|
||||||
|
|
||||||
|
/* Check for ai override. */
|
||||||
|
xmlr_attr(cur, "ai", pilot->ai);
|
||||||
|
|
||||||
|
/* Load pilots ship. */
|
||||||
|
pilot->ship = ship_get(xml_get(cur));
|
||||||
|
if(pilot->ship == NULL)
|
||||||
|
WARN("Pilot %s in Fleet %s has null ship", pilot->name, tmp->name);
|
||||||
|
|
||||||
|
/* Load chance. */
|
||||||
|
xmlr_attr(cur, "chance", c);
|
||||||
|
pilot->chance = atoi(c);
|
||||||
|
if(pilot->chance == 0)
|
||||||
|
WARN("Pilot %s in Fleet %s has 0%% chance of appearing",
|
||||||
|
pilot->name, tmp->name);
|
||||||
|
|
||||||
|
if(c != NULL)
|
||||||
|
free(c); /* Free the external malloc. */
|
||||||
|
}
|
||||||
|
} while(xml_nextNode(cur));
|
||||||
|
|
||||||
|
/* Resize to minimum. */
|
||||||
|
tmp->pilots = realloc(tmp->pilots, sizeof(FleetPilot)*tmp->npilots);
|
||||||
|
}
|
||||||
|
} while(xml_nextNode(node));
|
||||||
|
|
||||||
|
#define MELEMENT(o,s) \
|
||||||
|
if(o) WARN("Fleet '%s' missing '"s"' element", tmp->name)
|
||||||
|
/**< Hack to check for missing fields. */
|
||||||
|
MELEMENT(tmp->ai == NULL, "ai");
|
||||||
|
MELEMENT(tmp->faction == -1, "faction");
|
||||||
|
MELEMENT(tmp->pilots == NULL, "pilots");
|
||||||
|
#undef MELEMENT
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Loads all the fleets.
|
||||||
|
* @return 0 on success.
|
||||||
|
*/
|
||||||
|
int fleet_load(void) {
|
||||||
|
int mem;
|
||||||
|
uint32_t bufsize;
|
||||||
|
char* buf = ldata_read(FLEET_DATA, &bufsize);
|
||||||
|
|
||||||
|
xmlNodePtr node;
|
||||||
|
xmlDocPtr doc = xmlParseMemory(buf, bufsize);
|
||||||
|
|
||||||
|
node = doc->xmlChildrenNode; /* Ships node. */
|
||||||
|
if(strcmp((char*)node->name, XML_ID)) {
|
||||||
|
ERR("Malformed "FLEET_DATA" file: missing root element '"XML_ID"'");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
node = node->xmlChildrenNode; /* First ship node. */
|
||||||
|
if(node == NULL) {
|
||||||
|
ERR("Malformed "FLEET_DATA" file: does not contain elements");
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
mem = 0;
|
||||||
|
do {
|
||||||
|
if(xml_isNode(node, XML_FLEET)) {
|
||||||
|
/* See if memory must grow. */
|
||||||
|
nfleets++;
|
||||||
|
if(nfleets > mem) {
|
||||||
|
mem += CHUNK_SIZE;
|
||||||
|
fleet_stack = realloc(fleet_stack, sizeof(Fleet) * mem);
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Load the fleet. */
|
||||||
|
fleet_parse(&fleet_stack[nfleets-1], node);
|
||||||
|
}
|
||||||
|
} while(xml_nextNode(node));
|
||||||
|
|
||||||
|
/* Shrink to minimum. */
|
||||||
|
fleet_stack = realloc(fleet_stack, sizeof(Fleet) * nfleets);
|
||||||
|
|
||||||
|
xmlFreeDoc(doc);
|
||||||
|
free(buf);
|
||||||
|
|
||||||
|
DEBUG("Loaded %d Fleets%s", nfleets, (nfleets == 1) ? "" : "s");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @brief Cleans up by freeing all the fleet data.
|
||||||
|
*/
|
||||||
|
void fleet_free(void) {
|
||||||
|
int i,j;
|
||||||
|
if(fleet_stack != NULL) {
|
||||||
|
for(i = 0; i < nfleets; i++) {
|
||||||
|
for(j = 0; j < fleet_stack[i].npilots; j++) {
|
||||||
|
if(fleet_stack[i].pilots[j].name)
|
||||||
|
free(fleet_stack[i].pilots[j].name);
|
||||||
|
if(fleet_stack[i].pilots[j].ai)
|
||||||
|
free(fleet_stack[i].pilots[j].ai);
|
||||||
|
}
|
||||||
|
free(fleet_stack[i].name);
|
||||||
|
free(fleet_stack[i].pilots);
|
||||||
|
free(fleet_stack[i].ai);
|
||||||
|
}
|
||||||
|
free(fleet_stack);
|
||||||
|
fleet_stack = NULL;
|
||||||
|
}
|
||||||
|
nfleets = 0;
|
||||||
|
}
|
||||||
|
|
49
src/fleet.h
Normal file
49
src/fleet.h
Normal file
@ -0,0 +1,49 @@
|
|||||||
|
#pragma once
|
||||||
|
#include "pilot.h"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @struct FleetPilot
|
||||||
|
*
|
||||||
|
* @brief Represents a pilot in a fleet.
|
||||||
|
*
|
||||||
|
* @sa Fleet
|
||||||
|
* @sa Pilot
|
||||||
|
*/
|
||||||
|
typedef struct FleetPilot_ {
|
||||||
|
Ship* ship; /**< Ship the pilot is flying. */
|
||||||
|
char* name; /**< Used if they have a special name like uniques. */
|
||||||
|
int chance; /**< Chance of this pilot appearing in the fleet. */
|
||||||
|
char* ai; /**< ai different of fleets global ai. */
|
||||||
|
} FleetPilot;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @struct Fleet
|
||||||
|
*
|
||||||
|
* @brief Represenets a fleet.
|
||||||
|
*
|
||||||
|
* Fleets are used to create pilots, both from being in a system and from
|
||||||
|
* mission triggers.
|
||||||
|
*
|
||||||
|
* @sa FleetPilot
|
||||||
|
*/
|
||||||
|
typedef struct Fleet_ {
|
||||||
|
char* name; /**< Fleet name, used as the identifier. */
|
||||||
|
int faction; /**< Faction of the fleet. */
|
||||||
|
|
||||||
|
char* ai; /**< faction of the fleet. */
|
||||||
|
|
||||||
|
FleetPilot* pilots; /**< The pilots in the fleet. */
|
||||||
|
int npilots; /**< Total number of pilots. */
|
||||||
|
} Fleet;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Get fleet stuff.
|
||||||
|
*/
|
||||||
|
Fleet* fleet_get(const char* name);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Load / cleanup.
|
||||||
|
*/
|
||||||
|
int fleet_load(void);
|
||||||
|
void fleet_free(void);
|
||||||
|
|
@ -31,6 +31,7 @@
|
|||||||
#include "font.h"
|
#include "font.h"
|
||||||
#include "ship.h"
|
#include "ship.h"
|
||||||
#include "pilot.h"
|
#include "pilot.h"
|
||||||
|
#include "fleet.h"
|
||||||
#include "player.h"
|
#include "player.h"
|
||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "joystick.h"
|
#include "joystick.h"
|
||||||
|
162
src/pilot.c
162
src/pilot.c
@ -23,11 +23,6 @@
|
|||||||
#include "music.h"
|
#include "music.h"
|
||||||
#include "pilot.h"
|
#include "pilot.h"
|
||||||
|
|
||||||
#define XML_ID "Fleets" /**< XML document identifier. */
|
|
||||||
#define XML_FLEET "fleet" /**< XML individual fleet identifier. */
|
|
||||||
|
|
||||||
#define FLEET_DATA "../dat/fleet.xml" /**< Where to find fleet data. */
|
|
||||||
|
|
||||||
#define PILOT_CHUNK 32 /**< Chunks to increment pilot_stack by. */
|
#define PILOT_CHUNK 32 /**< Chunks to increment pilot_stack by. */
|
||||||
|
|
||||||
#define CHUNK_SIZE 32 /**< Size to allocate memory by. */
|
#define CHUNK_SIZE 32 /**< Size to allocate memory by. */
|
||||||
@ -48,10 +43,6 @@ extern double player_crating; /**< Players combat rating. */
|
|||||||
extern void player_abortAutonav(char* reason);
|
extern void player_abortAutonav(char* reason);
|
||||||
extern int player_enemies;
|
extern int player_enemies;
|
||||||
|
|
||||||
/* Stack of fleets. */
|
|
||||||
static Fleet* fleet_stack = NULL; /** Fleet stack. */
|
|
||||||
static int nfleets = 0; /** Number of fleets. */
|
|
||||||
|
|
||||||
/* External. */
|
/* External. */
|
||||||
/* AI. */
|
/* AI. */
|
||||||
extern AI_Profile* ai_pinit(Pilot* p, char* ai);
|
extern AI_Profile* ai_pinit(Pilot* p, char* ai);
|
||||||
@ -73,7 +64,6 @@ static void pilot_hyperspace(Pilot* pilot);
|
|||||||
void pilot_render(Pilot* pilot);
|
void pilot_render(Pilot* pilot);
|
||||||
static void pilot_calcCargo(Pilot* pilot);
|
static void pilot_calcCargo(Pilot* pilot);
|
||||||
void pilot_free(Pilot* p); /* Externed in player.c */
|
void pilot_free(Pilot* p); /* Externed in player.c */
|
||||||
static int fleet_parse(Fleet* tmp, const xmlNodePtr parent);
|
|
||||||
static void pilot_dead(Pilot* p);
|
static void pilot_dead(Pilot* p);
|
||||||
static int pilot_setOutfitMounts(Pilot* p, PilotOutfit* po, int o, int q);
|
static int pilot_setOutfitMounts(Pilot* p, PilotOutfit* po, int o, int q);
|
||||||
static void pilot_setSecondary(Pilot* p, Outfit* o);
|
static void pilot_setSecondary(Pilot* p, Outfit* o);
|
||||||
@ -190,17 +180,6 @@ Pilot* pilot_get(const unsigned int id) {
|
|||||||
return pilot_stack[m];
|
return pilot_stack[m];
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Grab a fleet out of the stack. */
|
|
||||||
Fleet* fleet_get(const char* name) {
|
|
||||||
int i;
|
|
||||||
for(i = 0; i < nfleets; i++)
|
|
||||||
if(strcmp(fleet_stack[i].name, name)==0)
|
|
||||||
return &fleet_stack[i];
|
|
||||||
|
|
||||||
WARN("Fleet '%s' not found in stack", name);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Check to see if pilot is hostile to the player.
|
* @brief Check to see if pilot is hostile to the player.
|
||||||
* @param p Player to see if is hostile.
|
* @param p Player to see if is hostile.
|
||||||
@ -1987,144 +1966,3 @@ void pilots_render(void) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Parse the fleet node. */
|
|
||||||
static int fleet_parse(Fleet* tmp, const xmlNodePtr parent) {
|
|
||||||
xmlNodePtr cur, node;
|
|
||||||
FleetPilot* pilot;
|
|
||||||
char* c;
|
|
||||||
int mem;
|
|
||||||
node = parent->xmlChildrenNode;
|
|
||||||
|
|
||||||
/* Sane defaults and clean up. */
|
|
||||||
memset(tmp, 0, sizeof(Fleet));
|
|
||||||
tmp->faction = -1;
|
|
||||||
|
|
||||||
tmp->name = (char*)xmlGetProp(parent, (xmlChar*)"name"); /* Already mallocs. */
|
|
||||||
if(tmp->name == NULL) WARN("Fleet in "FLEET_DATA" has invalid or no name");
|
|
||||||
|
|
||||||
do {
|
|
||||||
/* Load all the data. */
|
|
||||||
if(xml_isNode(node, "faction"))
|
|
||||||
tmp->faction = faction_get(xml_get(node));
|
|
||||||
else if(xml_isNode(node, "ai"))
|
|
||||||
tmp->ai = xml_getStrd(node);
|
|
||||||
else if(xml_isNode(node, "pilots")) {
|
|
||||||
cur = node->children;
|
|
||||||
mem = 0;
|
|
||||||
do {
|
|
||||||
if(xml_isNode(cur, "pilot")) {
|
|
||||||
/* See if we must grow. */
|
|
||||||
tmp->npilots++;
|
|
||||||
if(tmp->npilots > mem) {
|
|
||||||
mem += CHUNK_SIZE;
|
|
||||||
tmp->pilots = realloc(tmp->pilots, mem * sizeof(FleetPilot));
|
|
||||||
}
|
|
||||||
pilot = &tmp->pilots[tmp->npilots-1];
|
|
||||||
|
|
||||||
/* Clear memory. */
|
|
||||||
memset(pilot, 0, sizeof(FleetPilot));
|
|
||||||
|
|
||||||
/* Check for name override. */
|
|
||||||
xmlr_attr(cur, "name", c);
|
|
||||||
pilot->name = c; /* No need to free since it will have to later. */
|
|
||||||
|
|
||||||
/* Check for ai override. */
|
|
||||||
xmlr_attr(cur, "ai", pilot->ai);
|
|
||||||
|
|
||||||
/* Load pilots ship. */
|
|
||||||
pilot->ship = ship_get(xml_get(cur));
|
|
||||||
if(pilot->ship == NULL)
|
|
||||||
WARN("Pilot %s in Fleet %s has null ship", pilot->name, tmp->name);
|
|
||||||
|
|
||||||
/* Load chance. */
|
|
||||||
xmlr_attr(cur, "chance", c);
|
|
||||||
pilot->chance = atoi(c);
|
|
||||||
if(pilot->chance == 0)
|
|
||||||
WARN("Pilot %s in Fleet %s has 0%% chance of appearing",
|
|
||||||
pilot->name, tmp->name);
|
|
||||||
|
|
||||||
if(c != NULL)
|
|
||||||
free(c); /* Free the external malloc. */
|
|
||||||
}
|
|
||||||
} while(xml_nextNode(cur));
|
|
||||||
|
|
||||||
/* Resize to minimum. */
|
|
||||||
tmp->pilots = realloc(tmp->pilots, sizeof(FleetPilot)*tmp->npilots);
|
|
||||||
}
|
|
||||||
} while(xml_nextNode(node));
|
|
||||||
#define MELEMENT(o,s) if(o) WARN("Fleet '%s' missing '"s"' element", tmp->name)
|
|
||||||
MELEMENT(tmp->ai==NULL, "ai");
|
|
||||||
MELEMENT(tmp->faction==-1, "faction");
|
|
||||||
MELEMENT(tmp->pilots==NULL, "pilots");
|
|
||||||
#undef MELEMENT
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Load the fleets. */
|
|
||||||
int fleet_load(void) {
|
|
||||||
int mem;
|
|
||||||
uint32_t bufsize;
|
|
||||||
char* buf = ldata_read(FLEET_DATA, &bufsize);
|
|
||||||
|
|
||||||
xmlNodePtr node;
|
|
||||||
xmlDocPtr doc = xmlParseMemory(buf, bufsize);
|
|
||||||
|
|
||||||
node = doc->xmlChildrenNode; /* Ships node. */
|
|
||||||
if(strcmp((char*)node->name, XML_ID)) {
|
|
||||||
ERR("Malformed "FLEET_DATA" file: missing root element '"XML_ID"'");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
node = node->xmlChildrenNode; /* First ship node. */
|
|
||||||
if(node == NULL) {
|
|
||||||
ERR("Malformed "FLEET_DATA" file: does not contain elements");
|
|
||||||
return -1;
|
|
||||||
}
|
|
||||||
|
|
||||||
mem = 0;
|
|
||||||
do {
|
|
||||||
if(xml_isNode(node, XML_FLEET)) {
|
|
||||||
/* See if memory must grow. */
|
|
||||||
nfleets++;
|
|
||||||
if(nfleets > mem) {
|
|
||||||
mem += CHUNK_SIZE;
|
|
||||||
fleet_stack = realloc(fleet_stack, sizeof(Fleet)*mem);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Load the fleet. */
|
|
||||||
fleet_parse(&fleet_stack[nfleets-1], node);
|
|
||||||
}
|
|
||||||
} while(xml_nextNode(node));
|
|
||||||
|
|
||||||
/* Shrink to minimum. */
|
|
||||||
fleet_stack = realloc(fleet_stack, sizeof(Fleet)*nfleets);
|
|
||||||
|
|
||||||
xmlFreeDoc(doc);
|
|
||||||
free(buf);
|
|
||||||
|
|
||||||
DEBUG("Loaded %d fleet%s", nfleets, (nfleets==1) ? "" : "s");
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Free the fleets. */
|
|
||||||
void fleet_free(void) {
|
|
||||||
int i, j;
|
|
||||||
if(fleet_stack != NULL) {
|
|
||||||
for(i = 0; i < nfleets; i++) {
|
|
||||||
for(j = 0; j < fleet_stack[i].npilots; j++) {
|
|
||||||
if(fleet_stack[i].pilots[j].name)
|
|
||||||
free(fleet_stack[i].pilots[j].name);
|
|
||||||
if(fleet_stack[i].pilots[j].ai)
|
|
||||||
free(fleet_stack[i].pilots[j].ai);
|
|
||||||
}
|
|
||||||
free(fleet_stack[i].name);
|
|
||||||
free(fleet_stack[i].pilots);
|
|
||||||
free(fleet_stack[i].ai);
|
|
||||||
}
|
|
||||||
free(fleet_stack);
|
|
||||||
fleet_stack = NULL;
|
|
||||||
}
|
|
||||||
nfleets = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
38
src/pilot.h
38
src/pilot.h
@ -195,41 +195,6 @@ typedef struct Pilot_ {
|
|||||||
Task* task; /**< Current action. */
|
Task* task; /**< Current action. */
|
||||||
} Pilot;
|
} Pilot;
|
||||||
|
|
||||||
/**
|
|
||||||
* @struct FleetPilot
|
|
||||||
*
|
|
||||||
* @brief Represents a pilot in a fleet.
|
|
||||||
*
|
|
||||||
* @sa Fleet
|
|
||||||
* @sa Pilot
|
|
||||||
*/
|
|
||||||
typedef struct FleetPilot_ {
|
|
||||||
Ship* ship; /**< Ship that the pilot is flying. */
|
|
||||||
char* name; /**< For special 'unique' names. */
|
|
||||||
int chance; /**< Chance of this pilot appearing in the fleet. */
|
|
||||||
char* ai; /**< Ai difference of fleet's global ai. */
|
|
||||||
} FleetPilot;
|
|
||||||
|
|
||||||
/**
|
|
||||||
* @struct Fleet
|
|
||||||
*
|
|
||||||
* @brief Represents a fleet.
|
|
||||||
*
|
|
||||||
* Fleets are used to create pilots, both from being in a system and from
|
|
||||||
* mission triggers.
|
|
||||||
*
|
|
||||||
* @sa FleetPilot
|
|
||||||
*/
|
|
||||||
typedef struct Fleet_ {
|
|
||||||
char* name; /**< Fleet name, used as an identifier. */
|
|
||||||
int faction; /**< Faction of the fleet. */
|
|
||||||
|
|
||||||
char* ai; /**< AI profile to use. */
|
|
||||||
|
|
||||||
FleetPilot* pilots; /**< The pilots in the fleet. */
|
|
||||||
int npilots; /**< Total number of pilots. */
|
|
||||||
} Fleet;
|
|
||||||
|
|
||||||
/* Grabing pilot crap. */
|
/* Grabing pilot crap. */
|
||||||
extern Pilot* player; /* The player. */
|
extern Pilot* player; /* The player. */
|
||||||
Pilot* pilot_get(unsigned int id);
|
Pilot* pilot_get(unsigned int id);
|
||||||
@ -238,7 +203,6 @@ unsigned int pilot_getPrevID(const unsigned int id);
|
|||||||
unsigned int pilot_getNearestEnemy(const Pilot* p);
|
unsigned int pilot_getNearestEnemy(const Pilot* p);
|
||||||
unsigned int pilot_getNearestHostile(void); /* Only for the player. */
|
unsigned int pilot_getNearestHostile(void); /* Only for the player. */
|
||||||
unsigned int pilot_getNearestPilot(const Pilot* p);
|
unsigned int pilot_getNearestPilot(const Pilot* p);
|
||||||
Fleet* fleet_get(const char* name);
|
|
||||||
int pilot_getJumps(const Pilot* p);
|
int pilot_getJumps(const Pilot* p);
|
||||||
|
|
||||||
/* Misc. */
|
/* Misc. */
|
||||||
@ -297,8 +261,6 @@ void pilots_free(void);
|
|||||||
void pilots_clean(void);
|
void pilots_clean(void);
|
||||||
void pilots_cleanAll(void);
|
void pilots_cleanAll(void);
|
||||||
void pilot_free(Pilot* p);
|
void pilot_free(Pilot* p);
|
||||||
int fleet_load(void);
|
|
||||||
void fleet_free(void);
|
|
||||||
|
|
||||||
void pilot_setHostile(Pilot* p);
|
void pilot_setHostile(Pilot* p);
|
||||||
void pilot_rmHostile(Pilot* p);
|
void pilot_rmHostile(Pilot* p);
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
#include "nebulae.h"
|
#include "nebulae.h"
|
||||||
#include "music.h"
|
#include "music.h"
|
||||||
#include "gui.h"
|
#include "gui.h"
|
||||||
|
#include "fleet.h"
|
||||||
#include "space.h"
|
#include "space.h"
|
||||||
|
|
||||||
#define XML_PLANET_ID "Planets"
|
#define XML_PLANET_ID "Planets"
|
||||||
|
@ -3,6 +3,7 @@
|
|||||||
#include "opengl.h"
|
#include "opengl.h"
|
||||||
#include "economy.h"
|
#include "economy.h"
|
||||||
#include "pilot.h"
|
#include "pilot.h"
|
||||||
|
#include "fleet.h"
|
||||||
|
|
||||||
#define MAX_HYPERSPACE_VEL 25 /**< Speed to brake to before jumping. */
|
#define MAX_HYPERSPACE_VEL 25 /**< Speed to brake to before jumping. */
|
||||||
|
|
||||||
|
@ -16,6 +16,7 @@
|
|||||||
#include "lxml.h"
|
#include "lxml.h"
|
||||||
#include "space.h"
|
#include "space.h"
|
||||||
#include "ldata.h"
|
#include "ldata.h"
|
||||||
|
#include "fleet.h"
|
||||||
#include "unidiff.h"
|
#include "unidiff.h"
|
||||||
|
|
||||||
#define CHUNK_SIZE 32 /**< Size of chunk to allocate. */
|
#define CHUNK_SIZE 32 /**< Size of chunk to allocate. */
|
||||||
|
Loading…
Reference in New Issue
Block a user