shared prefabs list
This commit is contained in:
parent
4dbaa19024
commit
1c81be6a59
@ -307,7 +307,7 @@ Enum(P_MsgKind)
|
||||
P_MsgKind_SaveWorld,
|
||||
P_MsgKind_ResetWorld,
|
||||
P_MsgKind_TileEdit,
|
||||
P_MsgKind_EntEdit,
|
||||
P_MsgKind_Prefab,
|
||||
P_MsgKind_Delete,
|
||||
|
||||
// Server -> Client
|
||||
@ -322,13 +322,14 @@ Struct(P_Msg)
|
||||
|
||||
b32 affect_dummies;
|
||||
|
||||
P_PrefabKind prefab;
|
||||
P_Key key;
|
||||
Xform xf;
|
||||
|
||||
P_TileKind tile_kind;
|
||||
Rng2I32 tile_range;
|
||||
u64 tiles_hash;
|
||||
|
||||
P_Key key;
|
||||
Xform xf;
|
||||
|
||||
String data;
|
||||
};
|
||||
|
||||
|
||||
@ -25,3 +25,23 @@ i32 P_TileIdxFromTilePos(Vec2 p)
|
||||
return result;
|
||||
}
|
||||
#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
|
||||
};
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ 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
|
||||
|
||||
@ -36,3 +54,10 @@ i32 P_TileIdxFromTilePos(Vec2 p);
|
||||
#if IsLanguageC
|
||||
String P_TileNameFromKind(P_TileKind kind);
|
||||
#endif
|
||||
|
||||
////////////////////////////////////////////////////////////
|
||||
//~ Prefab helpers
|
||||
|
||||
#if IsLanguageC
|
||||
String P_PrefabNameFromKind(P_PrefabKind kind);
|
||||
#endif
|
||||
|
||||
@ -577,16 +577,15 @@ void S_TickForever(WaveLaneCtx *lane)
|
||||
}
|
||||
}
|
||||
} break;
|
||||
//- Edit entity
|
||||
case P_MsgKind_EntEdit:
|
||||
//- Prefab
|
||||
case P_MsgKind_Prefab:
|
||||
{
|
||||
String name = msg->data;
|
||||
P_EntList ents = Zi;
|
||||
// TODO: Enumerated prefabs
|
||||
if (0)
|
||||
String name = msg->data;
|
||||
P_PrefabKind prefab = msg->prefab;
|
||||
switch (prefab)
|
||||
{
|
||||
}
|
||||
else if (MatchString(name, Lit("guy")))
|
||||
case P_PrefabKind_Guy:
|
||||
{
|
||||
P_Ent *guy = P_PushTempEnt(frame_arena, &ents);
|
||||
guy->key = msg->key;
|
||||
@ -594,8 +593,9 @@ void S_TickForever(WaveLaneCtx *lane)
|
||||
guy->is_guy = 1;
|
||||
guy->has_weapon = 1;
|
||||
guy->exists = 1;
|
||||
}
|
||||
else if (MatchString(name, Lit("dummy")))
|
||||
} break;
|
||||
|
||||
case P_PrefabKind_Dummy:
|
||||
{
|
||||
P_Ent *dummy = P_EntFromKey(world_frame, msg->key);
|
||||
if (P_IsEntNil(dummy))
|
||||
@ -605,7 +605,7 @@ void S_TickForever(WaveLaneCtx *lane)
|
||||
dummy->is_player = 1;
|
||||
dummy->is_dummy = 1;
|
||||
dummy->exists = 1;
|
||||
P_SetEntString(dummy, Lit("Dummy"));
|
||||
P_SetEntString(dummy, name);
|
||||
}
|
||||
P_Ent *guy = P_EntFromKey(world_frame, dummy->guy);
|
||||
if (P_IsEntNil(guy))
|
||||
@ -618,6 +618,7 @@ void S_TickForever(WaveLaneCtx *lane)
|
||||
dummy->guy = guy->key;
|
||||
}
|
||||
guy->xf = msg->xf;
|
||||
} break;
|
||||
}
|
||||
P_SpawnEntsFromList(world_frame, ents);
|
||||
} break;
|
||||
|
||||
@ -4433,7 +4433,8 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
}
|
||||
// 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->xf.t = guy_pos;
|
||||
}
|
||||
@ -4442,9 +4443,11 @@ void V_TickForever(WaveLaneCtx *lane)
|
||||
case V_CmdKind_spawn_tp_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->xf.t = frame->world_cursor;
|
||||
msg->data = Lit("Dummy");
|
||||
if (kind == V_CmdKind_spawn_tp_dummy)
|
||||
{
|
||||
for (P_Ent *ent = P_FirstEnt(local_frame); !P_IsEntNil(ent); ent = P_NextEnt(ent))
|
||||
|
||||
Loading…
Reference in New Issue
Block a user