- DetonatorSmoke.cs
- System /
- Detonator Explosion Framework /
- Assets /
- project /
1 using UnityEngine;
2 using System.Collections;
3
4 [RequireComponent (typeof (Detonator))]
5 [AddComponentMenu("Detonator/Smoke")]
6 public class DetonatorSmoke : DetonatorComponent
7 {
8 private const float _baseSize = 1f;
9 private const float _baseDuration = 8f;
10 private Color _baseColor = new Color(.5f, .5f, .5f, .5f);
11 private const float _baseDamping = 0.1300004f;
12
13 private float _scaledDuration;
14
15 private GameObject _smokeA;
16 private DetonatorBurstEmitter _smokeAEmitter;
17 public Material smokeAMaterial;
18
19 private GameObject _smokeB;
20 private DetonatorBurstEmitter _smokeBEmitter;
21 public Material smokeBMaterial;
22
23 public bool drawSmokeA = true;
24 public bool drawSmokeB = true;
25
26 override public void Init()
27 {
28 FillMaterials(false);
29 BuildSmokeA();
30 BuildSmokeB();
31 }
32
33 public void FillMaterials(bool wipe)
34 {
35 if (!smokeAMaterial || wipe)
36 {
37 smokeAMaterial = MyDetonator().smokeAMaterial;
38 }
39 if (!smokeBMaterial || wipe)
40 {
41 smokeBMaterial = MyDetonator().smokeBMaterial;
42 }
43 }
44
45 public void BuildSmokeA()
46 {
47 _smokeA = new GameObject("SmokeA");
48 _smokeAEmitter = (DetonatorBurstEmitter)_smokeA.AddComponent<DetonatorBurstEmitter>();
49 _smokeA.transform.parent = this.transform;
50 _smokeA.transform.localPosition = localPosition;
51 _smokeA.transform.localRotation = Quaternion.identity;
52 _smokeAEmitter.material = smokeAMaterial;
53 _smokeAEmitter.exponentialGrowth = false;
54 _smokeAEmitter.sizeGrow = 0.095f;
55 _smokeAEmitter.useWorldSpace = MyDetonator().useWorldSpace;
56 _smokeAEmitter.upwardsBias = MyDetonator().upwardsBias;
57 }
58
59 public void UpdateSmokeA()
60 {
61 _smokeA.transform.localPosition = Vector3.Scale(localPosition,(new Vector3(size, size, size)));
62
63 //move slightly away from the main camera so it sorts properly
64 _smokeA.transform.LookAt(Camera.main.transform);
65 _smokeA.transform.localPosition = -(Vector3.forward * -1.5f);
66
67 _smokeAEmitter.color = color;
68 _smokeAEmitter.duration = duration * .5f;
69 _smokeAEmitter.durationVariation = 0f;
70 _smokeAEmitter.timeScale = timeScale;
71 _smokeAEmitter.count = 4f;
72 _smokeAEmitter.particleSize = 25f;
73 _smokeAEmitter.sizeVariation = 3f;
74 _smokeAEmitter.velocity = velocity;
75 _smokeAEmitter.startRadius = 10f;
76 _smokeAEmitter.size = size;
77 _smokeAEmitter.useExplicitColorAnimation = true;
78 _smokeAEmitter.explodeDelayMin = explodeDelayMin;
79 _smokeAEmitter.explodeDelayMax = explodeDelayMax;
80
81 Color color1 = new Color(.2f, .2f, .2f, .4f);
82 Color color2 = new Color(.2f, .2f, .2f, .7f);
83 Color color3 = new Color(.2f, .2f, .2f, .4f);
84 Color color4 = new Color(.2f, .2f, .2f, 0f);
85
86 _smokeAEmitter.colorAnimation[0] = color1;
87 _smokeAEmitter.colorAnimation[1] = color2;
88 _smokeAEmitter.colorAnimation[2] = color2;
89 _smokeAEmitter.colorAnimation[3] = color3;
90 _smokeAEmitter.colorAnimation[4] = color4;
91 }
92
93 public void BuildSmokeB()
94 {
95 _smokeB = new GameObject("SmokeB");
96 _smokeBEmitter = (DetonatorBurstEmitter)_smokeB.AddComponent<DetonatorBurstEmitter>();
97 _smokeB.transform.parent = this.transform;
98 _smokeB.transform.localPosition = localPosition;
99 _smokeB.transform.localRotation = Quaternion.identity;
100 _smokeBEmitter.material = smokeBMaterial;
101 _smokeBEmitter.exponentialGrowth = false;
102 _smokeBEmitter.sizeGrow = 0.095f;
103 _smokeBEmitter.useWorldSpace = MyDetonator().useWorldSpace;
104 _smokeBEmitter.upwardsBias = MyDetonator().upwardsBias;
105 }
106
107 public void UpdateSmokeB()
108 {
109 _smokeB.transform.localPosition = Vector3.Scale(localPosition,(new Vector3(size, size, size)));
110
111 //move slightly away from the main camera so it sorts properly
112 _smokeB.transform.LookAt(Camera.main.transform);
113 _smokeB.transform.localPosition = -(Vector3.forward * -1f);
114
115 _smokeBEmitter.color = color;
116 _smokeBEmitter.duration = duration * .5f;
117 _smokeBEmitter.durationVariation = 0f;
118 _smokeBEmitter.count = 2f;
119 _smokeBEmitter.particleSize = 25f;
120 _smokeBEmitter.sizeVariation = 3f;
121 _smokeBEmitter.velocity = velocity;
122 _smokeBEmitter.startRadius = 10f;
123 _smokeBEmitter.size = size;
124 _smokeBEmitter.useExplicitColorAnimation = true;
125 _smokeBEmitter.explodeDelayMin = explodeDelayMin;
126 _smokeBEmitter.explodeDelayMax = explodeDelayMax;
127
128 Color color1 = new Color(.2f, .2f, .2f, .4f);
129 Color color2 = new Color(.2f, .2f, .2f, .7f);
130 Color color3 = new Color(.2f, .2f, .2f, .4f);
131 Color color4 = new Color(.2f, .2f, .2f, 0f);
132
133 _smokeBEmitter.colorAnimation[0] = color1;
134 _smokeBEmitter.colorAnimation[1] = color2;
135 _smokeBEmitter.colorAnimation[2] = color2;
136 _smokeBEmitter.colorAnimation[3] = color3;
137 _smokeBEmitter.colorAnimation[4] = color4;
138 }
139
140 public void Reset()
141 {
142 FillMaterials(true);
143 on = true;
144 size = _baseSize;
145 duration = _baseDuration;
146 explodeDelayMin = 0f;
147 explodeDelayMax = 0f;
148 color = _baseColor;
149 velocity = new Vector3(3f,3f,3f);
150 }
151
152 override public void Explode()
153 {
154 if (detailThreshold > detail) return;
155
156 if (on)
157 {
158 UpdateSmokeA();
159 UpdateSmokeB();
160 if (drawSmokeA) _smokeAEmitter.Explode();
161 if (drawSmokeB) _smokeBEmitter.Explode();
162 }
163 }
164
165 }
2 using System.Collections;
3
4 [RequireComponent (typeof (Detonator))]
5 [AddComponentMenu("Detonator/Smoke")]
6 public class DetonatorSmoke : DetonatorComponent
7 {
8 private const float _baseSize = 1f;
9 private const float _baseDuration = 8f;
10 private Color _baseColor = new Color(.5f, .5f, .5f, .5f);
11 private const float _baseDamping = 0.1300004f;
12
13 private float _scaledDuration;
14
15 private GameObject _smokeA;
16 private DetonatorBurstEmitter _smokeAEmitter;
17 public Material smokeAMaterial;
18
19 private GameObject _smokeB;
20 private DetonatorBurstEmitter _smokeBEmitter;
21 public Material smokeBMaterial;
22
23 public bool drawSmokeA = true;
24 public bool drawSmokeB = true;
25
26 override public void Init()
27 {
28 FillMaterials(false);
29 BuildSmokeA();
30 BuildSmokeB();
31 }
32
33 public void FillMaterials(bool wipe)
34 {
35 if (!smokeAMaterial || wipe)
36 {
37 smokeAMaterial = MyDetonator().smokeAMaterial;
38 }
39 if (!smokeBMaterial || wipe)
40 {
41 smokeBMaterial = MyDetonator().smokeBMaterial;
42 }
43 }
44
45 public void BuildSmokeA()
46 {
47 _smokeA = new GameObject("SmokeA");
48 _smokeAEmitter = (DetonatorBurstEmitter)_smokeA.AddComponent<DetonatorBurstEmitter>();
49 _smokeA.transform.parent = this.transform;
50 _smokeA.transform.localPosition = localPosition;
51 _smokeA.transform.localRotation = Quaternion.identity;
52 _smokeAEmitter.material = smokeAMaterial;
53 _smokeAEmitter.exponentialGrowth = false;
54 _smokeAEmitter.sizeGrow = 0.095f;
55 _smokeAEmitter.useWorldSpace = MyDetonator().useWorldSpace;
56 _smokeAEmitter.upwardsBias = MyDetonator().upwardsBias;
57 }
58
59 public void UpdateSmokeA()
60 {
61 _smokeA.transform.localPosition = Vector3.Scale(localPosition,(new Vector3(size, size, size)));
62
63 //move slightly away from the main camera so it sorts properly
64 _smokeA.transform.LookAt(Camera.main.transform);
65 _smokeA.transform.localPosition = -(Vector3.forward * -1.5f);
66
67 _smokeAEmitter.color = color;
68 _smokeAEmitter.duration = duration * .5f;
69 _smokeAEmitter.durationVariation = 0f;
70 _smokeAEmitter.timeScale = timeScale;
71 _smokeAEmitter.count = 4f;
72 _smokeAEmitter.particleSize = 25f;
73 _smokeAEmitter.sizeVariation = 3f;
74 _smokeAEmitter.velocity = velocity;
75 _smokeAEmitter.startRadius = 10f;
76 _smokeAEmitter.size = size;
77 _smokeAEmitter.useExplicitColorAnimation = true;
78 _smokeAEmitter.explodeDelayMin = explodeDelayMin;
79 _smokeAEmitter.explodeDelayMax = explodeDelayMax;
80
81 Color color1 = new Color(.2f, .2f, .2f, .4f);
82 Color color2 = new Color(.2f, .2f, .2f, .7f);
83 Color color3 = new Color(.2f, .2f, .2f, .4f);
84 Color color4 = new Color(.2f, .2f, .2f, 0f);
85
86 _smokeAEmitter.colorAnimation[0] = color1;
87 _smokeAEmitter.colorAnimation[1] = color2;
88 _smokeAEmitter.colorAnimation[2] = color2;
89 _smokeAEmitter.colorAnimation[3] = color3;
90 _smokeAEmitter.colorAnimation[4] = color4;
91 }
92
93 public void BuildSmokeB()
94 {
95 _smokeB = new GameObject("SmokeB");
96 _smokeBEmitter = (DetonatorBurstEmitter)_smokeB.AddComponent<DetonatorBurstEmitter>();
97 _smokeB.transform.parent = this.transform;
98 _smokeB.transform.localPosition = localPosition;
99 _smokeB.transform.localRotation = Quaternion.identity;
100 _smokeBEmitter.material = smokeBMaterial;
101 _smokeBEmitter.exponentialGrowth = false;
102 _smokeBEmitter.sizeGrow = 0.095f;
103 _smokeBEmitter.useWorldSpace = MyDetonator().useWorldSpace;
104 _smokeBEmitter.upwardsBias = MyDetonator().upwardsBias;
105 }
106
107 public void UpdateSmokeB()
108 {
109 _smokeB.transform.localPosition = Vector3.Scale(localPosition,(new Vector3(size, size, size)));
110
111 //move slightly away from the main camera so it sorts properly
112 _smokeB.transform.LookAt(Camera.main.transform);
113 _smokeB.transform.localPosition = -(Vector3.forward * -1f);
114
115 _smokeBEmitter.color = color;
116 _smokeBEmitter.duration = duration * .5f;
117 _smokeBEmitter.durationVariation = 0f;
118 _smokeBEmitter.count = 2f;
119 _smokeBEmitter.particleSize = 25f;
120 _smokeBEmitter.sizeVariation = 3f;
121 _smokeBEmitter.velocity = velocity;
122 _smokeBEmitter.startRadius = 10f;
123 _smokeBEmitter.size = size;
124 _smokeBEmitter.useExplicitColorAnimation = true;
125 _smokeBEmitter.explodeDelayMin = explodeDelayMin;
126 _smokeBEmitter.explodeDelayMax = explodeDelayMax;
127
128 Color color1 = new Color(.2f, .2f, .2f, .4f);
129 Color color2 = new Color(.2f, .2f, .2f, .7f);
130 Color color3 = new Color(.2f, .2f, .2f, .4f);
131 Color color4 = new Color(.2f, .2f, .2f, 0f);
132
133 _smokeBEmitter.colorAnimation[0] = color1;
134 _smokeBEmitter.colorAnimation[1] = color2;
135 _smokeBEmitter.colorAnimation[2] = color2;
136 _smokeBEmitter.colorAnimation[3] = color3;
137 _smokeBEmitter.colorAnimation[4] = color4;
138 }
139
140 public void Reset()
141 {
142 FillMaterials(true);
143 on = true;
144 size = _baseSize;
145 duration = _baseDuration;
146 explodeDelayMin = 0f;
147 explodeDelayMax = 0f;
148 color = _baseColor;
149 velocity = new Vector3(3f,3f,3f);
150 }
151
152 override public void Explode()
153 {
154 if (detailThreshold > detail) return;
155
156 if (on)
157 {
158 UpdateSmokeA();
159 UpdateSmokeB();
160 if (drawSmokeA) _smokeAEmitter.Explode();
161 if (drawSmokeB) _smokeBEmitter.Explode();
162 }
163 }
164
165 }