Separating state out of the location
This commit is contained in:
1 parent
5e9a663812
commit
297bd7377f
45 files changed
+2114
-778
No files matched your search
@@ -0,0 +1,67 @@
|
||||
#include "LocationGameState.h"
|
||||
#include <cstdlib>
|
||||
#include <iostream>
|
||||
|
||||
namespace {
|
||||
|
||||
int fail(const char* message)
|
||||
{
|
||||
std::cerr << message << '\n';
|
||||
return EXIT_FAILURE;
|
||||
}
|
||||
|
||||
} // namespace
|
||||
|
||||
int main()
|
||||
{
|
||||
FRG::LocationDefinition definition;
|
||||
definition.config.id = "test_location";
|
||||
|
||||
FRG::NpcData npc;
|
||||
npc.id = "npc";
|
||||
npc.name = "Test NPC";
|
||||
npc.hp = 75.f;
|
||||
definition.npcs.push_back(npc);
|
||||
|
||||
FRG::InteractiveObjectData object;
|
||||
object.id = "object";
|
||||
object.base.name = "Test Object";
|
||||
object.base.meshPath = "unused.mesh";
|
||||
object.isActive = true;
|
||||
definition.interactiveObjects.push_back(object);
|
||||
|
||||
FRG::TriggerZoneDefinition trigger;
|
||||
trigger.id = "trigger";
|
||||
trigger.enabled = true;
|
||||
definition.triggerZones.push_back(trigger);
|
||||
|
||||
FRG::TeleportDefinition teleport;
|
||||
teleport.id = "teleport";
|
||||
teleport.active = false;
|
||||
definition.teleports.push_back(teleport);
|
||||
|
||||
FRG::LocationGameState state;
|
||||
if (!state.setup(definition, {}))
|
||||
return fail("First setup must initialize runtime fields");
|
||||
if (state.npcs.size() != 1 || state.interactiveObjects.size() != 1)
|
||||
return fail("Definitions were not applied");
|
||||
|
||||
state.npcs.at("npc")->hp = 12.f;
|
||||
state.interactiveObjects.at("object")->isActive = false;
|
||||
state.triggerZones.at("trigger").enabled = false;
|
||||
state.teleportZones.at("teleport") = true;
|
||||
state.hasPersistentState = true;
|
||||
|
||||
if (state.setup(definition, {}))
|
||||
return fail("Persistent setup must not reinitialize runtime fields");
|
||||
if (state.npcs.at("npc")->hp != 12.f ||
|
||||
state.interactiveObjects.at("object")->isActive ||
|
||||
state.triggerZones.at("trigger").enabled ||
|
||||
!state.teleportZones.at("teleport")) {
|
||||
return fail("Repeated setup did not preserve runtime state");
|
||||
}
|
||||
|
||||
FRG::PlayerStateMap noPlayers;
|
||||
state.update(50, noPlayers, false);
|
||||
return EXIT_SUCCESS;
|
||||
}
|
||||
Reference in new issue
Block a user