BITKit/Packages/Common~/Scripts/OverrideTransform/OverrideTransform.cs

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;
}
}
}