Skip to content

Commit e7bb205

Browse files
committed
add ContortHelper teleport trigger
1 parent 069914c commit e7bb205

File tree

3 files changed

+38
-8
lines changed

3 files changed

+38
-8
lines changed

Source/Gameplay/AutoWatchEntity/CoreLogic.cs

+3-2
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,11 @@ internal class AutoWatchRenderer : Component {
154154

155155
public bool PostActive;
156156

157-
public new bool Active {
157+
public new bool Active { // hide the original "Active" field
158158
get {
159159
throw new Exception("Use Pre/PostActive Instead!");
160160
}
161-
set {
161+
private set {
162162
throw new Exception("Use Pre/PostActive Instead!");
163163
}
164164
}
@@ -193,6 +193,7 @@ public void UpdateOn_ConfigChange_Or_StopUltraforwarding_Or_Clone() {
193193
public override void Added(Entity entity) {
194194
base.Added(entity);
195195
if (mode == RenderMode.WhenWatched) {
196+
// if it's not watched, the renderer is still there, but just hidden and inactive
196197
CoreLogic.WhenWatchedRenderers.Add(this);
197198
Visible = CoreLogic.IsWatched(entity);
198199
PostActive = hasUpdate && Visible;

Source/Gameplay/AutoWatchEntity/Trigger/AbstractTriggerRenderer.cs

+6-6
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
namespace Celeste.Mod.TASHelper.Gameplay.AutoWatchEntity;
77

88

9-
internal class AbstractTriggerRenderer : AutoWatchTextRenderer {
9+
internal abstract class AbstractTriggerRenderer : AutoWatchTextRenderer {
1010

1111
internal static Color textcolorWhenInside = new Color(0f, 0f, 0f, 0.5f);
1212

@@ -45,11 +45,11 @@ internal class AbstractTriggerRenderer : AutoWatchTextRenderer {
4545

4646
public AbstractTriggerRenderer(RenderMode mode) : base(mode, active: true) { }
4747

48-
public virtual string Name() => abstractTrigger.GetType().Name;
49-
public virtual string GetStaticInfo() => throw new Exception("NotImplemented"); // as an abstract class, we should not implement it
48+
public abstract string Name();
49+
public abstract string GetStaticInfo();
5050

51-
public virtual bool HasDynamicInfo() => false;
52-
public virtual string GetDynamicInfo() => "";
51+
public abstract bool HasDynamicInfo();
52+
public abstract string GetDynamicInfo();
5353

5454
public override void Added(Entity entity) {
5555
base.Added(entity);
@@ -193,7 +193,7 @@ public override void UpdateImpl() {
193193
bool flag2 = false;
194194
if (playerInstance is { } player) {
195195
flag1 = abstractTrigger.CollideCheck(player);
196-
flag2 = !CoreLogic.IsWatched(abstractTrigger) && nearPlayerDetector.Collide(player.collider);
196+
flag2 = mode == RenderMode.Always && nearPlayerDetector.Collide(player.collider) && !CoreLogic.IsWatched(abstractTrigger); // if watched, then do not set transparent text
197197
}
198198
SetAlphaRegion(flag1);
199199
SetAlphaText(flag2);

Source/Gameplay/AutoWatchEntity/Trigger/TriggerStaticInfoGetter.cs

+29
Original file line numberDiff line numberDiff line change
@@ -98,6 +98,7 @@ public static void AddToDictionary() {
9898
HandleFlagslinesAndSuch();
9999
HandleMemorialHelper();
100100
HandleSardine7();
101+
HandleContortHelper();
101102
}
102103

103104
public static void Add(Type type, TriggerStaticHandler handler) {
@@ -261,4 +262,32 @@ public static void HandleSardine7() {
261262
});
262263
}
263264
}
265+
266+
public static void HandleContortHelper() {
267+
// not finished
268+
269+
if (ModUtils.GetType("ContortHelper", "ContortHelper.TeleportationTrigger") is { } teleportationTrigger) {
270+
Add(teleportationTrigger, (trigger, _) => {
271+
Vector2? toTeleportTo = trigger.GetFieldValue<Vector2?>("toTeleportTo");
272+
if (toTeleportTo.HasValue) {
273+
return ""; // when in same room, the mod itself already debugrender its target
274+
}
275+
string roomName = trigger.GetFieldValue<string>("roomName");
276+
string roomNameForGolden = trigger.GetFieldValue<string>("roomNameForGolden");
277+
string TargetTag = trigger.GetFieldValue<string>("TargetTag");
278+
string result;
279+
if (string.IsNullOrWhiteSpace(TargetTag)) {
280+
result = (string.IsNullOrWhiteSpace(roomNameForGolden) || roomName == roomNameForGolden) ? $"[{roomName}]" : $"[{roomName}]\nIfGolden: [{roomNameForGolden}]";
281+
}
282+
else {
283+
result = (string.IsNullOrWhiteSpace(roomNameForGolden) || roomName == roomNameForGolden) ? $"[{roomName}] {TargetTag}" : $"[{roomName}] {TargetTag}\nIfGolden: [{roomNameForGolden}]";
284+
}
285+
string[] flags = trigger.GetFieldValue<string[]>("neededFlags");
286+
if (flags.IsNotNullOrEmpty() && string.Join("", flags).IsNotNullOrEmpty()) {
287+
result += $"\nNeedFlag: {string.Join(", ", flags)}";
288+
}
289+
return result;
290+
});
291+
}
292+
}
264293
}

0 commit comments

Comments
 (0)