mirror of
https://gitlab.com/cc-ru/ocelot/ocelot-desktop.git
synced 2025-12-19 18:49:19 +01:00
Have the SoundSource object store factories rather than sources
Closes #182.
This commit is contained in:
parent
2aba4a7969
commit
3b82541da6
@ -1 +1 @@
|
||||
Subproject commit 16b022033a861af41be3c126aa8824a7e3d12396
|
||||
Subproject commit da5dd8877035f4994b77047658561d316319b54b
|
||||
@ -30,10 +30,6 @@ object Audio extends Logging {
|
||||
|
||||
def isDisabled: Boolean = _disabled
|
||||
|
||||
def numSources: Int = synchronized {
|
||||
sources.size
|
||||
}
|
||||
|
||||
def newStream(
|
||||
soundCategory: SoundCategory.Value,
|
||||
pitch: Float = 1f,
|
||||
@ -81,7 +77,7 @@ object Audio extends Logging {
|
||||
}
|
||||
}
|
||||
|
||||
source = SoundSource.fromStream(stream, soundCategory, looping = false, pitch, volume)
|
||||
source = SoundSource.fromStream(stream, soundCategory, looping = false, pitch, volume).build()
|
||||
(stream, source)
|
||||
}
|
||||
|
||||
@ -118,7 +114,7 @@ object Audio extends Logging {
|
||||
tx.onFailure { AL10W.alDeleteSources(sourceId) }
|
||||
|
||||
source.kind match {
|
||||
case SoundSource.KindSoundBuffer(buffer) =>
|
||||
case SoundSource.Kind.Buffer(buffer) =>
|
||||
buffer.bufferId match {
|
||||
case Some(bufferId) =>
|
||||
AL10W.alSourcei(sourceId, AL10.AL_BUFFER, bufferId)
|
||||
@ -128,14 +124,14 @@ object Audio extends Logging {
|
||||
tx.abort()
|
||||
}
|
||||
|
||||
case SoundSource.KindSoundSamples(samples) =>
|
||||
case SoundSource.Kind.Samples(samples) =>
|
||||
Transaction.run { innerTx =>
|
||||
val bufferId = samples.genBuffer().getOrElse { tx.abort() }
|
||||
innerTx.onFailure { AL10W.alDeleteBuffers(bufferId) }
|
||||
AL10W.alSourceQueueBuffers(sourceId, bufferId)
|
||||
}
|
||||
|
||||
case SoundSource.KindStream(_) =>
|
||||
case SoundSource.Kind.Stream(_) =>
|
||||
}
|
||||
|
||||
AL10W.alSourcef(sourceId, AL10.AL_PITCH, source.pitch)
|
||||
|
||||
@ -3,7 +3,7 @@ package ocelot.desktop.audio
|
||||
import java.nio.ByteBuffer
|
||||
|
||||
object BeepGenerator {
|
||||
def newBeep(pattern: String, frequency: Short, duration: Short): SoundSource = {
|
||||
def newBeep(pattern: String, frequency: Short, duration: Short): SoundSource.Factory = {
|
||||
val sampleCounts = pattern.toCharArray
|
||||
.map(ch => if (ch == '.') duration else 2 * duration)
|
||||
.map(_ * Audio.sampleRate / 1000)
|
||||
|
||||
@ -1,6 +0,0 @@
|
||||
package ocelot.desktop.audio
|
||||
|
||||
trait ClickSoundSource {
|
||||
def press: SoundSource
|
||||
def release: SoundSource
|
||||
}
|
||||
@ -0,0 +1,6 @@
|
||||
package ocelot.desktop.audio
|
||||
|
||||
trait ClickSoundSourceFactory {
|
||||
def press: SoundSource.Factory
|
||||
def release: SoundSource.Factory
|
||||
}
|
||||
@ -14,10 +14,10 @@ class SoundSource(
|
||||
var position: Vector3D = Vector3D(0, 0, 0),
|
||||
) {
|
||||
def duration: Option[Duration] = kind match {
|
||||
case SoundSource.KindSoundBuffer(buffer) =>
|
||||
case SoundSource.Kind.Buffer(buffer) =>
|
||||
Some(Duration(buffer.numSamples.toFloat / buffer.sampleRate, TimeUnit.SECONDS))
|
||||
|
||||
case SoundSource.KindSoundSamples(SoundSamples(buffer, rate, format)) =>
|
||||
case SoundSource.Kind.Samples(SoundSamples(buffer, rate, format)) =>
|
||||
val bps = format match {
|
||||
case SoundSamples.Format.Stereo16 => 2
|
||||
case SoundSamples.Format.Mono8 => 1
|
||||
@ -26,7 +26,7 @@ class SoundSource(
|
||||
|
||||
Some(Duration(buffer.limit().toFloat / (rate * bps), TimeUnit.SECONDS))
|
||||
|
||||
case SoundSource.KindStream(_) =>
|
||||
case SoundSource.Kind.Stream(_) =>
|
||||
None
|
||||
}
|
||||
|
||||
@ -62,26 +62,52 @@ class SoundSource(
|
||||
object SoundSource {
|
||||
sealed trait Kind
|
||||
|
||||
case class KindSoundBuffer(buffer: SoundBuffer) extends Kind
|
||||
|
||||
case class KindSoundSamples(samples: SoundSamples) extends Kind
|
||||
|
||||
case class KindStream(stream: SoundStream) extends Kind
|
||||
|
||||
def fromBuffer(buffer: SoundBuffer, soundCategory: SoundCategory.Value,
|
||||
looping: Boolean = false, pitch: Float = 1f, volume: Float = 1f): SoundSource = {
|
||||
new SoundSource(SoundSource.KindSoundBuffer(buffer), soundCategory, looping, pitch, volume)
|
||||
object Kind {
|
||||
case class Buffer(buffer: SoundBuffer) extends Kind
|
||||
case class Samples(samples: SoundSamples) extends Kind
|
||||
case class Stream(stream: SoundStream) extends Kind
|
||||
}
|
||||
|
||||
def fromSamples(samples: SoundSamples, soundCategory: SoundCategory.Value,
|
||||
looping: Boolean = false, pitch: Float = 1f, volume: Float = 1f): SoundSource = {
|
||||
new SoundSource(SoundSource.KindSoundSamples(samples), soundCategory, looping, pitch, volume)
|
||||
class Factory(
|
||||
val kind: Kind,
|
||||
val soundCategory: SoundCategory.Value,
|
||||
val looping: Boolean,
|
||||
val pitch: Float,
|
||||
val volume: Float,
|
||||
) {
|
||||
def build(): SoundSource = new SoundSource(kind, soundCategory, looping, pitch, volume)
|
||||
|
||||
def play(): SoundSource = {
|
||||
val source = build()
|
||||
source.play()
|
||||
|
||||
source
|
||||
}
|
||||
}
|
||||
|
||||
def fromStream(stream: SoundStream, soundCategory: SoundCategory.Value,
|
||||
looping: Boolean = false, pitch: Float = 1f, volume: Float = 1f): SoundSource = {
|
||||
new SoundSource(SoundSource.KindStream(stream), soundCategory, looping, pitch, volume)
|
||||
}
|
||||
def fromBuffer(
|
||||
buffer: SoundBuffer,
|
||||
soundCategory: SoundCategory.Value,
|
||||
looping: Boolean = false,
|
||||
pitch: Float = 1f,
|
||||
volume: Float = 1f,
|
||||
): Factory = new Factory(SoundSource.Kind.Buffer(buffer), soundCategory, looping, pitch, volume)
|
||||
|
||||
def fromSamples(
|
||||
samples: SoundSamples,
|
||||
soundCategory: SoundCategory.Value,
|
||||
looping: Boolean = false,
|
||||
pitch: Float = 1f,
|
||||
volume: Float = 1f,
|
||||
): Factory = new Factory(SoundSource.Kind.Samples(samples), soundCategory, looping, pitch, volume)
|
||||
|
||||
def fromStream(
|
||||
stream: SoundStream,
|
||||
soundCategory: SoundCategory.Value,
|
||||
looping: Boolean = false,
|
||||
pitch: Float = 1f,
|
||||
volume: Float = 1f,
|
||||
): Factory = new Factory(SoundSource.Kind.Stream(stream), soundCategory, looping, pitch, volume)
|
||||
|
||||
object Status extends Enumeration {
|
||||
val Playing, Paused, Stopped = Value
|
||||
@ -89,44 +115,40 @@ object SoundSource {
|
||||
|
||||
// ----------------------------------------------------------------
|
||||
|
||||
object InterfaceClick extends ClickSoundSource {
|
||||
override lazy val press: SoundSource =
|
||||
SoundSource.fromBuffer(SoundBuffers.InterfaceClickPress, SoundCategory.Interface)
|
||||
object InterfaceClick extends ClickSoundSourceFactory {
|
||||
override lazy val press: Factory = SoundSource.fromBuffer(SoundBuffers.InterfaceClickPress, SoundCategory.Interface)
|
||||
|
||||
override lazy val release: SoundSource =
|
||||
override lazy val release: Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.InterfaceClickRelease, SoundCategory.Interface)
|
||||
}
|
||||
|
||||
object InterfaceClickLow extends ClickSoundSource {
|
||||
override lazy val press: SoundSource =
|
||||
object InterfaceClickLow extends ClickSoundSourceFactory {
|
||||
override lazy val press: Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.InterfaceClickPress, SoundCategory.Interface, pitch = 0.8f)
|
||||
|
||||
override lazy val release: SoundSource =
|
||||
override lazy val release: Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.InterfaceClickRelease, SoundCategory.Interface, pitch = 0.8f)
|
||||
}
|
||||
|
||||
object InterfaceTick extends ClickSoundSource {
|
||||
override lazy val press: SoundSource =
|
||||
SoundSource.fromBuffer(SoundBuffers.InterfaceTickPress, SoundCategory.Interface)
|
||||
object InterfaceTick extends ClickSoundSourceFactory {
|
||||
override lazy val press: Factory = SoundSource.fromBuffer(SoundBuffers.InterfaceTickPress, SoundCategory.Interface)
|
||||
|
||||
override lazy val release: SoundSource =
|
||||
override lazy val release: Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.InterfaceTickRelease, SoundCategory.Interface)
|
||||
}
|
||||
|
||||
lazy val InterfaceShutter: SoundSource =
|
||||
SoundSource.fromBuffer(SoundBuffers.InterfaceShutter, SoundCategory.Interface)
|
||||
lazy val InterfaceShutter: Factory = SoundSource.fromBuffer(SoundBuffers.InterfaceShutter, SoundCategory.Interface)
|
||||
|
||||
object MinecraftClick extends ClickSoundSource {
|
||||
override lazy val press: SoundSource =
|
||||
SoundSource.fromBuffer(SoundBuffers.MinecraftClickPress, SoundCategory.Interface)
|
||||
object MinecraftClick extends ClickSoundSourceFactory {
|
||||
override lazy val press: Factory = SoundSource.fromBuffer(SoundBuffers.MinecraftClickPress, SoundCategory.Interface)
|
||||
|
||||
override lazy val release: SoundSource =
|
||||
override lazy val release: Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.MinecraftClickRelease, SoundCategory.Interface)
|
||||
}
|
||||
|
||||
lazy val MachineFloppyInsert: SoundSource =
|
||||
lazy val MachineFloppyInsert: Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.MachineFloppyInsert, SoundCategory.Environment)
|
||||
|
||||
lazy val MachineFloppyEject: SoundSource =
|
||||
lazy val MachineFloppyEject: Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.MachineFloppyEject, SoundCategory.Environment)
|
||||
}
|
||||
|
||||
@ -5,7 +5,7 @@ import ocelot.desktop.color.Color
|
||||
import ocelot.desktop.util.NumberUtils.ExtendedFloat
|
||||
import ocelot.desktop.graphics.{Graphics, IconSource}
|
||||
import ocelot.desktop.inventory.item.SelfDestructingCardItem
|
||||
import ocelot.desktop.node.BoomCardFxHandler.{ExpandIntensity, ExpandPeriod, FlickerAlpha, FlickerDuty, GlowAlpha, MaxSize, MinSize}
|
||||
import ocelot.desktop.node.BoomCardFxHandler._
|
||||
import ocelot.desktop.ui.UiHandler
|
||||
import ocelot.desktop.ui.event.BrainEvent
|
||||
import ocelot.desktop.{ColorScheme, OcelotDesktop}
|
||||
@ -15,11 +15,11 @@ trait BoomCardFxHandler extends Node with PositionalSoundSourcesNode with SmokeP
|
||||
private var boomPhase: Float = -1
|
||||
|
||||
private lazy val explosionSound = {
|
||||
SoundSource.fromBuffer(SoundBuffers.MinecraftExplosion, SoundCategory.Environment)
|
||||
SoundSource.fromBuffer(SoundBuffers.MinecraftExplosion, SoundCategory.Environment).build()
|
||||
}
|
||||
|
||||
private lazy val countdownBeepSound = {
|
||||
SoundSource.fromBuffer(SoundBuffers.SelfDestructingCardCountdownBeep, SoundCategory.Environment)
|
||||
SoundSource.fromBuffer(SoundBuffers.SelfDestructingCardCountdownBeep, SoundCategory.Environment).build()
|
||||
}
|
||||
|
||||
override def soundSources: Seq[SoundSource] = super.soundSources ++ Seq(
|
||||
|
||||
@ -26,7 +26,7 @@ class TapeDriveNode(val tapeDrive: TapeDrive)
|
||||
SoundBuffers.MachineTapeRewind,
|
||||
SoundCategory.Records,
|
||||
looping = true,
|
||||
)
|
||||
).build()
|
||||
|
||||
private lazy val streams: (SoundStream, SoundSource) = Audio.newStream(SoundCategory.Records)
|
||||
private def stream: SoundStream = streams._1
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package ocelot.desktop.ui.widget
|
||||
|
||||
import ocelot.desktop.ColorScheme
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.color.Color
|
||||
import ocelot.desktop.geometry.Size2D
|
||||
import ocelot.desktop.graphics.Graphics
|
||||
@ -66,5 +66,5 @@ class Button(tooltip: Option[Tooltip] = None) extends Widget with MouseHandler w
|
||||
g.text(position.x + ((width - textWidth) / 2).round, position.y + 4, text)
|
||||
}
|
||||
|
||||
protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceClick
|
||||
protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceClick
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package ocelot.desktop.ui.widget
|
||||
|
||||
import ocelot.desktop.OcelotDesktop
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.geometry.Padding2D
|
||||
import ocelot.desktop.ui.layout.LinearLayout
|
||||
import ocelot.desktop.ui.widget.ChangeSimulationSpeedDialog.validateIntervalUs
|
||||
@ -89,7 +89,7 @@ class ChangeSimulationSpeedDialog extends ModalDialog {
|
||||
children :+= new PaddingBox(
|
||||
new Button {
|
||||
override def text: String = "Cancel"
|
||||
override protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceClickLow
|
||||
override protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceClickLow
|
||||
override def onClick(): Unit = close()
|
||||
},
|
||||
Padding2D(right = 8),
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package ocelot.desktop.ui.widget
|
||||
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.geometry.Padding2D
|
||||
import ocelot.desktop.ui.layout.LinearLayout
|
||||
import ocelot.desktop.ui.widget.modal.ModalDialog
|
||||
@ -24,7 +24,7 @@ class CloseConfirmationDialog extends ModalDialog {
|
||||
children :+= new PaddingBox(
|
||||
new Button {
|
||||
override def text: String = "Cancel"
|
||||
override protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceClickLow
|
||||
override protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceClickLow
|
||||
override def onClick(): Unit = close()
|
||||
},
|
||||
Padding2D(left = 8),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package ocelot.desktop.ui.widget
|
||||
|
||||
import ocelot.desktop.ColorScheme
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.color.Color
|
||||
import ocelot.desktop.geometry.Size2D
|
||||
import ocelot.desktop.graphics.{Graphics, IconSource}
|
||||
@ -196,7 +196,7 @@ class IconButton(
|
||||
iconMixAnimation.update()
|
||||
}
|
||||
|
||||
protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceClick
|
||||
protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceClick
|
||||
}
|
||||
|
||||
object IconButton {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package ocelot.desktop.ui.widget
|
||||
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.geometry.Padding2D
|
||||
import ocelot.desktop.ui.layout.LinearLayout
|
||||
import ocelot.desktop.ui.widget.modal.ModalDialog
|
||||
@ -43,7 +43,7 @@ class InputDialog(
|
||||
children :+= new Filler
|
||||
children :+= new Button {
|
||||
override def text: String = "Cancel"
|
||||
override protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceClickLow
|
||||
override protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceClickLow
|
||||
override def onClick(): Unit = close()
|
||||
}
|
||||
children :+= new PaddingBox(
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package ocelot.desktop.ui.widget
|
||||
|
||||
import ocelot.desktop.ColorScheme
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.color.Color
|
||||
import ocelot.desktop.geometry.{Padding2D, Size2D}
|
||||
import ocelot.desktop.graphics.Graphics
|
||||
@ -51,5 +51,5 @@ class MenuBarButton(label: String, handler: () => Unit = () => {}) extends Widge
|
||||
drawChildren(g)
|
||||
}
|
||||
|
||||
protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceClick
|
||||
protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceClick
|
||||
}
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package ocelot.desktop.ui.widget
|
||||
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.geometry.Padding2D
|
||||
import ocelot.desktop.node.nodes.ScreenNode
|
||||
import ocelot.desktop.ui.layout.LinearLayout
|
||||
@ -77,7 +77,7 @@ class ScreenAspectRatioDialog(screenNode: ScreenNode) extends ModalDialog {
|
||||
children :+= new PaddingBox(
|
||||
new Button {
|
||||
override def text: String = "Cancel"
|
||||
override protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceClickLow
|
||||
override protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceClickLow
|
||||
override def onClick(): Unit = close()
|
||||
},
|
||||
Padding2D(right = 8),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package ocelot.desktop.ui.widget
|
||||
|
||||
import ocelot.desktop.ColorScheme
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.color.Color
|
||||
import ocelot.desktop.util.NumberUtils.ExtendedFloat
|
||||
import ocelot.desktop.geometry.Size2D
|
||||
@ -106,5 +106,5 @@ class Slider(var value: Float, val text: String, val snapPoints: Int = 0)
|
||||
g.text(position.x + ((width - textWidth) / 2).round, position.y + 4, formatText)
|
||||
}
|
||||
|
||||
protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceTick
|
||||
protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceTick
|
||||
}
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package ocelot.desktop.ui.widget
|
||||
|
||||
import ocelot.desktop.ColorScheme
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.geometry.{Padding2D, Size2D}
|
||||
import ocelot.desktop.graphics.IconSource
|
||||
import ocelot.desktop.ui.UiHandler
|
||||
@ -66,7 +66,7 @@ class TunnelDialog(
|
||||
children :+= new Filler
|
||||
children :+= new Button {
|
||||
override def text: String = "Cancel"
|
||||
override protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceClickLow
|
||||
override protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceClickLow
|
||||
override def onClick(): Unit = close()
|
||||
}
|
||||
children :+= new PaddingBox(
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package ocelot.desktop.ui.widget.contextmenu
|
||||
|
||||
import ocelot.desktop.ColorScheme
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.color.Color
|
||||
import ocelot.desktop.geometry.{Padding2D, Size2D}
|
||||
import ocelot.desktop.graphics.{Graphics, IconSource}
|
||||
@ -16,8 +16,8 @@ class ContextMenuEntry(
|
||||
label: String,
|
||||
icon: Option[ContextMenuIcon] = None,
|
||||
onClick: () => Unit = () => {},
|
||||
sound: ClickSoundSource = SoundSource.InterfaceClick,
|
||||
soundDisabled: ClickSoundSource = SoundSource.InterfaceClickLow,
|
||||
sound: ClickSoundSourceFactory = SoundSource.InterfaceClick,
|
||||
soundDisabled: ClickSoundSourceFactory = SoundSource.InterfaceClickLow,
|
||||
) extends Widget with MouseHandler with HoverHandler {
|
||||
|
||||
private[contextmenu] val alpha = new ValueAnimation(0f, 10f)
|
||||
@ -132,7 +132,7 @@ class ContextMenuEntry(
|
||||
g.restore()
|
||||
}
|
||||
|
||||
protected def clickSoundSource: ClickSoundSource =
|
||||
protected def clickSoundSource: ClickSoundSourceFactory =
|
||||
if (isEnabled) sound else soundDisabled
|
||||
}
|
||||
|
||||
@ -172,7 +172,7 @@ object ContextMenuEntry {
|
||||
def apply(
|
||||
label: String,
|
||||
icon: IconSource,
|
||||
sound: ClickSoundSource,
|
||||
sound: ClickSoundSourceFactory,
|
||||
)(onClick: => Unit): ContextMenuEntry = {
|
||||
new ContextMenuEntry(
|
||||
label,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package ocelot.desktop.ui.widget.settings
|
||||
|
||||
import ocelot.desktop.{ColorScheme, Settings}
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.geometry.{Padding2D, Size2D}
|
||||
import ocelot.desktop.graphics.Graphics
|
||||
import ocelot.desktop.ui.layout.LinearLayout
|
||||
@ -39,7 +39,7 @@ class SettingsDialog extends ModalDialog {
|
||||
|
||||
children :+= new Button {
|
||||
override def text: String = "Cancel"
|
||||
override protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceClickLow
|
||||
override protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceClickLow
|
||||
override def onClick(): Unit = {
|
||||
resetSettings()
|
||||
close()
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package ocelot.desktop.ui.widget.verticalmenu
|
||||
|
||||
import ocelot.desktop.ColorScheme
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.color.Color
|
||||
import ocelot.desktop.geometry.{Padding2D, Size2D}
|
||||
import ocelot.desktop.graphics.{Graphics, IconSource}
|
||||
@ -68,5 +68,5 @@ class VerticalMenuButton(icon: IconSource, label: String, handler: VerticalMenuB
|
||||
drawChildren(g)
|
||||
}
|
||||
|
||||
protected def clickSoundSource: ClickSoundSource = SoundSource.InterfaceClick
|
||||
protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.InterfaceClick
|
||||
}
|
||||
|
||||
@ -7,7 +7,7 @@ trait AudibleComputerAware extends ComputerAware {
|
||||
SoundBuffers.MachineComputerRunning,
|
||||
SoundCategory.Environment,
|
||||
looping = true,
|
||||
)
|
||||
).build()
|
||||
|
||||
def updateRunningSound(): Unit = {
|
||||
if (!computer.machine.isRunning && soundComputerRunning.playing) {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package ocelot.desktop.windows
|
||||
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.geometry.{Padding2D, Size2D}
|
||||
import ocelot.desktop.graphics.{Graphics, IconSource}
|
||||
import ocelot.desktop.inventory.item.ServerItem
|
||||
@ -219,7 +219,7 @@ class ComputerWindow(computerAware: ComputerAware) extends BasicWindow {
|
||||
|
||||
override def onReleased(): Unit = computerAware.turnOff()
|
||||
|
||||
override protected def clickSoundSource: ClickSoundSource = SoundSource.MinecraftClick
|
||||
override protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.MinecraftClick
|
||||
}
|
||||
},
|
||||
Padding2D(
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
package ocelot.desktop.windows
|
||||
|
||||
import ocelot.desktop.ColorScheme
|
||||
import ocelot.desktop.audio.{ClickSoundSource, SoundSource}
|
||||
import ocelot.desktop.audio.{ClickSoundSourceFactory, SoundSource}
|
||||
import ocelot.desktop.color.Color
|
||||
import ocelot.desktop.geometry.{Padding2D, Rect2D, Size2D}
|
||||
import ocelot.desktop.graphics.{Graphics, IconSource}
|
||||
@ -256,7 +256,7 @@ class RackWindow(rackNode: RackNode) extends PanelWindow {
|
||||
g.text(x, y, text)
|
||||
}
|
||||
|
||||
override protected def clickSoundSource: ClickSoundSource = SoundSource.MinecraftClick
|
||||
override protected def clickSoundSource: ClickSoundSourceFactory = SoundSource.MinecraftClick
|
||||
},
|
||||
Padding2D(left = -15, top = 45),
|
||||
)
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
package ocelot.desktop.windows
|
||||
|
||||
import ocelot.desktop.audio.{Audio, ClickSoundSource, SoundBuffers, SoundCategory, SoundSource}
|
||||
import ocelot.desktop.audio.{Audio, ClickSoundSourceFactory, SoundBuffers, SoundCategory, SoundSource}
|
||||
import ocelot.desktop.color.{Color, RGBAColorNorm}
|
||||
import ocelot.desktop.geometry.{Padding2D, Size2D}
|
||||
import ocelot.desktop.graphics.{Graphics, IconSource}
|
||||
@ -143,7 +143,7 @@ class TapeDriveWindow(val tapeDriveNode: TapeDriveNode) extends PanelWindow {
|
||||
}
|
||||
}
|
||||
|
||||
override protected def clickSoundSource: ClickSoundSource = TapeButtonSound
|
||||
override protected def clickSoundSource: ClickSoundSourceFactory = TapeButtonSound
|
||||
}
|
||||
}
|
||||
|
||||
@ -158,17 +158,17 @@ class TapeDriveWindow(val tapeDriveNode: TapeDriveNode) extends PanelWindow {
|
||||
}
|
||||
|
||||
object TapeDriveWindow {
|
||||
private object TapeButtonSound extends ClickSoundSource {
|
||||
override lazy val press: SoundSource =
|
||||
private object TapeButtonSound extends ClickSoundSourceFactory {
|
||||
override lazy val press: SoundSource.Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.MachineTapeButtonPress, SoundCategory.Environment)
|
||||
|
||||
override lazy val release: SoundSource =
|
||||
override lazy val release: SoundSource.Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.MachineTapeButtonRelease, SoundCategory.Environment)
|
||||
}
|
||||
|
||||
private lazy val TapeInsert: SoundSource =
|
||||
private lazy val TapeInsert: SoundSource.Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.MachineTapeInsert, SoundCategory.Environment)
|
||||
|
||||
private lazy val TapeEject: SoundSource =
|
||||
private lazy val TapeEject: SoundSource.Factory =
|
||||
SoundSource.fromBuffer(SoundBuffers.MachineTapeEject, SoundCategory.Environment)
|
||||
}
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user