map_definition.h 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788
  1. #pragma once
  2. #include "../systems/nation_id.h"
  3. #include "../units/spawn_type.h"
  4. #include "terrain.h"
  5. #include <QString>
  6. #include <QVector3D>
  7. #include <optional>
  8. #include <vector>
  9. namespace Game::Map {
  10. struct GridDefinition {
  11. int width = 50;
  12. int height = 50;
  13. float tile_size = 1.0F;
  14. };
  15. struct CameraDefinition {
  16. QVector3D center{0.0F, 0.0F, 0.0F};
  17. float distance = 15.0F;
  18. float tiltDeg = 45.0F;
  19. float fovY = 45.0F;
  20. float near_plane = 1.0F;
  21. float far_plane = 200.0F;
  22. float yaw_deg = 225.0F;
  23. };
  24. struct UnitSpawn {
  25. Game::Units::SpawnType type = Game::Units::SpawnType::Archer;
  26. float x = 0.0F;
  27. float z = 0.0F;
  28. int player_id = 0;
  29. int team_id = 0;
  30. int max_population = 100;
  31. std::optional<Game::Systems::NationID> nation;
  32. };
  33. struct FireCamp {
  34. float x = 0.0F;
  35. float z = 0.0F;
  36. float intensity = 1.0F;
  37. float radius = 3.0F;
  38. bool persistent = true;
  39. };
  40. enum class CoordSystem { Grid, World };
  41. struct VictoryConfig {
  42. QString victoryType = "elimination";
  43. std::vector<QString> keyStructures = {"barracks"};
  44. float surviveTimeDuration = 0.0F;
  45. std::vector<QString> defeatConditions = {"no_key_structures"};
  46. int requiredKeyStructures = 0;
  47. };
  48. enum class WeatherType { Rain, Snow };
  49. struct RainSettings {
  50. bool enabled = false;
  51. WeatherType type = WeatherType::Rain;
  52. float cycle_duration = 300.0F;
  53. float active_duration = 60.0F;
  54. float intensity = 0.5F;
  55. float fade_duration = 5.0F;
  56. float wind_strength = 0.0F;
  57. };
  58. struct MapDefinition {
  59. QString name;
  60. GridDefinition grid;
  61. CameraDefinition camera;
  62. std::vector<UnitSpawn> spawns;
  63. std::vector<TerrainFeature> terrain;
  64. std::vector<RiverSegment> rivers;
  65. std::vector<RoadSegment> roads;
  66. std::vector<Bridge> bridges;
  67. std::vector<FireCamp> firecamps;
  68. BiomeSettings biome;
  69. CoordSystem coordSystem = CoordSystem::Grid;
  70. int max_troops_per_player = 500;
  71. VictoryConfig victory;
  72. RainSettings rain;
  73. };
  74. } // namespace Game::Map