diff options
Diffstat (limited to 'GameCode/MoveTransform.cs')
-rw-r--r-- | GameCode/MoveTransform.cs | 78 |
1 files changed, 78 insertions, 0 deletions
diff --git a/GameCode/MoveTransform.cs b/GameCode/MoveTransform.cs new file mode 100644 index 0000000..e6b8d0f --- /dev/null +++ b/GameCode/MoveTransform.cs @@ -0,0 +1,78 @@ +using UnityEngine; + +public class MoveTransform : MonoBehaviour +{ + public float gravity = 30f; + + public float drag; + + public float dragMinSpeed = 1f; + + public float velocitySpread; + + public float spread; + + public Vector3 localForce; + + public Vector3 worldForce; + + public float multiplier = 1f; + + public Vector3 velocity; + + [HideInInspector] + public float distanceTravelled; + + [HideInInspector] + public bool DontRunStart; + + public float selectedSpread; + + public bool allowStop; + + public int simulateGravity; + + private int randomSeed; + + [HideInInspector] + internal float simulationSpeed = 1f; + + private void Start() + { + if (!DontRunStart) + { + velocity += base.transform.TransformDirection(localForce) + worldForce; + base.transform.rotation = Quaternion.LookRotation(velocity, Vector3.forward); + if (spread != 0f) + { + velocity += base.transform.up * selectedSpread; + } + } + } + + private void Update() + { + float num = Mathf.Clamp(TimeHandler.deltaTime, 0f, 0.02f); + float deltaTime = TimeHandler.deltaTime; + num *= simulationSpeed; + deltaTime *= simulationSpeed; + if (simulateGravity == 0) + { + velocity += gravity * Vector3.down * deltaTime * multiplier; + } + if ((velocity.magnitude > 2f || allowStop) && velocity.magnitude > dragMinSpeed) + { + velocity -= velocity * Mathf.Clamp(drag * num * Mathf.Clamp(multiplier, 0f, 1f), 0f, 1f); + } + base.transform.position += velocity * deltaTime * multiplier; + distanceTravelled += velocity.magnitude * deltaTime * multiplier; + base.transform.rotation = Quaternion.LookRotation(velocity, Vector3.forward); + } + + public float GetUpwardsCompensation(Vector2 start, Vector2 end) + { + start.y = 0.5f; + end.y = 0.5f; + return Mathf.Pow(Vector3.Distance(start, end), 2.06f) * gravity / velocity.magnitude * 0.012f; + } +} |