All Downloads are FREE. Search and download functionalities are using the official Maven repository.

commonMain.ru.casperix.math.camera.OrthographicCamera2f.kt Maven / Gradle / Ivy

package ru.casperix.math.camera

import ru.casperix.math.axis_aligned.int32.Dimension2i
import ru.casperix.math.quad_matrix.float32.Matrix3f
import ru.casperix.math.vector.float32.Vector2f

class OrthographicCamera2f(initialZoom: Float, initialPosition:Vector2f, initialViewport:Dimension2i) {
    var transform: CameraTransform2f = calculate(initialViewport, initialZoom, initialPosition); private set

    var zoom = initialZoom
        set(value) {
            if (field == value) return
            field = value
            invalidate()
        }
    var position = initialPosition
        set(value) {
            if (field == value) return
            field = value
            invalidate()
        }
    var viewport = initialViewport
        set(value) {
            if (field == value) return
            field = value
            invalidate()
        }

    private fun invalidate() {
        transform = calculate(viewport, zoom, position)
    }

    companion object {
        fun calculate(
            viewport: Dimension2i,
            zoom: Float,
            position: Vector2f
        ): CameraTransform2f {
            val projection = Matrix3f.orthographic(
                -viewport.width / 2f * zoom,
                viewport.width / 2f * zoom,
                -viewport.height / 2f * zoom,
                viewport.height / 2f * zoom,
            )

            val view = Matrix3f.translate(-position)
            return CameraTransform2f(projection, view, viewport)
        }
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy