diff --git a/server/tests/LocationGameStateTests.cpp b/server/tests/LocationGameStateTests.cpp index 05cece4..63d409f 100644 --- a/server/tests/LocationGameStateTests.cpp +++ b/server/tests/LocationGameStateTests.cpp @@ -1,5 +1,7 @@ #include "LocationGameState.h" +#include "game_server/InternalGameServer.h" #include +#include #include namespace { @@ -14,6 +16,10 @@ int fail(const char* message) int main() { + const std::filesystem::path repositoryRoot = + std::filesystem::path(__FILE__).parent_path().parent_path().parent_path(); + std::filesystem::current_path(repositoryRoot); + FRG::LocationDefinition definition; definition.config.id = "test_location"; @@ -63,5 +69,22 @@ int main() FRG::PlayerStateMap noPlayers; state.update(50, noPlayers, false); + + FRG::CampaignConfig battleZone; + battleZone.id = "battle_zone"; + battleZone.questsPath = "resources/config/quests_battle_zone.json"; + FRG::InternalGameServer server; + server.startCampaign(battleZone, {}, false, true); + const auto snapshot = server.snapshot(); + const auto bot = snapshot->players.find("battle_zone_test_bot"); + if (bot == snapshot->players.end()) + return fail("Battle Zone test bot was not created"); + const auto stand = static_cast(FRG::AnimationState::STAND); + const auto walk = static_cast(FRG::AnimationState::WALK); + if (bot->second.state.animationFrameCounts[stand] <= 1 || + bot->second.state.animationFrameCounts[walk] <= 1) { + return fail("Battle Zone test bot animation metadata was not loaded"); + } + return EXIT_SUCCESS; } diff --git a/src/game_server/InternalGameServer.cpp b/src/game_server/InternalGameServer.cpp index 4fe9e0b..4e7b60e 100644 --- a/src/game_server/InternalGameServer.cpp +++ b/src/game_server/InternalGameServer.cpp @@ -11,6 +11,31 @@ namespace { constexpr const char* kBattleZoneCampaignId = "battle_zone"; constexpr const char* kBattleZoneTestBotId = "battle_zone_test_bot"; constexpr std::int64_t kBattleZoneTestBotIntervalMs = 5000; + +void configurePlayerAnimations( + CharacterState& player, const std::string& zipFile) +{ + player.creationInfo.animationPaths = { + {AnimationState::STAND, + "resources/w/gg/new2/gg_stand_idle001_small.anim"}, + {AnimationState::WALK, + "resources/w/gg/new2/gg_walk001_small.anim"}, + {AnimationState::STAND_TO_ACTION, + "resources/w/gg/new2/gg_stand_to_action001_small.anim"}, + {AnimationState::ACTION_ATTACK, + "resources/w/gg/new2/gg_action_chop001_small.anim"}, + {AnimationState::ACTION_ATTACK_2, + "resources/w/gg/new2/gg_action_stab001_small.anim"}, + {AnimationState::ACTION_IDLE, + "resources/w/gg/new2/gg_action_idle002_small.anim"}, + {AnimationState::ACTION_TO_STAND, + "resources/w/gg/new2/gg_action_to_stand001_small.anim"}, + {AnimationState::ACTION_TO_DEATH, + "resources/w/gg/new2/gg_die001_small.anim"}, + {AnimationState::DEATH_IDLE, + "resources/w/gg/new2/gg_die_idle001_small.anim"}}; + loadCharacterAnimationMetadata(player, zipFile); +} } InternalGameServer::InternalGameServer() = default; @@ -26,6 +51,7 @@ void InternalGameServer::ensureBattleZoneTestBot() auto& bot = state_.players[kBattleZoneTestBotId]; if (!bot) bot = std::make_shared(); bot->configureAsPlayer(); + configurePlayerAnimations(*bot, resourceZipFile_); bot->npcName = "Test Bot"; } @@ -77,26 +103,7 @@ void InternalGameServer::startCampaign( if (createLocalPlayer) { auto player = std::make_shared(); player->configureAsPlayer(); - player->creationInfo.animationPaths = { - {AnimationState::STAND, - "resources/w/gg/new2/gg_stand_idle001_small.anim"}, - {AnimationState::WALK, - "resources/w/gg/new2/gg_walk001_small.anim"}, - {AnimationState::STAND_TO_ACTION, - "resources/w/gg/new2/gg_stand_to_action001_small.anim"}, - {AnimationState::ACTION_ATTACK, - "resources/w/gg/new2/gg_action_chop001_small.anim"}, - {AnimationState::ACTION_ATTACK_2, - "resources/w/gg/new2/gg_action_stab001_small.anim"}, - {AnimationState::ACTION_IDLE, - "resources/w/gg/new2/gg_action_idle002_small.anim"}, - {AnimationState::ACTION_TO_STAND, - "resources/w/gg/new2/gg_action_to_stand001_small.anim"}, - {AnimationState::ACTION_TO_DEATH, - "resources/w/gg/new2/gg_die001_small.anim"}, - {AnimationState::DEATH_IDLE, - "resources/w/gg/new2/gg_die_idle001_small.anim"}}; - loadCharacterAnimationMetadata(*player, zipFile); + configurePlayerAnimations(*player, zipFile); state_.players.emplace(localPlayerId_, std::move(player)); } battleZoneTestBotElapsedMs_ = 0;