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

summaryrefslogtreecommitdiff
path: root/source/game/StarSkyParameters.hpp
blob: 35d428441f93a586d85615b35c176aa50b2a5c4a (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
#pragma once

#include "StarSkyTypes.hpp"
#include "StarEither.hpp"
#include "StarCelestialCoordinate.hpp"

namespace Star {

STAR_CLASS(CelestialParameters);
STAR_CLASS(CelestialDatabase);

STAR_STRUCT(SkyParameters);

STAR_STRUCT(VisitableWorldParameters);

// This struct is a stripped down version of CelestialParameters that only
// contains the required inforamtion to generate a sky.  It's constructable
// from a CelestialParameters or importantly from Json.  This allows places
// without a coordinate (and therefore without CelestialParameters) to have a
// valid sky. (Instances, outposts and the like.)
// Additionally, a copy-ish constructor is provided to allow changing elements
// derived from the visitableworldparameters without reconstructing all sky
// parameters, e.g. for terraforming
struct SkyParameters {
  SkyParameters();
  SkyParameters(CelestialCoordinate const& coordinate, CelestialDatabasePtr const& celestialDatabase);
  SkyParameters(SkyParameters const& oldSkyParameters, VisitableWorldParametersConstPtr newVisitableParameters);
  explicit SkyParameters(Json const& config);

  Json toJson() const;

  void read(DataStream& ds);
  void write(DataStream& ds) const;

  void readVisitableParameters(VisitableWorldParametersConstPtr visitableParameters);

  uint64_t seed;
  Maybe<float> dayLength;
  Maybe<pair<List<pair<String, float>>, Vec2F>> nearbyPlanet;
  List<pair<List<pair<String, float>>, Vec2F>> nearbyMoons;
  List<pair<String, String>> horizonImages;
  bool horizonClouds;
  SkyType skyType;
  Either<SkyColoring, Color> skyColoring;
  Maybe<float> spaceLevel;
  Maybe<float> surfaceLevel;
  String sunType;
  Json settings;
};

DataStream& operator>>(DataStream& ds, SkyParameters& sky);
DataStream& operator<<(DataStream& ds, SkyParameters const& sky);
}