diff --git a/src/main/java/de/bixilon/minosoft/config/profile/profiles/entity/hitbox/HitboxC.kt b/src/main/java/de/bixilon/minosoft/config/profile/profiles/entity/hitbox/HitboxC.kt index 08d7ac4ad..725fd7aef 100644 --- a/src/main/java/de/bixilon/minosoft/config/profile/profiles/entity/hitbox/HitboxC.kt +++ b/src/main/java/de/bixilon/minosoft/config/profile/profiles/entity/hitbox/HitboxC.kt @@ -1,6 +1,6 @@ /* * Minosoft - * Copyright (C) 2020-2022 Moritz Zwerger + * Copyright (C) 2020-2023 Moritz Zwerger * * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. * @@ -22,11 +22,6 @@ class HitboxC(profile: EntityProfile) { */ var enabled by BooleanDelegate(profile, true) - /** - * Shows your own hit-box when in first person view - */ - var showLocal by BooleanDelegate(profile, false) - /** * Shows hit-boxes from invisible entities */ diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/PlayerEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/PlayerEntity.kt index 406ae9424..67da2a3f5 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/PlayerEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/PlayerEntity.kt @@ -36,6 +36,9 @@ import de.bixilon.minosoft.data.registries.item.items.dye.DyeableItem import de.bixilon.minosoft.data.registries.shapes.aabb.AABB import de.bixilon.minosoft.data.text.formatting.color.ChatColors import de.bixilon.minosoft.data.text.formatting.color.RGBColor +import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer +import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer +import de.bixilon.minosoft.gui.rendering.entities.renderer.player.PlayerRenderer import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY import de.bixilon.minosoft.physics.entities.living.player.PlayerPhysics import de.bixilon.minosoft.protocol.network.connection.play.PlayConnection @@ -136,7 +139,7 @@ abstract class PlayerEntity( } override fun createPhysics(): PlayerPhysics<*> = PlayerPhysics(this) - + override fun createRenderer(renderer: EntitiesRenderer): EntityRenderer<*> = PlayerRenderer(renderer, this) fun swingHand(hand: Hands) { val arm = hand.getArm(mainArm) diff --git a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/LocalPlayerEntity.kt b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/LocalPlayerEntity.kt index 97c0dc164..af48afb6c 100644 --- a/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/LocalPlayerEntity.kt +++ b/src/main/java/de/bixilon/minosoft/data/entities/entities/player/local/LocalPlayerEntity.kt @@ -27,6 +27,9 @@ import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity import de.bixilon.minosoft.data.entities.entities.player.additional.PlayerAdditional import de.bixilon.minosoft.data.entities.entities.player.compass.CompassPosition import de.bixilon.minosoft.data.registries.effects.attributes.integrated.IntegratedAttributeModifiers +import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer +import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer +import de.bixilon.minosoft.gui.rendering.entities.renderer.player.LocalPlayerRenderer import de.bixilon.minosoft.gui.rendering.util.vec.vec3.Vec3dUtil.EMPTY import de.bixilon.minosoft.input.camera.MovementInputActions import de.bixilon.minosoft.input.camera.PlayerMovementInput @@ -109,4 +112,6 @@ class LocalPlayerEntity( override fun createPhysics() = LocalPlayerPhysics(this) override fun physics(): LocalPlayerPhysics = super.physics().unsafeCast() + + override fun createRenderer(renderer: EntitiesRenderer): EntityRenderer<*> = LocalPlayerRenderer(renderer, this) } diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/FeatureManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/FeatureManager.kt index b7509051d..497a4d75e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/FeatureManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/feature/FeatureManager.kt @@ -24,6 +24,11 @@ class FeatureManager(val renderer: EntityRenderer<*>) : Iterable) : EntityRenderFeature(renderer) override fun update(millis: Long) { if (!manager.enabled) return unload() + if (!enabled) return unload() val offset = renderer.renderer.context.camera.offset.offset diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/hitbox/HitboxManager.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/hitbox/HitboxManager.kt index 77ad38c5c..fa8490e8e 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/hitbox/HitboxManager.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/hitbox/HitboxManager.kt @@ -37,8 +37,7 @@ class HitboxManager(private val renderer: EntitiesRenderer) { renderer.context.input.bindings.register(TOGGLE, KeyBinding( KeyActions.MODIFIER to setOf(KeyCodes.KEY_F3), KeyActions.STICKY to setOf(KeyCodes.KEY_B), - ), pressed = enabled - ) { + ), pressed = enabled) { profile.enabled = it renderer.connection.util.sendDebugMessage("Entity hit boxes: ${it.format()}") enabled = it diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt index a9a5b9897..da6a1988c 100644 --- a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/EntityRenderer.kt @@ -22,7 +22,7 @@ import de.bixilon.minosoft.gui.rendering.entities.visibility.EntityVisibility abstract class EntityRenderer( val renderer: EntitiesRenderer, - val entity: Entity, + val entity: E, ) { val features = FeatureManager(this) val visibility = EntityVisibility(this) diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/player/LocalPlayerRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/player/LocalPlayerRenderer.kt new file mode 100644 index 000000000..01809cfeb --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/player/LocalPlayerRenderer.kt @@ -0,0 +1,25 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.rendering.entities.renderer.player + +import de.bixilon.kutil.observer.DataObserver.Companion.observe +import de.bixilon.minosoft.data.entities.entities.player.local.LocalPlayerEntity +import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer + +open class LocalPlayerRenderer(renderer: EntitiesRenderer, entity: LocalPlayerEntity) : PlayerRenderer(renderer, entity) { + + init { + renderer.context.camera.view::view.observe(this, instant = true) { hitbox.enabled = it.renderSelf } + } +} diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/player/PlayerRenderer.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/player/PlayerRenderer.kt new file mode 100644 index 000000000..94993942e --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/renderer/player/PlayerRenderer.kt @@ -0,0 +1,20 @@ +/* + * Minosoft + * Copyright (C) 2020-2023 Moritz Zwerger + * + * This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License along with this program. If not, see . + * + * This software is not affiliated with Mojang AB, the original developer of Minecraft. + */ + +package de.bixilon.minosoft.gui.rendering.entities.renderer.player + +import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity +import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer +import de.bixilon.minosoft.gui.rendering.entities.renderer.EntityRenderer + +open class PlayerRenderer(renderer: EntitiesRenderer, entity: E) : EntityRenderer(renderer, entity)