// Copyright © 2017 Project Golan, all rights reserved. // See COPYING for more information. #ifndef g_object_h #define g_object_h #include "g_objdef.h" #include #define G_propMemOfs(ofs, t, name) \ __prop name {__get: DGE_Object_MemberGetT(t, ->id, ofs), \ __set: DGE_Object_MemberSetT(t, ->id, ofs, __arg)} #define G_propMemGEM(cl, t, name) \ G_propMemOfs(DGE_OME(cl##.##name), t, name) #define G_propMemIEM(cl, ofs, t, name) \ G_propMemOfs(DGE_OME_##cl + (ofs), t, name) #define G_Entity_propMem(ofs, t, name) \ G_propMemIEM(Entity, ofs, t, name) #define G_RenderThinker_propMem(ofs, t, name) \ G_propMemIEM(RenderThinker, ofs, t, name) #define G_RenderThinker_propExt() \ G_propMemGEM(RenderThinker, unsigned, frame) \ G_propMemGEM(RenderThinker, unsigned, ftime) \ G_propMemGEM(RenderThinker, G_anim const *, curanim) \ __prop animate {__call: G_RenderThinker_Animate(->id)} \ __prop setAnim {__call: G_RenderThinker_AnimSet(->id)} \ __prop fsetAnim {__call: G_RenderThinker_AnimSetForced(->id)} #define G_Entity_propExt() \ G_propMemGEM(Entity, int, subtype) // Extern Functions ----------------------------------------------------------| void G_RenderThinker_Animate (unsigned id); void G_RenderThinker_AnimSet (unsigned id, G_anim const *anim); void G_RenderThinker_AnimSetForced(unsigned id, G_anim const *anim); // Types ---------------------------------------------------------------------| enum G_subtype { subtype_none, subtype_missile, subtype_test, subtype_player, subtype_max, }; #define G_RenderThinker_props() DGE_RenderThinkerProps() \ G_RenderThinker_propExt() typedef struct G_renderth { int id; G_RenderThinker_props() } G_renderth; #define G_Entity_props() DGE_EntityProps() \ G_RenderThinker_propExt() \ G_Entity_propExt() typedef struct G_entity { int id; G_Entity_props() } G_entity; #define G_Missile_props() DGE_MissileEntityProps() \ G_RenderThinker_propExt() \ G_Entity_propExt() typedef struct G_missile { int id; G_Missile_props() } G_missile; // Extern Functions ----------------------------------------------------------| void G_Entity_Create(union G_mapdata *info); void G_Sector_Create(union G_mapdata *info); #endif