Веб-сайт самохостера Lotigara

summaryrefslogtreecommitdiff
path: root/source/game/StarSkyTypes.cpp
blob: c00fc27df64d8231cbf161aee4fcf1330d5ed2a3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
#include "StarSkyTypes.hpp"
#include "StarJsonExtra.hpp"
#include "StarDataStreamExtra.hpp"

namespace Star {

EnumMap<SkyType> const SkyTypeNames{
    {SkyType::Barren, "barren"},
    {SkyType::Atmospheric, "atmospheric"},
    {SkyType::Atmosphereless, "atmosphereless"},
    {SkyType::Orbital, "orbital"},
    {SkyType::Warp, "warp"},
    {SkyType::Space, "space"}};

EnumMap<FlyingType> const FlyingTypeNames{
    {FlyingType::None, "none"},
    {FlyingType::Disembarking, "disembarking"},
    {FlyingType::Warp, "warp"},
    {FlyingType::Arriving, "arriving"}};

EnumMap<WarpPhase> const WarpPhaseNames{
    {WarpPhase::SlowingDown, "slowingdown"},
    {WarpPhase::Maintain, "maintain"},
    {WarpPhase::SpeedingUp, "speedingup"}};

SkyColoring::SkyColoring() {
  mainColor = Color::Clear;

  morningColors = {Color::Clear, Color::Clear};
  dayColors = {Color::Clear, Color::Clear};
  eveningColors = {Color::Clear, Color::Clear};
  nightColors = {Color::Clear, Color::Clear};

  morningLightColor = Color::Clear;
  dayLightColor = Color::Clear;
  eveningLightColor = Color::Clear;
  nightLightColor = Color::Clear;
}

SkyColoring::SkyColoring(Json const& variant) {
  auto getColorPair = [](Json const& pair) { return make_pair(jsonToColor(pair.get(0)), jsonToColor(pair.get(1))); };

  mainColor = jsonToColor(variant.get("mainColor"));

  morningColors = getColorPair(variant.get("morningColors"));
  dayColors = getColorPair(variant.get("dayColors"));
  eveningColors = getColorPair(variant.get("eveningColors"));
  nightColors = getColorPair(variant.get("nightColors"));

  morningLightColor = jsonToColor(variant.get("morningLightColor"));
  dayLightColor = jsonToColor(variant.get("dayLightColor"));
  eveningLightColor = jsonToColor(variant.get("eveningLightColor"));
  nightLightColor = jsonToColor(variant.get("nightLightColor"));
}

Json SkyColoring::toJson() const {
  auto makeColorPair = [](pair<Color, Color> const& p) {
    return JsonArray{jsonFromColor(p.first), jsonFromColor(p.second)};
  };

  return JsonObject{{"mainColor", jsonFromColor(mainColor)},
      {"morningColors", makeColorPair(morningColors)},
      {"dayColors", makeColorPair(dayColors)},
      {"eveningColors", makeColorPair(eveningColors)},
      {"nightColors", makeColorPair(nightColors)},
      {"morningLightColor", jsonFromColor(morningLightColor)},
      {"dayLightColor", jsonFromColor(dayLightColor)},
      {"eveningLightColor", jsonFromColor(eveningLightColor)},
      {"nightLightColor", jsonFromColor(nightLightColor)}};
}

DataStream& operator>>(DataStream& ds, SkyColoring& skyColoring) {
  ds.read(skyColoring.mainColor);
  ds.read(skyColoring.morningColors);
  ds.read(skyColoring.dayColors);
  ds.read(skyColoring.eveningColors);
  ds.read(skyColoring.nightColors);
  ds.read(skyColoring.morningLightColor);
  ds.read(skyColoring.dayLightColor);
  ds.read(skyColoring.eveningLightColor);
  ds.read(skyColoring.nightLightColor);

  return ds;
}

DataStream& operator<<(DataStream& ds, SkyColoring const& skyColoring) {
  ds.write(skyColoring.mainColor);
  ds.write(skyColoring.morningColors);
  ds.write(skyColoring.dayColors);
  ds.write(skyColoring.eveningColors);
  ds.write(skyColoring.nightColors);
  ds.write(skyColoring.morningLightColor);
  ds.write(skyColoring.dayLightColor);
  ds.write(skyColoring.eveningLightColor);
  ds.write(skyColoring.nightLightColor);

  return ds;
}

SkyOrbiter::SkyOrbiter() : type(), scale(), angle() {}

SkyOrbiter::SkyOrbiter(SkyOrbiterType type, float scale, float angle, String const& image, Vec2F position)
  : type(type), scale(scale), angle(angle), image(image), position(position) {}

SkyWorldHorizon::SkyWorldHorizon() : scale(), rotation() {}

SkyWorldHorizon::SkyWorldHorizon(Vec2F center, float scale, float rotation)
  : center(center), scale(scale), rotation(rotation) {}

bool SkyWorldHorizon::empty() const {
  return scale <= 0 || layers.empty();
}

}