Auto Spaceball dispense (#286)

This commit is contained in:
Braedon Lewis 2023-02-18 17:12:49 -05:00 committed by GitHub
parent dbe8f7dcf3
commit d1511af689
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 19 additions and 8 deletions

View file

@ -258,15 +258,20 @@ namespace HeavenStudio
} }
} }
public void SeekAheadAndDoPreEvent(double start, float seekTime = 2f) public void SeekAheadAndDoPreEvent(double start)
{ {
List<float> entities = Beatmap.entities.Select(c => c.beat).ToList(); List<float> entities = Beatmap.entities.Select(c => c.beat).ToList();
if (currentPreSequence < Beatmap.entities.Count && currentPreSequence >= 0) if (currentPreSequence < Beatmap.entities.Count && currentPreSequence >= 0)
{ {
var seekEntity = Beatmap.entities[currentPreSequence];
float seekTime = EventCaller.instance.GetGameAction(
EventCaller.instance.GetMinigame(seekEntity.datamodel.Split(0)), seekEntity.datamodel.Split(1)).preFunctionLength;
if (start + seekTime >= entities[currentPreSequence]) if (start + seekTime >= entities[currentPreSequence])
{ {
float beat = Beatmap.entities[currentPreSequence].beat; float beat = seekEntity.beat;
var entitiesAtSameBeat = Beatmap.entities.FindAll(c => c.beat == Beatmap.entities[currentPreSequence].beat); var entitiesAtSameBeat = Beatmap.entities.FindAll(c => c.beat == seekEntity.beat);
SortEventsByPriority(entitiesAtSameBeat); SortEventsByPriority(entitiesAtSameBeat);
foreach (DynamicBeatmap.DynamicEntity entity in entitiesAtSameBeat) foreach (DynamicBeatmap.DynamicEntity entity in entitiesAtSameBeat)
{ {
@ -340,7 +345,7 @@ namespace HeavenStudio
//seek ahead to preload games that have assetbundles //seek ahead to preload games that have assetbundles
SeekAheadAndPreload(Conductor.instance.songPositionInBeatsAsDouble, seekTime); SeekAheadAndPreload(Conductor.instance.songPositionInBeatsAsDouble, seekTime);
SeekAheadAndDoPreEvent(Conductor.instance.songPositionInBeatsAsDouble, 2f); SeekAheadAndDoPreEvent(Conductor.instance.songPositionInBeatsAsDouble);
if (currentEvent < Beatmap.entities.Count && currentEvent >= 0) if (currentEvent < Beatmap.entities.Count && currentEvent >= 0)
{ {

View file

@ -13,7 +13,9 @@ namespace HeavenStudio.Games.Loaders
{ {
new GameAction("shoot", "Pitch Ball") new GameAction("shoot", "Pitch Ball")
{ {
function = delegate { Spaceball.instance.Shoot(eventCaller.currentEntity.beat, false, eventCaller.currentEntity["type"]); }, function = delegate { Spaceball.instance.Shoot(eventCaller.currentEntity.beat, false, eventCaller.currentEntity["type"]); },
preFunction = delegate { Spaceball.instance.PrepareDispenser(); },
preFunctionLength = 1,
defaultLength = 2, defaultLength = 2,
parameters = new List<Param>() parameters = new List<Param>()
{ {
@ -22,7 +24,9 @@ namespace HeavenStudio.Games.Loaders
}, },
new GameAction("shootHigh", "Pitch High Ball") new GameAction("shootHigh", "Pitch High Ball")
{ {
function = delegate { Spaceball.instance.Shoot(eventCaller.currentEntity.beat, true, eventCaller.currentEntity["type"]); }, function = delegate { Spaceball.instance.Shoot(eventCaller.currentEntity.beat, true, eventCaller.currentEntity["type"]); },
preFunction = delegate { Spaceball.instance.PrepareDispenser(); },
preFunctionLength = 1,
defaultLength = 3, defaultLength = 3,
parameters = new List<Param>() parameters = new List<Param>()
{ {
@ -56,7 +60,7 @@ namespace HeavenStudio.Games.Loaders
{ {
function = delegate { Spaceball.instance.PrepareDispenser(); }, function = delegate { Spaceball.instance.PrepareDispenser(); },
}, },
}); });;
} }
} }
} }

View file

@ -155,6 +155,7 @@ namespace HeavenStudio
public int priority = 0; public int priority = 0;
public EventCallback inactiveFunction = delegate { }; public EventCallback inactiveFunction = delegate { };
public EventCallback preFunction = delegate { }; public EventCallback preFunction = delegate { };
public float preFunctionLength = 2.0f;
/// <summary> /// <summary>
/// <para>Creates a block that can be used in the editor. The block's function and attributes are defined in the parentheses.</para> /// <para>Creates a block that can be used in the editor. The block's function and attributes are defined in the parentheses.</para>
@ -172,7 +173,7 @@ namespace HeavenStudio
/// <param name="hidden">Prevents the block from being shown in the game list. Block will still function normally if it is in the timeline.</param> /// <param name="hidden">Prevents the block from being shown in the game list. Block will still function normally if it is in the timeline.</param>
/// <param name="preFunction">Runs two beats before this event is reached.</param> /// <param name="preFunction">Runs two beats before this event is reached.</param>
/// <param name="priority">Priority of this event. Higher priority events will be run first.</param> /// <param name="priority">Priority of this event. Higher priority events will be run first.</param>
public GameAction(string actionName, string displayName, float defaultLength = 1, bool resizable = false, List<Param> parameters = null, EventCallback function = null, EventCallback inactiveFunction = null, EventCallback prescheduleFunction = null, bool hidden = false, EventCallback preFunction = null, int priority = 0) public GameAction(string actionName, string displayName, float defaultLength = 1, bool resizable = false, List<Param> parameters = null, EventCallback function = null, EventCallback inactiveFunction = null, EventCallback prescheduleFunction = null, bool hidden = false, EventCallback preFunction = null, int priority = 0, float preFunctionLength = 2.0f)
{ {
this.actionName = actionName; this.actionName = actionName;
if (displayName == String.Empty) this.displayName = actionName; if (displayName == String.Empty) this.displayName = actionName;
@ -186,6 +187,7 @@ namespace HeavenStudio
this.inactiveFunction = inactiveFunction ?? delegate { }; this.inactiveFunction = inactiveFunction ?? delegate { };
this.preFunction = prescheduleFunction ?? delegate { }; this.preFunction = prescheduleFunction ?? delegate { };
this.priority = priority; this.priority = priority;
this.preFunctionLength = preFunctionLength;
//todo: converting to new versions of GameActions //todo: converting to new versions of GameActions