]> git.bts.cx Git - jurassic-tween.git/blob - Scripts/Runtime/Internal/EngineComponentStateCaptor.cs
Updated licence and some notes on the readme
[jurassic-tween.git] / Scripts / Runtime / Internal / EngineComponentStateCaptor.cs
1 //
2 // EngineComponentStateCaptor.cs
3 // JurassicTween
4 //
5 // Created by Benjamin Sherratt on 04/05/2021.
6 // Copyright © 2021 SKFX Ltd. All rights reserved.
7 //
8
9 using System.Collections.Generic;
10 using UnityEngine;
11
12 namespace JurassicTween.Internal {
13     public class TransformComponentStateCaptor : IComponentStateCaptor {
14         static string[] animationKeys = {
15             "localPosition.x",
16             "localPosition.y",
17             "localPosition.z",
18             "localRotation.x",
19             "localRotation.y",
20             "localRotation.z",
21             "localRotation.w",
22             "localScale.x",
23             "localScale.y",
24             "localScale.z",
25         };
26
27         public ComponentState GetComponentState(Component component) {
28             Transform transform = (Transform)component;
29
30             float[] stateValues = new float[10];
31             stateValues[0] = transform.localPosition.x;
32             stateValues[1] = transform.localPosition.y;
33             stateValues[2] = transform.localPosition.z;
34             stateValues[3] = transform.localRotation.x;
35             stateValues[4] = transform.localRotation.y;
36             stateValues[5] = transform.localRotation.z;
37             stateValues[6] = transform.localRotation.w;
38             stateValues[7] = transform.localScale.x;
39             stateValues[8] = transform.localScale.y;
40             stateValues[9] = transform.localScale.z;
41
42             ComponentState state = new ComponentState(stateValues);
43             return state;
44         }
45
46         public ComponentStateDelta GenerateComponentStateDelta(ComponentState startState, ComponentState endState) {
47             Dictionary<string, ComponentStateDelta.Range> rangeByAnimationKey = new Dictionary<string, ComponentStateDelta.Range>();
48
49             for (uint i = 0; i < animationKeys.Length; ++i) {
50                 if (startState.values[i] != endState.values[i]) {
51                     rangeByAnimationKey[animationKeys[i]] = new ComponentStateDelta.Range(startState.values[i], endState.values[i]);
52                 }
53             }
54
55             ComponentStateDelta delta = new ComponentStateDelta(rangeByAnimationKey);
56             return delta;
57         }
58     }
59 }