ProtoTracer  1.0
Real-time 3D rendering and animation engine
Loading...
Searching...
No Matches
WarzoneAnimation.h
Go to the documentation of this file.
1#pragma once
2
3#include "../Animation.h"
4#include "../KeyFrameTrack.h"
5#include "../EasyEaseAnimator.h"
6#include "../../Objects/Background.h"
7#include "../../Morph/NukudeFace.h"
8#include "../../Render/Scene.h"
9#include "../../Signals/FunctionGenerator.h"
10#include "../../Sensors/MenuButtonHandler.h"
11#include "../../Sensors/BoopSensor.h"
12
13#include "../../Materials/Animated/SpectrumAnalyzer.h"
14#include "../../Materials/Animated/RainbowNoise.h"
15#include "../../Materials/Animated/RainbowSpiral.h"
16
17#include "../../Materials/MaterialAnimator.h"
18
19#include "../AnimationTracks/BlinkTrack.h"
20
21#include "../../Signals/FFTVoiceDetection.h"
22
23class WarzoneAnimation : public Animation<2> {
24private:
25 NukudeFace pM;
26 Background background;
27 EasyEaseAnimator<20> eEA = EasyEaseAnimator<20>(EasyEaseInterpolation::Overshoot, 1.0f, 0.35f);
28
29 //Materials
34
35 RGBColor gradientSpectrum[2] = {RGBColor(218, 173, 116), RGBColor(4, 191, 163)};
37
39
40 SpectrumAnalyzer sA = SpectrumAnalyzer(A0, Vector2D(200, 100), Vector2D(100, 50), true, true);
41
42 //Animation controllers
44
51
52 BoopSensor boop;
53
55
57 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::Anger), NukudeFace::Anger, 30, 0.0f, 1.0f);
58 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::Sadness), NukudeFace::Sadness, 30, 0.0f, 1.0f);
59 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::Surprised), NukudeFace::Surprised, 30, 0.0f, 1.0f);
60 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::Doubt), NukudeFace::Doubt, 30, 0.0f, 1.0f);
61 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::Frown), NukudeFace::Frown, 30, 0.0f, 1.0f);
62 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::LookUp), NukudeFace::LookUp, 30, 0.0f, 1.0f);
63 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::LookDown), NukudeFace::LookDown, 30, 0.0f, 1.0f);
64
65 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::vrc_v_ee), NukudeFace::vrc_v_ee, 2, 0.0f, 1.0f);
66 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::vrc_v_ih), NukudeFace::vrc_v_ih, 2, 0.0f, 1.0f);
67 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::vrc_v_dd), NukudeFace::vrc_v_dd, 2, 0.0f, 1.0f);
68 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::vrc_v_rr), NukudeFace::vrc_v_rr, 2, 0.0f, 1.0f);
69 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::vrc_v_ch), NukudeFace::vrc_v_ch, 2, 0.0f, 1.0f);
70 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::vrc_v_aa), NukudeFace::vrc_v_aa, 2, 0.0f, 1.0f);
71 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::vrc_v_oh), NukudeFace::vrc_v_oh, 2, 0.0f, 1.0f);
72 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::vrc_v_ss), NukudeFace::vrc_v_ss, 2, 0.0f, 1.0f);
73
74 eEA.AddParameter(pM.GetMorphWeightReference(NukudeFace::HideBlush), NukudeFace::HideBlush, 30, 1.0f, 0.0f);
75 }
76
78 blink.AddParameter(pM.GetMorphWeightReference(NukudeFace::Blink));
79 }
80
82 eEA.SetInterpolationMethod(NukudeFace::HideBlush, EasyEaseInterpolation::Cosine);
83 eEA.SetInterpolationMethod(NukudeFace::Sadness, EasyEaseInterpolation::Cosine);
84
85 eEA.SetInterpolationMethod(NukudeFace::vrc_v_ee, EasyEaseInterpolation::Linear);
86 eEA.SetInterpolationMethod(NukudeFace::vrc_v_ih, EasyEaseInterpolation::Linear);
87 eEA.SetInterpolationMethod(NukudeFace::vrc_v_dd, EasyEaseInterpolation::Linear);
88 eEA.SetInterpolationMethod(NukudeFace::vrc_v_rr, EasyEaseInterpolation::Linear);
89 eEA.SetInterpolationMethod(NukudeFace::vrc_v_ch, EasyEaseInterpolation::Linear);
90 eEA.SetInterpolationMethod(NukudeFace::vrc_v_aa, EasyEaseInterpolation::Linear);
91 eEA.SetInterpolationMethod(NukudeFace::vrc_v_oh, EasyEaseInterpolation::Linear);
92 eEA.SetInterpolationMethod(NukudeFace::vrc_v_ss, EasyEaseInterpolation::Linear);
93 }
94
102
103public:
105 scene.AddObject(pM.GetObject());
106 scene.AddObject(background.GetObject());
107
108 LinkEasyEase();
110
112
114
115 pM.GetObject()->SetMaterial(&materialAnimator);
116
117 MenuButtonHandler::Initialize(20, 7, 500);//7 is number of faces
118 boop.Initialize(5);
119
120 background.GetObject()->SetMaterial(&sA);//sA);
121 }
122
124 blink.Update();
125 }
126
127 void Default(){}
128
129 void Angry(){
130 eEA.AddParameterFrame(NukudeFace::Anger, 1.0f);
132
133 }
134
135 void Sad(){
136 eEA.AddParameterFrame(NukudeFace::Sadness, 1.0f);
137 eEA.AddParameterFrame(NukudeFace::Frown, 1.0f);
139 }
140
141 void Surprised(){
142 eEA.AddParameterFrame(NukudeFace::Surprised, 1.0f);
143 eEA.AddParameterFrame(NukudeFace::HideBlush, 0.0f);
145 }
146
147 void Doubt(){
148 eEA.AddParameterFrame(NukudeFace::Doubt, 1.0f);
149 }
150
151 void Frown(){
152 eEA.AddParameterFrame(NukudeFace::Frown, 1.0f);
153 }
154
155 void LookUp(){
156 eEA.AddParameterFrame(NukudeFace::LookUp, 1.0f);
157 }
158
159 void LookDown(){
160 eEA.AddParameterFrame(NukudeFace::LookDown, 1.0f);
161 }
162
164 pM.GetObject()->Disable();
165 background.GetObject()->Enable();
166 }
167
168 void FadeIn(float stepRatio) override {}
169 void FadeOut(float stepRatio) override {}
170
172 return pM.GetObject();
173 }
174
192
193 void Update(float ratio) override {
194 pM.Reset();
195 pM.GetObject()->Enable();
196 background.GetObject()->Disable();
197
198 bool isBooped = MenuButtonHandler::UseBoopSensor() ? boop.isBooped() : 0;
199 uint8_t mode = MenuButtonHandler::GetFaceState();//change by button press
200
203 sA.SetHueAngle(ratio * 360.0f * 4.0f);
204 sA.SetMirrorYState(MenuButtonHandler::MirrorSpectrumAnalyzer());
205 sA.SetFlipYState(!MenuButtonHandler::MirrorSpectrumAnalyzer());
206
208
209 if (isBooped && mode != 6){
210 Surprised();
211 }
212 else{
213 if (mode == 0) Default();
214 else if (mode == 1) Angry();
215 else if (mode == 2) Doubt();
216 else if (mode == 3) Frown();
217 else if (mode == 4) LookUp();
218 else if (mode == 5) Sad();
220 }
221
223
224 pM.SetMorphWeight(NukudeFace::BiggerNose, 1.0f);
225 pM.SetMorphWeight(NukudeFace::MoveEye, 1.0f);
226
227 eEA.Update();
228 pM.Update();
229
230 rainbowNoise.Update(ratio);
231 rainbowSpiral.Update(ratio);
233
234 //gradientMat.HueShift(fGenMatHue.Update());
235
236 pM.GetObject()->GetTransform()->SetRotation(Vector3D(0.0f, 0.0f, -7.5f));
237 pM.GetObject()->GetTransform()->SetPosition(Vector3D(125.0f + fGenMatXMove.Update(), -22.5f + fGenMatYMove.Update(), 600.0f));
238 pM.GetObject()->GetTransform()->SetScale(Vector3D(-1.05f, 0.585f, 0.8f));
239
240 pM.GetObject()->UpdateTransform();
241 }
242};
void AddParameter(float *parameter)
Adds a parameter to the animation track.
float Update()
Updates the animation track and returns the current parameter value.
A template class for animating eye blinking using keyframes.
Definition BlinkTrack.h:27
A template class for implementing advanced animation easing.
void AddParameterFrame(uint16_t dictionaryValue, float value) override
Adds a single frame value for a parameter.
void Update() override
Updates the animator, advancing all animations.
void SetInterpolationMethod(uint16_t dictionaryValue, InterpolationMethod interpMethod) override
Sets the interpolation method for a specific parameter.
void AddParameter(float *parameter, uint16_t dictionaryValue, uint16_t frames, float basis, float goal) override
Adds a parameter to the animator.
Detects visemes based on FFT voice analysis.
float GetViseme(MouthShape viseme)
Retrieves the probability of a specific viseme.
void Update(float *peaks, float maxFrequency)
Updates the viseme probabilities based on new FFT data.
A class to generate various waveform functions with customizable parameters.
@ Sine
Sine waveform.
@ Triangle
Triangle waveform.
float Update()
Updates and calculates the next value of the waveform.
Creates a customizable gradient material for rendering.
Animates transitions and blends between multiple materials.
void AddMaterial(Material::Method method, Material *material, uint16_t frames, float minOpacity, float maxOpacity)
Adds a material to the animation with specified properties.
void SetBaseMaterial(Material::Method method, Material *material)
Sets the base material for the animation.
void AddMaterialFrame(Material &material, float opacity)
Adds a specific frame for a material in the animation.
void Update()
Updates the animator, advancing the transitions.
@ Lighten
Chooses the lighter color.
Definition Material.h:40
@ Add
Adds colors together.
Definition Material.h:35
@ Replace
Replaces the base color.
Definition Material.h:44
static float GetCurrentMagnitude()
Retrieves the current signal magnitude.
static float GetSampleRate()
Retrieves the current sampling rate.
static float * GetFourierFiltered()
Retrieves the filtered FFT output data.
static void Update()
Updates the microphone system, processing new samples and performing FFT.
Represents a 3D object with geometry, material, and transformation data.
Definition Object3D.h:28
Represents an RGB color and provides methods for manipulation.
Definition RGBColor.h:23
A dynamic material that creates a rainbow effect using simplex noise.
void Update(float ratio)
Updates the material animation based on the time ratio.
A dynamic material creating a colorful rainbow spiral animation.
void Update(float ratio)
Updates the material animation based on the time ratio.
A material that applies a single, solid RGB color to surfaces.
A material that visualizes audio data as a spectrum.
void SetMirrorYState(bool state)
Sets the mirroring state for the visualization.
void Update(float *readData)
Updates the spectrum visualization with new audio data.
void SetFlipYState(bool state)
Sets the flipping state for the visualization.
void SetHueAngle(float hueAngle)
Sets the hue adjustment angle for the spectrum colors.
Represents a 2D vector (X, Y) and provides methods for vector arithmetic.
Definition Vector2D.h:27
Represents a 3D vector (X, Y, Z) and provides methods for vector arithmetic.
Definition Vector3D.h:26
@ ER
Mouth shape corresponding to the "ER" sound.
@ OO
Mouth shape corresponding to the "OO" sound.
@ AH
Mouth shape corresponding to the "AH" sound.
@ UH
Mouth shape corresponding to the "UH" sound.
@ AR
Mouth shape corresponding to the "AR" sound.
@ EE
Mouth shape corresponding to the "EE" sound.
FunctionGenerator fGenMatHue
FunctionGenerator fGenMatYMove
SpectrumAnalyzer sA
EasyEaseAnimator< 20 > eEA
SimpleMaterial redMaterial
RainbowSpiral rainbowSpiral
SimpleMaterial blueMaterial
BlinkTrack< 1 > blink
void ChangeInterpolationMethods()
GradientMaterial< 2 > gradientMat
FunctionGenerator fGenMatPos
MaterialAnimator< 5 > materialAnimator
FunctionGenerator fGenScale
FunctionGenerator fGenRotation
void FadeIn(float stepRatio) override
void FadeOut(float stepRatio) override
RainbowNoise rainbowNoise
FunctionGenerator fGenMatXMove
void Update(float ratio) override
FFTVoiceDetection< 128 > voiceDetection
RGBColor gradientSpectrum[2]
Object3D * GetObject()