hellbound/Assets/Sources/Feel/MMTools/Tools/MMPropertyControllers/TransformController.cs

108 lines
4.6 KiB
C#

using System.Collections.Generic;
using UnityEngine;
using System.Reflection;
namespace MoreMountains.Tools
{
/// <summary>
/// A simple class used to control properties on a transform
/// </summary>
[AddComponentMenu("More Mountains/Tools/Property Controllers/TransformController")]
public class TransformController : MonoBehaviour
{
[Header("Position")]
public bool ControlPositionX;
[MMCondition("ControlPositionX", true)]
public float PositionX;
public bool ControlPositionY;
[MMCondition("ControlPositionY", true)]
public float PositionY;
public bool ControlPositionZ;
[MMCondition("ControlPositionZ", true)]
public float PositionZ;
[Header("Local Position")]
public bool ControlLocalPositionX;
[MMCondition("ControlLocalPositionX", true)]
public float LocalPositionX;
public bool ControlLocalPositionY;
[MMCondition("ControlLocalPositionY", true)]
public float LocalPositionY;
public bool ControlLocalPositionZ;
[MMCondition("ControlLocalPositionZ", true)]
public float LocalPositionZ;
[Header("Rotation")]
public bool ControlRotationX;
[MMCondition("ControlRotationX", true)]
public float RotationX;
public bool ControlRotationY;
[MMCondition("ControlRotationY", true)]
public float RotationY;
public bool ControlRotationZ;
[MMCondition("ControlRotationZ", true)]
public float RotationZ;
[Header("Local Rotation")]
public bool ControlLocalRotationX;
[MMCondition("ControlLocalRotationX", true)]
public float LocalRotationX;
public bool ControlLocalRotationY;
[MMCondition("ControlLocalRotationY", true)]
public float LocalRotationY;
public bool ControlLocalRotationZ;
[MMCondition("ControlLocalRotationZ", true)]
public float LocalRotationZ;
[Header("Scale")]
public bool ControlScaleX;
[MMCondition("ControlScaleX", true)]
public float ScaleX;
public bool ControlScaleY;
[MMCondition("ControlScaleY", true)]
public float ScaleY;
public bool ControlScaleZ;
[MMCondition("ControlScaleZ", true)]
public float ScaleZ;
protected Vector3 _position;
protected Vector3 _localPosition;
protected Vector3 _rotation;
protected Vector3 _localRotation;
protected Vector3 _scale;
/// <summary>
/// At update, modifies the requested properties
/// </summary>
protected virtual void Update()
{
_position = this.transform.position;
_localPosition = this.transform.localPosition;
_rotation = this.transform.eulerAngles;
_localRotation = this.transform.localEulerAngles;
_scale = this.transform.localScale;
if (ControlPositionX) { _position.x = PositionX; this.transform.position = _position; }
if (ControlPositionY) { _position.y = PositionY; this.transform.position = _position; }
if (ControlPositionZ) { _position.z = PositionZ; this.transform.position = _position; }
if (ControlLocalPositionX) { _localPosition.x = LocalPositionX; this.transform.localPosition = _localPosition; }
if (ControlLocalPositionY) { _localPosition.y = LocalPositionY; this.transform.localPosition = _localPosition; }
if (ControlLocalPositionZ) { _localPosition.z = LocalPositionZ; this.transform.localPosition = _localPosition; }
if (ControlRotationX) { _rotation.x = RotationX; this.transform.eulerAngles = _rotation; }
if (ControlRotationY) { _rotation.y = RotationY; this.transform.eulerAngles = _rotation; }
if (ControlRotationZ) { _rotation.z = RotationZ; this.transform.eulerAngles = _rotation; }
if (ControlLocalRotationX) { _localRotation.x = LocalRotationX; this.transform.localEulerAngles = _localRotation; }
if (ControlLocalRotationY) { _localRotation.y = LocalRotationY; this.transform.localEulerAngles = _localRotation; }
if (ControlLocalRotationZ) { _localRotation.z = LocalRotationZ; this.transform.localEulerAngles = _localRotation; }
if (ControlScaleX) { _scale.x = ScaleX; this.transform.localScale = _scale; }
if (ControlScaleY) { _scale.y = ScaleY; this.transform.localScale = _scale; }
if (ControlScaleZ) { _scale.z = ScaleZ; this.transform.localScale = _scale; }
}
}
}