[Add] Missions can now add fleets.
This commit is contained in:
parent
c769e71c72
commit
1c9bc7ed9d
@ -157,6 +157,13 @@ static const luaL_reg hook_methods[] = {
|
|||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// Pilots.
|
||||||
|
static int pilot_addFleet(lua_State* L);
|
||||||
|
static const luaL_reg pilot_methods[] = {
|
||||||
|
{ "add", pilot_addFleet },
|
||||||
|
{ 0, 0 }
|
||||||
|
};
|
||||||
|
|
||||||
// Register all the libaries.
|
// Register all the libaries.
|
||||||
int misn_loadLibs(lua_State* L) {
|
int misn_loadLibs(lua_State* L) {
|
||||||
luaL_register(L, "lephisto", lephisto_methods);
|
luaL_register(L, "lephisto", lephisto_methods);
|
||||||
@ -168,6 +175,7 @@ int misn_loadLibs(lua_State* L) {
|
|||||||
luaL_register(L, "rnd", rnd_methods);
|
luaL_register(L, "rnd", rnd_methods);
|
||||||
luaL_register(L, "tk", tk_methods);
|
luaL_register(L, "tk", tk_methods);
|
||||||
luaL_register(L, "hook", hook_methods);
|
luaL_register(L, "hook", hook_methods);
|
||||||
|
luaL_register(L, "pilot", pilot_methods);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -771,3 +779,59 @@ static int hook_pilotDeath(lua_State* L) {
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// -- Pilot. --
|
||||||
|
static int pilot_addFleet(lua_State* L) {
|
||||||
|
MIN_ARGS(1);
|
||||||
|
Fleet* flt;
|
||||||
|
char* fltname;
|
||||||
|
int i, j;
|
||||||
|
unsigned int p;
|
||||||
|
double a;
|
||||||
|
Vec2 vv, vp, vn;
|
||||||
|
|
||||||
|
if(lua_isstring(L, -1)) fltname = (char*) lua_tostring(L, -1);
|
||||||
|
else {
|
||||||
|
MISN_DEBUG("Invalid parameter");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Pull the fleet.
|
||||||
|
flt = fleet_get(fltname);
|
||||||
|
if(flt == NULL) {
|
||||||
|
MISN_DEBUG("Fleet not found!");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// This should probably be done better..
|
||||||
|
vect_pset(&vp, RNG(MIN_HYPERSPACE_DIST, MIN_HYPERSPACE_DIST*1.5),
|
||||||
|
RNG(0, 360)*M_PI/180.);
|
||||||
|
vectnull(&vn);
|
||||||
|
|
||||||
|
// Now we start adding pilots and toss ids into the table we return.
|
||||||
|
j = 0;
|
||||||
|
for(i = 0; i < flt->npilots; i++) {
|
||||||
|
if(RNG(0, 100) <= flt->pilots[i].chance) {
|
||||||
|
// Fleet displacement.
|
||||||
|
vect_cadd(&vp, RNG(75, 150) & (RNG(0, 1) ? 1: -1),
|
||||||
|
RNG(75, 150) * (RNG(0, 1) ? 1 : -1));
|
||||||
|
|
||||||
|
a = vect_angle(&vp, &vn);
|
||||||
|
vectnull(&vv);
|
||||||
|
p = pilot_create(flt->pilots[i].ship,
|
||||||
|
flt->pilots[i].name,
|
||||||
|
flt->faction,
|
||||||
|
flt->ai,
|
||||||
|
a,
|
||||||
|
&vp,
|
||||||
|
&vv,
|
||||||
|
0);
|
||||||
|
|
||||||
|
// We push each pilot created into a table and return it.
|
||||||
|
lua_pushnumber(L, ++j); // Index start with 1.
|
||||||
|
lua_pushnumber(L, p); // value = pilot id.
|
||||||
|
lua_rawset(L, -3); // Store the value in the table.
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
21
src/pilot.c
21
src/pilot.c
@ -125,6 +125,17 @@ Pilot* pilot_get(const unsigned int id) {
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// 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;
|
||||||
|
}
|
||||||
|
|
||||||
// Attempt to turn the pilot to face dir.
|
// Attempt to turn the pilot to face dir.
|
||||||
double pilot_face(Pilot* p, const float dir) {
|
double pilot_face(Pilot* p, const float dir) {
|
||||||
double diff, turn;
|
double diff, turn;
|
||||||
@ -957,16 +968,6 @@ void pilots_render(void) {
|
|||||||
pilot_stack[i]->render(pilot_stack[i]);
|
pilot_stack[i]->render(pilot_stack[i]);
|
||||||
}
|
}
|
||||||
|
|
||||||
// Return the fleet based on 'name'
|
|
||||||
Fleet* fleet_get(const char* name) {
|
|
||||||
int i;
|
|
||||||
for(i = 0; i < nfleets; i++)
|
|
||||||
if(strcmp(name, fleet_stack[i].name)==0)
|
|
||||||
return fleet_stack+i;
|
|
||||||
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Parse the fleet node.
|
// Parse the fleet node.
|
||||||
static Fleet* fleet_parse(const xmlNodePtr parent) {
|
static Fleet* fleet_parse(const xmlNodePtr parent) {
|
||||||
xmlNodePtr cur, node;
|
xmlNodePtr cur, node;
|
||||||
|
Loading…
Reference in New Issue
Block a user