shared prefabs list
This commit is contained in:
parent
4dbaa19024
commit
1c81be6a59
@ -307,7 +307,7 @@ Enum(P_MsgKind)
|
|||||||
P_MsgKind_SaveWorld,
|
P_MsgKind_SaveWorld,
|
||||||
P_MsgKind_ResetWorld,
|
P_MsgKind_ResetWorld,
|
||||||
P_MsgKind_TileEdit,
|
P_MsgKind_TileEdit,
|
||||||
P_MsgKind_EntEdit,
|
P_MsgKind_Prefab,
|
||||||
P_MsgKind_Delete,
|
P_MsgKind_Delete,
|
||||||
|
|
||||||
// Server -> Client
|
// Server -> Client
|
||||||
@ -322,13 +322,14 @@ Struct(P_Msg)
|
|||||||
|
|
||||||
b32 affect_dummies;
|
b32 affect_dummies;
|
||||||
|
|
||||||
|
P_PrefabKind prefab;
|
||||||
|
P_Key key;
|
||||||
|
Xform xf;
|
||||||
|
|
||||||
P_TileKind tile_kind;
|
P_TileKind tile_kind;
|
||||||
Rng2I32 tile_range;
|
Rng2I32 tile_range;
|
||||||
u64 tiles_hash;
|
u64 tiles_hash;
|
||||||
|
|
||||||
P_Key key;
|
|
||||||
Xform xf;
|
|
||||||
|
|
||||||
String data;
|
String data;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -25,3 +25,23 @@ i32 P_TileIdxFromTilePos(Vec2 p)
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
//~ Prefab helpers
|
||||||
|
|
||||||
|
#if IsLanguageC
|
||||||
|
String P_PrefabNameFromKind(P_PrefabKind kind)
|
||||||
|
{
|
||||||
|
PERSIST Readonly String prefab_names[P_PrefabKind_COUNT] = {
|
||||||
|
#define X(name, ...) [P_PrefabKind_##name] = CompLit(#name),
|
||||||
|
P_PrefabsXList(X)
|
||||||
|
#undef X
|
||||||
|
};
|
||||||
|
String result = Zi;
|
||||||
|
if (kind >= 0 && kind < countof(prefab_names))
|
||||||
|
{
|
||||||
|
result = prefab_names[kind];
|
||||||
|
}
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|||||||
@ -28,6 +28,24 @@ Enum(P_TileKind)
|
|||||||
P_TileKind_COUNT
|
P_TileKind_COUNT
|
||||||
};
|
};
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
//~ Prefab types
|
||||||
|
|
||||||
|
#define P_PrefabsXList(X) \
|
||||||
|
X(Guy) \
|
||||||
|
X(Dummy) \
|
||||||
|
X(SpawnPoint) \
|
||||||
|
/* --------------------- */
|
||||||
|
|
||||||
|
//- Prefab kinds enum
|
||||||
|
Enum(P_PrefabKind)
|
||||||
|
{
|
||||||
|
#define X(name, ...) P_PrefabKind_##name,
|
||||||
|
P_PrefabsXList(X)
|
||||||
|
#undef X
|
||||||
|
P_PrefabKind_COUNT
|
||||||
|
};
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////
|
||||||
//~ Tile helpers
|
//~ Tile helpers
|
||||||
|
|
||||||
@ -36,3 +54,10 @@ i32 P_TileIdxFromTilePos(Vec2 p);
|
|||||||
#if IsLanguageC
|
#if IsLanguageC
|
||||||
String P_TileNameFromKind(P_TileKind kind);
|
String P_TileNameFromKind(P_TileKind kind);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
////////////////////////////////////////////////////////////
|
||||||
|
//~ Prefab helpers
|
||||||
|
|
||||||
|
#if IsLanguageC
|
||||||
|
String P_PrefabNameFromKind(P_PrefabKind kind);
|
||||||
|
#endif
|
||||||
|
|||||||
@ -577,47 +577,48 @@ void S_TickForever(WaveLaneCtx *lane)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
} break;
|
} break;
|
||||||
//- Edit entity
|
//- Prefab
|
||||||
case P_MsgKind_EntEdit:
|
case P_MsgKind_Prefab:
|
||||||
{
|
{
|
||||||
String name = msg->data;
|
|
||||||
P_EntList ents = Zi;
|
P_EntList ents = Zi;
|
||||||
// TODO: Enumerated prefabs
|
String name = msg->data;
|
||||||
if (0)
|
P_PrefabKind prefab = msg->prefab;
|
||||||
|
switch (prefab)
|
||||||
{
|
{
|
||||||
}
|
case P_PrefabKind_Guy:
|
||||||
else if (MatchString(name, Lit("guy")))
|
|
||||||
{
|
|
||||||
P_Ent *guy = P_PushTempEnt(frame_arena, &ents);
|
|
||||||
guy->key = msg->key;
|
|
||||||
guy->xf = msg->xf;
|
|
||||||
guy->is_guy = 1;
|
|
||||||
guy->has_weapon = 1;
|
|
||||||
guy->exists = 1;
|
|
||||||
}
|
|
||||||
else if (MatchString(name, Lit("dummy")))
|
|
||||||
{
|
|
||||||
P_Ent *dummy = P_EntFromKey(world_frame, msg->key);
|
|
||||||
if (P_IsEntNil(dummy))
|
|
||||||
{
|
{
|
||||||
dummy = P_PushTempEnt(frame_arena, &ents);
|
P_Ent *guy = P_PushTempEnt(frame_arena, &ents);
|
||||||
dummy->key = msg->key;
|
guy->key = msg->key;
|
||||||
dummy->is_player = 1;
|
guy->xf = msg->xf;
|
||||||
dummy->is_dummy = 1;
|
|
||||||
dummy->exists = 1;
|
|
||||||
P_SetEntString(dummy, Lit("Dummy"));
|
|
||||||
}
|
|
||||||
P_Ent *guy = P_EntFromKey(world_frame, dummy->guy);
|
|
||||||
if (P_IsEntNil(guy))
|
|
||||||
{
|
|
||||||
guy = P_PushTempEnt(frame_arena, &ents);
|
|
||||||
guy->key = P_RandKey();
|
|
||||||
guy->is_guy = 1;
|
guy->is_guy = 1;
|
||||||
guy->has_weapon = 1;
|
guy->has_weapon = 1;
|
||||||
guy->exists = 1;
|
guy->exists = 1;
|
||||||
dummy->guy = guy->key;
|
} break;
|
||||||
}
|
|
||||||
guy->xf = msg->xf;
|
case P_PrefabKind_Dummy:
|
||||||
|
{
|
||||||
|
P_Ent *dummy = P_EntFromKey(world_frame, msg->key);
|
||||||
|
if (P_IsEntNil(dummy))
|
||||||
|
{
|
||||||
|
dummy = P_PushTempEnt(frame_arena, &ents);
|
||||||
|
dummy->key = msg->key;
|
||||||
|
dummy->is_player = 1;
|
||||||
|
dummy->is_dummy = 1;
|
||||||
|
dummy->exists = 1;
|
||||||
|
P_SetEntString(dummy, name);
|
||||||
|
}
|
||||||
|
P_Ent *guy = P_EntFromKey(world_frame, dummy->guy);
|
||||||
|
if (P_IsEntNil(guy))
|
||||||
|
{
|
||||||
|
guy = P_PushTempEnt(frame_arena, &ents);
|
||||||
|
guy->key = P_RandKey();
|
||||||
|
guy->is_guy = 1;
|
||||||
|
guy->has_weapon = 1;
|
||||||
|
guy->exists = 1;
|
||||||
|
dummy->guy = guy->key;
|
||||||
|
}
|
||||||
|
guy->xf = msg->xf;
|
||||||
|
} break;
|
||||||
}
|
}
|
||||||
P_SpawnEntsFromList(world_frame, ents);
|
P_SpawnEntsFromList(world_frame, ents);
|
||||||
} break;
|
} break;
|
||||||
|
|||||||
@ -4433,7 +4433,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
|||||||
}
|
}
|
||||||
// Spawn player guy
|
// Spawn player guy
|
||||||
{
|
{
|
||||||
P_Msg *msg = P_PushMsg(P_MsgKind_EntEdit, Lit("guy"));
|
P_Msg *msg = P_PushMsg(P_MsgKind_Prefab, Zstr);
|
||||||
|
msg->prefab = P_PrefabKind_Guy;
|
||||||
msg->key = local_guy->key;
|
msg->key = local_guy->key;
|
||||||
msg->xf.t = guy_pos;
|
msg->xf.t = guy_pos;
|
||||||
}
|
}
|
||||||
@ -4442,9 +4443,11 @@ void V_TickForever(WaveLaneCtx *lane)
|
|||||||
case V_CmdKind_spawn_tp_dummy:
|
case V_CmdKind_spawn_tp_dummy:
|
||||||
case V_CmdKind_spawn_dummy:
|
case V_CmdKind_spawn_dummy:
|
||||||
{
|
{
|
||||||
P_Msg *msg = P_PushMsg(P_MsgKind_EntEdit, Lit("dummy"));
|
P_Msg *msg = P_PushMsg(P_MsgKind_Prefab, Zstr);
|
||||||
|
msg->prefab = P_PrefabKind_Dummy;
|
||||||
msg->key = P_RandKey();
|
msg->key = P_RandKey();
|
||||||
msg->xf.t = frame->world_cursor;
|
msg->xf.t = frame->world_cursor;
|
||||||
|
msg->data = Lit("Dummy");
|
||||||
if (kind == V_CmdKind_spawn_tp_dummy)
|
if (kind == V_CmdKind_spawn_tp_dummy)
|
||||||
{
|
{
|
||||||
for (P_Ent *ent = P_FirstEnt(local_frame); !P_IsEntNil(ent); ent = P_NextEnt(ent))
|
for (P_Ent *ent = P_FirstEnt(local_frame); !P_IsEntNil(ent); ent = P_NextEnt(ent))
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user