Cargo lists storing lists of cargo for each carrier
authorMarkus Armbruster <armbru@pond.sub.org>
Sat, 6 Sep 2008 22:40:58 +0000 (18:40 -0400)
committerMarkus Armbruster <armbru@pond.sub.org>
Tue, 9 Sep 2008 01:30:39 +0000 (21:30 -0400)
commit64a53c90f0522ba60bf70a7912161a082dd0b745
tree34cf50a6d8afac28f109e9d81b8f3bcb5124267d
parentf21cb48f69ad2cb376359eced6b1d5d67e138b63
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.
include/land.h
include/nuke.h
include/plane.h
include/prototypes.h
include/unit.h
src/lib/common/cargo.c [new file with mode: 0644]
src/lib/subs/fileinit.c
src/lib/subs/land.c
src/lib/subs/nuke.c
src/lib/subs/plane.c
src/lib/update/main.c