You cannot select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
	
	
		
			82 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
			
		
		
	
	
			82 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C#
		
	
//======= 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;
 | 
						|
		}
 | 
						|
	}
 | 
						|
}
 |