Sound Bakery  v0.1.0
Open-source audio middleware for games
Loading...
Searching...
No Matches
gameobject.h
1#pragma once
2
3#include "sound_bakery/core/core_include.h"
4#include "sound_bakery/parameter/parameter.h"
5#include "sound_bakery/voice/voice.h"
6
7namespace SB::Engine
8{
9 class Container;
10 class Event;
11
12 class SB_CLASS GameObject : public SB::Core::Object
13 {
14 REGISTER_REFLECTION(GameObject, SB::Core::Object)
15
16 public:
17 Voice* playContainer(Container* container);
18 void postEvent(Event* event);
19
20 void stopVoice(Voice* voice);
21 void stopContainer(Container* container);
22 void stopAll();
23
24 void update();
25
26 bool isPlaying() const noexcept;
27
28 std::size_t voiceCount() const noexcept;
29
30 Voice* getVoice(std::size_t index) const;
31
40 {
41 float result = 0.0F;
42
43 auto found = m_parameters.floatParameters.find(parameter);
44
45 if (found != m_parameters.floatParameters.cend())
46 {
47 result = found->second.get();
48 }
49 else
50 {
51 if (parameter.lookup())
52 {
53 result = parameter.raw()->get();
54 }
55 }
56
57 return result;
58 }
59
68 {
69 SB_ID result = 0;
70
71 auto found = m_parameters.intParameters.find(parameter);
72
73 if (found != m_parameters.intParameters.cend())
74 {
75 result = found->second.get();
76 }
77 else
78 {
79 if (parameter.lookup())
80 {
81 result = parameter.raw()->get();
82 }
83 }
84
85 return result;
86 }
87
88 void setFloatParameterValue(const FloatParameter::LocalParameterValuePair& parameterValue)
89 {
90 m_parameters.floatParameters[parameterValue.first].set(parameterValue.second);
91 }
92
93 void setIntParameterValue(const NamedParameter::LocalParameterValuePair& parameterValue)
94 {
95 if (m_parameters.intParameters.find(parameterValue.first) == m_parameters.intParameters.cend())
96 {
97 SB::Core::DatabasePtr<NamedParameterValue> parameterValuePtr(parameterValue.second);
98 parameterValuePtr.lookup();
99 parameterValuePtr->parentParameter.lookup();
100
101 m_parameters.intParameters.insert(parameterValuePtr->parentParameter->createLocalParameterFromThis());
102 }
103
104 m_parameters.intParameters[parameterValue.first].set(parameterValue.second);
105
106 assert(m_parameters.intParameters[parameterValue.first].get() == parameterValue.second);
107 }
108
109 LocalParameterList getLocalParameters() const { return m_parameters; }
110
111 private:
112 std::vector<std::unique_ptr<Voice>> m_voices;
113 LocalParameterList m_parameters;
114 };
115} // namespace SB::Engine
Definition database_ptr.h:23
bool lookup() const
Find the live object referenced by the ID and store it.
Definition database_ptr.h:142
TObjectPtr raw() const noexcept
Get raw pointer of the referenced object.
Definition database_ptr.h:95
Simple base Object that all Sound Bakery objects should inherit from.
Definition object.h:33
Base container type. Inherited types include sounds, random, sequence etc.
Definition container.h:49
Definition event.h:22
Definition gameobject.h:13
SB_ID getIntParameterValue(const SB::Core::DatabasePtr< NamedParameter > &parameter) const
Finds the parameter value on this gameobject.
Definition gameobject.h:67
float getFloatParameterValue(const SB::Core::DatabasePtr< FloatParameter > &parameter) const
Finds the parameter value on this gameobject.
Definition gameobject.h:39
std::pair< SB_ID, float > LocalParameterValuePair
Defines an ID to a parameter and a value for that parameter.
Definition parameter.h:39
A runtime graph of nodes and busses, playing a sound or many.
Definition voice.h:17