test
testing
This commit is contained in:
@@ -0,0 +1,103 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
|
||||
[RequireComponent (typeof (Detonator))]
|
||||
[AddComponentMenu("Detonator/Sparks")]
|
||||
public class DetonatorSparks : DetonatorComponent
|
||||
{
|
||||
private float _baseSize = 1f;
|
||||
private float _baseDuration = 4f;
|
||||
private Vector3 _baseVelocity = new Vector3(155f, 155f, 155f);
|
||||
private Color _baseColor = Color.white;
|
||||
// private float _baseDamping = 0.185f;
|
||||
private Vector3 _baseForce = Physics.gravity;
|
||||
private float _scaledDuration;
|
||||
|
||||
private GameObject _sparks;
|
||||
private DetonatorBurstEmitter _sparksEmitter;
|
||||
public Material sparksMaterial;
|
||||
|
||||
override public void Init()
|
||||
{
|
||||
//make sure there are materials at all
|
||||
FillMaterials(false);
|
||||
BuildSparks();
|
||||
}
|
||||
|
||||
//if materials are empty fill them with defaults
|
||||
public void FillMaterials(bool wipe)
|
||||
{
|
||||
if (!sparksMaterial || wipe)
|
||||
{
|
||||
sparksMaterial = MyDetonator().sparksMaterial;
|
||||
}
|
||||
}
|
||||
|
||||
//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 BuildSparks()
|
||||
{
|
||||
_sparks = new GameObject("Sparks");
|
||||
_sparksEmitter = (DetonatorBurstEmitter)_sparks.AddComponent("DetonatorBurstEmitter");
|
||||
_sparks.transform.parent = this.transform;
|
||||
_sparks.transform.localPosition = localPosition;
|
||||
_sparks.transform.localRotation = Quaternion.identity;
|
||||
_sparksEmitter.material = sparksMaterial;
|
||||
_sparksEmitter.force = Physics.gravity / 3; //don't fall fast - these are sparks
|
||||
_sparksEmitter.useExplicitColorAnimation = false;
|
||||
_sparksEmitter.useWorldSpace = MyDetonator().useWorldSpace;
|
||||
_sparksEmitter.upwardsBias = MyDetonator().upwardsBias;
|
||||
}
|
||||
|
||||
public void UpdateSparks()
|
||||
{
|
||||
_scaledDuration = (duration * timeScale);
|
||||
_sparksEmitter.color = color;
|
||||
_sparksEmitter.duration = _scaledDuration/4;
|
||||
_sparksEmitter.durationVariation = _scaledDuration;
|
||||
_sparksEmitter.count = (int)(detail * 50f);
|
||||
_sparksEmitter.particleSize = .5f;
|
||||
_sparksEmitter.sizeVariation = .25f;
|
||||
|
||||
//get wider as upwardsBias goes up - counterintuitive, but right in this case?
|
||||
if (_sparksEmitter.upwardsBias > 0f)
|
||||
{
|
||||
_sparksEmitter.velocity = new Vector3(
|
||||
(velocity.x / Mathf.Log(_sparksEmitter.upwardsBias)),
|
||||
(velocity.y * Mathf.Log(_sparksEmitter.upwardsBias)),
|
||||
(velocity.z / Mathf.Log(_sparksEmitter.upwardsBias)));
|
||||
}
|
||||
else
|
||||
{
|
||||
_sparksEmitter.velocity = this.velocity;
|
||||
}
|
||||
|
||||
_sparksEmitter.startRadius = 0f;
|
||||
_sparksEmitter.size = size;
|
||||
_sparksEmitter.explodeDelayMin = explodeDelayMin;
|
||||
_sparksEmitter.explodeDelayMax = explodeDelayMax;
|
||||
}
|
||||
|
||||
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)
|
||||
{
|
||||
UpdateSparks();
|
||||
_sparksEmitter.Explode();
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user