From f1e3f311b1ba7dd03f9fd0eefe48e83fa387bd15 Mon Sep 17 00:00:00 2001 From: tobias <thinkdifferent055@gmail.com> Date: Thu, 25 Nov 2021 16:58:20 +0100 Subject: [PATCH] #173 - Fix issue for play trigger on next content player --- .../playpad/trigger/CartTriggerItem.java | 4 ++- .../playpad/tigger/LocalPadTrigger.java | 8 +++++ .../pad/ContentPlayerMediaContainer.scala | 12 +++---- .../content/pad/ContentPlayerPadContent.scala | 36 ++++++++++++++----- 4 files changed, 44 insertions(+), 16 deletions(-) create mode 100644 PlayWallCore/src/main/java/de/tobias/playpad/tigger/LocalPadTrigger.java diff --git a/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java b/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java index 96018fd9..07c7b4dd 100644 --- a/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java +++ b/PlayWall/src/main/java/de/tobias/playpad/trigger/CartTriggerItem.java @@ -5,6 +5,7 @@ import de.tobias.playpad.pad.Pad; import de.tobias.playpad.pad.PadStatus; import de.tobias.playpad.profile.Profile; import de.tobias.playpad.project.Project; +import de.tobias.playpad.tigger.LocalPadTrigger; import de.tobias.playpad.tigger.TriggerItem; import de.tobias.playpad.viewcontroller.main.IMainViewController; import org.dom4j.Element; @@ -12,7 +13,7 @@ import org.dom4j.Element; import java.util.List; import java.util.UUID; -public class CartTriggerItem extends TriggerItem { +public class CartTriggerItem extends TriggerItem implements LocalPadTrigger { private List<UUID> uuids; private boolean allCarts; @@ -27,6 +28,7 @@ public class CartTriggerItem extends TriggerItem { this.uuids = new UniqList<>(); } + @Override public List<UUID> getCarts() { return uuids; } diff --git a/PlayWallCore/src/main/java/de/tobias/playpad/tigger/LocalPadTrigger.java b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/LocalPadTrigger.java new file mode 100644 index 00000000..ab466891 --- /dev/null +++ b/PlayWallCore/src/main/java/de/tobias/playpad/tigger/LocalPadTrigger.java @@ -0,0 +1,8 @@ +package de.tobias.playpad.tigger; + +import java.util.List; +import java.util.UUID; + +public interface LocalPadTrigger { + List<UUID> getCarts(); +} diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala index 63002be0..e524e428 100644 --- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala +++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerMediaContainer.scala @@ -37,7 +37,7 @@ class ContentPlayerMediaContainer(val content: ContentPlayerPadContent, private[ ContentPluginMain.playerViewController.play(this, withFadeIn) content.getPad.setEof(false) - content.currentPlayingMediaIndexProperty().set(content.getMediaPlayers.indexOf(this)) + content.currentPlayingMediaIndexProperty().set(content.getMediaContainers.indexOf(this)) } def resume(withFadeIn: Boolean): Unit = { @@ -51,12 +51,12 @@ class ContentPlayerMediaContainer(val content: ContentPlayerPadContent, private[ def next(): Unit = { stop() - val players = content.getMediaPlayers - val index = players.indexOf(this) - content.currentPlayingMediaIndexProperty().set(index) + val players = content.getMediaContainers + val currentIndex = players.indexOf(this) + content.currentPlayingMediaIndexProperty().set(currentIndex) - if (index + 1 < players.length) { - players(index + 1).play(false) + if (currentIndex + 1 < players.length) { + players(currentIndex + 1).play(false) } else if (content.getPad.getPadSettings.isLoop) { players.head.play(false) } else { diff --git a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala index 215e2d23..07ef1279 100644 --- a/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala +++ b/PlayWallPlugins/PlayWallPluginContentPlayer/src/main/scala/de/tobias/playpad/plugin/content/pad/ContentPlayerPadContent.scala @@ -10,6 +10,7 @@ import de.tobias.playpad.plugin.content.ContentPluginMain import de.tobias.playpad.plugin.content.settings.{ContentPlayerPluginConfiguration, Zone} import de.tobias.playpad.plugin.content.util._ import de.tobias.playpad.profile.Profile +import de.tobias.playpad.tigger.{LocalPadTrigger, TriggerPoint} import javafx.application.Platform import javafx.beans.binding.{Bindings, ObjectBinding} import javafx.beans.property._ @@ -48,7 +49,7 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte override def currentPlayingMediaIndexProperty(): IntegerProperty = currentRunningIndexProperty - def getMediaPlayers: ObservableList[ContentPlayerMediaContainer] = mediaPlayers + def getMediaContainers: ObservableList[ContentPlayerMediaContainer] = mediaPlayers override def hasNext: Boolean = getCurrentPlayingMediaIndex + 1 < mediaPlayers.length @@ -92,25 +93,42 @@ class ContentPlayerPadContent(val pad: Pad, val `type`: String) extends PadConte } def onEof(): Unit = { + val hasLocalPadTrigger = getPad.getPadSettings.getTrigger(TriggerPoint.EOF) + .getItems + .stream() + .filter(item => item.isInstanceOf[LocalPadTrigger]) + .map(item => item.asInstanceOf[LocalPadTrigger]) + .filter(item => hasPadTriggerInterferingZones(item)) + .count() > 0 + + val noFurtherItemsInPlaylist = getCurrentPlayingMediaIndex + 1 == mediaPlayers.length + // By default the last frame will be displayed. Only under certain conditions the last frame will be cleared // 1. User settings set to "Clear last frame" // 2. There is no loop // 3. There is no playlist - if (!pad.getPadSettings.isLoop && getCurrentPlayingMediaIndex + 1 == mediaPlayers.length) { - if (!shouldShowLastFrame()) { - ContentPluginMain.playerViewController.clearHold(mediaPlayers(getCurrentPlayingMediaIndex)) - } else { + if (!pad.getPadSettings.isLoop && noFurtherItemsInPlaylist) { + if (shouldShowLastFrame() || hasLocalPadTrigger) { showingLastFrame = true return + } else { + ContentPluginMain.playerViewController.clearHold(mediaPlayers(getCurrentPlayingMediaIndex)) } } showingLastFrame = false + mediaPlayers(getCurrentPlayingMediaIndex).next() + } - if (getPad.isEof) { - mediaPlayers(getCurrentPlayingMediaIndex).next() - return - } + private def hasPadTriggerInterferingZones(item: LocalPadTrigger): Boolean = { + item.getCarts.stream().anyMatch(id => { + val content = pad.getProject.getPad(id).getContent + if (!content.isInstanceOf[ContentPlayerPadContent]) { + return false + } + val targetZones = content.asInstanceOf[ContentPlayerPadContent].getSelectedZones + return targetZones.exists(zone => getSelectedZones.contains(zone)) + }) } /* -- GitLab