5b8ebb7a35
testing
90 lines
2.5 KiB
C#
90 lines
2.5 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
[RequireComponent (typeof (Detonator))]
|
|
[AddComponentMenu("Detonator/Shockwave")]
|
|
public class DetonatorShockwave : DetonatorComponent
|
|
{
|
|
private float _baseSize = 1f;
|
|
private float _baseDuration = .25f;
|
|
private Vector3 _baseVelocity = new Vector3(0f, 0f, 0f);
|
|
private Color _baseColor = Color.white;
|
|
|
|
private GameObject _shockwave;
|
|
private DetonatorBurstEmitter _shockwaveEmitter;
|
|
public Material shockwaveMaterial;
|
|
|
|
public ParticleRenderMode renderMode;
|
|
|
|
override public void Init()
|
|
{
|
|
//make sure there are materials at all
|
|
FillMaterials(false);
|
|
BuildShockwave();
|
|
}
|
|
|
|
//if materials are empty fill them with defaults
|
|
public void FillMaterials(bool wipe)
|
|
{
|
|
if (!shockwaveMaterial || wipe)
|
|
{
|
|
shockwaveMaterial = MyDetonator().shockwaveMaterial;
|
|
}
|
|
}
|
|
|
|
//Build these to look correct at the stock Detonator size of 10m... then let the size parameter
|
|
//cascade through to the emitters and let them do the scaling work... keep these absolute.
|
|
public void BuildShockwave()
|
|
{
|
|
_shockwave = new GameObject("Shockwave");
|
|
_shockwaveEmitter = (DetonatorBurstEmitter)_shockwave.AddComponent("DetonatorBurstEmitter");
|
|
_shockwave.transform.parent = this.transform;
|
|
_shockwave.transform.localRotation = Quaternion.identity;
|
|
_shockwave.transform.localPosition = localPosition;
|
|
_shockwaveEmitter.material = shockwaveMaterial;
|
|
_shockwaveEmitter.exponentialGrowth = false;
|
|
_shockwaveEmitter.useWorldSpace = MyDetonator().useWorldSpace;
|
|
}
|
|
|
|
public void UpdateShockwave()
|
|
{
|
|
_shockwave.transform.localPosition = Vector3.Scale(localPosition,(new Vector3(size, size, size)));
|
|
_shockwaveEmitter.color = color;
|
|
_shockwaveEmitter.duration = duration;
|
|
_shockwaveEmitter.durationVariation = duration * 0.1f;
|
|
_shockwaveEmitter.count = 1;
|
|
_shockwaveEmitter.detail = 1;
|
|
_shockwaveEmitter.particleSize = 25f;
|
|
_shockwaveEmitter.sizeVariation = 0f;
|
|
_shockwaveEmitter.velocity = new Vector3(0f, 0f, 0f);
|
|
_shockwaveEmitter.startRadius = 0f;
|
|
_shockwaveEmitter.sizeGrow = 202f;
|
|
_shockwaveEmitter.size = size;
|
|
_shockwaveEmitter.explodeDelayMin = explodeDelayMin;
|
|
_shockwaveEmitter.explodeDelayMax = explodeDelayMax;
|
|
_shockwaveEmitter.renderMode = renderMode;
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
FillMaterials(true);
|
|
on = true;
|
|
size = _baseSize;
|
|
duration = _baseDuration;
|
|
explodeDelayMin = 0f;
|
|
explodeDelayMax = 0f;
|
|
color = _baseColor;
|
|
velocity = _baseVelocity;
|
|
}
|
|
|
|
override public void Explode()
|
|
{
|
|
if (on)
|
|
{
|
|
UpdateShockwave();
|
|
_shockwaveEmitter.Explode();
|
|
}
|
|
}
|
|
|
|
}
|