diff --git a/scenes/attacks/attack_sword.gd b/scenes/attacks/attack_sword.gd index 811bf67..5da22be 100644 --- a/scenes/attacks/attack_sword.gd +++ b/scenes/attacks/attack_sword.gd @@ -16,17 +16,22 @@ var current_progress: float = 0.0 var damaged_this_attack: Array = [] var is_attacking: bool = false + func _ready() -> void: attack_path.visible = false damage = default_damage - + func _process(delta: float) -> void: if timer.is_stopped() and current_progress == 0.0: timer.start() if current_progress > 0.95: reset_attack() - if current_target and is_instance_valid(current_target) and not current_target.is_queued_for_deletion(): + if ( + current_target + and is_instance_valid(current_target) + and not current_target.is_queued_for_deletion() + ): track_target(current_target) is_attacking = true attack_path.visible = true @@ -37,33 +42,39 @@ func _process(delta: float) -> void: current_progress = clampf(current_progress, 0.0, 1.0) path_follow_2d.progress_ratio = current_progress + func reset_attack() -> void: - current_target = null - attack_path.visible = false - current_progress = 0.0 - damaged_this_attack = [] - is_attacking = false - position = Vector2.ZERO - rotation = 0.0 + current_target = null + attack_path.visible = false + current_progress = 0.0 + damaged_this_attack = [] + is_attacking = false + position = Vector2.ZERO + rotation = 0.0 + func set_target(body: Node2D): current_target = body is_attacking = true + func track_target(body: Node2D): - var mid_distance = attack_path.curve.get_baked_length() / 2 + var mid_distance = attack_path.curve.get_baked_length() / 2 var mid_point: Vector2 = attack_path.curve.sample_baked(mid_distance) var offset = body.global_position - to_global(mid_point) - + var desired_dir = (body.global_position - to_global(mid_point)).normalized() var start_point_global = attack_path.to_global(attack_path.curve.sample_baked(0)) - var end_point_global = attack_path.to_global(attack_path.curve.sample_baked(attack_path.curve.get_baked_length())) + var end_point_global = attack_path.to_global( + attack_path.curve.sample_baked(attack_path.curve.get_baked_length()) + ) var curve_dir = (start_point_global - end_point_global).normalized() var angle_diff = curve_dir.angle_to(desired_dir) if rotation == 0.0: rotation = curve_dir.angle_to(desired_dir) position += offset + func _on_timer_timeout() -> void: if current_target: if trigger_area.has_overlapping_areas(): @@ -75,6 +86,7 @@ func _on_timer_timeout() -> void: if body.is_in_group(GlobalConst.GROUP_ENEMY): set_target(body) + func _on_attack_area_body_entered(body: Node2D) -> void: if not attack_path.visible: return diff --git a/scenes/damage_numbers.gd b/scenes/damage_numbers.gd index d40c487..df2cbc2 100644 --- a/scenes/damage_numbers.gd +++ b/scenes/damage_numbers.gd @@ -1,7 +1,7 @@ extends Node2D @export var damage_taken: float -@export var player_damage: bool = true +@export var player_damage: bool = true @export var critical_damage: bool = false @onready var animation_player: AnimationPlayer = $Control/AnimationPlayer @@ -11,6 +11,7 @@ const COLOR_CRIT = Color.GOLD const COLOR_REGULAR = Color.WHITE const COLOR_PLAYER = Color.CRIMSON + func _ready() -> void: if !player_damage: label.add_theme_color_override("font_color", COLOR_PLAYER) @@ -20,6 +21,7 @@ func _ready() -> void: label.text = "%0.0f" % damage_taken animation_player.play("normal_damage") animation_player.animation_finished.connect(_on_animation_finished) - + + func _on_animation_finished(_name: String): queue_free() diff --git a/scenes/enemies/enemy.gd b/scenes/enemies/enemy.gd index de1379c..80cc49c 100644 --- a/scenes/enemies/enemy.gd +++ b/scenes/enemies/enemy.gd @@ -15,12 +15,14 @@ var max_health: float var god_mode: bool = false var is_dead: bool = false + func _ready() -> void: move_speed = default_move_speed max_health = default_max_health health = max_health GlobalConst.sig_debug_enemy_god_mode.connect(enemy_god_mode_toggle) - + + func _physics_process(delta: float) -> void: if target: var direction = global_position.direction_to(target.global_position) @@ -31,6 +33,7 @@ func _physics_process(delta: float) -> void: else: deal_damage() + func take_damage(value: float): if god_mode: return @@ -40,13 +43,15 @@ func take_damage(value: float): add_child(dm) if health <= 0: die() - + + func deal_damage(): if target.is_in_group("damagable"): if contact_damage_cd.is_stopped(): target.take_damage(default_contact_damage) contact_damage_cd.start() + func die(): if is_dead: return @@ -56,13 +61,16 @@ func die(): animation_player.play("die") animation_player.animation_finished.connect(_on_die_anim_finished) + func cheer_anim(): if not animation_player.is_playing(): animation_player.play("jump") - + + func enemy_god_mode_toggle(toggle_on: bool) -> void: god_mode = toggle_on + func _on_die_anim_finished(name: String): visible = false queue_free() diff --git a/scenes/main.gd b/scenes/main.gd index 3c5cee1..4e940c6 100644 --- a/scenes/main.gd +++ b/scenes/main.gd @@ -2,9 +2,11 @@ extends Node2D @onready var main_ui: MainUI = $MainUI @onready var main_camera: Camera2D = $MainCamera + func _ready(): GlobalConst.sig_debug_camera_zoom.connect(debug_zoom) + func _unhandled_input(event: InputEvent) -> void: if event.is_action_pressed("ui_cancel"): print_debug("pause") @@ -12,6 +14,7 @@ func _unhandled_input(event: InputEvent) -> void: if event.is_action_pressed("debug_menu"): main_ui.debug_ui.toggle() + func debug_zoom(toggled_on: bool): if toggled_on: main_camera.zoom = Vector2(1, 1) diff --git a/scenes/managers/debug_ui.gd b/scenes/managers/debug_ui.gd index 47c29f9..5c24274 100644 --- a/scenes/managers/debug_ui.gd +++ b/scenes/managers/debug_ui.gd @@ -6,32 +6,40 @@ extends Control var debug_stats: Dictionary = {} + func _ready() -> void: stats_container.visible = false panel_container.visible = false GlobalConst.sig_debug_stats_set.connect(set_debug_stat) + func toggle(): panel_container.visible = !panel_container.visible + func _on_zoom_check_toggled(toggled_on: bool) -> void: GlobalConst.sig_debug_camera_zoom.emit(toggled_on) + func _on_god_mode_check_toggled(toggled_on: bool) -> void: GlobalConst.sig_debug_god_mode.emit(toggled_on) + func _on_enemy_god_mode_check_toggled(toggled_on: bool) -> void: GlobalConst.sig_debug_enemy_god_mode.emit(toggled_on) + func _on_stats_check_toggled(toggled_on: bool) -> void: stats_container.visible = toggled_on + func set_debug_stat(key: String, value: String): if key == "": debug_stats.erase(key) debug_stats[key] = value update_debug_stats() + func update_debug_stats() -> void: for child in stats_container.get_children(): child.queue_free() diff --git a/scenes/managers/enemy_manager.gd b/scenes/managers/enemy_manager.gd index 496e0ea..b403c03 100644 --- a/scenes/managers/enemy_manager.gd +++ b/scenes/managers/enemy_manager.gd @@ -9,6 +9,7 @@ extends Node2D var enemy_scene = preload("res://scenes/enemies/enemy.tscn") + func _ready() -> void: timer.wait_time = spawn_rate / 1 timer.start() @@ -23,7 +24,8 @@ func _on_timer_timeout() -> void: new_enemy.position = target.position + Vector2(50, 50) new_enemy.target = target add_child(new_enemy) - + + func _on_stop_spawning(val: bool): if val: timer.stop() diff --git a/scenes/managers/main_ui.gd b/scenes/managers/main_ui.gd index 93493ed..d15518c 100644 --- a/scenes/managers/main_ui.gd +++ b/scenes/managers/main_ui.gd @@ -5,6 +5,7 @@ extends Control @onready var player_ui: PlayerUI = $CanvasLayer/PlayerUI @onready var debug_ui: DebugUI = $CanvasLayer/DebugUI + func _ready() -> void: pause_ui.visible = false player_ui.visible = true diff --git a/scenes/managers/pause_ui.gd b/scenes/managers/pause_ui.gd index 0b77e80..19a6fc1 100644 --- a/scenes/managers/pause_ui.gd +++ b/scenes/managers/pause_ui.gd @@ -1,9 +1,11 @@ class_name PauseUI extends Control + func _ready() -> void: pass + func toggle_pause_ui() -> void: if visible: visible = false @@ -18,7 +20,7 @@ func _on_resume_button_pressed() -> void: func _on_options_button_pressed() -> void: - pass # Replace with function body. + pass # Replace with function body. func _on_exit_button_pressed() -> void: @@ -26,4 +28,4 @@ func _on_exit_button_pressed() -> void: func _on_new_game_btuton_pressed() -> void: - pass # Replace with function body. + pass # Replace with function body. diff --git a/scenes/managers/player_ui.gd b/scenes/managers/player_ui.gd index 12d0555..5bd7860 100644 --- a/scenes/managers/player_ui.gd +++ b/scenes/managers/player_ui.gd @@ -3,5 +3,6 @@ extends Control @onready var hp_bar: ProgressBar = $CenterContainer/ProgressBar + func set_hp(value: float): hp_bar.value = value diff --git a/scenes/player.gd b/scenes/player.gd index cd819a5..0dce040 100644 --- a/scenes/player.gd +++ b/scenes/player.gd @@ -14,6 +14,7 @@ var dead: bool = false var death_anim_done: bool = false var god_mode: bool = false + func _ready() -> void: camera.position = global_position movement_speed = default_movement_speed @@ -22,6 +23,7 @@ func _ready() -> void: main_ui.player_ui.set_hp(100) GlobalConst.sig_debug_god_mode.connect(toggle_god_mode) + func _physics_process(delta: float) -> void: if dead: return @@ -29,12 +31,14 @@ func _physics_process(delta: float) -> void: velocity = input_direction * movement_speed move_and_slide() + func _process(delta: float) -> void: camera.position_smoothing_enabled = true camera.position = global_position if dead and !death_anim_done: death_animation(delta) + func take_damage(value: float) -> void: if dead or god_mode: return @@ -48,6 +52,7 @@ func take_damage(value: float) -> void: if health <= 0: die() + func die(): dead = true remove_from_group("damagable") @@ -56,14 +61,16 @@ func die(): sprite_2d.z_index += 10 get_taunted() + func death_animation(delta: float): # Engine.time_scale = clampf(lerpf(Engine.time_scale, 0.25, 0.5), 0.25, 0.9*delta) - camera.zoom = lerp(camera.zoom, Vector2(8,8), 0.99*delta) - rotation_degrees = lerpf(rotation_degrees, 90, 0.99*delta) + camera.zoom = lerp(camera.zoom, Vector2(8, 8), 0.99 * delta) + rotation_degrees = lerpf(rotation_degrees, 90, 0.99 * delta) if rotation_degrees > 88: main_ui.pause_ui.toggle_pause_ui() death_anim_done = true + func get_taunted(): var taunting_enemies: Array[Enemy] = [] for body in get_tree().get_nodes_in_group(GlobalConst.GROUP_ENEMY): @@ -80,8 +87,7 @@ func get_taunted(): add_child(new_target) new_target.add_child(collision) taunting_enemies[i].target = new_target - + func toggle_god_mode(value: bool): god_mode = value -