5b8ebb7a35
testing
101 lines
3.0 KiB
C#
101 lines
3.0 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
// This one isn't ready for prime time and is not in the menu. Feel free to modify or complete. :)
|
|
[RequireComponent (typeof (Detonator))]
|
|
public class DetonatorCloudRing : DetonatorComponent
|
|
{
|
|
private float _baseSize = 1f;
|
|
private float _baseDuration = 5f;
|
|
private Vector3 _baseVelocity = new Vector3(155f, 5f, 155f);
|
|
private Color _baseColor = Color.white;
|
|
private Vector3 _baseForce = new Vector3(0.162f, 2.56f, 0f);
|
|
|
|
private GameObject _cloudRing;
|
|
private DetonatorBurstEmitter _cloudRingEmitter;
|
|
public Material cloudRingMaterial;
|
|
|
|
override public void Init()
|
|
{
|
|
//make sure there are materials at all
|
|
FillMaterials(false);
|
|
BuildCloudRing();
|
|
}
|
|
|
|
//if materials are empty fill them with defaults
|
|
public void FillMaterials(bool wipe)
|
|
{
|
|
if (!cloudRingMaterial || wipe)
|
|
{
|
|
cloudRingMaterial = MyDetonator().smokeBMaterial;
|
|
}
|
|
}
|
|
|
|
//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 BuildCloudRing()
|
|
{
|
|
_cloudRing = new GameObject("CloudRing");
|
|
_cloudRingEmitter = (DetonatorBurstEmitter)_cloudRing.AddComponent("DetonatorBurstEmitter");
|
|
_cloudRing.transform.parent = this.transform;
|
|
_cloudRing.transform.localPosition = localPosition;
|
|
_cloudRingEmitter.material = cloudRingMaterial;
|
|
_cloudRingEmitter.useExplicitColorAnimation = true;
|
|
}
|
|
|
|
public void UpdateCloudRing()
|
|
{
|
|
_cloudRing.transform.localPosition = Vector3.Scale(localPosition,(new Vector3(size, size, size)));
|
|
|
|
_cloudRingEmitter.color = color;
|
|
_cloudRingEmitter.duration = duration;
|
|
_cloudRingEmitter.durationVariation = duration/4f;
|
|
_cloudRingEmitter.count = (int)(detail * 50f);
|
|
_cloudRingEmitter.particleSize = 10f;
|
|
_cloudRingEmitter.sizeVariation = 2f;
|
|
_cloudRingEmitter.velocity = velocity;
|
|
_cloudRingEmitter.startRadius = 3f;
|
|
_cloudRingEmitter.size = size;
|
|
_cloudRingEmitter.force = force;
|
|
_cloudRingEmitter.explodeDelayMin = explodeDelayMin;
|
|
_cloudRingEmitter.explodeDelayMax = explodeDelayMax;
|
|
|
|
//make the starting colors more intense, towards white
|
|
Color color1 = Color.Lerp(color, (new Color(.2f, .2f, .2f, .6f)), 0.5f);
|
|
Color color2 = new Color(.2f, .2f, .2f, .5f);
|
|
Color color3 = new Color(.2f, .2f, .2f, .3f);
|
|
Color color4 = new Color(.2f, .2f, .2f, 0f);
|
|
|
|
_cloudRingEmitter.colorAnimation[0] = color1;
|
|
_cloudRingEmitter.colorAnimation[1] = color2;
|
|
_cloudRingEmitter.colorAnimation[2] = color2;
|
|
_cloudRingEmitter.colorAnimation[3] = color3;
|
|
_cloudRingEmitter.colorAnimation[4] = color4;
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
FillMaterials(true);
|
|
on = true;
|
|
size = _baseSize;
|
|
duration = _baseDuration;
|
|
explodeDelayMin = 0f;
|
|
explodeDelayMax = 0f;
|
|
color = _baseColor;
|
|
velocity = _baseVelocity;
|
|
force = _baseForce;
|
|
}
|
|
|
|
override public void Explode()
|
|
{
|
|
if (on)
|
|
{
|
|
UpdateCloudRing();
|
|
_cloudRingEmitter.Explode();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
|