PixelBullet  0.0.1
A C++ game engine
Loading...
Searching...
No Matches
scene_environment_settings.h
1#pragma once
2
3#include "pixelbullet/filesystem/asset_path.h"
4#include "pixelbullet/filesystem/asset_path_serialization.h"
5#include "pixelbullet/serialization/node.h"
6#include "pixelbullet/serialization/node_reader.h"
7
8#include <array>
9#include <string_view>
10
11namespace pixelbullet
12{
14{
15 bool enabled = false;
16 AssetPath environment_asset;
17 float background_intensity = 1.0f;
18 float ambient_intensity = 0.15f;
19 float specular_intensity = 1.0f;
20 float exposure = 1.0f;
21
22 [[nodiscard]] bool operator==(const SceneEnvironmentSettings& other) const noexcept
23 {
24 return enabled == other.enabled && environment_asset.logical_path() == other.environment_asset.logical_path() &&
25 background_intensity == other.background_intensity && ambient_intensity == other.ambient_intensity &&
26 specular_intensity == other.specular_intensity && exposure == other.exposure;
27 }
28
29 [[nodiscard]] bool operator!=(const SceneEnvironmentSettings& other) const noexcept
30 {
31 return !(*this == other);
32 }
33};
34
35inline constexpr std::array<std::string_view, 6> k_scene_environment_cubemap_faces = {
36 "Right", "Left", "Top", "Bottom", "Front", "Back",
37};
38
39inline Node& operator<<(Node& node, const SceneEnvironmentSettings& settings)
40{
41 node["enabled"] << settings.enabled;
42 node["environmentAsset"] << settings.environment_asset;
43 node["backgroundIntensity"] << settings.background_intensity;
44 node["ambientIntensity"] << settings.ambient_intensity;
45 node["specularIntensity"] << settings.specular_intensity;
46 node["exposure"] << settings.exposure;
47 return node;
48}
49
50inline const Node& operator>>(const Node& node, SceneEnvironmentSettings& settings)
51{
52 if (node.has_property("enabled"))
53 {
54 node["enabled"] >> settings.enabled;
55 }
56 if (node.has_property("environmentAsset"))
57 {
58 node["environmentAsset"] >> settings.environment_asset;
59 }
60 if (node.has_property("backgroundIntensity"))
61 {
62 node["backgroundIntensity"] >> settings.background_intensity;
63 }
64 if (node.has_property("ambientIntensity"))
65 {
66 node["ambientIntensity"] >> settings.ambient_intensity;
67 }
68 if (node.has_property("specularIntensity"))
69 {
70 node["specularIntensity"] >> settings.specular_intensity;
71 }
72 if (node.has_property("exposure"))
73 {
74 node["exposure"] >> settings.exposure;
75 }
76 return node;
77}
78
79[[nodiscard]] inline bool TryReadNode(const Node& node, SceneEnvironmentSettings& settings, serialization::NodeReader& reader)
80{
81 bool ok = true;
82 ok &= serialization::TryReadOptionalProperty(node, "enabled", settings.enabled, reader);
83 ok &= serialization::TryReadOptionalProperty(node, "environmentAsset", settings.environment_asset, reader);
84 ok &= serialization::TryReadOptionalProperty(node, "backgroundIntensity", settings.background_intensity, reader);
85 ok &= serialization::TryReadOptionalProperty(node, "ambientIntensity", settings.ambient_intensity, reader);
86 ok &= serialization::TryReadOptionalProperty(node, "specularIntensity", settings.specular_intensity, reader);
87 ok &= serialization::TryReadOptionalProperty(node, "exposure", settings.exposure, reader);
88 return ok;
89}
90} // namespace pixelbullet
Definition asset_path.h:28
Represents a hierarchical node capable of storing various data types and supporting YAML serializatio...
Definition node.h:49
Definition node_reader.h:48
Definition scene_environment_settings.h:14