Sound Bakery  v0.1.0
Open-source audio middleware for games
Loading...
Searching...
No Matches
parameter.h
1#pragma once
2
3#include "sound_bakery/core/core_include.h"
4
5namespace SB::Engine
6{
7 class NamedParameter;
8 class FloatParameter;
9 class NamedParameterValue;
10
16 template <typename ParameterType>
17 class SB_CLASS Parameter : public SB::Core::DatabaseObject
18 {
19 static_assert(std::is_arithmetic<ParameterType>::value);
20
21 public:
26
32 using LocalParameter = std::pair<SB_ID, ParameterProperty>;
33
39 using LocalParameterValuePair = std::pair<SB_ID, ParameterType>;
40
41 Parameter() = default;
42
48 Parameter(ParameterType min, ParameterType max)
49 : SB::Core::DatabaseObject(), m_property(min, min, max), m_defaultValue(min)
50 {
51 }
52
56 [[nodiscard]] ParameterType get() const { return m_property.get(); }
57
58 [[nodiscard]] ParameterType getDefault() const { return m_defaultValue; }
59
65 void set(ParameterType value) { m_property.set(value); }
66
67 void setDefault(ParameterType value) { m_defaultValue = value; }
68
73 {
74 return m_property.getDelegate();
75 }
76
83 {
84 return LocalParameter(getDatabaseID(), m_property);
85 }
86
87 protected:
88 ParameterType m_defaultValue;
90
91 REGISTER_REFLECTION(Parameter, DatabaseObject)
92 };
93
94 class SB_CLASS FloatParameter : public Parameter<float>
95 {
96 REGISTER_REFLECTION(FloatParameter, Parameter)
97 };
98
99 class SB_CLASS IntParameter : public Parameter<int>
100 {
101 REGISTER_REFLECTION(IntParameter, Parameter)
102 };
103
114 {
115 public:
117
118 REGISTER_REFLECTION(NamedParameterValue, DatabaseObject)
119 };
120
124 class SB_CLASS NamedParameter : public Parameter<SB_ID>
125 {
126 REGISTER_REFLECTION(NamedParameter, Parameter)
127
128 public:
136 : m_values(), Parameter((std::numeric_limits<SB_ID>::min)(), (std::numeric_limits<SB_ID>::max)())
137 {
138 }
139
146 {
148
149 if (name.empty() == false)
150 {
151 if (NamedParameterValue* const parameterValue = newDatabaseObject<NamedParameterValue>())
152 {
153 parameterValue->setDatabaseName(name);
154 parameterValue->parentParameter = this;
155
156 result = parameterValue;
157
158 m_values.emplace(parameterValue);
159 }
160 }
161
162 return result;
163 }
164
170 std::unordered_set<SB::Core::DatabasePtr<NamedParameterValue>> getValues()
171 {
172 if (m_values.empty())
173 {
174 setSelectedValue(addNewValue("None"));
175 }
176
177 return m_values;
178 }
179
187 {
188 if (m_values.contains(value))
189 {
190 set(value.id());
191 }
192 else
193 {
194 assert(false);
195 }
196 }
197
205 {
207 selected.lookup();
208 return selected;
209 }
210
211 private:
212 std::unordered_set<SB::Core::DatabasePtr<NamedParameterValue>> m_values;
213 };
214
215 using GlobalFloatParameter = SB::Core::DatabasePtr<FloatParameter>;
216 using GlobalIntParameter = SB::Core::DatabasePtr<NamedParameter>;
217
223 struct SB_CLASS GlobalParameterList
224 {
225 std::unordered_set<GlobalFloatParameter> floatParameters;
226 std::unordered_set<GlobalIntParameter> intParameters;
227 };
228
232 struct SB_CLASS LocalParameterList
233 {
234 std::unordered_map<GlobalFloatParameter, FloatParameter::ParameterProperty> floatParameters;
235 std::unordered_map<GlobalIntParameter, NamedParameter::ParameterProperty> intParameters;
236 };
237} // namespace SB::Engine
Base object type for any object that can exist in the editor/database. Holds an ID and name.
Definition database_object.h:22
Definition database_ptr.h:23
bool lookup() const
Find the live object referenced by the ID and store it.
Definition database_ptr.h:142
SB_ID id() const noexcept
Get ID of the referenced object.
Definition database_ptr.h:73
Definition parameter.h:95
Definition parameter.h:100
Represents a discrete value for a NamedParameter.
Definition parameter.h:114
Holds discrete named integer values.
Definition parameter.h:125
std::unordered_set< SB::Core::DatabasePtr< NamedParameterValue > > getValues()
Gets all named values in this parameter.
Definition parameter.h:170
NamedParameter()
Creates a NamedParameter with min and max values.
Definition parameter.h:135
SB::Core::DatabasePtr< NamedParameterValue > addNewValue(const std::string_view name)
Adds a new value to the parameter.
Definition parameter.h:145
SB::Core::DatabasePtr< NamedParameterValue > getSelectedValue() const
Get the selected value as a DatabasePtr.
Definition parameter.h:204
void setSelectedValue(SB::Core::DatabasePtr< NamedParameterValue > value)
Sets the parameter value with a DatabasePtr, ensuring the value exists in this parameter.
Definition parameter.h:186
Defines a database object with a changeable property.
Definition parameter.h:18
std::pair< SB_ID, ParameterType > LocalParameterValuePair
Defines an ID to a parameter and a value for that parameter.
Definition parameter.h:39
LocalParameter createLocalParameterFromThis() const
Copies this Parameter to a runtime version, suitable for handling unique variations per game object e...
Definition parameter.h:82
ParameterProperty::PropertyChangedDelegate & getDelegate()
Get the parameter delegate that fires when changing the value.
Definition parameter.h:72
Parameter(ParameterType min, ParameterType max)
Creates a Parameter with min and max values set.
Definition parameter.h:48
void set(ParameterType value)
Set the value of the parameter.
Definition parameter.h:65
std::pair< SB_ID, ParameterProperty > LocalParameter
Defines the type used for passing local versions/variations of this parameter.
Definition parameter.h:32
ParameterType get() const
Get the current value of the parameter.
Definition parameter.h:56
Holds a list of parameters.
Definition parameter.h:224
Holds a list of parameters and their local value.
Definition parameter.h:233