IMHOTEP Framework
 All Classes Namespaces Functions Variables Enumerations Enumerator Properties Pages
ArcheryTarget.cs
1 //======= Copyright (c) Valve Corporation, All rights reserved. ===============
2 //
3 // Purpose: Target that sends events when hit by an arrow
4 //
5 //=============================================================================
6 
7 using UnityEngine;
8 using UnityEngine.Events;
9 using System.Collections;
10 
11 namespace Valve.VR.InteractionSystem
12 {
13  //-------------------------------------------------------------------------
14  public class ArcheryTarget : MonoBehaviour
15  {
16  public UnityEvent onTakeDamage;
17 
18  public bool onceOnly = false;
19  public Transform targetCenter;
20 
21  public Transform baseTransform;
22  public Transform fallenDownTransform;
23  public float fallTime = 0.5f;
24 
25  const float targetRadius = 0.25f;
26 
27  private bool targetEnabled = true;
28 
29 
30  //-------------------------------------------------
31  private void ApplyDamage()
32  {
33  OnDamageTaken();
34  }
35 
36 
37  //-------------------------------------------------
38  private void FireExposure()
39  {
40  OnDamageTaken();
41  }
42 
43 
44  //-------------------------------------------------
45  private void OnDamageTaken()
46  {
47  if ( targetEnabled )
48  {
49  onTakeDamage.Invoke();
50  StartCoroutine( this.FallDown() );
51 
52  if ( onceOnly )
53  {
54  targetEnabled = false;
55  }
56  }
57  }
58 
59 
60  //-------------------------------------------------
61  private IEnumerator FallDown()
62  {
63  if ( baseTransform )
64  {
65  Quaternion startingRot = baseTransform.rotation;
66 
67  float startTime = Time.time;
68  float rotLerp = 0f;
69 
70  while ( rotLerp < 1 )
71  {
72  rotLerp = Util.RemapNumberClamped( Time.time, startTime, startTime + fallTime, 0f, 1f );
73  baseTransform.rotation = Quaternion.Lerp( startingRot, fallenDownTransform.rotation, rotLerp );
74  yield return null;
75  }
76  }
77 
78  yield return null;
79  }
80  }
81 }