mirror of
https://gitlab.com/cc-ru/ocelot/ocelot-desktop.git
synced 2025-12-20 02:59:19 +01:00
66 lines
2.1 KiB
Scala
66 lines
2.1 KiB
Scala
package ocelot.desktop.node.nodes
|
|
|
|
import ocelot.desktop.graphics.IconSource
|
|
import ocelot.desktop.ui.event.{ClickEvent, MouseEvent}
|
|
import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry, ContextMenuIcon, ContextMenuSubmenu}
|
|
import totoro.ocelot.brain.entity.NoteBlock
|
|
import totoro.ocelot.brain.event.{EventBus, NoteBlockTriggerEvent}
|
|
|
|
class NoteBlockNode(val noteBlock: NoteBlock) extends NoteBlockNodeBase(noteBlock) {
|
|
override def icon: IconSource = IconSource.Nodes.NoteBlock
|
|
|
|
override def rotatable: Boolean = false
|
|
|
|
override def setupContextMenu(menu: ContextMenu, event: ClickEvent): Unit = {
|
|
menu.addEntry(new ContextMenuSubmenu("Instrument", Some(ContextMenuIcon(IconSource.Icons.Guitar))) {
|
|
{
|
|
val maxLen = NoteBlockNode.Instruments.map(_._2.length).max
|
|
|
|
for ((instrument, name) <- NoteBlockNode.Instruments) {
|
|
val dot = if (noteBlock.instrument == instrument) '•' else ' '
|
|
|
|
addEntry(ContextMenuEntry(name.padTo(maxLen, ' ') + dot) {
|
|
noteBlock.instrument = instrument
|
|
})
|
|
}
|
|
}
|
|
})
|
|
|
|
menu.addSeparator()
|
|
|
|
super.setupContextMenu(menu, event)
|
|
}
|
|
|
|
override def onClick(event: ClickEvent): Unit = {
|
|
event match {
|
|
case ClickEvent(MouseEvent.Button.Left, _) =>
|
|
if (noteBlock != null) {
|
|
EventBus.send(NoteBlockTriggerEvent(noteBlock.node.address, noteBlock.instrument, noteBlock.pitch - 1))
|
|
}
|
|
case _ =>
|
|
}
|
|
super.onClick(event)
|
|
}
|
|
}
|
|
|
|
object NoteBlockNode {
|
|
private val Instruments = List(
|
|
("bass", "Bass (Wood)"),
|
|
("snare", "Snare Drum (Sand)"),
|
|
("hat", "Hi-hat (Glass)"),
|
|
("basedrum", "Bass Drum (Stone)"),
|
|
("bell", "Glockenspiel (Gold)"),
|
|
("flute", "Flute (Clay)"),
|
|
("chime", "Chimes (Packed Ice)"),
|
|
("guitar", "Guitar (Wool)"),
|
|
("xylophone", "Xylophone (Bone)"),
|
|
("iron_xylophone", "Vibraphone (Iron)"),
|
|
("cow_bell", "Cow Bell (Soul Sand)"),
|
|
("didgeridoo", "Didgeridoo (Pumpkin)"),
|
|
("bit", "Square Wave (Emerald)"),
|
|
("banjo", "Banjo (Hay Bale)"),
|
|
("pling", "Electric Piano (Glowstone)"),
|
|
("harp", "Harp"),
|
|
)
|
|
}
|