mirror of
https://gitlab.com/cc-ru/ocelot/ocelot-desktop.git
synced 2025-12-20 02:59:19 +01:00
Added Self-Destruction Card & fixed some Tiered entities tooltips rendering
This commit is contained in:
parent
e036542576
commit
98ce517cef
@ -1 +1 @@
|
|||||||
Subproject commit 42dd5a966456654968af777d625c3e2f8b9265fa
|
Subproject commit d0b1eaf97c5e98e58310ca0759a88d2949eda4cb
|
||||||
BIN
sprites/items/SelfDestructingCard.png
Normal file
BIN
sprites/items/SelfDestructingCard.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 391 B |
Binary file not shown.
|
Before Width: | Height: | Size: 86 KiB After Width: | Height: | Size: 87 KiB |
@ -1,16 +1,16 @@
|
|||||||
BackgroundPattern 0 0 304 304
|
BackgroundPattern 0 0 304 304
|
||||||
BarSegment 329 349 16 4
|
BarSegment 357 349 16 4
|
||||||
ComputerMotherboard 305 129 79 70
|
ComputerMotherboard 305 129 79 70
|
||||||
Empty 506 126 1 1
|
Empty 506 126 1 1
|
||||||
EmptySlot 318 330 18 18
|
EmptySlot 335 330 18 18
|
||||||
Knob 385 129 50 50
|
Knob 385 129 50 50
|
||||||
KnobCenter 436 129 50 50
|
KnobCenter 436 129 50 50
|
||||||
KnobLimits 305 200 50 50
|
KnobLimits 305 200 50 50
|
||||||
ShadowBorder 505 15 1 24
|
ShadowBorder 505 15 1 24
|
||||||
ShadowCorner 301 305 24 24
|
ShadowCorner 301 305 24 24
|
||||||
TabArrow 502 0 8 14
|
TabArrow 502 0 8 14
|
||||||
buttons/BottomDrawerClose 337 330 18 18
|
buttons/BottomDrawerClose 354 330 18 18
|
||||||
buttons/BottomDrawerOpen 356 330 18 18
|
buttons/BottomDrawerOpen 373 330 18 18
|
||||||
buttons/OpenFMRadioCloseOff 242 402 7 8
|
buttons/OpenFMRadioCloseOff 242 402 7 8
|
||||||
buttons/OpenFMRadioCloseOn 250 402 7 8
|
buttons/OpenFMRadioCloseOn 250 402 7 8
|
||||||
buttons/OpenFMRadioRedstoneOff 502 87 8 8
|
buttons/OpenFMRadioRedstoneOff 502 87 8 8
|
||||||
@ -19,20 +19,20 @@ buttons/OpenFMRadioStartOff 326 305 24 24
|
|||||||
buttons/OpenFMRadioStartOn 351 305 24 24
|
buttons/OpenFMRadioStartOn 351 305 24 24
|
||||||
buttons/OpenFMRadioStopOff 376 305 24 24
|
buttons/OpenFMRadioStopOff 376 305 24 24
|
||||||
buttons/OpenFMRadioStopOn 401 305 24 24
|
buttons/OpenFMRadioStopOn 401 305 24 24
|
||||||
buttons/OpenFMRadioVolumeDownOff 482 330 10 10
|
buttons/OpenFMRadioVolumeDownOff 499 330 10 10
|
||||||
buttons/OpenFMRadioVolumeDownOn 493 330 10 10
|
buttons/OpenFMRadioVolumeDownOn 501 363 10 10
|
||||||
buttons/OpenFMRadioVolumeUpOff 501 363 10 10
|
buttons/OpenFMRadioVolumeUpOff 335 349 10 10
|
||||||
buttons/OpenFMRadioVolumeUpOn 318 349 10 10
|
buttons/OpenFMRadioVolumeUpOn 346 349 10 10
|
||||||
buttons/PowerOff 375 330 18 18
|
buttons/PowerOff 392 330 18 18
|
||||||
buttons/PowerOn 394 330 18 18
|
buttons/PowerOn 411 330 18 18
|
||||||
icons/ButtonCheck 301 363 17 17
|
icons/ButtonCheck 301 363 17 17
|
||||||
icons/ButtonClipboard 319 363 17 17
|
icons/ButtonClipboard 319 363 17 17
|
||||||
icons/ButtonRandomize 337 363 17 17
|
icons/ButtonRandomize 337 363 17 17
|
||||||
icons/CPU 301 381 16 16
|
icons/CPU 301 381 16 16
|
||||||
icons/Card 318 381 16 16
|
icons/Card 318 381 16 16
|
||||||
icons/ComponentBus 335 381 16 16
|
icons/ComponentBus 335 381 16 16
|
||||||
icons/DragLMB 413 330 21 14
|
icons/DragLMB 430 330 21 14
|
||||||
icons/DragRMB 435 330 21 14
|
icons/DragRMB 452 330 21 14
|
||||||
icons/EEPROM 352 381 16 16
|
icons/EEPROM 352 381 16 16
|
||||||
icons/Floppy 369 381 16 16
|
icons/Floppy 369 381 16 16
|
||||||
icons/HDD 386 381 16 16
|
icons/HDD 386 381 16 16
|
||||||
@ -54,7 +54,7 @@ icons/WaveNoise 401 363 24 10
|
|||||||
icons/WaveSawtooth 426 363 24 10
|
icons/WaveSawtooth 426 363 24 10
|
||||||
icons/WaveSine 451 363 24 10
|
icons/WaveSine 451 363 24 10
|
||||||
icons/WaveSquare 476 363 24 10
|
icons/WaveSquare 476 363 24 10
|
||||||
icons/WaveTriangle 457 330 24 10
|
icons/WaveTriangle 474 330 24 10
|
||||||
icons/WireArrowLeft 507 15 4 8
|
icons/WireArrowLeft 507 15 4 8
|
||||||
icons/WireArrowRight 507 24 4 8
|
icons/WireArrowRight 507 24 4 8
|
||||||
items/APU0 233 305 16 96
|
items/APU0 233 305 16 96
|
||||||
@ -108,6 +108,7 @@ items/Memory5 424 251 16 16
|
|||||||
items/NetworkCard 441 251 16 16
|
items/NetworkCard 441 251 16 16
|
||||||
items/RedstoneCard0 458 251 16 16
|
items/RedstoneCard0 458 251 16 16
|
||||||
items/RedstoneCard1 475 251 16 16
|
items/RedstoneCard1 475 251 16 16
|
||||||
|
items/SelfDestructingCard 318 330 16 32
|
||||||
items/Server0 492 251 16 16
|
items/Server0 492 251 16 16
|
||||||
items/Server1 305 268 16 16
|
items/Server1 305 268 16 16
|
||||||
items/Server2 322 268 16 16
|
items/Server2 322 268 16 16
|
||||||
|
|||||||
BIN
src/main/resources/ocelot/desktop/sounds/minecraft/explosion.ogg
Normal file
BIN
src/main/resources/ocelot/desktop/sounds/minecraft/explosion.ogg
Normal file
Binary file not shown.
@ -23,6 +23,7 @@ object SoundBuffers {
|
|||||||
val InterfaceClick = new SoundBuffer("/ocelot/desktop/sounds/interface/click.ogg")
|
val InterfaceClick = new SoundBuffer("/ocelot/desktop/sounds/interface/click.ogg")
|
||||||
val InterfaceTick = new SoundBuffer("/ocelot/desktop/sounds/interface/tick.ogg")
|
val InterfaceTick = new SoundBuffer("/ocelot/desktop/sounds/interface/tick.ogg")
|
||||||
val MinecraftClick = new SoundBuffer("/ocelot/desktop/sounds/minecraft/click.ogg")
|
val MinecraftClick = new SoundBuffer("/ocelot/desktop/sounds/minecraft/click.ogg")
|
||||||
|
val MinecraftExplosion = new SoundBuffer("/ocelot/desktop/sounds/minecraft/explosion.ogg")
|
||||||
|
|
||||||
val NoteBlock: Map[String, SoundBuffer] = List(
|
val NoteBlock: Map[String, SoundBuffer] = List(
|
||||||
"banjo", "basedrum", "bass", "bell", "bit", "chime", "cow_bell", "didgeridoo", "flute", "guitar",
|
"banjo", "basedrum", "bass", "bell", "bit", "chime", "cow_bell", "didgeridoo", "flute", "guitar",
|
||||||
|
|||||||
@ -7,4 +7,5 @@ object SoundSources {
|
|||||||
val InterfaceTick = SoundSource.fromBuffer(SoundBuffers.InterfaceTick, SoundCategory.Interface)
|
val InterfaceTick = SoundSource.fromBuffer(SoundBuffers.InterfaceTick, SoundCategory.Interface)
|
||||||
|
|
||||||
val MinecraftClick = SoundSource.fromBuffer(SoundBuffers.MinecraftClick, SoundCategory.Interface)
|
val MinecraftClick = SoundSource.fromBuffer(SoundBuffers.MinecraftClick, SoundCategory.Interface)
|
||||||
|
val MinecraftExplosion = SoundSource.fromBuffer(SoundBuffers.MinecraftExplosion, SoundCategory.Environment)
|
||||||
}
|
}
|
||||||
|
|||||||
@ -130,10 +130,7 @@ abstract class Node(val entity: Entity with Environment) extends Widget with Dra
|
|||||||
disconnectFromAll()
|
disconnectFromAll()
|
||||||
}))
|
}))
|
||||||
|
|
||||||
menu.addEntry(new ContextMenuEntry("Delete", () => {
|
menu.addEntry(new ContextMenuEntry("Delete", destroy))
|
||||||
dispose()
|
|
||||||
workspaceView.nodes = workspaceView.nodes.filter(_ != this)
|
|
||||||
}))
|
|
||||||
}
|
}
|
||||||
|
|
||||||
override def update(): Unit = {
|
override def update(): Unit = {
|
||||||
@ -173,6 +170,11 @@ abstract class Node(val entity: Entity with Environment) extends Widget with Dra
|
|||||||
node.onConnectionRemoved(portB, this, portA)
|
node.onConnectionRemoved(portB, this, portA)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
def destroy() = {
|
||||||
|
dispose()
|
||||||
|
workspaceView.nodes = workspaceView.nodes.filter(_ != this)
|
||||||
|
}
|
||||||
|
|
||||||
def disconnectFromAll(): Unit = {
|
def disconnectFromAll(): Unit = {
|
||||||
for ((a, node, b) <- connections.toArray) {
|
for ((a, node, b) <- connections.toArray) {
|
||||||
disconnect(a, node, b)
|
disconnect(a, node, b)
|
||||||
|
|||||||
@ -15,7 +15,7 @@ import totoro.ocelot.brain.Settings
|
|||||||
import totoro.ocelot.brain.entity.traits.{Entity, Environment, Floppy, GenericCPU, Inventory}
|
import totoro.ocelot.brain.entity.traits.{Entity, Environment, Floppy, GenericCPU, Inventory}
|
||||||
import totoro.ocelot.brain.entity.{CPU, Case, EEPROM, GraphicsCard, HDDManaged, HDDUnmanaged, Memory}
|
import totoro.ocelot.brain.entity.{CPU, Case, EEPROM, GraphicsCard, HDDManaged, HDDUnmanaged, Memory}
|
||||||
import totoro.ocelot.brain.event.FileSystemActivityType.Floppy
|
import totoro.ocelot.brain.event.FileSystemActivityType.Floppy
|
||||||
import totoro.ocelot.brain.event.{BeepEvent, BeepPatternEvent, FileSystemActivityEvent, MachineCrashEvent, SoundCardAudioEvent}
|
import totoro.ocelot.brain.event.{BeepEvent, BeepPatternEvent, FileSystemActivityEvent, MachineCrashEvent, SelfDestructingCardBoomEvent, SoundCardAudioEvent}
|
||||||
import totoro.ocelot.brain.loot.Loot
|
import totoro.ocelot.brain.loot.Loot
|
||||||
import totoro.ocelot.brain.util.Tier
|
import totoro.ocelot.brain.util.Tier
|
||||||
|
|
||||||
@ -63,6 +63,12 @@ class ComputerNode(val computer: Case) extends Node(computer) with Logging {
|
|||||||
}
|
}
|
||||||
soundCardStream.enqueue(samples)
|
soundCardStream.enqueue(samples)
|
||||||
soundCardSource.volume = event.volume
|
soundCardSource.volume = event.volume
|
||||||
|
|
||||||
|
case BrainEvent(_: SelfDestructingCardBoomEvent) =>
|
||||||
|
computer.workspace.runLater(() => {
|
||||||
|
SoundSources.MinecraftExplosion.play()
|
||||||
|
destroy()
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
override def shouldReceiveEventsFor(address: String): Boolean = super.shouldReceiveEventsFor(address) ||
|
override def shouldReceiveEventsFor(address: String): Boolean = super.shouldReceiveEventsFor(address) ||
|
||||||
|
|||||||
@ -2,8 +2,8 @@ package ocelot.desktop.ui.widget.slot
|
|||||||
|
|
||||||
import ocelot.desktop.graphics.IconDef
|
import ocelot.desktop.graphics.IconDef
|
||||||
import totoro.ocelot.brain.entity.sound_card.SoundCard
|
import totoro.ocelot.brain.entity.sound_card.SoundCard
|
||||||
import totoro.ocelot.brain.entity.traits.{Entity, Tiered}
|
import totoro.ocelot.brain.entity.traits.{Entity, MultiTiered, Tiered}
|
||||||
import totoro.ocelot.brain.entity.{DataCard, GraphicsCard, InternetCard, LinkedCard, NetworkCard, Redstone, WirelessNetworkCard}
|
import totoro.ocelot.brain.entity.{DataCard, GraphicsCard, InternetCard, LinkedCard, NetworkCard, Redstone, SelfDestructingCard, WirelessNetworkCard}
|
||||||
|
|
||||||
import scala.collection.mutable
|
import scala.collection.mutable
|
||||||
import scala.reflect.{ClassTag, classTag}
|
import scala.reflect.{ClassTag, classTag}
|
||||||
@ -28,7 +28,7 @@ object CardRegistry {
|
|||||||
def getIcon(entity: Entity): Option[IconDef] = {
|
def getIcon(entity: Entity): Option[IconDef] = {
|
||||||
val clazz = entity.getClass.getName
|
val clazz = entity.getClass.getName
|
||||||
entity match {
|
entity match {
|
||||||
case t: Tiered => iconByClassAndTier.get((clazz, t.tier))
|
case t: MultiTiered => iconByClassAndTier.get((clazz, t.tier))
|
||||||
case _ => iconByClass.get(clazz)
|
case _ => iconByClass.get(clazz)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -77,5 +77,10 @@ object CardRegistry {
|
|||||||
|
|
||||||
addEntry("Sound Card", 1, new IconDef("items/SoundCard", animation = DataCardAnimation),
|
addEntry("Sound Card", 1, new IconDef("items/SoundCard", animation = DataCardAnimation),
|
||||||
() => new SoundCard)
|
() => new SoundCard)
|
||||||
|
|
||||||
|
private val SelfDestructingCardAnimation = Some(Array((0, 4f), (1, 4f)))
|
||||||
|
|
||||||
|
addEntry("Self-Destructing Card", 1, new IconDef("items/SelfDestructingCard", animation = SelfDestructingCardAnimation),
|
||||||
|
() => new SelfDestructingCard)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@ -9,7 +9,7 @@ import ocelot.desktop.ui.widget.tooltip.Tooltip
|
|||||||
import ocelot.desktop.ui.widget.{Label, PaddingBox, Widget}
|
import ocelot.desktop.ui.widget.{Label, PaddingBox, Widget}
|
||||||
import ocelot.desktop.util.Orientation
|
import ocelot.desktop.util.Orientation
|
||||||
import totoro.ocelot.brain.entity.HDDManaged
|
import totoro.ocelot.brain.entity.HDDManaged
|
||||||
import totoro.ocelot.brain.entity.traits.{DeviceInfo, Entity, Environment, Inventory, Tiered}
|
import totoro.ocelot.brain.entity.traits.{DeviceInfo, Entity, Environment, Inventory, MultiTiered, Tiered}
|
||||||
|
|
||||||
abstract class InventorySlot[T <: Entity](val owner: Inventory#Slot) extends SlotWidget[T] {
|
abstract class InventorySlot[T <: Entity](val owner: Inventory#Slot) extends SlotWidget[T] {
|
||||||
reloadItem()
|
reloadItem()
|
||||||
@ -62,7 +62,10 @@ abstract class InventorySlot[T <: Entity](val owner: Inventory#Slot) extends Slo
|
|||||||
def tooltipLine1Text: String = item.get match {
|
def tooltipLine1Text: String = item.get match {
|
||||||
case deviceInfoTiered: DeviceInfo with Tiered =>
|
case deviceInfoTiered: DeviceInfo with Tiered =>
|
||||||
getTooltipDeviceInfoText(deviceInfoTiered, deviceInfoTiered.tier)
|
getTooltipDeviceInfoText(deviceInfoTiered, deviceInfoTiered.tier)
|
||||||
case _ => ""
|
case deviceInfo: DeviceInfo =>
|
||||||
|
deviceInfo.getDeviceInfo(DeviceInfo.DeviceAttribute.Description)
|
||||||
|
case _ =>
|
||||||
|
""
|
||||||
}
|
}
|
||||||
|
|
||||||
def tooltipChildrenAdder(inner: Widget): Unit = {
|
def tooltipChildrenAdder(inner: Widget): Unit = {
|
||||||
|
|||||||
@ -4,7 +4,7 @@ import ocelot.desktop.color.Color
|
|||||||
import ocelot.desktop.graphics.IconDef
|
import ocelot.desktop.graphics.IconDef
|
||||||
import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry}
|
import ocelot.desktop.ui.widget.contextmenu.{ContextMenu, ContextMenuEntry}
|
||||||
import totoro.ocelot.brain.entity.Memory
|
import totoro.ocelot.brain.entity.Memory
|
||||||
import totoro.ocelot.brain.entity.traits.{Inventory, Tiered}
|
import totoro.ocelot.brain.entity.traits.{Inventory, MultiTiered}
|
||||||
import totoro.ocelot.brain.util.Tier
|
import totoro.ocelot.brain.util.Tier
|
||||||
|
|
||||||
class MemorySlot(owner: Inventory#Slot, val tier: Int) extends InventorySlot[Memory](owner) {
|
class MemorySlot(owner: Inventory#Slot, val tier: Int) extends InventorySlot[Memory](owner) {
|
||||||
@ -46,7 +46,7 @@ class MemorySlot(owner: Inventory#Slot, val tier: Int) extends InventorySlot[Mem
|
|||||||
override def lmbMenuEnabled: Boolean = true
|
override def lmbMenuEnabled: Boolean = true
|
||||||
|
|
||||||
override def tooltipLine1Color: Color = item.get match {
|
override def tooltipLine1Color: Color = item.get match {
|
||||||
case tiered: Tiered => tiered.tier match {
|
case tiered: MultiTiered => tiered.tier match {
|
||||||
case 0 => Color.White
|
case 0 => Color.White
|
||||||
case 1 => Color.White
|
case 1 => Color.White
|
||||||
case 2 => Color.Yellow
|
case 2 => Color.Yellow
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user