From 80d8785a711841ac8091ffc7c93d6c9babc01d89 Mon Sep 17 00:00:00 2001 From: Ruslan Ignatov Date: Thu, 12 Feb 2026 21:08:35 +0300 Subject: [PATCH] Some code optimization --- game/characters/enemies/abstract_cultist.gd | 13 ++---------- game/characters/enemies/abstract_cultist.tscn | 13 ------------ game/characters/enemies/black_cultist.tscn | 5 +---- game/characters/enemies/gray_cultist.tscn | 5 +---- .../enemies/state_machine/cultist_state.gd | 9 -------- .../state_machine/look_around_state.gd | 21 ++++++++++++------- .../enemies/state_machine/walk_state.gd | 5 ++++- game/characters/enemies/white_cultist.tscn | 5 +---- 8 files changed, 23 insertions(+), 53 deletions(-) diff --git a/game/characters/enemies/abstract_cultist.gd b/game/characters/enemies/abstract_cultist.gd index 6c7ba3b..7d0a5ab 100644 --- a/game/characters/enemies/abstract_cultist.gd +++ b/game/characters/enemies/abstract_cultist.gd @@ -24,6 +24,7 @@ var target_x := 0.0 @onready var state_machine : CultistStateMachine = $CultistStateMachine @onready var chase_left_state : CultistState = $CultistStateMachine/ChaseLeftState @onready var chase_right_state : CultistState = $CultistStateMachine/ChaseRightState +@onready var look_around_state : CultistState = $CultistStateMachine/LookAroundState func _ready() -> void: @@ -36,23 +37,13 @@ func _ready() -> void: func _physics_process(delta: float) -> void: - move_and_slide() state_machine.physics_process(delta) + move_and_slide() func update_x_velocity(direction: int, max_speed: float, delta: float) -> void: velocity.x = move_toward(velocity.x, direction * max_speed, ACCELERATION * delta) -#TODO Rework -func _on_player_touch_area_entered(body: Node2D) -> void: - if body is Player: - target_x = body.position.x - if body.position.x < position.x: - state_machine._change_state(chase_left_state) - else: - state_machine._change_state(chase_right_state) - - func _set_ray_cast_enable(ray_cast: RayCast2D, enabled: bool) -> void: ray_cast.process_mode = Node.PROCESS_MODE_INHERIT if enabled else Node.PROCESS_MODE_DISABLED diff --git a/game/characters/enemies/abstract_cultist.tscn b/game/characters/enemies/abstract_cultist.tscn index 9243a84..3d241fd 100644 --- a/game/characters/enemies/abstract_cultist.tscn +++ b/game/characters/enemies/abstract_cultist.tscn @@ -18,9 +18,6 @@ radius = 4.0 height = 28.0 -[sub_resource type="RectangleShape2D" id="RectangleShape2D_vecdo"] -size = Vector2(32, 28) - [sub_resource type="CapsuleShape2D" id="CapsuleShape2D_tjvyk"] radius = 4.0 height = 28.0 @@ -72,14 +69,6 @@ unique_name_in_owner = true target_position = Vector2(320, 0) collision_mask = 0 -[node name="PlayerTouchArea" type="Area2D" parent="." unique_id=2147163970] -collision_layer = 0 -collision_mask = 0 - -[node name="CollisionShape2D" type="CollisionShape2D" parent="PlayerTouchArea" unique_id=262478897] -position = Vector2(0, 2) -shape = SubResource("RectangleShape2D_vecdo") - [node name="KillingArea" parent="." unique_id=1891922549 instance=ExtResource("3_tjvyk")] collision_mask = 0 @@ -142,5 +131,3 @@ script = ExtResource("14_cqp7f") look_around_state = NodePath("../LookAroundState") fall_state = NodePath("../FallState") cultist = NodePath("../..") - -[connection signal="body_entered" from="PlayerTouchArea" to="." method="_on_player_touch_area_entered"] diff --git a/game/characters/enemies/black_cultist.tscn b/game/characters/enemies/black_cultist.tscn index 751b09c..50ac602 100644 --- a/game/characters/enemies/black_cultist.tscn +++ b/game/characters/enemies/black_cultist.tscn @@ -46,8 +46,5 @@ collision_mask = 11 [node name="RightPlayerDistantRay" parent="PlayerDistantCheck" parent_id_path=PackedInt32Array(1597489123) index="1" unique_id=1377654831] collision_mask = 11 -[node name="PlayerTouchArea" parent="." index="6" unique_id=2147163970] -collision_mask = 8 - -[node name="KillingArea" parent="." index="7" unique_id=1891922549] +[node name="KillingArea" parent="." index="6" unique_id=1891922549] collision_mask = 8 diff --git a/game/characters/enemies/gray_cultist.tscn b/game/characters/enemies/gray_cultist.tscn index f546931..79c377b 100644 --- a/game/characters/enemies/gray_cultist.tscn +++ b/game/characters/enemies/gray_cultist.tscn @@ -30,8 +30,5 @@ collision_mask = 171 [node name="RightPlayerDistantRay" parent="PlayerDistantCheck" parent_id_path=PackedInt32Array(1597489123) index="1" unique_id=1377654831] collision_mask = 171 -[node name="PlayerTouchArea" parent="." index="5" unique_id=2147163970] -collision_mask = 136 - -[node name="KillingArea" parent="." index="6" unique_id=1891922549] +[node name="KillingArea" parent="." index="5" unique_id=1891922549] collision_mask = 136 diff --git a/game/characters/enemies/state_machine/cultist_state.gd b/game/characters/enemies/state_machine/cultist_state.gd index 1818062..7ee7e8d 100644 --- a/game/characters/enemies/state_machine/cultist_state.gd +++ b/game/characters/enemies/state_machine/cultist_state.gd @@ -13,12 +13,3 @@ func _get_colliding_player(ray_cast: RayCast2D) -> Player: if collider is Player: return collider return null - - -func _chase_if_player_in_ray_cast(ray_cast: RayCast2D, chase_state: CultistState) -> bool: - var player := _get_colliding_player(ray_cast) - if player != null: - cultist.target_x = player.position.x - switch_state.emit(chase_state) - return true - return false diff --git a/game/characters/enemies/state_machine/look_around_state.gd b/game/characters/enemies/state_machine/look_around_state.gd index 5f472a9..f5b781c 100644 --- a/game/characters/enemies/state_machine/look_around_state.gd +++ b/game/characters/enemies/state_machine/look_around_state.gd @@ -8,24 +8,31 @@ extends CultistState @export var chase_right_state: CultistState +var state_by_ray_cast : Dictionary[RayCast2D, CultistState] + + func enter() -> void: cultist.sprite.animation_finished.connect(_on_animation_finished, CONNECT_ONE_SHOT) cultist.sprite.play(CultistSprite.LOOK_AROUND_ANIMATIONS.pick_random()) cultist.velocity = Vector2.ZERO cultist._set_ray_cast_enable(cultist.left_player_close_ray, true) cultist._set_ray_cast_enable(cultist.right_player_close_ray, true) + + state_by_ray_cast = { + cultist.left_player_close_ray: chase_left_state, + cultist.right_player_close_ray: chase_right_state, + } func physics_process(_delta: float) -> void: if not cultist.is_on_floor(): switch_state.emit(fall_state) - return - - if _chase_if_player_in_ray_cast(cultist.left_player_close_ray, chase_left_state): - return - - if _chase_if_player_in_ray_cast(cultist.right_player_close_ray, chase_right_state): - return + else: + for ray_cast in state_by_ray_cast: + var player := _get_colliding_player(ray_cast) + if player != null: + switch_state.emit(state_by_ray_cast[ray_cast]) + break func exit() -> void: diff --git a/game/characters/enemies/state_machine/walk_state.gd b/game/characters/enemies/state_machine/walk_state.gd index c66a872..b5f4828 100644 --- a/game/characters/enemies/state_machine/walk_state.gd +++ b/game/characters/enemies/state_machine/walk_state.gd @@ -11,7 +11,10 @@ func physics_process(delta: float) -> void: if not cultist.is_on_floor(): switch_state.emit(fall_state) else: - if not _chase_if_player_in_ray_cast(_player_ray_cast, chase_state): + var player := _get_colliding_player(_player_ray_cast) + if player != null: + switch_state.emit(chase_state) + else: if _wall_ray_cast.is_colliding(): var stream := SoundManager.sfx_stream_player_lost SoundManager.play_sfx_stream(stream, cultist.global_position) diff --git a/game/characters/enemies/white_cultist.tscn b/game/characters/enemies/white_cultist.tscn index 0210538..fc82e3f 100644 --- a/game/characters/enemies/white_cultist.tscn +++ b/game/characters/enemies/white_cultist.tscn @@ -43,8 +43,5 @@ collision_mask = 161 [node name="RightPlayerDistantRay" parent="PlayerDistantCheck" parent_id_path=PackedInt32Array(1597489123) index="1" unique_id=1377654831] collision_mask = 161 -[node name="PlayerTouchArea" parent="." index="6" unique_id=2147163970] -collision_mask = 128 - -[node name="KillingArea" parent="." index="7" unique_id=1891922549] +[node name="KillingArea" parent="." index="6" unique_id=1891922549] collision_mask = 128