using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEngine.Rendering; // ReSharper disable InvertIf namespace BITKit { public class LocationAdditive : MonoBehaviour { public Vector3 GlobalPosition { get; private set; } public Vector3 GlobalEuler { get; private set; } public Vector3 GlobalRotation { get; private set; } private Vector3 currentPosition; private Vector3 currentEuler; private Vector3 globalPosition; private Quaternion globalRotation; public void AddPosition(Vector3 value) { currentPosition += value; } public void AddEuler(Vector3 value) { currentEuler += value; } public void SetGlobalPosition(Vector3 value) { globalPosition = value; } public void SetGlobalRotation(Quaternion value) { globalRotation = value; } public void LateUpdate() { switch (currentEuler,globalRotation) { case var (euler,rotation) when euler.IsDefault() is false && rotation.IsDefault(): transform.localRotation = Quaternion.Euler(euler); break; case var (euler,rotation) when euler.IsDefault() && rotation.IsDefault() is false: transform.rotation = globalRotation = rotation; break; case var (euler,rotation) when euler.IsDefault() is false && rotation.IsDefault() is false: transform.rotation = globalRotation = rotation * Quaternion.Euler(euler); break; } switch (currentPosition,globalPosition) { case var (position,global) when position.IsDefault() is false && global.IsDefault(): transform.localPosition = position; break; case var (position,global) when position.IsDefault() && global.IsDefault() is false: transform.position =globalPosition= global; break; case var (position,global) when position.IsDefault() is false && global.IsDefault() is false: transform.position = globalPosition = global + position; break; } currentEuler = Vector3.zero; currentPosition = Vector3.zero; } } }