125 lines
3.7 KiB
C#
125 lines
3.7 KiB
C#
using UnityEngine;
|
|
using UnityEngine.UI;
|
|
using System.Collections;
|
|
using System.Collections.Generic;
|
|
using MoreMountains.Tools;
|
|
|
|
namespace MoreMountains.Tools
|
|
{
|
|
/// <summary>
|
|
/// This class forces a transform to stay at a fixed position, rotation and/or scale.
|
|
/// </summary>
|
|
[AddComponentMenu("More Mountains/Tools/Movement/MMStayInPlace")]
|
|
public class MMStayInPlace : MonoBehaviour
|
|
{
|
|
public enum Spaces { World, Local }
|
|
public enum UpdateModes { Update, FixedUpdate, LateUpdate }
|
|
|
|
[Header("Modes")]
|
|
public UpdateModes UpdateMode = UpdateModes.LateUpdate;
|
|
public Spaces Space = Spaces.World;
|
|
|
|
[Header("Attributes")]
|
|
|
|
public bool FixedPosition = true;
|
|
public bool FixedRotation = true;
|
|
public bool FixedScale = true;
|
|
|
|
[Header("Overrides")]
|
|
|
|
public bool OverridePosition = false;
|
|
[MMCondition("OverridePosition", true)]
|
|
public Vector3 OverridePositionValue;
|
|
|
|
public bool OverrideRotation = false;
|
|
[MMCondition("OverrideRotation", true)]
|
|
public Vector3 OverrideRotationValue;
|
|
|
|
public bool OverrideScale = false;
|
|
[MMCondition("OverrideScale", true)]
|
|
public Vector3 OverrideScaleValue;
|
|
|
|
protected Vector3 _initialPosition;
|
|
protected Quaternion _initialRotation;
|
|
protected Vector3 _initialScale;
|
|
|
|
protected virtual void Awake()
|
|
{
|
|
Initialization();
|
|
}
|
|
|
|
protected virtual void Initialization()
|
|
{
|
|
_initialPosition = (Space == Spaces.World) ? this.transform.position : this.transform.localPosition;
|
|
_initialRotation = (Space == Spaces.World) ? this.transform.rotation : this.transform.localRotation;
|
|
_initialScale = (Space == Spaces.World) ? this.transform.position : this.transform.localScale;
|
|
|
|
if (OverridePosition)
|
|
{
|
|
_initialPosition = OverridePositionValue;
|
|
}
|
|
if (OverrideRotation)
|
|
{
|
|
_initialRotation = Quaternion.Euler(OverrideRotationValue);
|
|
}
|
|
if (OverrideScale)
|
|
{
|
|
_initialScale = OverrideScaleValue;
|
|
}
|
|
}
|
|
|
|
protected virtual void Update()
|
|
{
|
|
if (UpdateMode == UpdateModes.Update)
|
|
{
|
|
StayInPlace();
|
|
}
|
|
}
|
|
protected virtual void FixedUpdate()
|
|
{
|
|
if (UpdateMode == UpdateModes.FixedUpdate)
|
|
{
|
|
StayInPlace();
|
|
}
|
|
}
|
|
|
|
protected virtual void LateUpdate()
|
|
{
|
|
if (UpdateMode == UpdateModes.LateUpdate)
|
|
{
|
|
StayInPlace();
|
|
}
|
|
}
|
|
|
|
protected virtual void StayInPlace()
|
|
{
|
|
if (Space == Spaces.World)
|
|
{
|
|
if (FixedPosition)
|
|
{
|
|
this.transform.position = _initialPosition;
|
|
}
|
|
if (FixedRotation)
|
|
{
|
|
this.transform.rotation = _initialRotation;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (FixedPosition)
|
|
{
|
|
this.transform.localPosition = _initialPosition;
|
|
}
|
|
if (FixedRotation)
|
|
{
|
|
this.transform.localRotation = _initialRotation;
|
|
}
|
|
}
|
|
if (FixedScale)
|
|
{
|
|
this.transform.localScale = _initialScale;
|
|
}
|
|
}
|
|
}
|
|
}
|