2022-01-09 17:34:26 +01:00
extends Resource
class_name SummerDayQuad
2022-03-05 14:59:24 +01:00
export ( PoolVector3Array ) var original_vertices = PoolVector3Array ( [
Vector3 ( - 1.0 , - 1.0 , 0.0 ) ,
Vector3 ( 1.0 , - 1.0 , 0.0 ) ,
Vector3 ( 1.0 , 1.0 , 0.0 ) ,
Vector3 ( - 1.0 , 1.0 , 0.0 ) ,
] )
2022-01-09 17:34:26 +01:00
export ( PoolVector2Array ) var vertices = PoolVector2Array ( [
Vector2 ( - 0.4 , - 0.4 ) ,
Vector2 ( 0.1 , - 0.4 ) ,
Vector2 ( 0.1 , 0.1 ) ,
Vector2 ( - 0.4 , 0.1 ) ,
] )
2022-03-05 14:59:24 +01:00
func guess_normal ( ) - > Vector3 :
var original_angles = get_quad_angles ( original_vertices )
var angles = get_quad_angles ( vertices )
var angle_changes = [
range_lerp ( angles [ 0 ] , original_angles [ 0 ] , PI , 0.0 , 1.0 ) ,
range_lerp ( angles [ 1 ] , original_angles [ 1 ] , PI , 0.0 , 1.0 ) ,
range_lerp ( angles [ 2 ] , original_angles [ 2 ] , PI , 0.0 , 1.0 ) ,
range_lerp ( angles [ 3 ] , original_angles [ 3 ] , PI , 0.0 , 1.0 ) ,
]
var FRONT_VECTOR = Vector3 ( 0.0 , 0.0 , - 1.0 )
# Going \.
var s_slope_vector_dest
var s_slope_vector_weight
if angle_changes [ 0 ] > angle_changes [ 2 ] :
s_slope_vector_dest = Vector3 ( - 1.0 , - 1.0 , 0.0 )
s_slope_vector_weight = angle_changes [ 0 ]
elif angle_changes [ 0 ] < angle_changes [ 2 ] :
s_slope_vector_dest = Vector3 ( 1.0 , 1.0 , 0.0 )
s_slope_vector_weight = angle_changes [ 2 ]
else :
s_slope_vector_dest = FRONT_VECTOR
s_slope_vector_weight = 0.0
# Going /.
var z_slope_vector_dest
var z_slope_vector_weight
if angle_changes [ 1 ] > angle_changes [ 3 ] :
z_slope_vector_dest = Vector3 ( 1.0 , - 1.0 , 0.0 )
z_slope_vector_weight = angle_changes [ 1 ]
elif angle_changes [ 1 ] < angle_changes [ 3 ] :
z_slope_vector_dest = Vector3 ( - 1.0 , 1.0 , 0.0 )
z_slope_vector_weight = angle_changes [ 3 ]
else :
z_slope_vector_dest = FRONT_VECTOR
z_slope_vector_weight = 0.0
var s_slope_vector = FRONT_VECTOR . slerp (
s_slope_vector_dest , s_slope_vector_weight
)
var z_slope_vector = FRONT_VECTOR . slerp (
z_slope_vector_dest , z_slope_vector_weight
)
var total_weight = s_slope_vector_weight + z_slope_vector_weight
if total_weight != 0.0 :
return s_slope_vector . slerp (
z_slope_vector , s_slope_vector_weight / total_weight
)
else :
return FRONT_VECTOR
2022-01-09 17:34:26 +01:00
2022-03-05 14:59:24 +01:00
func get_quad_angles ( verts ) - > Array :
var angles = [ ]
for i in range ( 4 ) :
var next_i = wrapi ( i + 1 , 0 , 4 )
var prev_i = wrapi ( i - 1 , 0 , 4 )
var to_next = verts [ next_i ] - verts [ i ]
var to_prev = verts [ prev_i ] - verts [ i ]
var angle = to_next . angle_to ( to_prev )
angles . append ( angle )
return angles