#pragma once #include "external/nlohmann/json.hpp" #include "ISaveable.h" #include "NpcCar.h" #include "navigation/PathFinder.h" #include namespace FRG { struct LocationState : public ISaveable { //This value is populated from the JSON configs and should not be changed during the regular gameplay. //It might be changed only in the editor mode during development. std::vector navigationMaps; std::vector planPathExceptMyself(const Eigen::Vector3f& start, const Eigen::Vector3f& end, const std::string& entityId) const; void initNavigation(const std::vector& paths); // ---- Camera ---- float cameraAzimuth = -2.35f; float cameraInclination = 1.1036f; // ---- Navigation ---- int activeNavigationIndex = 0; // ---- Walk-to targets (empty = none) ---- std::string targetInteractiveObjectId; std::string targetInteractNpcId; std::string targetTeleportZoneId; NpcCar taxiCarInitialState; NpcCar taxiCar; bool taxiArrivedCallbackCalled = false; Vector3f taxiCarTriggerPosition = Vector3f(0,0,0); std::vector taxiCarWaypoints; // (trigger/teleport zone runtime flags are serialised by id directly in Location::save/load) // ---- Serialisation ---- void save(nlohmann::json& out) const override; void load(const nlohmann::json& in) override; }; } // namespace FRG