5b8ebb7a35
testing
117 lines
3.0 KiB
C#
117 lines
3.0 KiB
C#
using UnityEngine;
|
|
using System.Collections;
|
|
|
|
[RequireComponent (typeof (Detonator))]
|
|
[AddComponentMenu("Detonator/Glow")]
|
|
public class DetonatorGlow : DetonatorComponent
|
|
{
|
|
private float _baseSize = 1f;
|
|
private float _baseDuration = 3f;
|
|
private Vector3 _baseVelocity = new Vector3(0f, 0f, 0f);
|
|
private Color _baseColor = Color.black;
|
|
private float _scaledDuration;
|
|
|
|
private GameObject _glow;
|
|
private DetonatorBurstEmitter _glowEmitter;
|
|
public Material glowMaterial;
|
|
|
|
override public void Init()
|
|
{
|
|
//make sure there are materials at all
|
|
FillMaterials(false);
|
|
BuildGlow();
|
|
}
|
|
|
|
//if materials are empty fill them with defaults
|
|
public void FillMaterials(bool wipe)
|
|
{
|
|
if (!glowMaterial || wipe)
|
|
{
|
|
glowMaterial = MyDetonator().glowMaterial;
|
|
}
|
|
}
|
|
|
|
//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 BuildGlow()
|
|
{
|
|
_glow = new GameObject("Glow");
|
|
_glowEmitter = (DetonatorBurstEmitter)_glow.AddComponent("DetonatorBurstEmitter");
|
|
_glow.transform.parent = this.transform;
|
|
_glow.transform.localPosition = localPosition;
|
|
_glowEmitter.material = glowMaterial;
|
|
_glowEmitter.exponentialGrowth = false;
|
|
_glowEmitter.useExplicitColorAnimation = true;
|
|
_glowEmitter.useWorldSpace = MyDetonator().useWorldSpace;
|
|
|
|
}
|
|
|
|
public void UpdateGlow()
|
|
{
|
|
//this needs
|
|
_glow.transform.localPosition = Vector3.Scale(localPosition,(new Vector3(size, size, size)));
|
|
|
|
_glowEmitter.color = color;
|
|
_glowEmitter.duration = duration;
|
|
_glowEmitter.timeScale = timeScale;
|
|
_glowEmitter.count = 1;
|
|
_glowEmitter.particleSize = 65f;
|
|
_glowEmitter.sizeVariation = 0f;
|
|
_glowEmitter.velocity = new Vector3(0f, 0f, 0f);
|
|
_glowEmitter.startRadius = 0f;
|
|
_glowEmitter.sizeGrow = 0;
|
|
_glowEmitter.size = size;
|
|
_glowEmitter.explodeDelayMin = explodeDelayMin;
|
|
_glowEmitter.explodeDelayMax = explodeDelayMax;
|
|
|
|
Color stage1 = Color.Lerp(color, (new Color(.5f, .1f, .1f, 1f)),.5f);
|
|
stage1.a = .9f;
|
|
|
|
Color stage2 = Color.Lerp(color, (new Color(.6f, .3f, .3f, 1f)),.5f);
|
|
stage2.a = .8f;
|
|
|
|
Color stage3 = Color.Lerp(color, (new Color(.7f, .3f, .3f, 1f)),.5f);
|
|
stage3.a = .5f;
|
|
|
|
Color stage4 = Color.Lerp(color, (new Color(.4f, .3f, .4f, 1f)),.5f);
|
|
stage4.a = .2f;
|
|
|
|
Color stage5 = new Color(.1f, .1f, .4f, 0f);
|
|
|
|
_glowEmitter.colorAnimation[0] = stage1;
|
|
_glowEmitter.colorAnimation[1] = stage2;
|
|
_glowEmitter.colorAnimation[2] = stage3;
|
|
_glowEmitter.colorAnimation[3] = stage4;
|
|
_glowEmitter.colorAnimation[4] = stage5;
|
|
}
|
|
|
|
void Update ()
|
|
{
|
|
//others might be able to do this too... only update themselves before exploding?
|
|
}
|
|
|
|
public void Reset()
|
|
{
|
|
FillMaterials(true);
|
|
on = true;
|
|
size = _baseSize;
|
|
duration = _baseDuration;
|
|
explodeDelayMin = 0f;
|
|
explodeDelayMax = 0f;
|
|
color = _baseColor;
|
|
velocity = _baseVelocity;
|
|
}
|
|
|
|
override public void Explode()
|
|
{
|
|
if (detailThreshold > detail) return;
|
|
|
|
if (on)
|
|
{
|
|
UpdateGlow();
|
|
_glowEmitter.Explode();
|
|
}
|
|
}
|
|
|
|
}
|