Skip to content

Commit b71a91b

Browse files
committed
Strawberry Collection Field
1 parent 419743e commit b71a91b

File tree

3 files changed

+85
-0
lines changed

3 files changed

+85
-0
lines changed

Ahorn/lang/en_gb.lang

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -225,3 +225,7 @@ placements.entities.SpringCollab2020/FlagToggleStarTrackSpinner.tooltips.inverte
225225
placements.entities.SpringCollab2020/FlagToggleStarRotateSpinner.tooltips.clockwise=The spinning blade will run clockwise.
226226
placements.entities.SpringCollab2020/FlagToggleStarRotateSpinner.tooltips.flag=The flag this entity reacts to.
227227
placements.entities.SpringCollab2020/FlagToggleStarRotateSpinner.tooltips.inverted=If checked, the entity will appear only if the flag is inactive.\nIf unchecked, the entity will appear only if the flag is active.
228+
229+
# Strawberry Collection Field
230+
placements.triggers.SpringCollab2020/StrawberryCollectionField.tooltips.delayBetweenBerries=Whether there should be a 0.3 second delay between each berry collection (like when berries are collected on the ground).
231+
placements.triggers.SpringCollab2020/StrawberryCollectionField.tooltips.includeGoldens=Whether this trigger should collect golden strawberries and other berries that block normal collection.
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
module SpringCollab2020StrawberryCollectionField
2+
3+
using ..Ahorn, Maple
4+
5+
@mapdef Trigger "SpringCollab2020/StrawberryCollectionField" StrawberryCollectionField(x::Integer, y::Integer, width::Integer=Maple.defaultTriggerWidth, height::Integer=Maple.defaultTriggerHeight,
6+
delayBetweenBerries::Bool=true, includeGoldens::Bool=false)
7+
8+
const placements = Ahorn.PlacementDict(
9+
"Strawberry Collection Field (Spring Collab 2020)" => Ahorn.EntityPlacement(
10+
StrawberryCollectionField,
11+
"rectangle"
12+
)
13+
)
14+
15+
end
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
using Celeste.Mod.Entities;
2+
using Microsoft.Xna.Framework;
3+
using Monocle;
4+
using System;
5+
using System.Collections.Generic;
6+
using System.Collections.ObjectModel;
7+
using System.Linq;
8+
9+
namespace Celeste.Mod.SpringCollab2020.Triggers {
10+
[CustomEntity("SpringCollab2020/StrawberryCollectionField")]
11+
class StrawberryCollectionField : Trigger {
12+
private float collectTimer = 0f;
13+
private bool delayBetweenBerries;
14+
private bool includeGoldens;
15+
16+
public StrawberryCollectionField(EntityData data, Vector2 offset) : base(data, offset) {
17+
delayBetweenBerries = data.Bool("delayBetweenBerries");
18+
includeGoldens = data.Bool("includeGoldens");
19+
}
20+
21+
public override void OnStay(Player player) {
22+
base.OnStay(player);
23+
24+
if (collectTimer <= 0f) {
25+
ReadOnlyCollection<Type> berryTypes = StrawberryRegistry.GetBerryTypes();
26+
List<IStrawberry> followingBerries = new List<IStrawberry>();
27+
foreach (Follower follower in player.Leader.Followers) {
28+
if (berryTypes.Contains(follower.Entity.GetType())
29+
&& follower.Entity is IStrawberry berry
30+
&& (includeGoldens || !isGolden(berry))) {
31+
32+
followingBerries.Add(berry);
33+
}
34+
}
35+
foreach (IStrawberry berry in followingBerries) {
36+
berry.OnCollect();
37+
38+
if (delayBetweenBerries) {
39+
collectTimer = 0.3f;
40+
break;
41+
}
42+
}
43+
}
44+
}
45+
46+
private bool isGolden(IStrawberry berry) {
47+
if (berry.GetType() == typeof(Strawberry)) {
48+
// vanilla berries are goldens if... they are goldens.
49+
return (berry as Strawberry).Golden;
50+
} else {
51+
// mod berries are "goldens" if they block normal collection.
52+
return StrawberryRegistry.GetRegisteredBerries().ToList()
53+
.Find(berryDef => berryDef.berryClass == berry.GetType())
54+
.blocksNormalCollection;
55+
}
56+
}
57+
58+
public override void Update() {
59+
base.Update();
60+
61+
if (delayBetweenBerries) {
62+
collectTimer -= Engine.DeltaTime;
63+
}
64+
}
65+
}
66+
}

0 commit comments

Comments
 (0)