using BNG; using System.Collections; using System.Collections.Generic; using UnityEngine; namespace BNG { /// /// Lock joints in place to help with physics handling and parent scaling /// 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(); } } }