omi-eikyo/src/g_object.h

89 lines
2.3 KiB
C

// 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 <Doominati.h>
#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