From 4d48513145af335265aa1c4b3a4cc016a1270476 Mon Sep 17 00:00:00 2001 From: Samah Date: Mon, 23 Dec 2024 13:22:05 +1030 Subject: [PATCH 1/5] Fix holdables attempting to reset gravity while in a trigger --- Source/Components/GravityHoldable.cs | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/Source/Components/GravityHoldable.cs b/Source/Components/GravityHoldable.cs index 21b8657..cc4e5f3 100644 --- a/Source/Components/GravityHoldable.cs +++ b/Source/Components/GravityHoldable.cs @@ -1,6 +1,7 @@ // Copyright (c) Shane Woolcock. Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. +using Celeste.Mod.GravityHelper.Entities; using Celeste.Mod.GravityHelper.Entities.Controllers; using Celeste.Mod.GravityHelper.Extensions; using Celeste.Mod.GravityHelper.Triggers; @@ -96,6 +97,12 @@ public override void Update() SetGravityHeld(); else if (InvertTime > 0 && _invertTimeRemaining > 0 && gravityComponent.CurrentGravity == GravityType.Inverted) { + // if the holdable is within a trigger/field that should keep it inverted, reset the inversion time + if (Entity.CollideCheckWhere(f => f.GravityType == GravityType.Inverted && f.AffectsHoldableActors)) + { + ResetInvertTime(); + return; + } _invertTimeRemaining -= Engine.DeltaTime; if (_invertTimeRemaining <= 0) gravityComponent.SetGravity(GravityType.Normal); From d8c95fd8568a77ceddbfd1c644bd7be567fd7baa Mon Sep 17 00:00:00 2001 From: Samah Date: Sat, 25 Jan 2025 10:56:31 +1030 Subject: [PATCH 2/5] Add missing surfaceIndex property to upside down jumpthru plugin --- Loenn/entities/upsideDownJumpThru.lua | 1 + 1 file changed, 1 insertion(+) diff --git a/Loenn/entities/upsideDownJumpThru.lua b/Loenn/entities/upsideDownJumpThru.lua index 5a5a9c1..2bad96f 100644 --- a/Loenn/entities/upsideDownJumpThru.lua +++ b/Loenn/entities/upsideDownJumpThru.lua @@ -19,6 +19,7 @@ local placementData = helpers.createPlacementData('1', { attached = false, triggerStaticMovers = true, invisible = false, + surfaceIndex = -1, }) local upsideDownJumpThru = { From 39e0cdabcb4d207fe331df28f9d0868536582eff Mon Sep 17 00:00:00 2001 From: Samah Date: Sat, 25 Jan 2025 17:11:03 +1030 Subject: [PATCH 3/5] Allow gravity holdable to specify reset type, and add API for it --- Source/Components/GravityHoldable.cs | 51 +++++++++++++++++----------- Source/GravityHelperExports.cs | 16 +++++++++ 2 files changed, 47 insertions(+), 20 deletions(-) diff --git a/Source/Components/GravityHoldable.cs b/Source/Components/GravityHoldable.cs index cc4e5f3..a24dd04 100644 --- a/Source/Components/GravityHoldable.cs +++ b/Source/Components/GravityHoldable.cs @@ -1,7 +1,7 @@ // Copyright (c) Shane Woolcock. Licensed under the MIT Licence. // See the LICENCE file in the repository root for full licence text. -using Celeste.Mod.GravityHelper.Entities; +using System; using Celeste.Mod.GravityHelper.Entities.Controllers; using Celeste.Mod.GravityHelper.Extensions; using Celeste.Mod.GravityHelper.Triggers; @@ -12,26 +12,35 @@ namespace Celeste.Mod.GravityHelper.Components; [Tracked] public class GravityHoldable : Component { - private float _invertTime = BehaviorGravityController.DEFAULT_HOLDABLE_RESET_TIME; - public float InvertTime + [Obsolete("Use ResetTime and ResetType instead.")] + public float InvertTime { get; set; } + + private float _sceneResetTime = BehaviorGravityController.DEFAULT_HOLDABLE_RESET_TIME; + private float _resetTimeRemaining; + private float? _resetTime; + public float ResetTime { - get => _invertTime; - set => _invertTime = _invertTimeRemaining = value; + get => _resetTime ?? _sceneResetTime; + set + { + _resetTime = value < 0 ? null : value; + _resetTimeRemaining = ResetTime; + } } - private float _invertTimeRemaining; + public GravityType ResetType { get; set; } = GravityType.Normal; public GravityHoldable() : base(true, false) { } - public void ResetInvertTime() => _invertTimeRemaining = InvertTime; + public void ResetTimer() => _resetTimeRemaining = ResetTime; public void SetGravityHeld() { if (Entity?.Get() is not { } gravityComponent) return; - ResetInvertTime(); + ResetTimer(); var targetGravity = GravityHelperModule.PlayerComponent?.CurrentGravity ?? GravityType.Normal; if (gravityComponent.CurrentGravity != targetGravity) @@ -44,7 +53,7 @@ public override void Added(Entity entity) // the entity may already be part of the scene before the component is added if (entity.Scene != null) - updateInvertTime(entity.Scene); + updateResetTime(entity.Scene); if (entity.Get() == null && entity.Get() is { } holdable) { @@ -59,7 +68,7 @@ public override void Added(Entity entity) { entity.Add(new GravityListener(entity) { - GravityChanged = (_, _) => ResetInvertTime(), + GravityChanged = (_, _) => ResetTimer(), }); } } @@ -67,7 +76,7 @@ public override void Added(Entity entity) public override void EntityAdded(Scene scene) { base.EntityAdded(scene); - updateInvertTime(scene); + updateResetTime(scene); } public override void EntityAwake() @@ -79,10 +88,11 @@ public override void EntityAwake() Entity.SetGravity(GravityType.Inverted); } - private void updateInvertTime(Scene scene) + private void updateResetTime(Scene scene) { var controller = scene.GetActiveController(); - InvertTime = controller?.HoldableResetTime ?? BehaviorGravityController.DEFAULT_HOLDABLE_RESET_TIME; + _sceneResetTime = controller?.HoldableResetTime ?? BehaviorGravityController.DEFAULT_HOLDABLE_RESET_TIME; + _resetTimeRemaining = _sceneResetTime; } public override void Update() @@ -95,17 +105,18 @@ public override void Update() if (holdable.IsHeld) SetGravityHeld(); - else if (InvertTime > 0 && _invertTimeRemaining > 0 && gravityComponent.CurrentGravity == GravityType.Inverted) + else if (ResetTime > 0 && _resetTimeRemaining > 0) { - // if the holdable is within a trigger/field that should keep it inverted, reset the inversion time - if (Entity.CollideCheckWhere(f => f.GravityType == GravityType.Inverted && f.AffectsHoldableActors)) + // if the holdable is within a trigger/field that should keep it something other than the reset type, reset the inversion timer + if (Entity.CollideCheckWhere(f => f.GravityType != ResetType && f.AffectsHoldableActors)) { - ResetInvertTime(); + ResetTimer(); return; } - _invertTimeRemaining -= Engine.DeltaTime; - if (_invertTimeRemaining <= 0) - gravityComponent.SetGravity(GravityType.Normal); + + _resetTimeRemaining -= Engine.DeltaTime; + if (_resetTimeRemaining <= 0) + gravityComponent.SetGravity(ResetType); } } } diff --git a/Source/GravityHelperExports.cs b/Source/GravityHelperExports.cs index e75e807..615aa76 100644 --- a/Source/GravityHelperExports.cs +++ b/Source/GravityHelperExports.cs @@ -93,4 +93,20 @@ public static IDisposable WithOverride() GravityHelperModule.OverrideSemaphore++; return new InvokeOnDispose(() => GravityHelperModule.OverrideSemaphore--); } + + public static void SetHoldableResetTime(Holdable holdable, float resetTime) + { + if (holdable?.Entity.Get() is { } gravityHoldable) + { + gravityHoldable.ResetTime = resetTime; + } + } + + public static void SetHoldableResetType(Holdable holdable, int gravityType) + { + if (holdable?.Entity.Get() is { } gravityHoldable) + { + gravityHoldable.ResetType = (GravityType)gravityType; + } + } } From 7ec8631347425a1dad2691d4ea2d825b149f5550 Mon Sep 17 00:00:00 2001 From: Samah Date: Sat, 25 Jan 2025 17:59:58 +1030 Subject: [PATCH 4/5] Fix GravityHoldable not honouring cannotHoldTimer --- Source/Hooks/HoldableHooks.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/Hooks/HoldableHooks.cs b/Source/Hooks/HoldableHooks.cs index 4a16231..d833f3e 100644 --- a/Source/Hooks/HoldableHooks.cs +++ b/Source/Hooks/HoldableHooks.cs @@ -56,8 +56,8 @@ private static void Holdable_Release(ILContext il) => HookUtils.SafeHook(() => private static bool Holdable_Pickup(On.Celeste.Holdable.orig_Pickup orig, Holdable self, Player player) { var rv = orig(self, player); - if (self.Entity?.Get() is { } gravityHoldable) + if (rv && self.Entity?.Get() is { } gravityHoldable) gravityHoldable.SetGravityHeld(); return rv; } -} \ No newline at end of file +} From 0ca5d69b23c35824523b59550c7e088bb72c46c6 Mon Sep 17 00:00:00 2001 From: Samah Date: Sun, 26 Jan 2025 23:26:47 +1030 Subject: [PATCH 5/5] Bump version --- Loenn/consts.lua | 2 +- everest.yaml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/Loenn/consts.lua b/Loenn/consts.lua index b4caa76..badb0e9 100644 --- a/Loenn/consts.lua +++ b/Loenn/consts.lua @@ -16,7 +16,7 @@ local function makeOptions(options, defaults, ...) end local consts = { - modVersion = "1.2.22", + modVersion = "1.2.23", ignoredFields = { "modVersion", "pluginVersion", diff --git a/everest.yaml b/everest.yaml index 30a81dd..cfc08fb 100644 --- a/everest.yaml +++ b/everest.yaml @@ -1,5 +1,5 @@ - Name: GravityHelper - Version: 1.2.22 + Version: 1.2.23 DLL: bin/GravityHelper.dll Dependencies: - Name: EverestCore