NAP
parameterblendcomponent.h
1 /* This Source Code Form is subject to the terms of the Mozilla Public
2  * License, v. 2.0. If a copy of the MPL was not distributed with this
3  * file, You can obtain one at https://mozilla.org/MPL/2.0/. */
4 
5 #pragma once
6 
7 // Local Includes
8 #include "parameterblendgroup.h"
9 #include "parameterblender.h"
10 
11 // External Includes
12 #include <component.h>
13 #include <parameternumeric.h>
14 #include <parameterservice.h>
15 #include <rtti/deserializeresult.h>
16 #include <nap/signalslot.h>
17 
18 namespace nap
19 {
20  // Forward Declares
21  class ParameterBlendComponentInstance;
22 
36  class NAPAPI ParameterBlendComponent : public Component
37  {
38  RTTI_ENABLE(Component)
40  public:
41 
42  nap::ResourcePtr<ParameterBlendGroup> mBlendGroup = nullptr;
43  nap::ResourcePtr<ParameterInt> mPresetIndex = nullptr;
44  nap::ResourcePtr<ParameterFloat> mPresetBlendTime = nullptr;
45  bool mEnableBlending = false;
46  bool mBlendOnInit = false;
47  bool mIgnoreNonBlendableParameters = true;
48  };
49 
50 
64  {
65  RTTI_ENABLE(ComponentInstance)
66  public:
68  ComponentInstance(entity, resource) { }
69 
70  // Destructor
72 
80  virtual bool init(utility::ErrorState& errorState) override;
81 
86  virtual void update(double deltaTime) override;
87 
93  bool enabled() const { return mEnableBlending; }
94 
99  void enable(bool value);
100 
104  bool isBlending() const;
105 
109  float getBlendValue();
110 
114  int getIndex() const { return mPresetIndex->mValue; }
115 
119  const std::vector<std::string>& getPresets() const { return mPresets; }
120 
126  bool reload(nap::utility::ErrorState& error);
127 
131  bool hasPresets() const { return !(mPresets.empty()); }
132 
133  private:
134  ParameterBlendGroup* mBlendParameters = nullptr;
135  ParameterInt* mPresetIndex = nullptr;
136  ParameterFloat* mPresetBlendTime = nullptr;
137  bool mEnableBlending = false;
138  ParameterService* mParameterService = nullptr;
139  std::vector<std::string> mPresets;
140  std::vector<std::unique_ptr<rtti::DeserializeResult>> mPresetData;
141  std::vector<ParameterGroup*> mPresetGroups;
142  std::vector<std::unique_ptr<BaseParameterBlender>> mBlenders;
143  double mElapsedTime = 0.0;
144  bool mBlending = false;
145  bool mIgnoreNonBlendableParameters = true;
146 
152  bool sourcePresets(nap::utility::ErrorState& error);
153 
161  bool createBlenders(nap::utility::ErrorState& error);
162 
167  void changePreset(int index);
168 
172  nap::Slot<int> mIndexChangedSlot = { this, &ParameterBlendComponentInstance::changePreset };
173  };
174 }
nap::ParameterBlendComponentInstance::ParameterBlendComponentInstance
ParameterBlendComponentInstance(EntityInstance &entity, Component &resource)
Definition: parameterblendcomponent.h:67
nap::ParameterService
Definition: parameterservice.h:20
nap::ParameterBlendComponent
Definition: parameterblendcomponent.h:36
nap::ParameterNumeric
Definition: parameternumeric.h:20
nap::Slot< int >
nap::rtti::ObjectPtr
Definition: objectptr.h:154
nap::ParameterBlendGroup
Definition: parameterblendgroup.h:21
nap::utility::ErrorState
Definition: errorstate.h:19
nap::ParameterBlendComponentInstance
Definition: parameterblendcomponent.h:63
nap::ParameterBlendComponentInstance::hasPresets
bool hasPresets() const
Definition: parameterblendcomponent.h:131
nap::EntityInstance
Definition: entity.h:34
nap::ComponentInstance
Definition: component.h:43
nap::Component
Definition: component.h:151
nap::ParameterBlendComponentInstance::getIndex
int getIndex() const
Definition: parameterblendcomponent.h:114
nap
Definition: templateapp.h:17
nap::ParameterBlendComponentInstance::getPresets
const std::vector< std::string > & getPresets() const
Definition: parameterblendcomponent.h:119
nap::ParameterBlendComponentInstance::enabled
bool enabled() const
Definition: parameterblendcomponent.h:93