61 lines
2.1 KiB
GDScript
61 lines
2.1 KiB
GDScript
extends Sprite
|
|
|
|
signal positionReached
|
|
var Route
|
|
signal pathAnimationCompleted
|
|
var isSelected = false
|
|
var isMoving = false
|
|
var boardUnitsIndex
|
|
onready var region = get_parent().get_parent().get_parent()
|
|
|
|
func on_ready():#this connects the unit to the main node using signals
|
|
connect("pathAnimationCompleted",region, "_on_pathAnimationCompleted")
|
|
snapToPosition()
|
|
if region.boardUnits[boardUnitsIndex].faction == "enemyFaction":
|
|
modulate = Color(1,0,0,1)
|
|
if region.boardUnits[boardUnitsIndex].faction == "allyFaction":
|
|
modulate = Color(0,1,0,1)
|
|
# emit_signal("pathAnimationCompleted")
|
|
|
|
func snapToPosition():
|
|
self.position = get_parent().get_parent().map_to_world(region.boardUnits[boardUnitsIndex].coords)
|
|
var undertiles = []
|
|
undertiles.append(Vector2(region.boardUnits[boardUnitsIndex].coords.x,region.boardUnits[boardUnitsIndex].coords.y))
|
|
undertiles.append(Vector2(region.boardUnits[boardUnitsIndex].coords.x,region.boardUnits[boardUnitsIndex].coords.y+1))
|
|
undertiles.append(Vector2(region.boardUnits[boardUnitsIndex].coords.x+1,region.boardUnits[boardUnitsIndex].coords.y))
|
|
undertiles.append(Vector2(region.boardUnits[boardUnitsIndex].coords.x+1,region.boardUnits[boardUnitsIndex].coords.y+1))
|
|
# unitCurrentUndertiles = undertiles
|
|
pass
|
|
|
|
func moveOnPath(route:Array):#this coordinates the movement/animation
|
|
isMoving=true
|
|
var indexPosition = 0
|
|
for coords in route:
|
|
if route[0] == coords:
|
|
var t = Transform2D()
|
|
t.origin = coords
|
|
else:
|
|
moveTo(route[indexPosition],coords)
|
|
yield(self,"positionReached")
|
|
indexPosition+=1
|
|
emit_signal("pathAnimationCompleted")
|
|
isMoving = false
|
|
|
|
var speed =4
|
|
onready var motion = Vector2(0,0)
|
|
|
|
func moveTo(start:Vector2, destination:Vector2):#this does a step of the movement/animation. coordinated by moveOnPath
|
|
var travel = destination-start
|
|
motion = travel*speed
|
|
yield(get_tree().create_timer(travel.length()/motion.length()), "timeout")
|
|
motion= Vector2(0,0)
|
|
var t = Transform2D()
|
|
t.origin = destination
|
|
transform = t
|
|
emit_signal("positionReached")
|
|
# unitCurrentPosition=GlobalTileMap.world_to_map(destination)
|
|
snapToPosition()
|
|
|
|
func _physics_process(delta):
|
|
position += motion*delta
|