[airstrike] Re: Goal oriented gameplay (was: generators, triggers and aiming)
eero.tamminen at netsonic.fi
Tue Jan 11 14:06:08 EST 2005
> > * Add types to objects:
> > - Member for the object type
> > - Parent link that points to parent object type
> > - Helper function that traverses the type tree to root and checks
> > whether object or it's parent type had requested type
> I have checked in my solution to this to src/core/object.[ch]. It's
> not used anywhere
> yet though. I solved the typechecking with the function
> void *obj_ref(void *object, object_type_t *assumed_type);
> which must be used to take a reference to an object. This function may
> check if the object is of the assumed type (or inherits from that type).
I guess it calls something like:
void *obj_check_type(void *object, object_type_t *assumed_type);
Which asserts or sigsegvs if type doesn't match.
Without debug the function would be just:
#define obj_type_check(obj, type) (obj)
I guess this function would be used in all of these:
And all the sprite specific cast macros?
We could do something like this in e.g. sprites/biplane.c and other sprites:
#define BIPLANE(obj) ((struct biplane *)obj_type_check(obj, biplane_type))
static msgret sigget(void *s, msg_t msg)
struct biplane *bs = BIPLANE(s);
For base sprite and mech types there should be similar casts.
These casts should be used everywhere instead of non-checking C casts
(I can add this to my TODO once we've agreed on this and the functions are
> > * Note: Sprite capabilities and attribute checks are handled with
> > messages (e.g. MSG_IS_WALKING). This is needed by triggers
> We could also use the (currently underused) enum sprite_flags field
> of each sprite. Currently it has only one bit used.
Heh, I would assume 31 flags to be more than enough for the whole game. :)
I'll add to my todo moving the HAS_AI etc. messages using sprite flags
instead as that will save the function call (sprite_ask is already inline).
More information about the airstrike