5b8ebb7a35
testing
1 line
5.0 KiB
C#
1 line
5.0 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
[RequireComponent (typeof (Detonator))]
|
|
[AddComponentMenu("Detonator/Smoke")]
|
|
public class DetonatorSmoke : DetonatorComponent
|
|
{
|
|
private const float _baseSize = 1f;
|
|
private const float _baseDuration = 8f;
|
|
private Color _baseColor = new Color(.5f, .5f, .5f, .5f);
|
|
private const float _baseDamping = 0.1300004f;
|
|
|
|
private float _scaledDuration;
|
|
|
|
private GameObject _smokeA;
|
|
private DetonatorBurstEmitter _smokeAEmitter;
|
|
public Material smokeAMaterial;
|
|
|
|
private GameObject _smokeB;
|
|
private DetonatorBurstEmitter _smokeBEmitter;
|
|
public Material smokeBMaterial;
|
|
|
|
public bool drawSmokeA = true;
|
|
public bool drawSmokeB = true;
|
|
|
|
override public void Init()
|
|
{
|
|
FillMaterials(false);
|
|
BuildSmokeA();
|
|
BuildSmokeB();
|
|
}
|
|
|
|
public void FillMaterials(bool wipe)
|
|
{
|
|
if (!smokeAMaterial || wipe)
|
|
{
|
|
smokeAMaterial = MyDetonator().smokeAMaterial;
|
|
}
|
|
if (!smokeBMaterial || wipe)
|
|
{
|
|
smokeBMaterial = MyDetonator().smokeBMaterial;
|
|
}
|
|
}
|
|
|
|
public void BuildSmokeA()
|
|
{
|
|
_smokeA = new GameObject("SmokeA");
|
|
_smokeAEmitter = (DetonatorBurstEmitter)_smokeA.AddComponent("DetonatorBurstEmitter");
|
|
_smokeA.transform.parent = this.transform;
|
|
_smokeA.transform.localPosition = localPosition;
|
|
_smokeA.transform.localRotation = Quaternion.identity;
|
|
_smokeAEmitter.material = smokeAMaterial;
|
|
_smokeAEmitter.exponentialGrowth = false;
|
|
_smokeAEmitter.sizeGrow = 0.095f;
|
|
_smokeAEmitter.useWorldSpace = MyDetonator().useWorldSpace;
|
|
_smokeAEmitter.upwardsBias = MyDetonator().upwardsBias;
|
|
}
|
|
|
|
public void UpdateSmokeA()
|
|
{
|
|
_smokeA.transform.localPosition = Vector3.Scale(localPosition,(new Vector3(size, size, size)));
|
|
|
|
//move slightly away from the main camera so it sorts properly
|
|
_smokeA.transform.LookAt(Camera.main.transform);
|
|
_smokeA.transform.localPosition = -(Vector3.forward * -1.5f);
|
|
|
|
_smokeAEmitter.color = color;
|
|
_smokeAEmitter.duration = duration * .5f;
|
|
_smokeAEmitter.durationVariation = 0f;
|
|
_smokeAEmitter.timeScale = timeScale;
|
|
_smokeAEmitter.count = 4f;
|
|
_smokeAEmitter.particleSize = 25f;
|
|
_smokeAEmitter.sizeVariation = 3f;
|
|
_smokeAEmitter.velocity = velocity;
|
|
_smokeAEmitter.startRadius = 10f;
|
|
_smokeAEmitter.size = size;
|
|
_smokeAEmitter.useExplicitColorAnimation = true;
|
|
_smokeAEmitter.explodeDelayMin = explodeDelayMin;
|
|
_smokeAEmitter.explodeDelayMax = explodeDelayMax;
|
|
|
|
Color color1 = new Color(.2f, .2f, .2f, .4f);
|
|
Color color2 = new Color(.2f, .2f, .2f, .7f);
|
|
Color color3 = new Color(.2f, .2f, .2f, .4f);
|
|
Color color4 = new Color(.2f, .2f, .2f, 0f);
|
|
|
|
_smokeAEmitter.colorAnimation[0] = color1;
|
|
_smokeAEmitter.colorAnimation[1] = color2;
|
|
_smokeAEmitter.colorAnimation[2] = color2;
|
|
_smokeAEmitter.colorAnimation[3] = color3;
|
|
_smokeAEmitter.colorAnimation[4] = color4;
|
|
}
|
|
|
|
public void BuildSmokeB()
|
|
{
|
|
_smokeB = new GameObject("SmokeB");
|
|
_smokeBEmitter = (DetonatorBurstEmitter)_smokeB.AddComponent("DetonatorBurstEmitter");
|
|
_smokeB.transform.parent = this.transform;
|
|
_smokeB.transform.localPosition = localPosition;
|
|
_smokeB.transform.localRotation = Quaternion.identity;
|
|
_smokeBEmitter.material = smokeBMaterial;
|
|
_smokeBEmitter.exponentialGrowth = false;
|
|
_smokeBEmitter.sizeGrow = 0.095f;
|
|
_smokeBEmitter.useWorldSpace = MyDetonator().useWorldSpace;
|
|
_smokeBEmitter.upwardsBias = MyDetonator().upwardsBias;
|
|
}
|
|
|
|
public void UpdateSmokeB()
|
|
{
|
|
_smokeB.transform.localPosition = Vector3.Scale(localPosition,(new Vector3(size, size, size)));
|
|
|
|
//move slightly away from the main camera so it sorts properly
|
|
_smokeB.transform.LookAt(Camera.main.transform);
|
|
_smokeB.transform.localPosition = -(Vector3.forward * -1f);
|
|
|
|
_smokeBEmitter.color = color;
|
|
_smokeBEmitter.duration = duration * .5f;
|
|
_smokeBEmitter.durationVariation = 0f;
|
|
_smokeBEmitter.count = 2f;
|
|
_smokeBEmitter.particleSize = 25f;
|
|
_smokeBEmitter.sizeVariation = 3f;
|
|
_smokeBEmitter.velocity = velocity;
|
|
_smokeBEmitter.startRadius = 10f;
|
|
_smokeBEmitter.size = size;
|
|
_smokeBEmitter.useExplicitColorAnimation = true;
|
|
_smokeBEmitter.explodeDelayMin = explodeDelayMin;
|
|
_smokeBEmitter.explodeDelayMax = explodeDelayMax;
|
|
|
|
Color color1 = new Color(.2f, .2f, .2f, .4f);
|
|
Color color2 = new Color(.2f, .2f, .2f, .7f);
|
|
Color color3 = new Color(.2f, .2f, .2f, .4f);
|
|
Color color4 = new Color(.2f, .2f, .2f, 0f);
|
|
|
|
_smokeBEmitter.colorAnimation[0] = color1;
|
|
_smokeBEmitter.colorAnimation[1] = color2;
|
|
_smokeBEmitter.colorAnimation[2] = color2;
|
|
_smokeBEmitter.colorAnimation[3] = color3;
|
|
_smokeBEmitter.colorAnimation[4] = color4;
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
FillMaterials(true);
|
|
on = true;
|
|
size = _baseSize;
|
|
duration = _baseDuration;
|
|
explodeDelayMin = 0f;
|
|
explodeDelayMax = 0f;
|
|
color = _baseColor;
|
|
velocity = new Vector3(3f,3f,3f);
|
|
}
|
|
|
|
override public void Explode()
|
|
{
|
|
if (detailThreshold > detail) return;
|
|
|
|
if (on)
|
|
{
|
|
UpdateSmokeA();
|
|
UpdateSmokeB();
|
|
if (drawSmokeA) _smokeAEmitter.Explode();
|
|
if (drawSmokeB) _smokeBEmitter.Explode();
|
|
}
|
|
}
|
|
|
|
}
|