rabidus-test/Assets/BNG Framework/Scripts/Helpers/JointHelper.cs

65 lines
2.2 KiB
C#

using BNG;
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
namespace BNG {
/// <summary>
/// Lock joints in place to help with physics handling and parent scaling
/// </summary>
public class JointHelper : MonoBehaviour {
public bool LockXPosition = false;
public bool LockYPosition = false;
public bool LockZPosition = false;
public bool LockXScale = true;
public bool LockYScale = true;
public bool LockZScale = true;
public bool LockXRotation = false;
public bool LockYRotation = false;
public bool LockZRotation = false;
Vector3 initialPosition;
Vector3 initialRotation;
Vector3 initialScale;
Vector3 currentPosition;
Vector3 currentScale;
Vector3 currentRotation;
void Start() {
initialPosition = transform.localPosition;
initialRotation = transform.localEulerAngles;
initialScale = transform.localScale;
}
void lockPosition() {
if (LockXPosition || LockYPosition || LockZPosition) {
currentPosition = transform.localPosition;
transform.localPosition = new Vector3(LockXPosition ? initialPosition.x : currentPosition.x, LockYPosition ? initialPosition.y : currentPosition.y, LockZPosition ? initialPosition.z : currentPosition.z);
}
if (LockXScale || LockYScale || LockZScale) {
currentScale = transform.localScale;
transform.localScale = new Vector3(LockXScale ? initialScale.x : currentScale.x, LockYScale ? initialScale.y : currentScale.y, LockZScale ? initialScale.z : currentScale.z);
}
if (LockXRotation || LockYRotation || LockZRotation) {
currentRotation = transform.localEulerAngles;
transform.localEulerAngles = new Vector3(LockXRotation ? initialRotation.x : currentRotation.x, LockYRotation ? initialRotation.y : currentRotation.y, LockZRotation ? initialRotation.z : currentRotation.z);
}
}
void LateUpdate() {
lockPosition();
}
void FixedUpdate() {
lockPosition();
}
}
}