mirror of
https://github.com/Relintai/broken_seals.git
synced 2024-12-25 01:17:10 +01:00
86 lines
2.5 KiB
GDScript
86 lines
2.5 KiB
GDScript
tool
|
|
extends Reference
|
|
|
|
const Commons = preload("res://addons/mat_maker_gd/nodes/common/commons.gd")
|
|
|
|
#Based on MaterialMaker's curve.gd
|
|
|
|
#Curve PoolRealArray: p.x, p.y, ls, rs, p.x, p.y ....
|
|
|
|
#class Point:
|
|
# var p : Vector2
|
|
# var ls : float
|
|
# var rs : float
|
|
|
|
#func get_shader(name) -> String:
|
|
# var shader
|
|
# shader = "float "+name+"_curve_fct(float x) {\n"
|
|
# for i in range(points.size()-1):
|
|
# if i < points.size()-2:
|
|
# shader += "if (x <= p_"+name+"_"+str(i+1)+"_x) "
|
|
#
|
|
# shader += "{\n"
|
|
# shader += "float dx = x - p_"+name+"_"+str(i)+"_x;\n"
|
|
# shader += "float d = p_"+name+"_"+str(i+1)+"_x - p_"+name+"_"+str(i)+"_x;\n"
|
|
# shader += "float t = dx/d;\n"
|
|
# shader += "float omt = (1.0 - t);\n"
|
|
# shader += "float omt2 = omt * omt;\n"
|
|
# shader += "float omt3 = omt2 * omt;\n"
|
|
# shader += "float t2 = t * t;\n"
|
|
# shader += "float t3 = t2 * t;\n"
|
|
# shader += "d /= 3.0;\n"
|
|
# shader += "float y1 = p_"+name+"_"+str(i)+"_y;\n"
|
|
# shader += "float yac = p_"+name+"_"+str(i)+"_y + d*p_"+name+"_"+str(i)+"_rs;\n"
|
|
# shader += "float ybc = p_"+name+"_"+str(i+1)+"_y - d*p_"+name+"_"+str(i+1)+"_ls;\n"
|
|
# shader += "float y2 = p_"+name+"_"+str(i+1)+"_y;\n"
|
|
# shader += "return y1*omt3 + yac*omt2*t*3.0 + ybc*omt*t2*3.0 + y2*t3;\n"
|
|
# shader += "}\n"
|
|
#
|
|
# shader += "}\n"
|
|
# return shader
|
|
|
|
static func curve(x : float, points : PoolRealArray) -> float:
|
|
if points.size() % 4 != 0 || points.size() < 8:
|
|
return 0.0
|
|
|
|
var ps : int = points.size() / 4
|
|
|
|
for i in range(ps - 1):
|
|
var pi : int = i * 4
|
|
var pip1 : int = (i + 1) * 4
|
|
|
|
if i < ps - 2:
|
|
# if (x <= p_"+name+"_"+str(i+1)+"_x)
|
|
if x > points[pip1]:
|
|
continue
|
|
|
|
#float dx = x - p_"+name+"_"+str(i)+"_x;
|
|
var dx : float = x - points[pi];
|
|
|
|
#var d : float = p_"+name+"_"+str(i+1)+"_x - p_"+name+"_"+str(i)+"_x;
|
|
var d : float = points[pip1] - points[pi];
|
|
|
|
var t : float = dx / d
|
|
var omt : float = (1.0 - t)
|
|
var omt2 : float = omt * omt
|
|
var omt3 : float = omt2 * omt
|
|
var t2 : float = t * t
|
|
var t3 : float = t2 * t
|
|
d /= 3.0
|
|
|
|
# var y1 : float = p_"+name+"_"+str(i)+"_y
|
|
var y1 : float = points[pi + 1]
|
|
|
|
# var yac : float = p_"+name+"_"+str(i)+"_y + d*p_"+name+"_"+str(i)+"_rs
|
|
var yac : float = points[pi + 1] + d * points[pi + 3]
|
|
|
|
# var ybc : float = p_"+name+"_"+str(i+1)+"_y - d*p_"+name+"_"+str(i+1)+"_ls
|
|
var ybc : float = points[pip1 + 1] - d * points[pip1 + 2]
|
|
|
|
# var y2 : float = p_"+name+"_"+str(i+1)+"_y
|
|
var y2 : float = points[pip1 + 1]
|
|
|
|
return y1 * omt3 + yac * omt2 * t * 3.0 + ybc * omt * t2 * 3.0 + y2 * t3;
|
|
|
|
return 0.0
|