Skip to content

Commit bf84833

Browse files
committed
Have the lava check for lava blocker triggers itself
1 parent 53cf4e1 commit bf84833

File tree

3 files changed

+25
-35
lines changed

3 files changed

+25
-35
lines changed

Entities/SidewaysLava.cs

Lines changed: 23 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
using Celeste.Mod.Entities;
22
using Microsoft.Xna.Framework;
33
using Monocle;
4-
using MonoMod.Utils;
54
using System.Collections.Generic;
65
using System.Linq;
6+
using System.Reflection;
77

88
namespace Celeste.Mod.SpringCollab2020.Entities {
99
/// <summary>
@@ -16,41 +16,17 @@ namespace Celeste.Mod.SpringCollab2020.Entities {
1616
/// </summary>
1717
[CustomEntity("SpringCollab2020/SidewaysLava")]
1818
class SidewaysLava : Entity {
19-
20-
private static List<DynData<SidewaysLava>> sidewaysLavas = new List<DynData<SidewaysLava>>();
21-
22-
public static void Load() {
23-
On.Celeste.Mod.Entities.LavaBlockerTrigger.Awake += onLavaBlockerTriggerAwake;
24-
On.Celeste.Mod.Entities.LavaBlockerTrigger.OnStay += onLavaBlockerTriggerStay;
25-
}
26-
27-
public static void Unload() {
28-
On.Celeste.Mod.Entities.LavaBlockerTrigger.Awake -= onLavaBlockerTriggerAwake;
29-
On.Celeste.Mod.Entities.LavaBlockerTrigger.OnStay -= onLavaBlockerTriggerStay;
30-
}
31-
32-
private static void onLavaBlockerTriggerAwake(On.Celeste.Mod.Entities.LavaBlockerTrigger.orig_Awake orig, LavaBlockerTrigger self, Scene scene) {
33-
orig(self, scene);
34-
35-
// look up for sideways lavas as well.
36-
sidewaysLavas = scene.Entities.FindAll<SidewaysLava>().Select(lava => new DynData<SidewaysLava>(lava as SidewaysLava)).ToList();
37-
}
38-
39-
private static void onLavaBlockerTriggerStay(On.Celeste.Mod.Entities.LavaBlockerTrigger.orig_OnStay orig, LavaBlockerTrigger self, Player player) {
40-
orig(self, player);
41-
42-
// block sideways lava as well.
43-
foreach (DynData<SidewaysLava> data in sidewaysLavas)
44-
if (data.IsAlive)
45-
data.Set("waiting", true);
46-
}
19+
private static FieldInfo lavaBlockerTriggerEnabled = typeof(LavaBlockerTrigger).GetField("enabled", BindingFlags.NonPublic | BindingFlags.Instance);
4720

4821
private enum LavaMode {
4922
LeftToRight, RightToLeft, Sandwich
5023
}
5124

5225
private const float Speed = 30f;
5326

27+
// if the player collides with one of those, lava should be forced into waiting.
28+
private List<LavaBlockerTrigger> lavaBlockerTriggers;
29+
5430
// atrributes
5531
private bool intro;
5632
private LavaMode lavaMode;
@@ -132,8 +108,12 @@ public SidewaysLava(EntityData data, Vector2 offset) {
132108
sandwichLeaving = true;
133109
Collidable = false;
134110
Alarm.Set(this, 2f, () => RemoveSelf());
111+
} else {
112+
sandwichTransferred = false;
113+
114+
// look up for all lava blocker triggers in the next room.
115+
lavaBlockerTriggers = Scene.Entities.OfType<LavaBlockerTrigger>().ToList();
135116
}
136-
sandwichTransferred = false;
137117
},
138118
OnOut = progress => {
139119
if (Scene != null) {
@@ -228,6 +208,9 @@ public override void Awake(Scene scene) {
228208
if (intro) {
229209
Visible = true;
230210
}
211+
212+
// look up for all lava blocker triggers in the room.
213+
lavaBlockerTriggers = scene.Entities.OfType<LavaBlockerTrigger>().ToList();
231214
}
232215

233216
private void OnChangeMode(Session.CoreModes mode) {
@@ -278,9 +261,18 @@ public override void Update() {
278261
base.Update();
279262
Visible = true;
280263

264+
Player player = Scene.Tracker.GetEntity<Player>();
265+
if (player != null) {
266+
LavaBlockerTrigger collidedTrigger = lavaBlockerTriggers.Find(trigger => player.CollideCheck(trigger));
267+
268+
if (collidedTrigger != null && (bool) lavaBlockerTriggerEnabled.GetValue(collidedTrigger)) {
269+
// player is in a lava blocker trigger and it is enabled; block the lava.
270+
waiting = true;
271+
}
272+
}
273+
281274
if (waiting) {
282275
loopSfx.Param("rising", 0f);
283-
Player player = Scene.Tracker.GetEntity<Player>();
284276

285277
// the sandwich lava fade in animation is not handled here.
286278
if (lavaMode != LavaMode.Sandwich) {

Entities/SidewaysLavaRect.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -278,8 +278,8 @@ public override void Render() {
278278
else
279279
x = 1f - Wave(bubbleOffset, Height);
280280

281-
surfaceBubbleTexture.DrawJustified(rectPosition +
282-
new Vector2(x, OnlyMode == OnlyModes.OnlyRight ? Height - bubbleOffset * SurfaceStep : bubbleOffset * SurfaceStep),
281+
surfaceBubbleTexture.DrawJustified(rectPosition +
282+
new Vector2(x, OnlyMode == OnlyModes.OnlyRight ? Height - bubbleOffset * SurfaceStep : bubbleOffset * SurfaceStep),
283283
new Vector2(1f, 0.5f), SurfaceColor);
284284
}
285285
}

SpringCollab2020Module.cs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,6 @@ public override void Load() {
2020
UpsideDownJumpThru.Load();
2121
BubbleReturnBerry.Load();
2222
SidewaysJumpThru.Load();
23-
SidewaysLava.Load();
2423
}
2524

2625
public override void LoadContent(bool firstLoad) {
@@ -39,7 +38,6 @@ public override void Unload() {
3938
UpsideDownJumpThru.Unload();
4039
BubbleReturnBerry.Unload();
4140
SidewaysJumpThru.Unload();
42-
SidewaysLava.Unload();
4341
}
4442
}
4543
}

0 commit comments

Comments
 (0)