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