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.
113 lines
2.3 KiB
C#
113 lines
2.3 KiB
C#
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
|
|
//
|
|
// Purpose: This object can be set on fire
|
|
//
|
|
//=============================================================================
|
|
|
|
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
namespace Valve.VR.InteractionSystem
|
|
{
|
|
//-------------------------------------------------------------------------
|
|
public class FireSource : MonoBehaviour
|
|
{
|
|
public GameObject fireParticlePrefab;
|
|
public bool startActive;
|
|
private GameObject fireObject;
|
|
|
|
public ParticleSystem customParticles;
|
|
|
|
public bool isBurning;
|
|
|
|
public float burnTime;
|
|
public float ignitionDelay = 0;
|
|
private float ignitionTime;
|
|
|
|
private Hand hand;
|
|
|
|
public AudioSource ignitionSound;
|
|
|
|
public bool canSpreadFromThisSource = true;
|
|
|
|
//-------------------------------------------------
|
|
void Start()
|
|
{
|
|
if ( startActive )
|
|
{
|
|
StartBurning();
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
void Update()
|
|
{
|
|
if ( ( burnTime != 0 ) && ( Time.time > ( ignitionTime + burnTime ) ) && isBurning )
|
|
{
|
|
isBurning = false;
|
|
if ( customParticles != null )
|
|
{
|
|
customParticles.Stop();
|
|
}
|
|
else
|
|
{
|
|
Destroy( fireObject );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
void OnTriggerEnter( Collider other )
|
|
{
|
|
if ( isBurning && canSpreadFromThisSource )
|
|
{
|
|
other.SendMessageUpwards( "FireExposure", SendMessageOptions.DontRequireReceiver );
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
private void FireExposure()
|
|
{
|
|
if ( fireObject == null )
|
|
{
|
|
Invoke( "StartBurning", ignitionDelay );
|
|
}
|
|
|
|
if ( hand = GetComponentInParent<Hand>() )
|
|
{
|
|
hand.TriggerHapticPulse( 1000 );
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
private void StartBurning()
|
|
{
|
|
isBurning = true;
|
|
ignitionTime = Time.time;
|
|
|
|
// Play the fire ignition sound if there is one
|
|
if ( ignitionSound != null )
|
|
{
|
|
ignitionSound.Play();
|
|
}
|
|
|
|
if ( customParticles != null )
|
|
{
|
|
customParticles.Play();
|
|
}
|
|
else
|
|
{
|
|
if ( fireParticlePrefab != null )
|
|
{
|
|
fireObject = Instantiate( fireParticlePrefab, transform.position, transform.rotation ) as GameObject;
|
|
fireObject.transform.parent = transform;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|