remove VecUtil.EMPTY_VEC3, replace with Vec3.EMPTY

This commit is contained in:
Bixilon 2021-05-27 18:39:25 +02:00
parent 61a72961f5
commit 8eee74df5d
No known key found for this signature in database
GPG Key ID: 5CAD791931B09AC4
11 changed files with 56 additions and 45 deletions

View File

@ -19,10 +19,11 @@ import de.bixilon.minosoft.data.entities.entities.player.PlayerEntity
import de.bixilon.minosoft.data.mappings.items.Item import de.bixilon.minosoft.data.mappings.items.Item
import de.bixilon.minosoft.data.mappings.other.containers.Container import de.bixilon.minosoft.data.mappings.other.containers.Container
import de.bixilon.minosoft.data.mappings.other.containers.PlayerInventory import de.bixilon.minosoft.data.mappings.other.containers.PlayerInventory
import de.bixilon.minosoft.gui.rendering.util.VecUtil import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.synchronizedMapOf import de.bixilon.minosoft.util.KUtil.synchronizedMapOf
import glm_.vec3.Vec3
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
class Player( class Player(
@ -31,8 +32,8 @@ class Player(
) { ) {
val healthCondition = PlayerHealthCondition() val healthCondition = PlayerHealthCondition()
val experienceCondition = PlayerExperienceCondition() val experienceCondition = PlayerExperienceCondition()
var spawnPosition: Vec3i = VecUtil.EMPTY_VEC3I var spawnPosition: Vec3i = Vec3i.EMPTY
val entity: PlayerEntity = PlayerEntity(connection, connection.registries.entityTypeRegistry[PlayerEntity.RESOURCE_LOCATION]!!, VecUtil.EMPTY_VEC3, EntityRotation(0.0, 0.0), account.username) val entity: PlayerEntity = PlayerEntity(connection, connection.registries.entityTypeRegistry[PlayerEntity.RESOURCE_LOCATION]!!, Vec3.EMPTY, EntityRotation(0.0, 0.0), account.username)
@Deprecated(message = "Will be replaced with some kind of teleport manager, ...") @Deprecated(message = "Will be replaced with some kind of teleport manager, ...")
var isSpawnConfirmed = false var isSpawnConfirmed = false

View File

@ -6,7 +6,8 @@ import com.google.gson.JsonPrimitive
import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.Axes
import de.bixilon.minosoft.data.Directions import de.bixilon.minosoft.data.Directions
import de.bixilon.minosoft.gui.rendering.chunk.models.AABB import de.bixilon.minosoft.gui.rendering.chunk.models.AABB
import de.bixilon.minosoft.gui.rendering.util.VecUtil import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.gui.rendering.util.VecUtil.ONE
import de.bixilon.minosoft.gui.rendering.util.VecUtil.getMinDistanceDirection import de.bixilon.minosoft.gui.rendering.util.VecUtil.getMinDistanceDirection
import glm_.vec3.Vec3 import glm_.vec3.Vec3
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
@ -99,7 +100,7 @@ class VoxelShape(private val aabbs: MutableList<AABB> = mutableListOf()) : Itera
companion object { companion object {
val EMPTY = VoxelShape() val EMPTY = VoxelShape()
val FULL = VoxelShape(mutableListOf(AABB(VecUtil.EMPTY_VEC3, VecUtil.ONES_VEC3))) val FULL = VoxelShape(mutableListOf(AABB(Vec3.EMPTY, Vec3.ONE)))
} }
override fun iterator(): Iterator<AABB> { override fun iterator(): Iterator<AABB> {

View File

@ -24,7 +24,7 @@ import de.bixilon.minosoft.gui.rendering.RendererBuilder
import de.bixilon.minosoft.gui.rendering.chunk.VoxelShape import de.bixilon.minosoft.gui.rendering.chunk.VoxelShape
import de.bixilon.minosoft.gui.rendering.chunk.models.renderable.ElementRenderer import de.bixilon.minosoft.gui.rendering.chunk.models.renderable.ElementRenderer
import de.bixilon.minosoft.gui.rendering.shader.Shader import de.bixilon.minosoft.gui.rendering.shader.Shader
import de.bixilon.minosoft.gui.rendering.util.VecUtil import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.gui.rendering.util.VecUtil.getWorldOffset import de.bixilon.minosoft.gui.rendering.util.VecUtil.getWorldOffset
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3 import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
@ -55,7 +55,7 @@ class BlockOutlineRenderer(
private fun drawLine(start: Vec3, end: Vec3, mesh: BlockOutlineMesh) { private fun drawLine(start: Vec3, end: Vec3, mesh: BlockOutlineMesh) {
val direction = (end - start).normalize() val direction = (end - start).normalize()
val normal1 = Vec3(direction.z, direction.z, direction.x - direction.y) val normal1 = Vec3(direction.z, direction.z, direction.x - direction.y)
if (normal1 == VecUtil.EMPTY_VEC3) { if (normal1 == Vec3.EMPTY) {
normal1.x = normal1.z normal1.x = normal1.z
normal1.z = direction.z normal1.z = direction.z
} }

View File

@ -4,7 +4,8 @@ import com.google.gson.JsonArray
import com.google.gson.JsonElement import com.google.gson.JsonElement
import com.google.gson.JsonObject import com.google.gson.JsonObject
import de.bixilon.minosoft.data.Axes import de.bixilon.minosoft.data.Axes
import de.bixilon.minosoft.gui.rendering.util.VecUtil import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.gui.rendering.util.VecUtil.ONE
import de.bixilon.minosoft.gui.rendering.util.VecUtil.get import de.bixilon.minosoft.gui.rendering.util.VecUtil.get
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3 import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3
import glm_.Java.Companion.glm import glm_.Java.Companion.glm
@ -17,8 +18,8 @@ class AABB {
val max: Vec3 val max: Vec3
constructor(jsonData: JsonObject) { constructor(jsonData: JsonObject) {
min = readPositionFromJson(jsonData["from"], VecUtil.EMPTY_VEC3) min = readPositionFromJson(jsonData["from"], Vec3.EMPTY)
max = readPositionFromJson(jsonData["to"], VecUtil.ONES_VEC3) max = readPositionFromJson(jsonData["to"], Vec3.ONE)
} }
private fun readPositionFromJson(jsonData: JsonElement, default: Vec3): Vec3 { private fun readPositionFromJson(jsonData: JsonElement, default: Vec3): Vec3 {
@ -139,7 +140,7 @@ class AABB {
} }
fun raycast(position: Vec3, direction: Vec3): Float { fun raycast(position: Vec3, direction: Vec3): Float {
if (max - min == VecUtil.ONES_VEC3 || position in this) { if (max - min == Vec3.ONE || position in this) {
return 0f return 0f
} }
var tMin = 0f var tMin = 0f

View File

@ -26,7 +26,7 @@ import de.bixilon.minosoft.gui.rendering.chunk.models.loading.BlockModelElement
import de.bixilon.minosoft.gui.rendering.chunk.models.loading.BlockModelFace import de.bixilon.minosoft.gui.rendering.chunk.models.loading.BlockModelFace
import de.bixilon.minosoft.gui.rendering.textures.Texture import de.bixilon.minosoft.gui.rendering.textures.Texture
import de.bixilon.minosoft.gui.rendering.textures.TextureTransparencies import de.bixilon.minosoft.gui.rendering.textures.TextureTransparencies
import de.bixilon.minosoft.gui.rendering.util.VecUtil import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
import de.bixilon.minosoft.gui.rendering.util.VecUtil.rotate import de.bixilon.minosoft.gui.rendering.util.VecUtil.rotate
import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3 import de.bixilon.minosoft.gui.rendering.util.VecUtil.toVec3
@ -129,7 +129,7 @@ class ElementRenderer(
} }
fun getRotatedDirection(rotation: Vec3, direction: Directions): Directions { fun getRotatedDirection(rotation: Vec3, direction: Directions): Directions {
if (rotation == VecUtil.EMPTY_VEC3) { if (rotation == Vec3.EMPTY) {
return direction return direction
} }
var rotatedDirectionVector = direction.floatDirectionVector.rotate(-rotation.x, Axes.X) var rotatedDirectionVector = direction.floatDirectionVector.rotate(-rotation.x, Axes.X)
@ -138,12 +138,12 @@ class ElementRenderer(
} }
fun rotatePositionsAxes(positions: Array<Vec3>, angles: Vec3, rescale: Boolean) { fun rotatePositionsAxes(positions: Array<Vec3>, angles: Vec3, rescale: Boolean) {
if (angles == VecUtil.EMPTY_VEC3) { if (angles == Vec3.EMPTY) {
return return
} }
BlockModelElement.rotatePositions(positions, Axes.X, -angles.x, VecUtil.EMPTY_VEC3, rescale) BlockModelElement.rotatePositions(positions, Axes.X, -angles.x, Vec3.EMPTY, rescale)
BlockModelElement.rotatePositions(positions, Axes.Y, angles.y, VecUtil.EMPTY_VEC3, rescale) BlockModelElement.rotatePositions(positions, Axes.Y, angles.y, Vec3.EMPTY, rescale)
BlockModelElement.rotatePositions(positions, Axes.Z, -angles.z, VecUtil.EMPTY_VEC3, rescale) BlockModelElement.rotatePositions(positions, Axes.Z, -angles.z, Vec3.EMPTY, rescale)
} }
val POSITION_1 = Vec3(-0.5f, -0.5f, -0.5f) val POSITION_1 = Vec3(-0.5f, -0.5f, -0.5f)

View File

@ -26,6 +26,7 @@ import de.bixilon.minosoft.gui.rendering.modding.events.FrustumChangeEvent
import de.bixilon.minosoft.gui.rendering.modding.events.ScreenResizeEvent import de.bixilon.minosoft.gui.rendering.modding.events.ScreenResizeEvent
import de.bixilon.minosoft.gui.rendering.sky.SkyRenderer import de.bixilon.minosoft.gui.rendering.sky.SkyRenderer
import de.bixilon.minosoft.gui.rendering.util.VecUtil import de.bixilon.minosoft.gui.rendering.util.VecUtil
import de.bixilon.minosoft.gui.rendering.util.VecUtil.EMPTY
import de.bixilon.minosoft.gui.rendering.util.VecUtil.blockPosition import de.bixilon.minosoft.gui.rendering.util.VecUtil.blockPosition
import de.bixilon.minosoft.gui.rendering.util.VecUtil.chunkPosition import de.bixilon.minosoft.gui.rendering.util.VecUtil.chunkPosition
import de.bixilon.minosoft.gui.rendering.util.VecUtil.floor import de.bixilon.minosoft.gui.rendering.util.VecUtil.floor
@ -250,7 +251,7 @@ class Camera(
if (renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_RIGHT)) { if (renderWindow.inputHandler.isKeyBindingDown(KeyBindingsNames.MOVE_RIGHT)) {
movementDirection += cameraRight movementDirection += cameraRight
} }
val deltaMovement = if (movementDirection != VecUtil.EMPTY_VEC3) { val deltaMovement = if (movementDirection != Vec3.EMPTY) {
movementDirection.normalize() * cameraSpeed movementDirection.normalize() * cameraSpeed
} else { } else {
movementDirection movementDirection
@ -267,7 +268,7 @@ class Camera(
playerEntity.velocity.y += 0.75f * ProtocolDefinition.GRAVITY playerEntity.velocity.y += 0.75f * ProtocolDefinition.GRAVITY
playerEntity.onGround = false playerEntity.onGround = false
} }
if (deltaMovement != VecUtil.EMPTY_VEC3) { if (deltaMovement != Vec3.EMPTY) {
playerEntity.move(deltaMovement, false) playerEntity.move(deltaMovement, false)
recalculateViewProjectionMatrix() recalculateViewProjectionMatrix()
currentPositionSent = false currentPositionSent = false

View File

@ -21,10 +21,16 @@ import de.bixilon.minosoft.gui.rendering.util.VecUtil.ONE
import de.bixilon.minosoft.gui.rendering.util.VecUtil.clear import de.bixilon.minosoft.gui.rendering.util.VecUtil.clear
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.KUtil.millis
import glm_.vec3.Vec3 import glm_.vec3.Vec3
import kotlin.random.Random import kotlin.random.Random
abstract class Particle(protected val connection: PlayConnection, protected val particleRenderer: ParticleRenderer, protected val position: Vec3, protected val data: ParticleData) { abstract class Particle(
protected val connection: PlayConnection,
protected val particleRenderer: ParticleRenderer,
protected val position: Vec3,
protected val data: ParticleData,
) {
protected val random = Random protected val random = Random
private var lastTickTime = -1L private var lastTickTime = -1L
@ -33,21 +39,7 @@ abstract class Particle(protected val connection: PlayConnection, protected val
var dead = false var dead = false
var age: Int = 0 var age: Int = 0
protected set protected set
var tickAge: Int var maxAge: Int = (4.0f / (random.nextFloat() * 0.9f + 0.1f)).millis
get() = age / ProtocolDefinition.TICK_TIME
set(value) {
age = value * ProtocolDefinition.TICK_TIME
}
var maxAge: Int = Integer.MAX_VALUE
var maxTickAge: Int
get() = maxAge / ProtocolDefinition.TICK_TIME
set(value) {
maxAge = value * ProtocolDefinition.TICK_TIME
}
init {
maxTickAge = (4.0f / (random.nextFloat() * 0.9f + 0.1f)).toInt()
}
// moving // moving
val friction = Vec3.EMPTY val friction = Vec3.EMPTY

View File

@ -21,13 +21,15 @@ import de.bixilon.minosoft.gui.rendering.particle.types.render.texture.simple.Ex
import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus import de.bixilon.minosoft.gui.rendering.util.VecUtil.plus
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.util.KUtil.asResourceLocation import de.bixilon.minosoft.util.KUtil.asResourceLocation
import de.bixilon.minosoft.util.KUtil.millis
import de.bixilon.minosoft.util.KUtil.ticks
import glm_.vec3.Vec3 import glm_.vec3.Vec3
class ExplosionEmitterParticle(connection: PlayConnection, particleRenderer: ParticleRenderer, position: Vec3, data: ParticleData) : NoRenderParticle(connection, particleRenderer, position, data) { class ExplosionEmitterParticle(connection: PlayConnection, particleRenderer: ParticleRenderer, position: Vec3, data: ParticleData) : NoRenderParticle(connection, particleRenderer, position, data) {
private val explosionParticleType = connection.registries.particleTypeRegistry[ExplosionParticle]!! private val explosionParticleType = connection.registries.particleTypeRegistry[ExplosionParticle]!!
init { init {
maxTickAge = 8 maxAge = 8.millis
} }
@ -36,7 +38,7 @@ class ExplosionEmitterParticle(connection: PlayConnection, particleRenderer: Par
for (i in 0 until 6) { for (i in 0 until 6) {
val position = position + { (random.nextFloat() - random.nextFloat()) * 4.0f } val position = position + { (random.nextFloat() - random.nextFloat()) * 4.0f }
particleRenderer.add(ExplosionParticle(connection, particleRenderer, position, explosionParticleType.simple(), (tickAge.toFloat() / maxTickAge))) particleRenderer.add(ExplosionParticle(connection, particleRenderer, position, explosionParticleType.simple(), (age.ticks.toFloat() / maxAge.ticks)))
} }
} }

View File

@ -20,12 +20,13 @@ import de.bixilon.minosoft.gui.rendering.particle.ParticleFactory
import de.bixilon.minosoft.gui.rendering.particle.ParticleRenderer import de.bixilon.minosoft.gui.rendering.particle.ParticleRenderer
import de.bixilon.minosoft.protocol.network.connection.PlayConnection import de.bixilon.minosoft.protocol.network.connection.PlayConnection
import de.bixilon.minosoft.util.KUtil.asResourceLocation import de.bixilon.minosoft.util.KUtil.asResourceLocation
import de.bixilon.minosoft.util.KUtil.ticks
import glm_.vec3.Vec3 import glm_.vec3.Vec3
class ExplosionParticle(connection: PlayConnection, particleRenderer: ParticleRenderer, position: Vec3, data: ParticleData, val power: Float = 1.0f) : SimpleTextureParticle(connection, particleRenderer, position, data) { class ExplosionParticle(connection: PlayConnection, particleRenderer: ParticleRenderer, position: Vec3, data: ParticleData, val power: Float = 1.0f) : SimpleTextureParticle(connection, particleRenderer, position, data) {
init { init {
maxTickAge = 6 + random.nextInt(4) maxAge = (6 + random.nextInt(4)).ticks
val gray = random.nextFloat() * 0.6f + 0.4f val gray = random.nextFloat() * 0.6f + 0.4f
color = gray.asGray() color = gray.asGray()
scale = 2.0f * (power - gray * 0.5f) scale = 2.0f * (power - gray * 0.5f)

View File

@ -37,15 +37,14 @@ import glm_.vec3.Vec3
import glm_.vec3.Vec3i import glm_.vec3.Vec3i
object VecUtil { object VecUtil {
val EMPTY_VEC3 = Vec3(0, 0, 0)
val EMPTY_VEC3I = Vec3i(0, 0, 0)
val ONES_VEC3 = Vec3(1)
val Vec3.Companion.EMPTY: Vec3 val Vec3.Companion.EMPTY: Vec3
get() = Vec3(EMPTY_VEC3) get() = Vec3(0, 0, 0)
val Vec3i.Companion.EMPTY: Vec3i
get() = Vec3i(0, 0, 0)
val Vec3.Companion.ONE: Vec3 val Vec3.Companion.ONE: Vec3
get() = Vec3(ONES_VEC3) get() = Vec3(1, 1, 1)
fun JsonElement.toVec3(): Vec3 { fun JsonElement.toVec3(): Vec3 {
return when (this) { return when (this) {
@ -221,7 +220,7 @@ object VecUtil {
fun Vec3i.getWorldOffset(block: Block): Vec3 { fun Vec3i.getWorldOffset(block: Block): Vec3 {
if (block.randomOffsetType == null || !Minosoft.config.config.game.other.flowerRandomOffset) { if (block.randomOffsetType == null || !Minosoft.config.config.game.other.flowerRandomOffset) {
return EMPTY_VEC3 return Vec3.EMPTY
} }
val positionHash = generatePositionHash(x, 0, z) val positionHash = generatePositionHash(x, 0, z)

View File

@ -14,6 +14,7 @@
package de.bixilon.minosoft.util package de.bixilon.minosoft.util
import de.bixilon.minosoft.data.mappings.ResourceLocation import de.bixilon.minosoft.data.mappings.ResourceLocation
import de.bixilon.minosoft.protocol.protocol.ProtocolDefinition
import de.bixilon.minosoft.util.enum.AliasableEnum import de.bixilon.minosoft.util.enum.AliasableEnum
import sun.misc.Unsafe import sun.misc.Unsafe
import java.util.* import java.util.*
@ -113,4 +114,16 @@ object KUtil {
fun Random.nextFloat(min: Float = Float.MIN_VALUE, max: Float = Float.MAX_VALUE): Float { fun Random.nextFloat(min: Float = Float.MIN_VALUE, max: Float = Float.MAX_VALUE): Float {
return min + this.nextFloat() * (max - min) return min + this.nextFloat() * (max - min)
} }
/**
* Converts millis to ticks
*/
val Number.ticks: Int
get() = this.toInt() / ProtocolDefinition.TICK_TIME
/**
* Converts ticks to millis
*/
val Number.millis: Int
get() = this.toInt() * ProtocolDefinition.TICK_TIME
} }