rendering: add block breaking

This commit is contained in:
Lukas 2021-05-17 17:48:07 +02:00
parent 90a3ef4e7f
commit 0ae43f4e85
3 changed files with 24 additions and 1 deletions

View File

@ -29,6 +29,8 @@ object KeyBindingsNames {
val MOVE_FLY_DOWN = ResourceLocation("minosoft:move_fly_down") val MOVE_FLY_DOWN = ResourceLocation("minosoft:move_fly_down")
val MOVE_JUMP = ResourceLocation("minosoft:move_jump") val MOVE_JUMP = ResourceLocation("minosoft:move_jump")
val DESTROY_BLOCK = ResourceLocation("minosoft:destroy_block")
val ZOOM = ResourceLocation("minosoft:zoom") val ZOOM = ResourceLocation("minosoft:zoom")
val QUIT_RENDERING = ResourceLocation("minosoft:quit_rendering") val QUIT_RENDERING = ResourceLocation("minosoft:quit_rendering")
@ -103,6 +105,11 @@ object KeyBindingsNames {
KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_SHIFT) KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_LEFT_SHIFT)
), ),
), ),
DESTROY_BLOCK to KeyBinding(
mutableMapOf(
KeyAction.CHANGE to mutableSetOf(KeyCodes.MOUSE_BUTTON_LEFT)
),
),
ZOOM to KeyBinding( ZOOM to KeyBinding(
mutableMapOf( mutableMapOf(
KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_C) KeyAction.CHANGE to mutableSetOf(KeyCodes.KEY_C)

View File

@ -57,7 +57,7 @@ object RenderConstants {
const val MAXIMUM_CALLS_PER_FRAME = 10 const val MAXIMUM_CALLS_PER_FRAME = 10
const val DISABLE_LIGHTING = false const val DISABLE_LIGHTING = true
const val RENDER_BLOCKS = true const val RENDER_BLOCKS = true
const val RENDER_FLUIDS = true const val RENDER_FLUIDS = true

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.gui.rendering.input package de.bixilon.minosoft.gui.rendering.input
import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames import de.bixilon.minosoft.config.config.game.controls.KeyBindingsNames
import de.bixilon.minosoft.data.Directions
import de.bixilon.minosoft.data.abilities.Gamemodes import de.bixilon.minosoft.data.abilities.Gamemodes
import de.bixilon.minosoft.data.mappings.blocks.BlockUsages import de.bixilon.minosoft.data.mappings.blocks.BlockUsages
import de.bixilon.minosoft.data.mappings.items.BlockItem import de.bixilon.minosoft.data.mappings.items.BlockItem
@ -22,6 +23,7 @@ import de.bixilon.minosoft.gui.rendering.RenderConstants
import de.bixilon.minosoft.gui.rendering.RenderWindow import de.bixilon.minosoft.gui.rendering.RenderWindow
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
import de.bixilon.minosoft.protocol.packets.c2s.play.ArmSwingC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.ArmSwingC2SP
import de.bixilon.minosoft.protocol.packets.c2s.play.BlockBreakC2SP
import de.bixilon.minosoft.protocol.packets.c2s.play.BlockPlaceC2SP import de.bixilon.minosoft.protocol.packets.c2s.play.BlockPlaceC2SP
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
@ -34,6 +36,20 @@ class InteractionHandler(
fun init() { fun init() {
renderWindow.inputHandler.registerCheckCallback(KeyBindingsNames.BLOCK_INTERACT) renderWindow.inputHandler.registerCheckCallback(KeyBindingsNames.BLOCK_INTERACT)
renderWindow.inputHandler.registerKeyCallback(KeyBindingsNames.DESTROY_BLOCK) {
if (!it) {
return@registerKeyCallback
}
val raycastHit = renderWindow.inputHandler.camera.getTargetBlock()
raycastHit?.let {
if (raycastHit.distance > RenderConstants.MAX_BLOCK_OUTLINE_RAYCAST_DISTANCE) {
return@let
}
connection.sendPacket(BlockBreakC2SP(BlockBreakC2SP.BreakType.START_DIGGING, raycastHit.blockPosition, Directions.UP))
connection.sendPacket(BlockBreakC2SP(BlockBreakC2SP.BreakType.FINISHED_DIGGING, raycastHit.blockPosition, Directions.UP))
connection.world.setBlock(raycastHit.blockPosition, null)
}
}
} }
private fun checkInteraction(isKeyDown: Boolean) { private fun checkInteraction(isKeyDown: Boolean) {