time-is-odd/Client/region/SuperUnit.gd

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