121 lines
2.8 KiB
C#
121 lines
2.8 KiB
C#
//======= Copyright (c) Valve Corporation, All rights reserved. ===============
|
|
//
|
|
// Purpose: Spawns balloons
|
|
//
|
|
//=============================================================================
|
|
|
|
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
namespace Valve.VR.InteractionSystem
|
|
{
|
|
//-------------------------------------------------------------------------
|
|
public class BalloonSpawner : MonoBehaviour
|
|
{
|
|
public float minSpawnTime = 5f;
|
|
public float maxSpawnTime = 15f;
|
|
private float nextSpawnTime;
|
|
public GameObject balloonPrefab;
|
|
|
|
public bool autoSpawn = true;
|
|
public bool spawnAtStartup = true;
|
|
|
|
public bool playSounds = true;
|
|
public SoundPlayOneshot inflateSound;
|
|
public SoundPlayOneshot stretchSound;
|
|
|
|
public bool sendSpawnMessageToParent = false;
|
|
|
|
public float scale = 1f;
|
|
|
|
public Transform spawnDirectionTransform;
|
|
public float spawnForce;
|
|
|
|
public bool attachBalloon = false;
|
|
|
|
public Balloon.BalloonColor color = Balloon.BalloonColor.Random;
|
|
|
|
|
|
//-------------------------------------------------
|
|
void Start()
|
|
{
|
|
if ( balloonPrefab == null )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( autoSpawn && spawnAtStartup )
|
|
{
|
|
SpawnBalloon( color );
|
|
nextSpawnTime = Random.Range( minSpawnTime, maxSpawnTime ) + Time.time;
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
void Update()
|
|
{
|
|
if ( balloonPrefab == null )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( ( Time.time > nextSpawnTime ) && autoSpawn )
|
|
{
|
|
SpawnBalloon( color );
|
|
nextSpawnTime = Random.Range( minSpawnTime, maxSpawnTime ) + Time.time;
|
|
}
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
public GameObject SpawnBalloon( Balloon.BalloonColor color = Balloon.BalloonColor.Red )
|
|
{
|
|
if ( balloonPrefab == null )
|
|
{
|
|
return null;
|
|
}
|
|
GameObject balloon = Instantiate( balloonPrefab, transform.position, transform.rotation ) as GameObject;
|
|
balloon.transform.localScale = new Vector3( scale, scale, scale );
|
|
if ( attachBalloon )
|
|
{
|
|
balloon.transform.parent = transform;
|
|
}
|
|
|
|
if ( sendSpawnMessageToParent )
|
|
{
|
|
if ( transform.parent != null )
|
|
{
|
|
transform.parent.SendMessage( "OnBalloonSpawned", balloon, SendMessageOptions.DontRequireReceiver );
|
|
}
|
|
}
|
|
|
|
if ( playSounds )
|
|
{
|
|
if ( inflateSound != null )
|
|
{
|
|
inflateSound.Play();
|
|
}
|
|
if ( stretchSound != null )
|
|
{
|
|
stretchSound.Play();
|
|
}
|
|
}
|
|
balloon.GetComponentInChildren<Balloon>().SetColor( color );
|
|
if ( spawnDirectionTransform != null )
|
|
{
|
|
balloon.GetComponentInChildren<Rigidbody>().AddForce( spawnDirectionTransform.forward * spawnForce );
|
|
}
|
|
|
|
return balloon;
|
|
}
|
|
|
|
|
|
//-------------------------------------------------
|
|
public void SpawnBalloonFromEvent( int color )
|
|
{
|
|
// Copy of SpawnBalloon using int because we can't pass in enums through the event system
|
|
SpawnBalloon( (Balloon.BalloonColor)color );
|
|
}
|
|
}
|
|
}
|