76 lines
1.9 KiB
GDScript
76 lines
1.9 KiB
GDScript
extends CharacterBody2D
|
|
class_name BaseCharacter
|
|
|
|
var _can_attack: bool = true
|
|
var _attack_animation_name: String = ""
|
|
|
|
@export_category("Variables")
|
|
@export var _move_speed: float = 128.0
|
|
@export var _left_attack_name: String
|
|
@export var _right_attack_name: String
|
|
@export_category("Objects")
|
|
@export var _animation: AnimationPlayer
|
|
@export var _sprite2d: Sprite2D
|
|
|
|
func _process(delta: float) -> void:
|
|
pass
|
|
|
|
func _physics_process(_delta: float) -> void:
|
|
_move()
|
|
_attack()
|
|
_animate()
|
|
|
|
func _move() -> void:
|
|
var _direction: Vector2 = Input.get_vector("move_left", "move_right", "move_up", "move_down")
|
|
velocity = _direction * _move_speed
|
|
move_and_slide()
|
|
|
|
func _attack() -> void:
|
|
if Input.is_action_just_pressed("left_attack") and _can_attack:
|
|
_can_attack = false
|
|
_attack_animation_name = _left_attack_name
|
|
set_physics_process(false)
|
|
|
|
if Input.is_action_just_pressed("right_attack") and _can_attack:
|
|
_can_attack = false
|
|
_attack_animation_name = _right_attack_name
|
|
set_physics_process(false)
|
|
|
|
func _animate() -> void:
|
|
if velocity.x > 0:
|
|
_sprite2d.flip_h = false
|
|
if velocity.x < 0:
|
|
_sprite2d.flip_h = true
|
|
|
|
if _can_attack == false:
|
|
_animation.play(_attack_animation_name)
|
|
return
|
|
|
|
if velocity:
|
|
_animation.play("run")
|
|
return
|
|
_animation.play("idle")
|
|
|
|
#print("direction is: " + str(_direction))
|
|
#print("moved to " + str(velocity))
|
|
|
|
|
|
func _on_animation_finished(_anim_name: StringName) -> void:
|
|
#if _anim_name == "attack_hammer" or _anim_name == "attack_axe":
|
|
if _anim_name == _attack_animation_name:
|
|
_can_attack = true
|
|
set_physics_process(true)
|
|
|
|
func update_collision_layer_mask(_type: String) -> void:
|
|
if _type == "in":
|
|
set_collision_layer_value(1, false)
|
|
set_collision_mask_value(1, false)
|
|
set_collision_layer_value(2, true)
|
|
set_collision_mask_value(2, true)
|
|
if _type == "out":
|
|
set_collision_layer_value(1, true)
|
|
set_collision_mask_value(1, true)
|
|
set_collision_layer_value(2, false)
|
|
set_collision_mask_value(2, false)
|
|
pass
|