TreeTop.gd simplify + drawing different leaf counts! (:

This commit is contained in:
Harmony Honey 2022-12-28 22:08:50 -05:00
parent 48383e4bad
commit bd9869c773
2 changed files with 47 additions and 26 deletions

View file

@ -1,31 +1,40 @@
tool
extends CanvasItem
export var start_dist := 170.0 setget set_start
export var distance := 130.0 setget set_distance
export var circle_offset := Vector2.ZERO setget set_offset
export var gon := PoolVector2Array()
export var points := 16 setget set_points
export var leaves := 8 setget set_leaves
export var dist := 130.0 setget set_dist
export var radius := 70.0 setget set_radius
export var points := 8 setget set_points
export var draw_offset := Vector2.ZERO setget set_offset
var gon := PoolVector2Array()
export var poly_path : NodePath setget set_poly
onready var poly := get_node_or_null(poly_path)
export var is_draw_debug := false setget set_debug
var _draw_me := Vector2.ZERO
var _draw_circle := Vector2.ZERO
func u():
gon = []
for i in 8:
var start = Vector2(start_dist, 0).rotated(deg2rad((i * 45) - 22.5))
var end = Vector2(start_dist, 0).rotated(deg2rad((i * 45) + 22.5))
var center = start.linear_interpolate(end, 0.5).normalized() * distance
var r = center.distance_to(start)
var a1 = center.angle_to_point(start)
var a2 = center.angle_to_point(end)
#print("a1: ", rad2deg(a1), " a2: ", rad2deg(a2), " r: ", r)
var s = Vector2(dist, 0)
var r = PI*(1.0/leaves)
var line = Vector2(dist * 3.0, 0).rotated(r)
var seg = Geometry.segment_intersects_circle(line, Vector2.ZERO, s, radius)
var l = line * (1.0 - seg)
var ang = (l - s).angle()
#print("r: ", rad2deg(r), " leaves: ", leaves, " line: ", line, "seg: ", seg, " l: ", l, " ang: ", rad2deg(ang))
_draw_me = l
_draw_circle = s
for i in leaves:
var a = (float(i) / leaves) * TAU
for y in points:
gon.append(circle_offset + center + Vector2(r, 0).rotated(lerp_angle(a2 + deg2rad(45), a1 + deg2rad(45), -float(y) / points)))
gon.append(draw_offset + s.rotated(a) + Vector2(radius, 0).rotated(a + lerp_angle(-ang, ang, float(y) / points)))
if !poly: poly = get_node_or_null(poly_path)
if poly:
@ -38,17 +47,27 @@ func u():
func _draw():
if !poly: draw_colored_polygon(gon, Color.white, PoolVector2Array(), null, null, true)
if is_draw_debug:
var c = Color(0,0,0, 0.5)
draw_line(Vector2.ZERO, Vector2(dist * 2, 0), c, 5.0)
draw_line(Vector2.ZERO, _draw_me, c, 5.0)
draw_circle(_draw_me, 10, c)
draw_circle(_draw_circle, radius, c)
func set_start(arg := start_dist):
start_dist = arg
func set_radius(arg := radius):
radius = arg
u()
func set_distance(arg := distance):
distance = abs(arg)
func set_leaves(arg := leaves):
leaves = max(1, arg)
u()
func set_offset(arg := circle_offset):
circle_offset = arg
func set_dist(arg := dist):
dist = abs(arg)
u()
func set_offset(arg := draw_offset):
draw_offset = arg
u()
func set_points(arg := points):
@ -58,3 +77,7 @@ func set_points(arg := points):
func set_poly(arg := poly_path):
poly_path = arg
u()
func set_debug(arg := is_draw_debug):
is_draw_debug = arg
u()

View file

@ -28,10 +28,8 @@ pitch_to = 0.5
[node name="Sprite" type="Polygon2D" parent="."]
modulate = Color( 0.494118, 0.890196, 0.337255, 1 )
polygon = PoolVector2Array( 156.868, -65.1356, 174.599, -54.5481, 188.498, -39.2745, 197.372, -20.627, 200.459, -0.207595, 197.493, 20.2297, 188.729, 38.9291, 174.919, 54.2843, 156.98, 64.8644, 162.031, 84.8885, 161.06, 105.517, 154.149, 124.978, 141.893, 141.599, 125.344, 153.953, 105.924, 160.978, 85.3018, 162.071, 65.1356, 156.868, 54.5481, 174.599, 39.2745, 188.498, 20.6271, 197.372, 0.20763, 200.459, -20.2296, 197.493, -38.9291, 188.729, -54.2843, 174.919, -64.8644, 156.98, -84.8885, 162.031, -105.517, 161.06, -124.978, 154.149, -141.599, 141.893, -153.953, 125.344, -160.978, 105.924, -162.071, 85.3018, -156.868, 65.1356, -174.599, 54.5481, -188.498, 39.2745, -197.372, 20.627, -200.459, 0.2076, -197.493, -20.2297, -188.729, -38.9291, -174.919, -54.2843, -156.98, -64.8644, -162.031, -84.8885, -161.06, -105.517, -154.149, -124.978, -141.893, -141.599, -125.344, -153.953, -105.924, -160.978, -85.3019, -162.071, -65.1356, -156.868, -54.5481, -174.599, -39.2745, -188.498, -20.627, -197.372, -0.207559, -200.459, 20.2297, -197.493, 38.9292, -188.729, 54.2843, -174.919, 64.8644, -156.98, 84.8885, -162.031, 105.517, -161.06, 124.978, -154.149, 141.599, -141.893, 153.953, -125.344, 160.978, -105.924, 162.071, -85.3018 )
polygon = PoolVector2Array( 156.458, -64.8071, 174.201, -54.2799, 188.104, -39.0379, 196.96, -20.4052, 200, 0, 196.96, 20.4052, 188.104, 39.0379, 174.201, 54.2799, 156.458, 64.8072, 161.56, 84.7968, 160.613, 105.405, 153.7, 124.843, 141.421, 141.421, 124.843, 153.7, 105.405, 160.613, 84.7968, 161.56, 64.8071, 156.458, 54.2799, 174.201, 39.0379, 188.104, 20.4052, 196.96, -8.74228e-06, 200, -20.4052, 196.96, -39.0379, 188.104, -54.2799, 174.201, -64.8072, 156.458, -84.7968, 161.56, -105.405, 160.613, -124.843, 153.7, -141.421, 141.421, -153.7, 124.843, -160.613, 105.405, -161.56, 84.7968, -156.458, 64.8071, -174.201, 54.2799, -188.104, 39.0379, -196.96, 20.4052, -200, -1.74846e-05, -196.96, -20.4052, -188.104, -39.038, -174.201, -54.2799, -156.458, -64.8072, -161.56, -84.7968, -160.613, -105.405, -153.7, -124.843, -141.421, -141.421, -124.843, -153.7, -105.405, -160.613, -84.7968, -161.56, -64.8071, -156.458, -54.2799, -174.201, -39.038, -188.104, -20.4052, -196.96, 2.38498e-06, -200, 20.4052, -196.96, 39.0379, -188.104, 54.2799, -174.201, 64.8071, -156.458, 84.7968, -161.56, 105.405, -160.613, 124.843, -153.7, 141.421, -141.421, 153.7, -124.843, 160.613, -105.405, 161.56, -84.7968 )
script = ExtResource( 1 )
gon = PoolVector2Array( 156.868, -65.1356, 174.599, -54.5481, 188.498, -39.2745, 197.372, -20.627, 200.459, -0.207595, 197.493, 20.2297, 188.729, 38.9291, 174.919, 54.2843, 156.98, 64.8644, 162.031, 84.8885, 161.06, 105.517, 154.149, 124.978, 141.893, 141.599, 125.344, 153.953, 105.924, 160.978, 85.3018, 162.071, 65.1356, 156.868, 54.5481, 174.599, 39.2745, 188.498, 20.6271, 197.372, 0.20763, 200.459, -20.2296, 197.493, -38.9291, 188.729, -54.2843, 174.919, -64.8644, 156.98, -84.8885, 162.031, -105.517, 161.06, -124.978, 154.149, -141.599, 141.893, -153.953, 125.344, -160.978, 105.924, -162.071, 85.3018, -156.868, 65.1356, -174.599, 54.5481, -188.498, 39.2745, -197.372, 20.627, -200.459, 0.2076, -197.493, -20.2297, -188.729, -38.9291, -174.919, -54.2843, -156.98, -64.8644, -162.031, -84.8885, -161.06, -105.517, -154.149, -124.978, -141.893, -141.599, -125.344, -153.953, -105.924, -160.978, -85.3019, -162.071, -65.1356, -156.868, -54.5481, -174.599, -39.2745, -188.498, -20.627, -197.372, -0.207559, -200.459, 20.2297, -197.493, 38.9292, -188.729, 54.2843, -174.919, 64.8644, -156.98, 84.8885, -162.031, 105.517, -161.06, 124.978, -154.149, 141.599, -141.893, 153.953, -125.344, 160.978, -105.924, 162.071, -85.3018 )
points = 8
poly_path = NodePath(".")
[node name="Area2D" type="Area2D" parent="."]