66 lines
1.6 KiB
GDScript
66 lines
1.6 KiB
GDScript
|
extends Node2D
|
||
|
class_name Pentagram
|
||
|
|
||
|
var A: Vector2
|
||
|
var B: Vector2
|
||
|
var C: Vector2
|
||
|
var D: Vector2
|
||
|
var E: Vector2
|
||
|
var center: Vector2
|
||
|
var radius: int
|
||
|
var points: Array
|
||
|
var indexes: Array
|
||
|
var snaped = false
|
||
|
var snap_addr = 0
|
||
|
|
||
|
func _ready():
|
||
|
self.refresh()
|
||
|
get_viewport().size_changed.connect(self.refresh)
|
||
|
self.indexes = [
|
||
|
0, 1, 2, 3, 4
|
||
|
]
|
||
|
|
||
|
func refresh():
|
||
|
var view = get_viewport()
|
||
|
self.radius = 256
|
||
|
self.center = view.size/2
|
||
|
var x = -PI/5
|
||
|
var y = -PI/16
|
||
|
self.A = self.center + self.get_point(-PI/2 - x) * self.radius
|
||
|
self.B = self.center + self.get_point(0 - y) * self.radius
|
||
|
self.C = self.center + self.get_point(PI/2) * self.radius
|
||
|
self.D = self.center + self.get_point(PI + y) * self.radius
|
||
|
self.E = self.center + self.get_point(-PI/2 + x) * self.radius
|
||
|
self.points = [self.A, self.B, self.C, self.D, self.E]
|
||
|
|
||
|
func _draw():
|
||
|
# draw_circle(self.center, self.radius, Color.BLACK)
|
||
|
var w = 8
|
||
|
draw_line(self.A, self.C, Color.DARK_RED, w)
|
||
|
draw_line(self.C, self.E, Color.DARK_RED, w)
|
||
|
draw_line(self.E, self.B, Color.DARK_RED, w)
|
||
|
draw_line(self.B, self.D, Color.DARK_RED, w)
|
||
|
draw_line(self.D, self.A, Color.DARK_RED, w)
|
||
|
|
||
|
func get_point(angle):
|
||
|
return Vector2(cos(angle), sin(angle))
|
||
|
|
||
|
func nearest(rune):
|
||
|
var point = null
|
||
|
var dist = null
|
||
|
for pts in self.points:
|
||
|
var d = rune.distance_squared_to(pts)
|
||
|
if dist == null or dist < d:
|
||
|
dist = d
|
||
|
point = pts
|
||
|
return point
|
||
|
|
||
|
func snap(pos: Vector2, dist):
|
||
|
self.snaped = false
|
||
|
for pts in self.points:
|
||
|
if pos.distance_squared_to(pts) < dist * dist:
|
||
|
self.snaped = true
|
||
|
self.snap_addr = self.points.find(pts)
|
||
|
return pts
|
||
|
return pos
|