Elin Decompiled Documentation EA 23.102 Nightly
Loading...
Searching...
No Matches
HoardActor.cs
Go to the documentation of this file.
1using System;
2using System.Collections.Generic;
3using System.Linq;
4using UnityEngine;
5
6public class HoardActor : EMono
7{
8 [Serializable]
9 public class BG
10 {
11 public Sprite sprite;
12
13 public float reflection;
14
15 public float shadow;
16 }
17
18 public Camera cam;
19
20 public Vector3 posCenter;
21
22 public float radiusX;
23
24 public float radiusY;
25
26 public float sizeMod;
27
28 public float sizeModCircle;
29
30 public float reflectMod;
31
32 public new bool debug;
33
34 public List<CollectibleActor> actors;
35
36 public List<RigidUpdate> updates;
37
39
41
43
44 public AnimationCurve curveMani;
45
46 public SpriteRenderer srBG;
47
48 public SpriteRenderer srReflection;
49
50 public ParticleSystem psExplode;
51
52 public BG[] bgs;
53
55
57
58 private bool angryEhe;
59
60 private float eheTimer = -5f;
61
62 private int eheCount;
63
64 public float groundY = -4f;
65
66 public float shdowLimitY = 1f;
67
68 public float alphaFix1 = 0.3f;
69
70 public float alphaFix2 = 0.5f;
71
72 public float alphaFix4 = 0.15f;
73
74 public float maxAplha = 0.6f;
75
76 public float sizeFixY = -0.1f;
77
79
80 public BG bg => bgs[hoard.bg];
81
82 public void Activate()
83 {
85 hoard.score = 0;
86 RefreshBG();
88 RigidUpdate.leftX = -5f;
89 RigidUpdate.rightX = 5f;
90 if (actors.Count > 0)
91 {
92 Clear();
93 }
94 angryEhe = EMono.rnd(2) == 0;
95 Vector3 zero = Vector3.zero;
96 int num = 0;
97 foreach (Hoard.Item value in hoard.items.Values)
98 {
99 num += value.show;
100 }
101 IList<Hoard.Item> list = new List<Hoard.Item>(hoard.items.Values).Shuffle();
102 string text = hoard.mode.ToString();
103 foreach (Hoard.Item item in list)
104 {
105 string filter = item.Source.filter;
106 if (hoard.mode != 0 && !filter.IsEmpty() && filter != text)
107 {
108 continue;
109 }
110 bool flag = item.Source.tag.Contains("god");
111 int num2 = item.show;
112 if (item.random)
113 {
114 num2 = Rand.rnd(num2 + 1);
115 if (num2 > 2 && num2 < 50)
116 {
117 num2 = Rand.rnd(num2 + 1) + 1;
118 }
119 }
120 if (num2 == 0)
121 {
122 continue;
123 }
124 GameObject actor = hoard.GetActor(item.id);
125 CollectibleActor component = actor.GetComponent<CollectibleActor>();
126 SpriteRenderer component2 = actor.GetComponent<SpriteRenderer>();
127 Vector3 extents = component2.bounds.extents;
128 int num3 = (int)(extents.x * extents.y * 10f);
129 if (num3 > 5)
130 {
131 num3 = 5;
132 }
133 float y = extents.y;
134 float z = (flag ? (-0.1f) : 0f);
135 bool hasSound = !item.Source.sound.IsEmpty();
136 if (debug)
137 {
138 string id2 = item.id;
139 Vector3 vector = extents;
140 Debug.Log(id2 + "/" + vector.ToString());
141 }
142 float num4 = Mathf.Sqrt(actor.GetComponent<Rigidbody2D>().mass);
143 if (num4 < 0.7f)
144 {
145 num4 = 0.7f;
146 }
147 BoxCollider2D component3 = actor.GetComponent<BoxCollider2D>();
148 if ((bool)component3)
149 {
150 component3.size = extents * sizeMod;
151 }
152 else
153 {
154 actor.GetComponent<CircleCollider2D>().radius = (extents.x + extents.y) * sizeModCircle * sizeModCircle;
155 }
156 switch (item.id)
157 {
158 case "renton":
159 renton = component;
160 if (!angryEhe)
161 {
162 Util.Instantiate<SpriteRenderer>("UI/Layer/Hoard/Effect/sister", component);
163 component.paired = true;
164 MakeSteady(component);
165 }
166 break;
167 case "ehe":
168 ehe = component;
169 break;
170 case "sis":
171 if (!hoard.voice)
172 {
173 hasSound = false;
174 }
175 break;
176 case "chicken":
177 actor.AddComponent<RigidUpdateSound>();
178 break;
179 case "mine":
180 case "mine_dog":
181 case "mine_rock":
182 actor.AddComponent<RigidExplode>().particle = psExplode;
183 break;
184 case "mani":
185 {
186 if (EMono.rnd(2) == 0)
187 {
188 actor.AddComponent<RigidAngle>();
189 }
190 if (EMono.rnd(2) == 0)
191 {
192 component2.material = matMani;
193 UnityEngine.Object.DestroyImmediate(actor.GetComponent<RigidExplode>());
194 break;
195 }
196 RigidExplode rigidExplode2 = actor.AddComponent<RigidExplode>();
197 rigidExplode2.particle = psExplode;
198 rigidExplode2.radius *= 10f;
199 rigidExplode2.force *= 10f;
200 rigidExplode2.chance = 0.1f;
201 rigidExplode2.intervalMin *= 2f;
202 break;
203 }
204 case "pet_mani":
205 {
206 RigidExplode rigidExplode = actor.AddComponent<RigidExplode>();
207 rigidExplode.particle = psExplode;
208 rigidExplode.chance = 0.1f;
209 rigidExplode.intervalMin *= 2f;
210 break;
211 }
212 case "tentacle":
213 case "tentacle2":
214 case "tentacle3":
215 case "tentacle4":
216 z = -0.05f;
217 break;
218 case "hat_feather":
219 case "hat_magic":
220 case "bat":
221 actor.AddComponent<RigidAngle>();
222 break;
223 }
224 if (item.floating)
225 {
226 actor.AddComponent<RigidFloat>();
227 }
228 component.updates = actor.GetComponents<RigidUpdate>();
229 for (int i = 0; i < num2; i++)
230 {
231 GameObject obj = ((i == 0) ? actor : UnityEngine.Object.Instantiate(actor));
232 float num5 = radiusX;
233 zero.x = posCenter.x + UnityEngine.Random.Range(0f - num5, num5);
234 zero.y = posCenter.y + UnityEngine.Random.Range(0f, radiusY + 0.1f * (float)num) / num4;
235 zero.z = z;
236 obj.transform.position = zero;
237 CollectibleActor component4 = obj.GetComponent<CollectibleActor>();
238 Rigidbody2D component5 = obj.GetComponent<Rigidbody2D>();
239 component4.item = item;
240 component4.hasSound = hasSound;
241 component4.rb = component5;
242 actors.Add(component4);
243 if (component4.updates.Length != 0)
244 {
245 RigidUpdate[] array = component4.updates;
246 foreach (RigidUpdate rigidUpdate in array)
247 {
248 rigidUpdate.rb = component5;
249 updates.Add(rigidUpdate);
250 }
251 }
252 component4.shadow = num3;
253 component4.shadowY = y;
254 }
255 }
256 actors.Shuffle();
257 IEnumerable<CollectibleActor> enumerable = actors.Where((CollectibleActor a) => a.item.Source.tag.Contains("god"));
258 IEnumerable<CollectibleActor> enumerable2 = actors.Where((CollectibleActor a) => a.item.Source.tag.Contains("chara"));
259 foreach (CollectibleActor actor2 in actors)
260 {
261 if (actor2.paired)
262 {
263 continue;
264 }
265 switch (actor2.item.id)
266 {
267 case "jure":
268 if (FindPair(actor2, "odina", 0.3f))
269 {
270 MakeSteady(actor2);
271 continue;
272 }
273 break;
274 case "itz":
275 if (EMono.rnd(2) == 0)
276 {
277 foreach (CollectibleActor item2 in enumerable2)
278 {
279 if (!item2.paired && !(item2 == actor2) && item2.item.Source.tag.Contains("fem"))
280 {
281 MakePair(actor2, item2, new Vector3(0.02f, 0f, -0.01f));
282 item2.transform.localEulerAngles = new Vector3(0f, 0f, -90f);
283 item2.GetComponent<SpriteRenderer>().flipX = true;
284 MakeSteady(actor2);
285 break;
286 }
287 }
288 if (actor2.paired)
289 {
290 continue;
291 }
292 }
293 actor2.GetComponentInChildren<ParticleSystem>().SetActive(enable: false);
294 break;
295 case "qulu":
296 if (FindPair(actor2, "dragon", 0.3f))
297 {
298 MakeSteady(actor2);
299 continue;
300 }
301 break;
302 case "dragon":
303 if (FindPair(actor2, "qulu", 0.3f))
304 {
305 MakeSteady(actor2);
306 continue;
307 }
308 break;
309 case "tentacle":
310 case "tentacle2":
311 case "tentacle3":
312 case "tentacle4":
313 foreach (CollectibleActor item3 in enumerable2)
314 {
315 if (!item3.paired && !(item3 == actor2))
316 {
317 MakePair(actor2, item3, new Vector3(0f, 0.25f, -0.01f));
318 actor2.GetComponent<SpriteAnimation>().link = item3.transform;
319 if (EMono.rnd(2) == 0)
320 {
321 item3.GetComponent<SpriteRenderer>().flipX = true;
322 }
323 if (EMono.rnd(2) == 0)
324 {
325 actor2.transform.SetLocalScaleX(actor2.transform.localScale.x * -1f);
326 }
327 break;
328 }
329 }
330 continue;
331 case "lar":
332 if (FindPair(actor2, "lomi", 0.15f))
333 {
334 MakeSteady(actor2);
335 }
336 continue;
337 case "lomi":
338 if (FindPair(actor2, "lar", 0.15f))
339 {
340 MakeSteady(actor2);
341 }
342 continue;
343 case "vesda":
344 DisableParticle(actor2, 50);
345 foreach (CollectibleActor item4 in enumerable2)
346 {
347 if (!item4.paired && !(item4 == actor2))
348 {
349 MakePair(actor2, item4, new Vector3(0f, -0.25f, -0.01f));
350 item4.transform.localEulerAngles = new Vector3(0f, 0f, 90f);
351 item4.GetComponent<SpriteRenderer>().flipX = false;
352 break;
353 }
354 }
355 continue;
356 case "lulu":
357 DisableParticle(actor2, 50);
358 break;
359 }
360 if (EMono.rnd(2) == 0 || !actor2.item.Source.tag.Contains("pair"))
361 {
362 continue;
363 }
364 foreach (CollectibleActor item5 in enumerable)
365 {
366 if (!item5.paired && !(item5 == actor2))
367 {
368 MakePair(actor2, item5);
369 break;
370 }
371 }
372 }
373 foreach (CollectibleActor actor3 in actors)
374 {
375 if (!actor3.paired && EMono.rnd(3) != 0)
376 {
377 actor3.GetComponent<SpriteRenderer>().flipX = true;
378 }
379 }
380 static void DisableParticle(CollectibleActor a, int chance)
381 {
382 if (EMono.rnd(100) < chance)
383 {
384 ParticleSystem[] componentsInChildren = a.GetComponentsInChildren<ParticleSystem>();
385 for (int k = 0; k < componentsInChildren.Length; k++)
386 {
387 componentsInChildren[k].SetActive(enable: false);
388 }
389 }
390 }
391 bool FindPair(CollectibleActor taker, string id, float dist)
392 {
393 foreach (CollectibleActor actor4 in actors)
394 {
395 if (actor4.item.id == id && !actor4.paired)
396 {
397 MakePair(taker, actor4, dist);
398 return true;
399 }
400 }
401 return false;
402 }
403 }
404
405 public void RefreshZoom()
406 {
408 {
409 cam.orthographicSize = (float)Screen.height * 0.5f * 0.01f * 2f;
410 }
411 else
412 {
413 cam.orthographicSize = 5f;
414 }
415 }
416
418 {
419 (a.rb ?? a.GetComponent<Rigidbody2D>()).freezeRotation = true;
420 }
421
422 public void MakePair(CollectibleActor a, CollectibleActor b, float dist = 0.26f)
423 {
424 float z = 0.01f;
425 if (a.item.id != "lulu")
426 {
427 z = ((Rand.rnd(2) == 0) ? 0.01f : (-0.01f));
428 }
429 MakePair(a, b, new Vector3(dist, 0f, z));
430 }
431
432 public void MakePair(CollectibleActor a, CollectibleActor b, Vector3 v)
433 {
434 b.transform.SetParent(a.transform, worldPositionStays: true);
435 b.transform.localPosition = v;
436 b.GetComponent<SpriteRenderer>().flipX = true;
437 b.rb.isKinematic = true;
438 b.GetComponent<Collider2D>().enabled = false;
439 a.paired = (b.paired = true);
440 }
441
442 public void RefreshBG()
443 {
444 SpriteRenderer spriteRenderer = srBG;
445 Sprite sprite2 = (srReflection.sprite = bg.sprite);
446 spriteRenderer.sprite = sprite2;
447 matReflection.SetColor("_GrabColor", new Color(1f, 1f, 1f, bg.reflection * (0.01f * (float)hoard.reflection)));
448 srReflection.SetActive(hoard.reflection > 0);
449 }
450
451 public void Clear()
452 {
453 foreach (CollectibleActor actor in actors)
454 {
455 if ((bool)actor && (bool)actor.gameObject)
456 {
457 UnityEngine.Object.DestroyImmediate(actor.gameObject);
458 }
459 }
460 actors.Clear();
461 updates.Clear();
462 }
463
464 private void Update()
465 {
466 RefreshZoom();
467 matMani.SetFloat("_Space", curveMani.Evaluate(Time.timeSinceLevelLoad % 10f / 10f));
468 float value = ((cam.orthographicSize <= 5f) ? 0f : ((cam.orthographicSize - 5f) * reflectMod));
469 matReflection.SetFloat("_Offset", value);
470 EMono.scene.transAudio.position = new Vector3(0f, groundY, 0f);
471 if (!hoard.shadow)
472 {
473 return;
474 }
475 float shadow = bg.shadow;
476 foreach (CollectibleActor actor in actors)
477 {
478 if (!actor.active)
479 {
480 continue;
481 }
482 float num = (actor.transform.position.y - alphaFix1) * alphaFix2;
483 num = 1f - num * num * alphaFix4;
484 if (!(num < 0f))
485 {
486 if (num > maxAplha)
487 {
488 num = maxAplha;
489 }
490 num *= shadow;
491 float num2 = (actor.transform.position.y + groundY) * 0.05f;
492 if (num2 > shdowLimitY)
493 {
494 num2 = shdowLimitY;
495 }
496 passShadow.Add(actor.transform.position.x, actor.shadowY * sizeFixY + groundY + num2, 0.8f, (int)(num * 1000f) * 1000 + actor.shadow);
497 }
498 }
500 }
501
502 private void FixedUpdate()
503 {
504 float num = (RigidUpdate.delta = Time.fixedDeltaTime);
505 if (angryEhe && (bool)renton && (bool)ehe && !ehe.rb.isKinematic && (Mathf.Abs(renton.transform.position.x - ehe.transform.position.x) > 0.6f || renton.transform.position.y > ehe.transform.position.y))
506 {
507 eheTimer += num;
508 if (eheTimer > 2f)
509 {
510 ehe.rb.position = new Vector3(renton.transform.position.x, renton.transform.position.y + 4f, ehe.transform.position.z);
511 ehe.PlaySound("teleport");
512 eheTimer = 0f;
513 eheCount++;
514 if (eheCount > 5)
515 {
516 renton.rb.constraints = RigidbodyConstraints2D.FreezePositionX;
517 renton.rb.gravityScale = 3f;
518 }
519 }
520 }
521 else
522 {
523 eheTimer = 0f;
524 }
525 foreach (RigidUpdate update in updates)
526 {
527 if (update.active)
528 {
529 update.OnFixedUpdate();
530 }
531 }
532 }
533}
if(item3.idFile==idFirstFile &&item3.id==idFirstTopic)
Definition: UIBook.cs:627
void PlaySound(string id=null)
RigidUpdate[] updates
Definition: EMono.cs:4
static Player player
Definition: EMono.cs:11
static int rnd(int a)
Definition: EMono.cs:47
Sprite sprite
Definition: HoardActor.cs:11
float reflection
Definition: HoardActor.cs:13
float shadow
Definition: HoardActor.cs:15
int eheCount
Definition: HoardActor.cs:62
MeshPass passShadow
Definition: HoardActor.cs:38
SpriteRenderer srReflection
Definition: HoardActor.cs:48
new bool debug
Definition: HoardActor.cs:32
float maxAplha
Definition: HoardActor.cs:74
void Update()
Definition: HoardActor.cs:464
float eheTimer
Definition: HoardActor.cs:60
AnimationCurve curveMani
Definition: HoardActor.cs:44
void FixedUpdate()
Definition: HoardActor.cs:502
Material matReflection
Definition: HoardActor.cs:40
void MakeSteady(CollectibleActor a)
Definition: HoardActor.cs:417
List< CollectibleActor > actors
Definition: HoardActor.cs:34
CollectibleActor ehe
Definition: HoardActor.cs:56
List< RigidUpdate > updates
Definition: HoardActor.cs:36
void RefreshBG()
Definition: HoardActor.cs:442
float reflectMod
Definition: HoardActor.cs:30
Hoard hoard
Definition: HoardActor.cs:78
float groundY
Definition: HoardActor.cs:64
void MakePair(CollectibleActor a, CollectibleActor b, Vector3 v)
Definition: HoardActor.cs:432
Camera cam
Definition: HoardActor.cs:18
void Clear()
Definition: HoardActor.cs:451
void Activate()
Definition: HoardActor.cs:82
float shdowLimitY
Definition: HoardActor.cs:66
float alphaFix2
Definition: HoardActor.cs:70
BG[] bgs
Definition: HoardActor.cs:52
float radiusY
Definition: HoardActor.cs:24
Vector3 posCenter
Definition: HoardActor.cs:20
Material matMani
Definition: HoardActor.cs:42
CollectibleActor renton
Definition: HoardActor.cs:54
float sizeFixY
Definition: HoardActor.cs:76
void RefreshZoom()
Definition: HoardActor.cs:405
float sizeModCircle
Definition: HoardActor.cs:28
SpriteRenderer srBG
Definition: HoardActor.cs:46
float radiusX
Definition: HoardActor.cs:22
bool angryEhe
Definition: HoardActor.cs:58
float alphaFix1
Definition: HoardActor.cs:68
float sizeMod
Definition: HoardActor.cs:26
void MakePair(CollectibleActor a, CollectibleActor b, float dist=0.26f)
Definition: HoardActor.cs:422
float alphaFix4
Definition: HoardActor.cs:72
ParticleSystem psExplode
Definition: HoardActor.cs:50
Definition: Hoard.cs:8
int reflection
Definition: Hoard.cs:118
GameObject GetActor(string id)
Definition: Hoard.cs:217
bool shadow
Definition: Hoard.cs:132
Mode mode
Definition: Hoard.cs:112
bool voice
Definition: Hoard.cs:134
int bg
Definition: Hoard.cs:115
Dictionary< string, Item > items
Definition: Hoard.cs:106
bool pixelPerfect
Definition: Hoard.cs:136
void Draw()
Definition: MeshPass.cs:350
void Add(Point point, float tile=0f, float color=0f)
Definition: MeshPass.cs:122
void Init()
Definition: MeshPass.cs:98
Hoard hoard
Definition: Player.cs:892
Definition: Rand.cs:4
static int rnd(int max)
Definition: Rand.cs:52
virtual void OnFixedUpdate()
Definition: RigidUpdate.cs:23