ProtoTracer  1.0
Real-time 3D rendering and animation engine
Loading...
Searching...
No Matches
MaterialAnimator.tpp
Go to the documentation of this file.
1#pragma once
2
3template<size_t materialCount>
4MaterialAnimator<materialCount>::MaterialAnimator() {}
5
6template<size_t materialCount>
7void MaterialAnimator<materialCount>::SetBaseMaterial(Material::Method method, Material* material) {
8 if (baseMaterialSet) {
9 combineMaterial.SetMaterial(0, material);
10 combineMaterial.SetMethod(0, method);
11 combineMaterial.SetOpacity(0, 1.0f);
12 }
13 else {
14 baseMaterialSet = true;
15 AddMaterial(method, material, 1, 1.0f, 1.0f);
16 }
17}
18
19template<size_t materialCount>
20void MaterialAnimator<materialCount>::AddMaterial(Material::Method method, Material* material, uint16_t frames, float minOpacity, float maxOpacity) {
21 if (currentMaterials <= materialCount && baseMaterialSet) {
22 bool addValue = true;
23 for (uint16_t i = 1; i < currentMaterials; i++) {
24 if (dictionary[i] == material) {
25 addValue = false;
26 break;
27 }
28 }
29
30 if (addValue) {
31 eEA.AddParameter(&materialRatios[currentMaterials], currentMaterials, frames, minOpacity, maxOpacity);
32 combineMaterial.AddMaterial(method, material, minOpacity);
33 dictionary[currentMaterials] = material;
34 currentMaterials++;
35 }
36 }
37}
38
39template<size_t materialCount>
40void MaterialAnimator<materialCount>::AddMaterialFrame(Material& material, float opacity) {
41 for (uint8_t i = 0; i <= currentMaterials; i++) {
42 if (dictionary[i] == &material) {
43 eEA.AddParameterFrame(i, opacity);
44 break;
45 }
46 }
47}
48
49template<size_t materialCount>
50float MaterialAnimator<materialCount>::GetMaterialOpacity(Material& material) {
51 for (uint8_t i = 0; i <= currentMaterials; i++) {
52 if (dictionary[i] == &material) {
53 return eEA.GetValue(i);
54 break;
55 }
56 }
57
58 return 0.0f;
59}
60
61template<size_t materialCount>
62void MaterialAnimator<materialCount>::Update() {
63 eEA.Update(); // update material opacities
64
65 for (uint8_t i = 1; i <= currentMaterials; i++) { // link opacities
66 combineMaterial.SetOpacity(i, materialRatios[i]);
67 }
68}
69
70template<size_t materialCount>
71RGBColor MaterialAnimator<materialCount>::GetRGB(const Vector3D& position, const Vector3D& normal, const Vector3D& uvw) {
72 return combineMaterial.GetRGB(position, normal, uvw);
73};