v3.0.0: added a delay to time freeze press triggering

triggering instantly caused effect order errors, including a dupe bug involving teleport traps
This commit is contained in:
Evan Debenham
2025-01-27 12:05:00 -05:00
parent 8643815e84
commit 4fb3f4401a
2 changed files with 46 additions and 22 deletions
@@ -23,6 +23,7 @@ package com.shatteredpixel.shatteredpixeldungeon.items.artifacts;
import com.shatteredpixel.shatteredpixeldungeon.Assets; import com.shatteredpixel.shatteredpixeldungeon.Assets;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Hunger;
@@ -374,7 +375,16 @@ public class TimekeepersHourglass extends Artifact {
} }
public void triggerPresses(){ public void triggerPresses(){
for (int cell : presses){ ArrayList<Integer> toTrigger = presses;
presses = new ArrayList<>();
Actor.add(new Actor() {
{
actPriority = VFX_PRIO;
}
@Override
protected boolean act() {
for (int cell : toTrigger){
Plant p = Dungeon.level.plants.get(cell); Plant p = Dungeon.level.plants.get(cell);
if (p != null){ if (p != null){
p.trigger(); p.trigger();
@@ -384,8 +394,10 @@ public class TimekeepersHourglass extends Artifact {
t.trigger(); t.trigger();
} }
} }
Actor.remove(this);
presses = new ArrayList<>(); return true;
}
});
} }
public void disarmPresses(){ public void disarmPresses(){
@@ -22,6 +22,7 @@
package com.shatteredpixel.shatteredpixeldungeon.plants; package com.shatteredpixel.shatteredpixeldungeon.plants;
import com.shatteredpixel.shatteredpixeldungeon.Dungeon; import com.shatteredpixel.shatteredpixeldungeon.Dungeon;
import com.shatteredpixel.shatteredpixeldungeon.actors.Actor;
import com.shatteredpixel.shatteredpixeldungeon.actors.Char; import com.shatteredpixel.shatteredpixeldungeon.actors.Char;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Buff;
import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Haste; import com.shatteredpixel.shatteredpixeldungeon.actors.buffs.Haste;
@@ -122,7 +123,16 @@ public class Swiftthistle extends Plant {
} }
public void triggerPresses(){ public void triggerPresses(){
for (int cell : presses){ ArrayList<Integer> toTrigger = presses;
presses = new ArrayList<>();
Actor.add(new Actor() {
{
actPriority = VFX_PRIO;
}
@Override
protected boolean act() {
for (int cell : toTrigger){
Plant p = Dungeon.level.plants.get(cell); Plant p = Dungeon.level.plants.get(cell);
if (p != null){ if (p != null){
p.trigger(); p.trigger();
@@ -132,8 +142,10 @@ public class Swiftthistle extends Plant {
t.trigger(); t.trigger();
} }
} }
Actor.remove(this);
presses = new ArrayList<>(); return true;
}
});
} }
public void disarmPresses(){ public void disarmPresses(){