109 lines
2.3 KiB
GDScript3
109 lines
2.3 KiB
GDScript3
|
extends KinematicBody2D
|
||
|
|
||
|
export (NodePath) var city
|
||
|
export (NodePath) var market
|
||
|
export (NodePath) var company
|
||
|
export (Vector2) var spawn
|
||
|
|
||
|
|
||
|
var speed_spawn = 500
|
||
|
var speed_phys = 5
|
||
|
var dest = 0
|
||
|
|
||
|
var current_target = null
|
||
|
|
||
|
var wait_start = 0.5
|
||
|
var wait_market = 1.8
|
||
|
var wait_city = 1.8
|
||
|
var wait_final = 0.2
|
||
|
|
||
|
var velocity = Vector2()
|
||
|
|
||
|
var oldNodePosHitAngle = null
|
||
|
|
||
|
func _ready():
|
||
|
get_node("sprite").texture = load("res://sprites/bringmans/bm"+str(randi()%10).pad_zeros(2)+".png")
|
||
|
|
||
|
|
||
|
func state_next():
|
||
|
velocity = Vector2.ZERO
|
||
|
oldNodePosHitAngle = null
|
||
|
dest+=1
|
||
|
|
||
|
func _process(delta):
|
||
|
if dest == 0:
|
||
|
move_to_pos(spawn, delta)
|
||
|
elif dest == 1:
|
||
|
wait_start-=delta
|
||
|
if wait_start <= 0: state_next()
|
||
|
elif dest == 2:
|
||
|
move_to_node(market, delta)
|
||
|
elif dest == 3:
|
||
|
wait_market-=delta
|
||
|
if wait_market <= 0: state_next()
|
||
|
elif dest == 4:
|
||
|
move_to_node(city, delta)
|
||
|
elif dest == 5:
|
||
|
wait_city-=delta
|
||
|
if wait_city <= 0: state_next()
|
||
|
elif dest == 6:
|
||
|
move_to_node_pos(company, delta)
|
||
|
elif dest == 7:
|
||
|
wait_final-=delta
|
||
|
if wait_final <= 0: state_next()
|
||
|
elif dest == 8:
|
||
|
remove_and_skip()
|
||
|
|
||
|
|
||
|
func move_to_node(np, delta):
|
||
|
var node = get_node(np)
|
||
|
velocity += (node.position - position).normalized() * speed_phys
|
||
|
|
||
|
current_target = node
|
||
|
|
||
|
|
||
|
func move_to_node_pos(np, delta):
|
||
|
var node = get_node(np)
|
||
|
velocity += (node.position - position).normalized() * speed_phys
|
||
|
|
||
|
var angleNow = sign((node.position - position).angle())
|
||
|
|
||
|
if oldNodePosHitAngle == null:
|
||
|
oldNodePosHitAngle = angleNow
|
||
|
else:
|
||
|
if angleNow != oldNodePosHitAngle:
|
||
|
state_next()
|
||
|
else:
|
||
|
oldNodePosHitAngle = angleNow
|
||
|
|
||
|
|
||
|
func move_to_pos(pos, delta):
|
||
|
velocity = Vector2.ZERO
|
||
|
current_target = null
|
||
|
|
||
|
var angle_prev = sign((pos - position).angle())
|
||
|
|
||
|
position = position.move_toward(pos, delta * speed_spawn)
|
||
|
|
||
|
var angle_post = sign((pos - position).angle())
|
||
|
|
||
|
if angle_prev != angle_post:
|
||
|
state_next()
|
||
|
|
||
|
func radius():
|
||
|
return get_node("sprite").texture.get_width()*get_node("sprite").transform.get_scale().x/2
|
||
|
|
||
|
|
||
|
func _physics_process(delta):
|
||
|
if (velocity.length_squared() == 0): return
|
||
|
|
||
|
velocity = move_and_slide(velocity, Vector2(0, -1))
|
||
|
|
||
|
if current_target != null:
|
||
|
var slide_count = get_slide_count()
|
||
|
if slide_count:
|
||
|
var collision = get_slide_collision(slide_count - 1)
|
||
|
var collider = collision.collider
|
||
|
if collider == current_target:
|
||
|
state_next()
|