From 79cde4cfbda7b6046638f6301884cbe2526fcdda Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Mon, 14 Dec 2020 20:16:03 +0100 Subject: [PATCH] Add new trigger point: 'EOF_STATE' --- .../src/main/resources/lang/_de.properties | 5 ++++- .../trigger/PadTriggerDurationListener.java | 14 +++++++------- .../trigger/PadTriggerStatusListener.java | 8 ++++---- .../de/tobias/playpad/tigger/Trigger.java | 14 ++++++++------ .../tobias/playpad/tigger/TriggerPoint.java | 19 ++++++++++++++++--- 5 files changed, 39 insertions(+), 21 deletions(-) diff --git a/PlayWall/src/main/resources/lang/_de.properties b/PlayWall/src/main/resources/lang/_de.properties index 991f9855..33029a52 100755 --- a/PlayWall/src/main/resources/lang/_de.properties +++ b/PlayWall/src/main/resources/lang/_de.properties @@ -209,10 +209,13 @@ UI.Window.Settings.Updates.CurrentVersion={} (Build {}) TriggerPoint.toString={} ({}) Trigger.Cart.Name=Kacheln Trigger.Volume.Name=Lautst\u00E4rke + # TriggerPoint - Enum TriggerPoint.START=Start TriggerPoint.STOP=Stop -TriggerPoint.EOF=Ende (EoF) +TriggerPoint.EOF=Ende +TriggerPoint.EOF_STATE=Ende (EoF) + # Drag and Drop Mode DnDMode.Replace=Ersetzen DnDMode.Duplicate=Duplizieren diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java index 5ed71ddb..83412167 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerDurationListener.java @@ -22,22 +22,22 @@ public class PadTriggerDurationListener implements ChangeListener<Duration> { } @Override - public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration newValue) { + public void changed(ObservableValue<? extends Duration> observable, Duration oldValue, Duration currentTime) { PadContent content = pad.getContent(); if (content instanceof Durationable) { Duration totalDuration = ((Durationable) content).getDuration(); if (totalDuration != null) { - Duration leftTime = totalDuration.subtract(newValue); - IMainViewController mainViewController = PlayPadPlugin.getInstance().getMainViewController(); Profile currentProfile = Profile.currentProfile(); PadSettings padSettings = pad.getPadSettings(); - // Execute Triggers - Trigger startTrigger = padSettings.getTrigger(TriggerPoint.START); - startTrigger.handle(pad, newValue, pad.getProject(), mainViewController, currentProfile); + // Execute Start Triggers + final Trigger startTrigger = padSettings.getTrigger(TriggerPoint.START); + startTrigger.handle(pad, currentTime, pad.getProject(), mainViewController, currentProfile); - Trigger endTrigger = padSettings.getTrigger(TriggerPoint.EOF); + // Execute End Trigger + final Duration leftTime = totalDuration.subtract(currentTime); + final Trigger endTrigger = padSettings.getTrigger(TriggerPoint.EOF); endTrigger.handle(pad, leftTime, pad.getProject(), mainViewController, currentProfile); } } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java index f7edfbdf..94459f05 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/pad/listener/trigger/PadTriggerStatusListener.java @@ -26,12 +26,12 @@ public class PadTriggerStatusListener implements ChangeListener<PadStatus> { PadSettings padSettings = pad.getPadSettings(); // Execute Trigger - if (newValue == PadStatus.PLAY) { // TRIGGER FÜR START + if (newValue == PadStatus.PLAY) { executeTrigger(padSettings.getTriggers().get(TriggerPoint.START)); - } else if (newValue == PadStatus.STOP) { // TRIGGER FÜR STOP + } else if (newValue == PadStatus.STOP) { executeTrigger(padSettings.getTriggers().get(TriggerPoint.STOP)); - } else if (oldValue == PadStatus.PLAY && newValue == PadStatus.READY && pad.isEof()) { // TRIGGER FÜR EOF - executeTrigger(padSettings.getTriggers().get(TriggerPoint.EOF)); + } else if (oldValue == PadStatus.PLAY && newValue == PadStatus.READY && pad.isEof()) { + executeTrigger(padSettings.getTriggers().get(TriggerPoint.EOF_STATE)); } } else { pad.setIgnoreTrigger(false); diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java index fcfb8301..ba284a16 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/Trigger.java @@ -104,20 +104,22 @@ public class Trigger { return triggerPoint.name() + " (" + items.size() + ")"; } - public void handle(Pad pad, Duration duration, Project project, IMainViewController mainViewController, Profile currentProfile) { + public void handle(Pad pad, Duration currentDuration, Project project, IMainViewController mainViewController, Profile currentProfile) { for (TriggerItem item : items) { if (triggerPoint == TriggerPoint.START) { - handleStartPoint(pad, duration, project, mainViewController, currentProfile, item); + handleStartPoint(pad, currentDuration, project, mainViewController, currentProfile, item); } else if (triggerPoint == TriggerPoint.STOP) { - handleEndPoint(pad, duration, project, mainViewController, currentProfile, item); + handleEndPoint(pad, currentDuration, project, mainViewController, currentProfile, item); } else if (triggerPoint == TriggerPoint.EOF) { - handleEndPoint(pad, duration, project, mainViewController, currentProfile, item); + handleEndPoint(pad, currentDuration, project, mainViewController, currentProfile, item); + } else if (triggerPoint == TriggerPoint.EOF_STATE) { + item.performAction(pad, project, mainViewController, currentProfile); } } } private void handleEndPoint(Pad pad, Duration duration, Project project, IMainViewController mainViewController, Profile currentProfile, TriggerItem item) { - // Wenn Trigger noch nicht gespiel wurde (null) und Zeit größer ist als gesetzte Zeit (oder 0) + // Wenn Trigger noch nicht gespielt wurde (null) und Zeit größer ist als gesetzte Zeit (oder 0) if (item.getPerformedAt() == null && (item.getDurationFromPoint().greaterThan(duration) || duration.equals(Duration.ZERO))) { item.performAction(pad, project, mainViewController, currentProfile); item.setPerformedAt(duration); @@ -128,7 +130,7 @@ public class Trigger { private void handleStartPoint(Pad pad, Duration duration, Project project, IMainViewController mainViewController, Profile currentProfile, TriggerItem item) { if (pad.getStatus() == PadStatus.PLAY) { - // Mitten drin, wenn die Zeit die gespiel wurde größer ist als die gesetzte und noch der Trigger noch nicht ausgeführt + // Mitten drin, wenn die Zeit die gespielt wurde größer ist als die gesetzte und noch der Trigger noch nicht ausgeführt // wurde (null) if ((item.getPerformedAt() == null && item.getDurationFromPoint().lessThan(duration)) // Wenn der Trigger am Anfang ist diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java index c25fb939..4f1390d9 100644 --- a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java +++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/TriggerPoint.java @@ -2,8 +2,21 @@ package de.tobias.playpad.tigger; public enum TriggerPoint { - START, - STOP, - EOF + START(true), + STOP(false), + EOF(true), + EOF_STATE(false); + /** + * Defines if a trigger can be run after, before a certain event. + */ + private final boolean timeAppendable; + + TriggerPoint(boolean timeAppendable) { + this.timeAppendable = timeAppendable; + } + + public boolean isTimeAppendable() { + return timeAppendable; + } } -- GitLab