From 9e0b9d47fb1f8784a70a2811c9e7ccab62a3529a Mon Sep 17 00:00:00 2001 From: Moritz Zwerger Date: Mon, 30 Oct 2023 17:29:35 +0100 Subject: [PATCH] entity easter egg: flipped --- .../entities/easteregg/EntityEasterEggs.kt | 33 +++++++++++++++++++ .../entities/renderer/EntityRenderer.kt | 6 ++++ 2 files changed, 39 insertions(+) create mode 100644 src/main/java/de/bixilon/minosoft/gui/rendering/entities/easteregg/EntityEasterEggs.kt diff --git a/src/main/java/de/bixilon/minosoft/gui/rendering/entities/easteregg/EntityEasterEggs.kt b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/easteregg/EntityEasterEggs.kt new file mode 100644 index 000000000..063621956 --- /dev/null +++ b/src/main/java/de/bixilon/minosoft/gui/rendering/entities/easteregg/EntityEasterEggs.kt @@ -0,0 +1,33 @@ +/* + * 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.easteregg + +import de.bixilon.minosoft.data.entities.entities.Entity +import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity +import de.bixilon.minosoft.data.entities.entities.player.SkinParts + +object EntityEasterEggs { + private val FLIPPED = setOf("Dinnerbone", "Grumm") + + fun Entity.isFlipped(): Boolean { + var name = this.customName?.message + if (name == null && this is PlayerEntity) { + name = additional.name + } + if (name == null) return false + if (name !in FLIPPED) return false + if (this is PlayerEntity) return SkinParts.CAPE in this.skinParts + return true + } +} 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 3069b82a0..7a93cfa20 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 @@ -19,10 +19,12 @@ import de.bixilon.minosoft.data.entities.entities.Entity import de.bixilon.minosoft.data.text.formatting.color.ChatColors import de.bixilon.minosoft.data.text.formatting.color.ColorUtil import de.bixilon.minosoft.gui.rendering.entities.EntitiesRenderer +import de.bixilon.minosoft.gui.rendering.entities.easteregg.EntityEasterEggs.isFlipped import de.bixilon.minosoft.gui.rendering.entities.feature.EntityRenderFeature import de.bixilon.minosoft.gui.rendering.entities.feature.FeatureManager import de.bixilon.minosoft.gui.rendering.entities.hitbox.HitboxFeature import de.bixilon.minosoft.gui.rendering.util.mat.mat4.Mat4Util.reset +import de.bixilon.minosoft.gui.rendering.util.mat.mat4.Mat4Util.rotateDegreesAssign import de.bixilon.minosoft.util.interpolate.Interpolator abstract class EntityRenderer( @@ -48,6 +50,10 @@ abstract class EntityRenderer( val position = Vec3(entity.renderInfo.position - renderer.context.camera.offset.offset) matrix.reset() matrix.translateAssign(position) + + if (entity.isFlipped()) { + matrix.rotateDegreesAssign(Vec3(180.0f, 0.0f, 0.0f)) // TODO: verify + } } open fun update(millis: Long) {