Skip to content

Commit

Permalink
Add Set Flag on Save Data Controller
Browse files Browse the repository at this point in the history
  • Loading branch information
maddie480 committed Jan 2, 2024
1 parent 1ec2fcd commit 62f1529
Show file tree
Hide file tree
Showing 7 changed files with 138 additions and 0 deletions.
31 changes: 31 additions & 0 deletions Ahorn/entities/maxHelpingHandSetFlagOnSaveDataController.jl
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
module MaxHelpingHandSetFlagOnSaveDataController

using ..Ahorn, Maple

@mapdef Entity "MaxHelpingHand/SetFlagOnHeartCollectedController" SetFlagOnHeartCollectedController(x::Integer, y::Integer, flag::String="flag_name")
@mapdef Entity "MaxHelpingHand/SetFlagOnCompletionController" SetFlagOnCompletionController(x::Integer, y::Integer, flag::String="flag_name")
@mapdef Entity "MaxHelpingHand/SetFlagOnFullClearController" SetFlagOnFullClearController(x::Integer, y::Integer, flag::String="flag_name")

const placements = Ahorn.PlacementDict(
"Set Flag On Heart Collected Controller (Maddie's Helping Hand)" => Ahorn.EntityPlacement(
SetFlagOnHeartCollectedController
),
"Set Flag On Completion Controller (Maddie's Helping Hand)" => Ahorn.EntityPlacement(
SetFlagOnCompletionController
),
"Set Flag On Full Clear Controller (Maddie's Helping Hand)" => Ahorn.EntityPlacement(
SetFlagOnFullClearController
)
)

const controllersUnion = Union{SetFlagOnHeartCollectedController, SetFlagOnCompletionController, SetFlagOnFullClearController}

function Ahorn.selection(entity::controllersUnion)
x, y = Ahorn.position(entity)

return Ahorn.Rectangle(x - 12, y - 12, 24, 24)
end

Ahorn.render(ctx::Ahorn.Cairo.CairoContext, entity::controllersUnion, room::Maple.Room) = Ahorn.drawSprite(ctx, "ahorn/MaxHelpingHand/set_flag_on_spawn", 0, 0)

end
9 changes: 9 additions & 0 deletions Ahorn/lang/en_gb.lang
Original file line number Diff line number Diff line change
Expand Up @@ -606,6 +606,15 @@ placements.entities.MaxHelpingHand/SetFlagOnSpawnController.tooltips.enable=If c
placements.entities.MaxHelpingHand/SetFlagOnSpawnController.tooltips.onlyOnRespawn=If checked, the flag will only be set if the player dies and respawns in the room (and not when they enter the room).
placements.entities.MaxHelpingHand/SetFlagOnSpawnController.tooltips.ifFlag=The flag will only be set if this other flag is active. Leave empty if you don't need your flag to depend on another flag.

# Set Flag On Heart Collected Controller
placements.entities.MaxHelpingHand/SetFlagOnHeartCollectedController.tooltips.flag=The session flag to activate if the player has collected the crystal heart of the current map.

# Set Flag On Completion Controller
placements.entities.MaxHelpingHand/SetFlagOnCompletionController.tooltips.flag=The session flag to activate if the player has completed the current map.

# Set Flag On Heart Collected Controller
placements.entities.MaxHelpingHand/SetFlagOnFullClearController.tooltips.flag=The session flag to activate if the player has full cleared the current map.

# Set Flag On Spawn Trigger
placements.triggers.MaxHelpingHand/SetFlagOnSpawnTrigger.tooltips.flags=The session flags to modify when the player respawns inside the trigger. You can set multiple flags at once by giving a list separated by commas (flag1,flag2).
placements.triggers.MaxHelpingHand/SetFlagOnSpawnTrigger.tooltips.enable=If checked, the flag will be enabled when the player respawns inside the trigger. If unchecked, the flag will be disabled instead.
Expand Down
47 changes: 47 additions & 0 deletions Entities/SetFlagOnSaveDataController.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
using Celeste.Mod.Entities;
using Microsoft.Xna.Framework;
using Monocle;
using System;

namespace Celeste.Mod.MaxHelpingHand.Entities {
[CustomEntity(
"MaxHelpingHand/SetFlagOnHeartCollectedController = LoadHeart",
"MaxHelpingHand/SetFlagOnCompletionController = LoadCompletion",
"MaxHelpingHand/SetFlagOnFullClearController = LoadFullClear"
)]
public class SetFlagOnSaveDataController : Entity {
public static Entity LoadHeart(Level level, LevelData levelData, Vector2 offset, EntityData entityData) {
return new SetFlagOnSaveDataController(modeStats => modeStats.HeartGem, entityData.Attr("flag"));
}
public static Entity LoadCompletion(Level level, LevelData levelData, Vector2 offset, EntityData entityData) {
return new SetFlagOnSaveDataController(modeStats => modeStats.Completed, entityData.Attr("flag"));
}
public static Entity LoadFullClear(Level level, LevelData levelData, Vector2 offset, EntityData entityData) {
return new SetFlagOnSaveDataController(modeStats => modeStats.FullClear, entityData.Attr("flag"));
}


private readonly Func<AreaModeStats, bool> condition;
private readonly string flag;
private AreaModeStats modeStats;

public SetFlagOnSaveDataController(Func<AreaModeStats, bool> condition, string flag) {
this.condition = condition;
this.flag = flag;
}

public override void Added(Scene scene) {
base.Added(scene);

AreaKey areaKey = SceneAs<Level>().Session.Area;
modeStats = SaveData.Instance.GetAreaStatsFor(areaKey).Modes[(int) areaKey.Mode];
SceneAs<Level>().Session.SetFlag(flag, condition(modeStats));
}

public override void Update() {
base.Update();

SceneAs<Level>().Session.SetFlag(flag, condition(modeStats));
}
}
}
13 changes: 13 additions & 0 deletions Loenn/entities/setFlagOnCompletionController.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
local controller = {}

controller.name = "MaxHelpingHand/SetFlagOnCompletionController"
controller.depth = 0
controller.texture = "ahorn/MaxHelpingHand/set_flag_on_spawn"
controller.placements = {
name = "controller",
data = {
flag = "flag_name"
}
}

return controller
13 changes: 13 additions & 0 deletions Loenn/entities/setFlagOnFullClearController.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
local controller = {}

controller.name = "MaxHelpingHand/SetFlagOnFullClearController"
controller.depth = 0
controller.texture = "ahorn/MaxHelpingHand/set_flag_on_spawn"
controller.placements = {
name = "controller",
data = {
flag = "flag_name"
}
}

return controller
13 changes: 13 additions & 0 deletions Loenn/entities/setFlagOnHeartCollectedController.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
local controller = {}

controller.name = "MaxHelpingHand/SetFlagOnHeartCollectedController"
controller.depth = 0
controller.texture = "ahorn/MaxHelpingHand/set_flag_on_spawn"
controller.placements = {
name = "controller",
data = {
flag = "flag_name"
}
}

return controller
12 changes: 12 additions & 0 deletions Loenn/lang/en_gb.lang
Original file line number Diff line number Diff line change
Expand Up @@ -752,6 +752,18 @@ triggers.MaxHelpingHand/SetFlagOnSpawnTrigger.attributes.description.flags=The s
triggers.MaxHelpingHand/SetFlagOnSpawnTrigger.attributes.description.enable=If checked, the flag will be enabled when the player respawns inside the trigger. If unchecked, the flag will be disabled instead.
triggers.MaxHelpingHand/SetFlagOnSpawnTrigger.attributes.description.ifFlag=The flag will only be set if this other flag is active. Leave empty if you don't need your flag to depend on another flag.

# Set Flag On Heart Collected Controller
entities.MaxHelpingHand/SetFlagOnHeartCollectedController.placements.name.controller=Set Flag On Heart Collected Controller
entities.MaxHelpingHand/SetFlagOnHeartCollectedController.attributes.description.flag=The session flag to activate if the player has collected the crystal heart of the current map.

# Set Flag On Completion Controller
entities.MaxHelpingHand/SetFlagOnCompletionController.placements.name.controller=Set Flag On Completion Controller
entities.MaxHelpingHand/SetFlagOnCompletionController.attributes.description.flag=The session flag to activate if the player has completed the current map.

# Set Flag On Heart Collected Controller
entities.MaxHelpingHand/SetFlagOnFullClearController.placements.name.controller=Set Flag On Full Clear Controller
entities.MaxHelpingHand/SetFlagOnFullClearController.attributes.description.flag=The session flag to activate if the player has full cleared the current map.

# Shatter Flag Switch Gate
entities.MaxHelpingHand/ShatterFlagSwitchGate.placements.name.block=Shatter Flag Switch Gate (Block)
entities.MaxHelpingHand/ShatterFlagSwitchGate.placements.name.mirror=Shatter Flag Switch Gate (Mirror)
Expand Down

0 comments on commit 62f1529

Please sign in to comment.