Skip to content
Snippets Groups Projects
Commit f1e3f311 authored by Tobias Ullerich's avatar Tobias Ullerich
Browse files

#173 - Fix issue for play trigger on next content player

parent 554b5e91
No related branches found
No related tags found
No related merge requests found
......@@ -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;
}
......
package de.tobias.playpad.tigger;
import java.util.List;
import java.util.UUID;
public interface LocalPadTrigger {
List<UUID> getCarts();
}
......@@ -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 {
......
......@@ -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
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))
})
}
/*
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment