83 lines
1.9 KiB
GDScript
83 lines
1.9 KiB
GDScript
extends Reference
|
|
class_name SummerDayMatrix4
|
|
|
|
|
|
var values: Array
|
|
|
|
|
|
func _init(initial_values: Array = [
|
|
1.0, 0.0, 0.0, 0.0,
|
|
0.0, 1.0, 0.0, 0.0,
|
|
0.0, 0.0, 1.0, 0.0,
|
|
0.0, 0.0, 0.0, 1.0,
|
|
]):
|
|
if initial_values.size() != 16:
|
|
push_error(
|
|
"Instance: " + str(self) + " \"initial_values.size() != 16\""
|
|
)
|
|
|
|
var misplaced_type_found = false
|
|
for i in initial_values:
|
|
if !(i is float):
|
|
misplaced_type_found = true
|
|
if misplaced_type_found:
|
|
push_error(
|
|
"Instance: " + str(self)
|
|
+ " \"initial_values\" contains non-float values!"
|
|
)
|
|
|
|
values = initial_values
|
|
|
|
|
|
static func from_Basis(from: Basis) -> SummerDayMatrix4:
|
|
var Self = load("res://addons/summer_day/utilities/matrix_4.gd")
|
|
return Self.new([
|
|
from.x.x, from.y.x, 0.0, from.z.x,
|
|
from.x.y, from.y.y, 0.0, from.z.y,
|
|
0.0, 0.0, 0.0, 0.0, # <-- Change to 0.0, 0.0, 1.0, 0.0,
|
|
from.x.z, from.y.z, 0.0, from.z.z,
|
|
])
|
|
|
|
|
|
static func from_Transform(from: Transform) -> SummerDayMatrix4:
|
|
var Self = load("res://addons/summer_day/utilities/matrix_4.gd")
|
|
return Self.new([
|
|
from.basis.x.x, from.basis.x.y, from.basis.x.z, from.origin.x,
|
|
from.basis.y.x, from.basis.y.y, from.basis.y.z, from.origin.y,
|
|
from.basis.z.x, from.basis.z.y, from.basis.z.z, from.origin.z,
|
|
0.0, 0.0, 0.0, 1.0
|
|
])
|
|
|
|
|
|
static func mult(
|
|
left: SummerDayMatrix4, right: SummerDayMatrix4
|
|
) -> SummerDayMatrix4:
|
|
var Self = load("res://addons/summer_day/utilities/matrix_4.gd")
|
|
var result = []
|
|
for y in range(4):
|
|
for x in range(4):
|
|
var sum = 0.0
|
|
for i in range(4):
|
|
sum += left.get_value(x, i) * right.get_value(i, y)
|
|
result.append(sum)
|
|
return Self.new(result)
|
|
|
|
|
|
# Get value per coordinates.
|
|
func get_value(x: int, y: int) -> float:
|
|
return values[y * 4 + x]
|
|
|
|
|
|
func get_values_as_colors() -> Array:
|
|
var list = []
|
|
for y in range(4):
|
|
list.append(
|
|
Color(
|
|
get_value(0, y),
|
|
get_value(1, y),
|
|
get_value(2, y),
|
|
get_value(3, y)
|
|
)
|
|
)
|
|
return list
|