Elin Modding Docs Doc
Loading...
Searching...
No Matches
LineBasedLaser.cs
1using System;
2using System.Collections;
3using UnityEngine;
4
5namespace TwoDLaserPack
6{
7 // Token: 0x02000757 RID: 1879
8 public class LineBasedLaser : MonoBehaviour
9 {
10 // Token: 0x14000002 RID: 2
11 // (add) Token: 0x0600365C RID: 13916 RVA: 0x00127720 File Offset: 0x00125920
12 // (remove) Token: 0x0600365D RID: 13917 RVA: 0x00127758 File Offset: 0x00125958
13 public event LineBasedLaser.LaserHitTriggerHandler OnLaserHitTriggered;
14
15 // Token: 0x0600365E RID: 13918 RVA: 0x00127790 File Offset: 0x00125990
16 private void Start()
17 {
18 this.startLaserTextureXScale = this.laserLineRenderer.material.mainTextureScale.x;
19 this.startLaserSegmentLength = this.laserArcSegments;
20 this.laserLineRenderer.sortingLayerName = this.sortLayer;
21 this.laserLineRenderer.sortingOrder = this.sortOrder;
22 this.laserLineRendererArc.sortingLayerName = this.sortLayer;
23 this.laserLineRendererArc.sortingOrder = this.sortOrder;
24 }
25
26 // Token: 0x0600365F RID: 13919 RVA: 0x00127808 File Offset: 0x00125A08
27 private void Awake()
28 {
29 this.hitSparkEmission = this.hitSparkParticleSystem.emission;
30 }
31
32 // Token: 0x06003660 RID: 13920 RVA: 0x0012781B File Offset: 0x00125A1B
33 private void OnEnable()
34 {
35 this.gameObjectCached = base.gameObject;
36 if (this.laserLineRendererArc != null)
37 {
38 this.laserLineRendererArc.SetVertexCount(this.laserArcSegments);
39 }
40 }
41
42 // Token: 0x06003661 RID: 13921 RVA: 0x00127848 File Offset: 0x00125A48
43 private void OnDisable()
44 {
45 }
46
47 // Token: 0x06003662 RID: 13922 RVA: 0x0012784C File Offset: 0x00125A4C
48 private void Update()
49 {
50 if (this.gameObjectCached != null && this.laserActive)
51 {
52 this.laserLineRenderer.material.mainTextureOffset = new Vector2(this.laserTextureOffset, 0f);
53 this.laserTextureOffset -= Time.deltaTime * this.laserTexOffsetSpeed;
54 RaycastHit2D raycastHit2D;
55 if (this.laserRotationEnabled && this.targetGo != null)
56 {
57 Vector3 vector = this.targetGo.transform.position - this.gameObjectCached.transform.position;
58 this.laserAngle = Mathf.Atan2(vector.y, vector.x);
59 if (this.laserAngle < 0f)
60 {
61 this.laserAngle = 6.2831855f + this.laserAngle;
62 }
63 float angle = this.laserAngle * 57.29578f;
64 if (this.lerpLaserRotation)
65 {
66 base.transform.rotation = Quaternion.Slerp(base.transform.rotation, Quaternion.AngleAxis(angle, base.transform.forward), Time.deltaTime * this.turningRate);
67 Vector3 v = base.transform.rotation * Vector3.right;
68 raycastHit2D = Physics2D.Raycast(base.transform.position, v, this.maxLaserRaycastDistance, this.mask);
69 }
70 else
71 {
72 base.transform.rotation = Quaternion.AngleAxis(angle, base.transform.forward);
73 raycastHit2D = Physics2D.Raycast(base.transform.position, vector, this.maxLaserRaycastDistance, this.mask);
74 }
75 }
76 else
77 {
78 raycastHit2D = Physics2D.Raycast(base.transform.position, base.transform.right, this.maxLaserRaycastDistance, this.mask);
79 }
80 if (!this.ignoreCollisions)
81 {
82 if (!(raycastHit2D.collider != null))
83 {
84 this.SetLaserToDefaultLength();
85 return;
86 }
87 this.SetLaserEndToTargetLocation(raycastHit2D);
88 if (!this.waitingForTriggerTime)
89 {
90 base.StartCoroutine(this.HitTrigger(this.collisionTriggerInterval, raycastHit2D));
91 return;
92 }
93 }
94 else
95 {
96 this.SetLaserToDefaultLength();
97 }
98 }
99 }
100
101 // Token: 0x06003663 RID: 13923 RVA: 0x00127A88 File Offset: 0x00125C88
102 private IEnumerator HitTrigger(float triggerInterval, RaycastHit2D hit)
103 {
104 this.waitingForTriggerTime = true;
105 if (this.OnLaserHitTriggered != null)
106 {
107 this.OnLaserHitTriggered(hit);
108 }
109 yield return new WaitForSeconds(triggerInterval);
110 this.waitingForTriggerTime = false;
111 yield break;
112 }
113
114 // Token: 0x06003664 RID: 13924 RVA: 0x00127AA8 File Offset: 0x00125CA8
115 public void SetLaserState(bool enabledStatus)
116 {
117 this.laserActive = enabledStatus;
118 this.laserLineRenderer.enabled = enabledStatus;
119 if (this.laserLineRendererArc != null)
120 {
121 this.laserLineRendererArc.enabled = enabledStatus;
122 }
123 if (this.hitSparkParticleSystem != null)
124 {
125 this.hitSparkEmission.enabled = enabledStatus;
126 }
127 }
128
129 // Token: 0x06003665 RID: 13925 RVA: 0x00127AFC File Offset: 0x00125CFC
130 private void SetLaserEndToTargetLocation(RaycastHit2D hit)
131 {
132 float num = Vector2.Distance(hit.point, this.laserLineRenderer.transform.position);
133 this.laserLineRenderer.SetPosition(1, new Vector2(num, 0f));
134 this.laserTextureXScale = this.startLaserTextureXScale * num;
135 this.laserLineRenderer.material.mainTextureScale = new Vector2(this.laserTextureXScale, 1f);
136 if (this.useArc)
137 {
138 if (!this.laserLineRendererArc.enabled)
139 {
140 this.laserLineRendererArc.enabled = true;
141 }
142 int vertexCount = Mathf.Abs((int)num);
143 this.laserLineRendererArc.SetVertexCount(vertexCount);
144 this.laserArcSegments = vertexCount;
145 this.SetLaserArcVertices(num, true);
146 }
147 else if (this.laserLineRendererArc.enabled)
148 {
149 this.laserLineRendererArc.enabled = false;
150 }
151 if (this.hitSparkParticleSystem != null)
152 {
153 this.hitSparkParticleSystem.transform.position = hit.point;
154 this.hitSparkEmission.enabled = true;
155 }
156 }
157
158 // Token: 0x06003666 RID: 13926 RVA: 0x00127C0C File Offset: 0x00125E0C
159 private void SetLaserToDefaultLength()
160 {
161 this.laserLineRenderer.SetPosition(1, new Vector2((float)this.laserArcSegments, 0f));
162 this.laserTextureXScale = this.startLaserTextureXScale * (float)this.laserArcSegments;
163 this.laserLineRenderer.material.mainTextureScale = new Vector2(this.laserTextureXScale, 1f);
164 if (this.useArc)
165 {
166 if (!this.laserLineRendererArc.enabled)
167 {
168 this.laserLineRendererArc.enabled = true;
169 }
170 this.laserLineRendererArc.SetVertexCount(this.startLaserSegmentLength);
171 this.laserArcSegments = this.startLaserSegmentLength;
172 this.SetLaserArcVertices(0f, false);
173 }
174 else
175 {
176 if (this.laserLineRendererArc.enabled)
177 {
178 this.laserLineRendererArc.enabled = false;
179 }
180 this.laserLineRendererArc.SetVertexCount(this.startLaserSegmentLength);
181 this.laserArcSegments = this.startLaserSegmentLength;
182 }
183 if (this.hitSparkParticleSystem != null)
184 {
185 this.hitSparkEmission.enabled = false;
186 this.hitSparkParticleSystem.transform.position = new Vector2((float)this.laserArcSegments, base.transform.position.y);
187 }
188 }
189
190 // Token: 0x06003667 RID: 13927 RVA: 0x00127D3C File Offset: 0x00125F3C
191 private void SetLaserArcVertices(float distancePoint, bool useHitPoint)
192 {
193 for (int i = 1; i < this.laserArcSegments; i++)
194 {
195 float y = Mathf.Clamp(Mathf.Sin((float)i + Time.time * UnityEngine.Random.Range(0.5f, 1.3f)), this.laserArcMaxYDown, this.laserArcMaxYUp);
196 Vector2 v = new Vector2((float)i * 1.2f, y);
197 if (useHitPoint && i == this.laserArcSegments - 1)
198 {
199 this.laserLineRendererArc.SetPosition(i, new Vector2(distancePoint, 0f));
200 }
201 else
202 {
203 this.laserLineRendererArc.SetPosition(i, v);
204 }
205 }
206 }
207
208 // Token: 0x04001CC7 RID: 7367
209 public LineRenderer laserLineRendererArc;
210
211 // Token: 0x04001CC8 RID: 7368
212 public LineRenderer laserLineRenderer;
213
214 // Token: 0x04001CC9 RID: 7369
215 public int laserArcSegments = 20;
216
217 // Token: 0x04001CCA RID: 7370
218 public bool laserActive;
219
220 // Token: 0x04001CCB RID: 7371
221 public bool ignoreCollisions;
222
223 // Token: 0x04001CCC RID: 7372
224 public GameObject targetGo;
225
226 // Token: 0x04001CCD RID: 7373
227 public float laserTexOffsetSpeed = 1f;
228
229 // Token: 0x04001CCE RID: 7374
230 public ParticleSystem hitSparkParticleSystem;
231
232 // Token: 0x04001CCF RID: 7375
233 public float laserArcMaxYDown;
234
235 // Token: 0x04001CD0 RID: 7376
236 public float laserArcMaxYUp;
237
238 // Token: 0x04001CD1 RID: 7377
239 public float maxLaserRaycastDistance = 20f;
240
241 // Token: 0x04001CD2 RID: 7378
242 public bool laserRotationEnabled;
243
244 // Token: 0x04001CD3 RID: 7379
245 public bool lerpLaserRotation;
246
247 // Token: 0x04001CD4 RID: 7380
248 public float turningRate = 3f;
249
250 // Token: 0x04001CD5 RID: 7381
251 public float collisionTriggerInterval = 0.25f;
252
253 // Token: 0x04001CD6 RID: 7382
254 public LayerMask mask;
255
256 // Token: 0x04001CD7 RID: 7383
257 public string sortLayer = "Default";
258
259 // Token: 0x04001CD8 RID: 7384
260 public int sortOrder;
261
262 // Token: 0x04001CDA RID: 7386
263 public bool useArc;
264
265 // Token: 0x04001CDB RID: 7387
266 private GameObject gameObjectCached;
267
268 // Token: 0x04001CDC RID: 7388
269 private float laserAngle;
270
271 // Token: 0x04001CDD RID: 7389
272 private float laserTextureOffset;
273
274 // Token: 0x04001CDE RID: 7390
275 private float laserTextureXScale;
276
277 // Token: 0x04001CDF RID: 7391
278 private float startLaserTextureXScale;
279
280 // Token: 0x04001CE0 RID: 7392
281 private int startLaserSegmentLength;
282
283 // Token: 0x04001CE1 RID: 7393
284 private bool waitingForTriggerTime;
285
286 // Token: 0x04001CE2 RID: 7394
287 private ParticleSystem.EmissionModule hitSparkEmission;
288
289 // Token: 0x02000C46 RID: 3142
290 // (Invoke) Token: 0x060046D6 RID: 18134
291 public delegate void LaserHitTriggerHandler(RaycastHit2D hitInfo);
292 }
293}