package kha;

import kha.arrays.Float32Array;
import kha.math.FastMatrix3;
import kha.math.FastMatrix4;
import kha.math.FastVector2;
import kha.math.FastVector3;
import kha.math.FastVector4;

class Float32ArrayExtensions {
	public static inline function setVector2(array: Float32Array, index: Int, vector: FastVector2) {
		array.set(index + 0, vector.x);
		array.set(index + 1, vector.y);
	}

	public static inline function setVector3(array: Float32Array, index: Int, vector: FastVector3) {
		array.set(index + 0, vector.x);
		array.set(index + 1, vector.y);
		array.set(index + 2, vector.z);
	}

	public static inline function setVector4(array: Float32Array, index: Int, vector: FastVector4) {
		array.set(index + 0, vector.x);
		array.set(index + 1, vector.y);
		array.set(index + 2, vector.z);
		array.set(index + 3, vector.w);
	}

	public static inline function setColor(array: Float32Array, index: Int, color: Color) {
		array.set(index + 0, color.R);
		array.set(index + 1, color.G);
		array.set(index + 2, color.B);
		array.set(index + 3, color.A);
	}

	public static inline function setMatrix3(array: Float32Array, index: Int, matrix: FastMatrix3) {
		array.set(index + 0, matrix._00);
		array.set(index + 1, matrix._01);
		array.set(index + 2, matrix._02);

		array.set(index + 3, matrix._10);
		array.set(index + 4, matrix._11);
		array.set(index + 5, matrix._12);

		array.set(index + 6, matrix._20);
		array.set(index + 7, matrix._21);
		array.set(index + 8, matrix._22);
	}

	public static inline function setMatrix4(array: Float32Array, index: Int, matrix: FastMatrix4) {
		array.set(index + 0, matrix._00);
		array.set(index + 1, matrix._01);
		array.set(index + 2, matrix._02);
		array.set(index + 3, matrix._03);

		array.set(index + 4, matrix._10);
		array.set(index + 5, matrix._11);
		array.set(index + 6, matrix._12);
		array.set(index + 7, matrix._13);

		array.set(index + 8, matrix._20);
		array.set(index + 9, matrix._21);
		array.set(index + 10, matrix._22);
		array.set(index + 11, matrix._23);

		array.set(index + 12, matrix._30);
		array.set(index + 13, matrix._31);
		array.set(index + 14, matrix._32);
		array.set(index + 15, matrix._33);
	}
}