53 lines
1.6 KiB
C#
53 lines
1.6 KiB
C#
|
using System.Collections;
|
||
|
using System.Collections.Generic;
|
||
|
using UnityEngine;
|
||
|
using RotaryHeart.Lib.SerializableDictionary;
|
||
|
namespace BITKit
|
||
|
{
|
||
|
public class OverrideTransform : MonoBehaviour
|
||
|
{
|
||
|
public List<Transform> sources = new();
|
||
|
Dictionary<string, Quaternion> rotations = new();
|
||
|
Dictionary<string, Vector3> positions = new();
|
||
|
Quaternion currentRotation;
|
||
|
Vector3 currentPosition;
|
||
|
Quaternion defaultRotation;
|
||
|
Vector3 defualtPosition;
|
||
|
public void Set(string key, Quaternion rotation)
|
||
|
{
|
||
|
rotations.Insert(key, rotation);
|
||
|
}
|
||
|
public void Set(string key, Vector3 position)
|
||
|
{
|
||
|
positions.Insert(key, position);
|
||
|
}
|
||
|
void Start()
|
||
|
{
|
||
|
defaultRotation = transform.localRotation;
|
||
|
defualtPosition = transform.localPosition;
|
||
|
}
|
||
|
void Update()
|
||
|
{
|
||
|
currentRotation = defaultRotation;
|
||
|
currentPosition = defualtPosition;
|
||
|
foreach (var x in sources)
|
||
|
{
|
||
|
currentRotation *= x.localRotation;
|
||
|
currentPosition += x.localPosition;
|
||
|
}
|
||
|
foreach (var x in rotations.Values)
|
||
|
{
|
||
|
currentRotation *= x;
|
||
|
}
|
||
|
foreach (var x in positions.Values)
|
||
|
{
|
||
|
currentPosition += x;
|
||
|
}
|
||
|
}
|
||
|
void LateUpdate()
|
||
|
{
|
||
|
transform.localPosition = currentPosition;
|
||
|
transform.localRotation = currentRotation;
|
||
|
}
|
||
|
}
|
||
|
}
|