//======= Copyright (c) Valve Corporation, All rights reserved. =============== // // Purpose: Target that sends events when hit by an arrow // //============================================================================= using UnityEngine; using UnityEngine.Events; using System.Collections; namespace Valve.VR.InteractionSystem { //------------------------------------------------------------------------- public class ArcheryTarget : MonoBehaviour { public UnityEvent onTakeDamage; public bool onceOnly = false; public Transform targetCenter; public Transform baseTransform; public Transform fallenDownTransform; public float fallTime = 0.5f; const float targetRadius = 0.25f; private bool targetEnabled = true; //------------------------------------------------- private void ApplyDamage() { OnDamageTaken(); } //------------------------------------------------- private void FireExposure() { OnDamageTaken(); } //------------------------------------------------- private void OnDamageTaken() { if ( targetEnabled ) { onTakeDamage.Invoke(); StartCoroutine( this.FallDown() ); if ( onceOnly ) { targetEnabled = false; } } } //------------------------------------------------- private IEnumerator FallDown() { if ( baseTransform ) { Quaternion startingRot = baseTransform.rotation; float startTime = Time.time; float rotLerp = 0f; while ( rotLerp < 1 ) { rotLerp = Util.RemapNumberClamped( Time.time, startTime, startTime + fallTime, 0f, 1f ); baseTransform.rotation = Quaternion.Lerp( startingRot, fallenDownTransform.rotation, rotLerp ); yield return null; } } yield return null; } } }