summaryrefslogtreecommitdiff
path: root/Units/Unit.gd
diff options
context:
space:
mode:
Diffstat (limited to 'Units/Unit.gd')
-rw-r--r--Units/Unit.gd70
1 files changed, 31 insertions, 39 deletions
diff --git a/Units/Unit.gd b/Units/Unit.gd
index b575e01..d42e65b 100644
--- a/Units/Unit.gd
+++ b/Units/Unit.gd
@@ -56,9 +56,11 @@ var roaming_mode = false
# rpc owner id
@export var owner_id = 1
-@export var base_speed: float = 100
-@export var speed: float = base_speed
-@export var hp = 50 :
+@export var unit_resource: UnitResource
+
+var base_speed: float = 100
+var speed: float = base_speed
+var hp = 50 :
set = set_hp
@onready var line: Line2D = $UnitPathLine.duplicate()
@@ -75,6 +77,12 @@ func _init():
func _ready():
+ # setup with data from UnitResource
+ sprite.sprite_frames = unit_resource.sprite_frames
+ sprite.scale = unit_resource.sprite_scale
+ base_speed = unit_resource.speed
+ hp = unit_resource.hp
+
base_speed *= scale.x
speed = base_speed
@@ -102,7 +110,8 @@ func _ready():
%HPBar.init(hp)
set_hp(hp)
- $SelectionArea/CollisionShape2D.shape.size = $Sprite2D.texture.get_size() * $Sprite2D.scale
+ var sprite_texture: Texture2D = sprite.sprite_frames.get_frame_texture("down", 0)
+ $SelectionArea/CollisionShape2D.shape.size = sprite_texture.get_size()
func _physics_process(delta):
@@ -140,7 +149,7 @@ func _physics_process(delta):
func _draw():
if is_selected:
draw_circle(
- $Sprite2D.position,
+ sprite.position,
Client.current_stage.map.tile_set.tile_size.x * 0.75,
Color(1, 1, 1, 0.75),
false,
@@ -149,7 +158,7 @@ func _draw():
modulate = Color(1.5, 1.5, 1.5)
elif is_hovered:
draw_circle(
- $Sprite2D.position,
+ sprite.position,
Client.current_stage.map.tile_set.tile_size.x * 0.75,
Color(1, 1, 1, 0.5),
false,
@@ -189,28 +198,26 @@ func walk_along_path(path: PackedVector2Array, index: int, delta: float):
# todo: because the velocity expects ??to each the point??, so it stutters
if velocity.x > 0 and velocity.y == 0:
- $AnimatedSprite2D.play("right")
+ sprite.play("right")
elif velocity.x < 0 and velocity.y == 0:
- $AnimatedSprite2D.play("left")
+ sprite.play("left")
elif velocity.x == 0 and velocity.y > 0:
- $AnimatedSprite2D.play("down")
+ sprite.play("down")
elif velocity.x == 0 and velocity.y < 0:
- $AnimatedSprite2D.play("up")
+ sprite.play("up")
elif velocity.x > 0 and velocity.y > 0:
- $AnimatedSprite2D.play("down_right")
+ sprite.play("down_right")
elif velocity.x > 0 and velocity.y < 0:
- $AnimatedSprite2D.play("up_right")
+ sprite.play("up_right")
elif velocity.x < 0 and velocity.y > 0:
- $AnimatedSprite2D.play("down_left")
+ sprite.play("down_left")
elif velocity.x < 0 and velocity.y < 0:
- $AnimatedSprite2D.play("up_left")
+ sprite.play("up_left")
move_and_slide()
func set_hp(value):
- # TODO: rpc on damage
-
hp = value
if get_node("%HPBar"):
@@ -232,7 +239,7 @@ func get_effects():
func add_effect(effect: Effect):
var node = get_node_or_null(NodePath(effect.name)) as Effect
- if node:
+ if node and not node.is_stackable:
node.set_duration(node.duration)
else:
add_child(effect)
@@ -317,12 +324,10 @@ class NetworkData extends Resource:
var base_speed: float
var speed: float
- var texture_path: String
var sprite_frames_path: String
- var sprite_modulate: Color
- var sprite_self_modulate: Color
- var sprite_animation: StringName
- var sprite_frame: int
+
+ var unit_resource: UnitResource
+
func to_network_data() -> NetworkData:
var data = NetworkData.new()
@@ -339,27 +344,15 @@ func to_network_data() -> NetworkData:
data.base_speed = base_speed
data.speed = speed
- #data.texture_path = sprite.texture.resource_path
data.sprite_frames_path = sprite.sprite_frames.resource_path
- #data.sprite_modulate = sprite.modulate
- #data.sprite_self_modulate = sprite.self_modulate
- #data.sprite_animation = sprite.animation
- #data.sprite_frame = sprite.frame
+
+ data.unit_resource = unit_resource
return data
func update_with_network_data(_data: NetworkData):
pass
- #position = data.position
-
- #hp = data.hp
-
- #speed = data.speed
-
- #sprite.self_modulate = data.sprite_self_modulate
- #data.sprite_animation = sprite.animation
- #data.sprite_frame = sprite.frame
static func from_network_data(data: NetworkData) -> Unit:
@@ -370,7 +363,6 @@ static func from_network_data(data: NetworkData) -> Unit:
unit.global_position = data.position
- #unit.target = unit.get_tree().current_scene.get_node(data.target_path)
unit.target_path = data.target_path
unit.hp = data.hp
@@ -378,8 +370,8 @@ static func from_network_data(data: NetworkData) -> Unit:
unit.base_speed = data.base_speed
unit.speed = data.speed
- #unit.sprite.texture = load(data.texture_path)
unit.sprite.sprite_frames = load(data.sprite_frames_path)
- #unit.sprite.modulate = data.sprite_modulate
+
+ unit.unit_resource = data.unit_resource
return unit