diff --git a/Assets/scripts/Character.cs b/Assets/scripts/Character.cs index 73a7982..debda66 100644 --- a/Assets/scripts/Character.cs +++ b/Assets/scripts/Character.cs @@ -1,118 +1,118 @@ -using UnityEngine; -using System.Collections; -using System; - -[RequireComponent(typeof(Rigidbody))] -public class Character : MonoBehaviour -{ - public Animator animator; - - public float MoveSpeed; - public float TurnSpeed; - public float DashForce; - public float DashCooldown; - public Color TrailColor; - - private Rigidbody rb; - private Quaternion targetRot = Quaternion.identity; - - private float dashRemainingTime = 6f; - private bool isDashing = false; - - private int playerId; - private SelectorWithBolts selector; - - private Vector3 dashForward; - - private ParticleSystem particleSys; - - public int PlayerID - { - get { return playerId; } - set { playerId = value; } - } - - void Awake() - { - rb = GetComponent(); - particleSys = GetComponent(); - } - - void Start() - { - selector = GameObject.FindObjectOfType(); - } - - void Update() - { - if (dashRemainingTime > 0) - { - dashRemainingTime = Mathf.Clamp(dashRemainingTime - Time.deltaTime, 0f, DashCooldown); - } - - if (isDashing) - { - rb.AddForce(dashForward * DashForce, ForceMode.VelocityChange); - } - else +using UnityEngine; +using System.Collections; +using System; + +[RequireComponent(typeof(Rigidbody))] +public class Character : MonoBehaviour +{ + public Animator animator; + + public float MoveSpeed; + public float TurnSpeed; + public float DashForce; + public float DashCooldown; + public Color TrailColor; + + private Rigidbody rb; + private Quaternion targetRot = Quaternion.identity; + + private float dashRemainingTime = 6f; + private bool isDashing = false; + + private int playerId; + private SelectorWithBolts selector; + + private Vector3 dashForward; + + private ParticleSystem particleSys; + + public int PlayerID + { + get { return playerId; } + set { playerId = value; } + } + + void Awake() + { + rb = GetComponent(); + particleSys = GetComponent(); + } + + void Start() + { + selector = GameObject.FindObjectOfType(); + } + + void Update() + { + if (dashRemainingTime > 0) { - rb.rotation = Quaternion.RotateTowards(rb.rotation, targetRot, TurnSpeed * Time.deltaTime); - } - } - - public void Move(float xValue, float zValue) - { - if (isDashing) return; - - Vector3 forwardDir = Camera.main.transform.forward; - Vector3 rightDir = Camera.main.transform.right; - - forwardDir.y = 0f; - forwardDir = forwardDir.normalized * zValue; - - rightDir.y = 0f; - rightDir = rightDir.normalized * xValue; - - Vector3 newVelocity = (forwardDir + rightDir) * MoveSpeed; - - if (newVelocity != Vector3.zero) - { - // We rotate to face the new direction - targetRot = Quaternion.LookRotation(newVelocity.normalized); - } - - newVelocity.y = rb.velocity.y; - - rb.velocity = newVelocity; - animator.SetFloat("Walk", rb.velocity.magnitude); - } - - public bool Dash() - { - if (dashRemainingTime > 0f) return false; - - selector.ReplenishPlayerDashMeter(playerId); - - dashRemainingTime = DashCooldown; - - //particleSys.Play(); - - StartCoroutine(DashCoroutine()); - - return true; - } - - private IEnumerator DashCoroutine() - { - isDashing = true; - - dashForward = GetComponent().forward; - rb.velocity = Vector3.zero; - - animator.SetTrigger("Dash"); - - yield return new WaitForSeconds(0.9f); - - isDashing = false; - } -} + dashRemainingTime = Mathf.Clamp(dashRemainingTime - Time.deltaTime, 0f, DashCooldown); + } + + if (isDashing) + { + rb.AddForce(dashForward * DashForce, ForceMode.VelocityChange); + } + else + { + rb.rotation = Quaternion.RotateTowards(rb.rotation, targetRot, TurnSpeed * Time.deltaTime); + } + } + + public void Move(float xValue, float zValue) + { + if (isDashing) return; + + Vector3 forwardDir = Camera.main.transform.forward; + Vector3 rightDir = Camera.main.transform.right; + + forwardDir.y = 0f; + forwardDir = forwardDir.normalized * zValue; + + rightDir.y = 0f; + rightDir = rightDir.normalized * xValue; + + Vector3 newVelocity = (forwardDir + rightDir) * MoveSpeed; + + if (newVelocity != Vector3.zero) + { + // We rotate to face the new direction + targetRot = Quaternion.LookRotation(newVelocity.normalized); + } + + newVelocity.y = rb.velocity.y; + + rb.velocity = newVelocity; + animator.SetFloat("Walk", rb.velocity.magnitude); + } + + public bool Dash() + { + if (dashRemainingTime > 0f) return false; + + selector.ReplenishPlayerDashMeter(playerId); + + dashRemainingTime = DashCooldown; + + //particleSys.Play(); + + StartCoroutine(DashCoroutine()); + + return true; + } + + private IEnumerator DashCoroutine() + { + isDashing = true; + + dashForward = GetComponent().forward; + rb.velocity = Vector3.zero; + + animator.SetTrigger("Dash"); + + yield return new WaitForSeconds(0.9f); + + isDashing = false; + } +} diff --git a/Assets/scripts/RuneBehaviour.cs b/Assets/scripts/RuneBehaviour.cs index 255fe12..8d649a7 100644 --- a/Assets/scripts/RuneBehaviour.cs +++ b/Assets/scripts/RuneBehaviour.cs @@ -72,8 +72,12 @@ public class RuneBehaviour : MonoBehaviour { while (ratio < 1f) { - ratio += Time.deltaTime / LightTime; - symbol.color = Color.Lerp(startColor, DefaultColor, ratio); + // Hack + if (enabled) + { + ratio += Time.deltaTime / LightTime; + symbol.color = Color.Lerp(startColor, DefaultColor, ratio); + } yield return null; } diff --git a/Assets/scripts/SelectorWithBolts.cs b/Assets/scripts/SelectorWithBolts.cs index 849c9f9..1eb908a 100644 --- a/Assets/scripts/SelectorWithBolts.cs +++ b/Assets/scripts/SelectorWithBolts.cs @@ -1,5 +1,6 @@ using UnityEngine; using System.Collections; +using XInputDotNetPure; [RequireComponent(typeof(Rigidbody))] public class SelectorWithBolts : MonoBehaviour @@ -74,5 +75,26 @@ public class SelectorWithBolts : MonoBehaviour yield return null; } + + StartCoroutine(VibrateController(playerId)); + } + + private IEnumerator VibrateController(int playerId) + { + GamePad.SetVibration((PlayerIndex)playerId, 1f, 1f); + + yield return new WaitForSeconds(0.5f); + + GamePad.SetVibration((PlayerIndex)playerId, 0f, 0f); + } + + void OnApplicationQuit() + { + // In case the coroutine was still running when we closed the game + + for (int i = 0; i < Bolts.Length; i++) + { + GamePad.SetVibration((PlayerIndex)i, 0f, 0f); + } } }