Cargo lists storing lists of cargo for each carrier
Persistent game state encodes "who carries what" by storing the carrier uid in the cargo. Cargo lists augment that: they store lists of cargo for each carrier. They are not persistent. New unit_cargo_init() to compute the cargo lists from game state. Call it in ef_init_srv() and at the end of update_main(). New unit_onresize() to resize the cargo list data structure. Installed as units' struct empfile callback onresize to make them resize automatically with the unit files. New unit_carrier_change() to update cargo lists when carriers change in game state. Convenience wrappers pln_carrier_change(), lnd_carrier_change() and nuk_carrier_change(). Call them from prewrite callbacks to keep cargo lists in sync with game state. To make that work, unused units must not point to a carrier. Add new pln_oninit(), lnd_oninit() and nuk_oninit() take care of newly created units. Change lnd_prewrite() and nuk_prewrite() to take dead land units and nukes off their carrier. pln_prewrite() did that already. New unit_cargo_first(), unit_cargo_next() to traverse cargo lists. Convenience wrappers lnd_first_on_ship(), lnd_first_on_land(), lnd_next_on_unit(), pln_first_on_ship(), pln_first_on_land(), pln_next_on_unit() and nuk_on_plane(). The latter is disabled for now because it clashes with an existing function.
This commit is contained in:
parent
f21cb48f69
commit
64a53c90f0
11 changed files with 478 additions and 10 deletions
|
@ -450,6 +450,7 @@ extern void bitinit2(struct nstr_sect *, unsigned char *, int);
|
|||
extern int getele(char *, char *);
|
||||
/* land.c */
|
||||
extern char *prland(struct lndstr *);
|
||||
extern void lnd_oninit(void *);
|
||||
extern void lnd_postread(int, void *);
|
||||
extern void lnd_prewrite(int, void *, void *);
|
||||
/* landgun.c */
|
||||
|
@ -517,6 +518,7 @@ extern void init_nreport(void);
|
|||
extern void nreport(natid, int, natid, int);
|
||||
/* nuke.c */
|
||||
extern char *prnuke(struct nukstr *);
|
||||
extern void nuk_oninit(void *);
|
||||
extern void nuk_postread(int, void *);
|
||||
extern void nuk_prewrite(int, void *, void *);
|
||||
extern int nuk_on_plane(struct nukstr *, int);
|
||||
|
@ -528,6 +530,7 @@ extern int nxtsct(struct nstr_sect *, struct sctstr *);
|
|||
extern int onearg(char *, char *);
|
||||
/* plane.c */
|
||||
extern char *prplane(struct plnstr *);
|
||||
extern void pln_oninit(void *);
|
||||
extern void pln_postread(int, void *);
|
||||
extern void pln_prewrite(int, void *, void *);
|
||||
/* plnsub.c */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue