Skip to content

Commit 3355c3f

Browse files
authored
Merge pull request #139 from EverestAPI/music_layer_fade_trigger
Music Layer Fade Trigger
2 parents 5900159 + 49c364c commit 3355c3f

File tree

3 files changed

+66
-0
lines changed

3 files changed

+66
-0
lines changed

Ahorn/lang/en_gb.lang

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,3 +183,9 @@ placements.triggers.SpringCollab2020/MadelineSilhouetteTrigger.tooltips.enable=I
183183
# Rainbow Spinner Color Controller
184184
placements.entities.SpringCollab2020/RainbowSpinnerColorController.tooltips.colors=The colours the rainbow spinners in the room will take, separated by commas. For example, if 3 colours A, B and C are specified, the colours will cycle in the following order: A > B > C > B > A.
185185
placements.entities.SpringCollab2020/RainbowSpinnerColorController.tooltips.gradientSize=The distance required to achieve a complete loop across all colours.
186+
187+
# Music Layer Fade Trigger
188+
placements.triggers.SpringCollab2020/MusicLayerFadeTrigger.tooltips.layers=Which layers the trigger should change.
189+
placements.triggers.SpringCollab2020/MusicLayerFadeTrigger.tooltips.fadeA=The first volume for the music layer.
190+
placements.triggers.SpringCollab2020/MusicLayerFadeTrigger.tooltips.fadeB=The second volume for the music layer.
191+
placements.triggers.SpringCollab2020/MusicLayerFadeTrigger.tooltips.direction=Which direction the layer volume fades between Fade A and Fade B when the player enters the trigger.
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module SpringCollab2020MusicLayerFadeTrigger
2+
3+
using ..Ahorn, Maple
4+
5+
@mapdef Trigger "SpringCollab2020/MusicLayerFadeTrigger" MusicLayerFadeTrigger(x::Integer, y::Integer, width::Integer=Maple.defaultTriggerWidth, height::Integer=Maple.defaultTriggerHeight,
6+
layers::String="", fadeA::Number=0.0, fadeB::Number=1.0, direction::String="LeftToRight")
7+
8+
const placements = Ahorn.PlacementDict(
9+
"Music Layer Fade (Spring Collab 2020)" => Ahorn.EntityPlacement(
10+
MusicLayerFadeTrigger,
11+
"rectangle"
12+
)
13+
)
14+
15+
Ahorn.editingOptions(entity::MusicLayerFadeTrigger) = Dict{String, Any}(
16+
"direction" => Maple.trigger_position_modes
17+
)
18+
19+
end

Triggers/MusicLayerFadeTrigger.cs

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
using Celeste.Mod.Entities;
2+
using Microsoft.Xna.Framework;
3+
4+
namespace Celeste.Mod.SpringCollab2020.Triggers {
5+
[CustomEntity("SpringCollab2020/MusicLayerFadeTrigger")]
6+
public class MusicLayerFadeTrigger : Trigger {
7+
8+
private int[] layers;
9+
private float fadeA;
10+
private float fadeB;
11+
private PositionModes direction;
12+
13+
public MusicLayerFadeTrigger(EntityData data, Vector2 offset)
14+
: base(data, offset) {
15+
16+
// parse the "layers" attribute (for example "1,3,4") as an int array.
17+
string[] layersAsStrings = data.Attr("layers").Split(',');
18+
layers = new int[layersAsStrings.Length];
19+
for (int i = 0; i < layers.Length; i++) {
20+
layers[i] = int.Parse(layersAsStrings[i]);
21+
}
22+
23+
// parse the other parameters for the trigger
24+
fadeA = data.Float("fadeA", 0f);
25+
fadeB = data.Float("fadeB", 1f);
26+
direction = data.Enum("direction", PositionModes.LeftToRight);
27+
}
28+
29+
public override void OnStay(Player player) {
30+
// compute the current fade value
31+
float fade = MathHelper.Lerp(fadeA, fadeB, GetPositionLerp(player, direction));
32+
33+
// apply it to all the required layers
34+
AudioState audio = SceneAs<Level>().Session.Audio;
35+
foreach (int layer in layers) {
36+
audio.Music.Layer(layer, fade);
37+
}
38+
audio.Apply();
39+
}
40+
}
41+
}

0 commit comments

Comments
 (0)