omi-eikyo/src/g_object.h

53 lines
1.2 KiB
C

// Copyright © 2017 Project Golan, all rights reserved.
#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_MemberGet(t, ->id, ofs), \
__set: DGE_Object_MemberSet(t, ->id, ofs)}
#define G_propMemExt(base, ofs, t, name) \
G_propMemOfs(DGE_OME_##base + (ofs), t, name)
#define G_Entity_propMem(ofs, t, name) G_propMemExt(Entity, ofs, t, name)
// Types ---------------------------------------------------------------------|
enum G_subty
{
subtype_none,
subtype_missile,
subtype_test,
subtype_player,
subtype_max,
};
#define G_Entity_props() DGE_EntityProps() \
G_propMemOfs(DGE_OME(Entity.subtype), int, subtype)
typedef struct G_entit // Entity
{
int id;
G_Entity_props()
} G_entit;
#define G_Missile_props() DGE_MissileEntityProps() \
G_propMemOfs(DGE_OME(Entity.subtype), int, subtype)
typedef struct G_missl // Missile
{
int id;
G_Missile_props()
} G_missl;
// Extern Functions ----------------------------------------------------------|
void G_Entity_Create(union G_mfdat *info);
void G_Sector_Create(union G_mfdat *info);
#endif