port revo's ballsnake, when the sanke he balll he balls
This commit is contained in:
parent
ddd02953da
commit
909afe17a1
1 changed files with 45 additions and 0 deletions
45
scripts/ball_snake.gd
Normal file
45
scripts/ball_snake.gd
Normal file
|
@ -0,0 +1,45 @@
|
|||
@tool
|
||||
class_name BallSnake
|
||||
extends Node2D
|
||||
|
||||
|
||||
@export var texture: Texture2D
|
||||
@export var target: Node2D
|
||||
@export var segments: int = 1
|
||||
@export var head_segment: bool = true
|
||||
@export var tail_segment: bool = true
|
||||
@export var auto_density: bool = false:
|
||||
set(value):
|
||||
auto_density = value
|
||||
if auto_density:
|
||||
pixels_per_segment = pixels_per_segment
|
||||
@export_range(1,2,1,"or_greater") var pixels_per_segment: float = 1.0:
|
||||
set(value):
|
||||
pixels_per_segment = value
|
||||
if auto_density and target:
|
||||
segments = int(global_position.distance_to(target.global_position) / pixels_per_segment) - 1
|
||||
|
||||
|
||||
func _process(delta: float) -> void:
|
||||
if auto_density:
|
||||
pixels_per_segment = pixels_per_segment
|
||||
queue_redraw()
|
||||
|
||||
|
||||
func _draw() -> void:
|
||||
if not target:
|
||||
return
|
||||
|
||||
if tail_segment:
|
||||
draw_texture(texture, -texture.get_size() * 0.5)
|
||||
|
||||
var end_pos = to_local(target.global_position)
|
||||
for i in segments:
|
||||
var weight = 1.0 / float(segments + 1) * float(i + 1)
|
||||
draw_texture(
|
||||
texture,
|
||||
lerp(Vector2.ZERO, end_pos, weight) - texture.get_size() * 0.5
|
||||
)
|
||||
|
||||
if head_segment:
|
||||
draw_texture(texture, end_pos - texture.get_size() * 0.5)
|
Loading…
Add table
Add a link
Reference in a new issue