/* * @author Valentin Simonov / http://va.lent.in/ */ using UnityEngine; using TouchScript.Gestures; using TouchScript.Gestures.TransformGestures; namespace TouchScript.Examples.Portal { /// public class Planet : MonoBehaviour { private enum PlanetStatus { Free, Manual, Falling } public float Speed = 30f; public float RotationSpeed = 30f; public float FallSpeed = .01f; private PlanetStatus status = PlanetStatus.Free; public void Fall() { status = PlanetStatus.Falling; var gesture = GetComponent(); if (gesture != null) gesture.Cancel(); } private void OnEnable() { GetComponent().Pressed += pressedhandler; GetComponent().Released += releasedHandler; } private void OnDisable() { GetComponent().Pressed -= pressedhandler; GetComponent().Released -= releasedHandler; } private void Update() { switch (status) { case PlanetStatus.Free: transform.RotateAround(transform.parent.position, Vector3.up, Speed * Time.unscaledDeltaTime / transform.localPosition.sqrMagnitude); break; case PlanetStatus.Manual: break; case PlanetStatus.Falling: transform.localScale *= 1 - FallSpeed; transform.localPosition = Vector3.Lerp(transform.localPosition, Vector3.zero, FallSpeed); if (transform.localScale.x < 0.01) Destroy(gameObject); break; } transform.Rotate(0, 0, Time.unscaledDeltaTime * RotationSpeed); } void pressedhandler(object sender, System.EventArgs e) { status = PlanetStatus.Manual; } void releasedHandler(object sender, System.EventArgs e) { if (status != PlanetStatus.Manual) return; status = PlanetStatus.Free; } } }