diff --git a/scenes/main.tscn b/scenes/main.tscn index 5cb2a0e..fd4ad17 100644 --- a/scenes/main.tscn +++ b/scenes/main.tscn @@ -17,8 +17,12 @@ tile_map_data = PackedByteArray("AAADAA0AAwAEAAIAAAADAAwAAwAEAAIAAAADAAsAAwAEAAI tile_set = ExtResource("1_uu6xs") metadata/_edit_lock_ = true -[node name="Player" parent="." instance=ExtResource("2_r0du0")] -position = Vector2(148, 105) +[node name="Player1" parent="." instance=ExtResource("2_r0du0")] +position = Vector2(141, 184) + +[node name="Player2" parent="." instance=ExtResource("2_r0du0")] +position = Vector2(154, 97) +id = 2 [node name="Ball" parent="." instance=ExtResource("3_r0du0")] position = Vector2(193, 130) diff --git a/scenes/player/player.gd b/scenes/player/player.gd index 906fecd..5bc52cc 100644 --- a/scenes/player/player.gd +++ b/scenes/player/player.gd @@ -1,16 +1,20 @@ extends CharacterBody2D @export var id: int = 1 -@export var max_speed: float = 150 +@export var max_speed: float = 90 @onready var sprite: AnimatedSprite2D = $AnimatedSprite2D var is_hitting: bool = false var was_moving: bool = false -var anim_dir: String = 'down' +var anim_dir: String +var def_dir: String func _ready() -> void: - sprite.play('down') + assert(id == 1 or id == 2, "id ("+str(id)+") is invalid") + anim_dir = 'up' if id == 1 else 'down' + def_dir = 'up' if id == 1 else 'down' + sprite.play(def_dir) sprite.frame = 1 sprite.pause() @@ -28,7 +32,7 @@ func _physics_process(_delta: float) -> void: elif Input.is_action_pressed("hit_right") and not is_hitting: hit("right") - if is_moving: + if is_moving and not is_hitting: if abs(velocity.x) > abs(velocity.y): anim_dir = 'right' if velocity.x > 0 else 'left' else: @@ -37,7 +41,7 @@ func _physics_process(_delta: float) -> void: sprite.play(anim_dir) else: if was_moving and not is_hitting: - sprite.play('down') + sprite.play(def_dir) sprite.frame = 1 sprite.pause() @@ -50,7 +54,7 @@ func get_movement_vector() -> Vector2: func hit(dir: String) -> void: if not is_hitting: - sprite.play('up') + sprite.play('up' if id == 1 else 'down') sprite.frame = 1 sprite.pause() @@ -58,14 +62,18 @@ func hit(dir: String) -> void: var hit_node: Area2D = preload("res://scenes/hit/hit.tscn").instantiate() # flip entire node horizontally if spawning left - hit_node.scale = Vector2(-1 if dir == "left" else 1, 1) + # flip vertically if player 2 + hit_node.scale = Vector2( + -1 if dir == "left" else 1, + 1 if id == 1 else -1 + ) add_child(hit_node) # set position according to frame width and height @warning_ignore("integer_division") hit_node.global_position = global_position + Vector2( (sprite_texture.get_width()/2)*(-1 if dir == "left" else 1), - sprite_texture.get_height()*-1 + (sprite_texture.get_height()*-1) if id == 1 else 4 ) hit_node.timer.connect("timeout", _on_hit_end)