#pragma once #include "Level.h" #include namespace Game { enum class CameraMode { Walk, Freefly, }; enum class InputMode { UI, Game, }; enum class InteractionMode { Walk, ReadTablet, }; struct Time { double Now = 0.0; double Delta = 0.0; int64_t NowHP = 0; int64_t DeltaHP = 1000; int64_t StartTime = 0; }; // TODO: move to generated data and save struct SavedPlayerConfig { Gen::SavedEntityRenderData TabletRenderData; }; struct PlayerData { Gen::Transform PlayerCamTransform; Gen::Transform FreeflyCamTransform; Gen::Mat4 Projection; Gen::Mat4 ProjectionInverse; float FreeflyXRot = 0.0f; float FreeflyYRot = 0.0f; float WalkXRot = 0.0f; float WalkYRot = 0.0f; CameraMode CameraM = CameraMode::Freefly; InputMode InputM = InputMode::Game; InteractionMode InteractionM = InteractionMode::Walk; float MouseSensitivity = 1.0f; float MovementSpeed = 10.0f; SavedPlayerConfig Config; }; struct InstanceDebugData { uint16_t SelectedDebugLevel = UINT16_MAX; uint64_t ImguiIniSize = 0; char ImguiIni[4096]{0}; static constexpr uint32_t MaxAssets = 128; uint32_t AssetCount = 0; Gen::AssetHandle AssetHandles[MaxAssets]{0}; char AssetHandlePaths[MaxAssets][128]; bool ShowImguiDemo = false; uint8_t DebugCardRotation = 0; bool ShortenLogFileNames = true; bool ShowStats = true; bool ShowArenaUsage = false; }; struct GameInstance { bool IsInitialized = false; uint64_t Size = sizeof(GameInstance); Time Time; PlayerData Player; Level GameLevel; InstanceDebugData DebugData; }; } // namespace Game