diff --git a/behaviours/target_picker.gd b/behaviours/target_picker.gd index d2f2f72..0f4d041 100644 --- a/behaviours/target_picker.gd +++ b/behaviours/target_picker.gd @@ -19,7 +19,7 @@ var target: Node2D: if target != value: var old = target target = value - target_changed.emit(old, target) + target_changed.emit(target, old) func set_target(body: Node2D) -> void: @@ -42,3 +42,7 @@ func sample_target() -> void: func sample_target_if_null() -> void: if target == null: sample_target() + + +func log_target() -> void: + pass # Replace with function body. diff --git a/behaviours/tracker.gd b/behaviours/tracker.gd index deaf1a9..92824ff 100644 --- a/behaviours/tracker.gd +++ b/behaviours/tracker.gd @@ -17,7 +17,7 @@ func track(body: Node2D) -> bool: tracking.push_back(body) tracked.emit(body) # Handle TrackerTracker - for tracker_tracker in body.find_children("*", "TrackerTracker", false, false): + for tracker_tracker in body.find_children("*", "TrackerTracker", true, false): tracker_tracker.track(self) return act @@ -27,7 +27,7 @@ func untrack(body: Node2D) -> bool: tracking.erase(body) untracked.emit(body) # Handle TrackerTracker - for tracker_tracker in body.find_children("*", "TrackerTracker", false, false): + for tracker_tracker in body.find_children("*", "TrackerTracker", true, false): tracker_tracker.untrack(self) return act diff --git a/entities/imp.tscn b/entities/imp.tscn index 5a028f8..dc0c5ac 100644 --- a/entities/imp.tscn +++ b/entities/imp.tscn @@ -54,7 +54,6 @@ default_priority = 10 alternative_priority = 10 [node name="ChangeDirectionTimer" parent="MovementWander" instance=ExtResource("10_phvea")] -one_shot = true autostart = true mean_secs = 2.0 deviation = 2.0 @@ -62,7 +61,6 @@ min_secs = 0.6 max_secs = 3.0 [node name="MovementHunt" parent="." instance=ExtResource("11_4ra22")] -speed = -100.0 enabled = false [node name="HuntPriority" parent="MovementHunt" instance=ExtResource("9_2wb1b")] @@ -84,11 +82,11 @@ tracker = NodePath("..") [connection signal="move" from="MovementWander" to="." method="_on_move"] [connection signal="move_disabled" from="MovementWander" to="MovementWander/ChangeDirectionTimer" method="stop"] [connection signal="move_enabled" from="MovementWander" to="MovementWander/ChangeDirectionTimer" method="start"] +[connection signal="priority_changed_no_args" from="MovementWander/WanderPriority" to="MovementSampler" method="enable"] [connection signal="timeout" from="MovementWander/ChangeDirectionTimer" to="MovementWander" method="randomize_direction"] [connection signal="changed_target" from="MovementHunt" to="MovementHunt/HuntPriority" method="priority_conditional"] [connection signal="move" from="MovementHunt" to="." method="_on_move"] -[connection signal="priority_changed" from="MovementHunt/HuntPriority" to="MovementHunt/HuntPriority" method="log_priority" unbinds=2] +[connection signal="priority_changed_no_args" from="MovementHunt/HuntPriority" to="MovementSampler" method="enable"] [connection signal="tracked" from="MovementHunt/TrackerMeat" to="MovementHunt/TrackerMeat/TargetPicker" method="sample_target_if_null" unbinds=1] [connection signal="untracked" from="MovementHunt/TrackerMeat" to="MovementHunt/TrackerMeat/TargetPicker" method="clear_if_target"] [connection signal="target_changed" from="MovementHunt/TrackerMeat/TargetPicker" to="MovementHunt" method="set_target" unbinds=1] -[connection signal="target_changed" from="MovementHunt/TrackerMeat/TargetPicker" to="MovementHunt/TrackerMeat/TargetPicker" method="sample_target_if_null" unbinds=2] diff --git a/entities/sheep.tscn b/entities/sheep.tscn index 2eb2f86..aca8877 100644 --- a/entities/sheep.tscn +++ b/entities/sheep.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=19 format=3 uid="uid://bc2bm8lbol18w"] +[gd_scene load_steps=20 format=3 uid="uid://bc2bm8lbol18w"] [ext_resource type="Script" path="res://entities/sheep.gd" id="1_4dmll"] [ext_resource type="Texture2D" uid="uid://iljp5yn3ehfk" path="res://entities/sheep_left.png" id="2_t13f5"] @@ -11,6 +11,7 @@ [ext_resource type="PackedScene" uid="uid://g8t6dt0ye6n3" path="res://behaviours/timer_stddev.tscn" id="12_c45uk"] [ext_resource type="PackedScene" uid="uid://cml7rqvyfuagx" path="res://behaviours/move_towards.tscn" id="12_x2g3x"] [ext_resource type="PackedScene" uid="uid://cbg5kgwxusvxf" path="res://behaviours/cursor_detector.tscn" id="13_5fkdr"] +[ext_resource type="PackedScene" uid="uid://dti7l0d40hhgt" path="res://behaviours/target_picker.tscn" id="13_jf6em"] [ext_resource type="PackedScene" uid="uid://c5pyp5hvthdof" path="res://behaviours/tracker_tracker.tscn" id="14_eqowb"] [sub_resource type="CircleShape2D" id="CircleShape2D_c5tcn"] @@ -119,7 +120,7 @@ min_secs = 1.0 max_secs = 5.0 [node name="MovementWander" parent="." instance=ExtResource("10_05kcd")] -speed = 66.0 +speed = 33.0 enabled = false [node name="WanderPriority" parent="MovementWander" instance=ExtResource("11_0jlmk")] @@ -130,12 +131,24 @@ one_shot = true min_secs = 0.3 max_secs = 1.5 +[node name="MovementRunFromHunter" parent="." instance=ExtResource("12_x2g3x")] +speed = -66.0 +enabled = false + +[node name="RunFromHunterPriority" parent="MovementRunFromHunter" instance=ExtResource("11_0jlmk")] +alternative_priority = 30 + +[node name="HunterSense" parent="MovementRunFromHunter" instance=ExtResource("14_eqowb")] + +[node name="TargetPicker" parent="MovementRunFromHunter/HunterSense" node_paths=PackedStringArray("tracker") instance=ExtResource("13_jf6em")] +tracker = NodePath("..") + [node name="MovementRunFromMouse" parent="." instance=ExtResource("12_x2g3x")] -speed = -100.0 +speed = -66.0 enabled = false [node name="RunFromMousePriority" parent="MovementRunFromMouse" instance=ExtResource("11_0jlmk")] -alternative_priority = 30 +alternative_priority = 40 [node name="CursorSense" parent="MovementRunFromMouse" instance=ExtResource("13_5fkdr")] @@ -143,14 +156,6 @@ alternative_priority = 30 shape = SubResource("CircleShape2D_etpf6") debug_color = Color(1, 0, 0, 0.0470588) -[node name="MovementRunFromHunter" parent="." instance=ExtResource("12_x2g3x")] -speed = -100.0 -enabled = false - -[node name="RunFromHunterPriority" parent="MovementRunFromHunter" instance=ExtResource("11_0jlmk")] - -[node name="HunterSense" parent="MovementRunFromHunter" instance=ExtResource("14_eqowb")] - [connection signal="ready" from="MovementSampler" to="MovementSampler" method="enable"] [connection signal="move" from="MovementIdle" to="." method="_on_move"] [connection signal="move_disabled" from="MovementIdle" to="MovementIdle/BoredTimer" method="stop"] @@ -163,15 +168,17 @@ enabled = false [connection signal="move_enabled" from="MovementWander" to="MovementWander/TiredTimer" method="start"] [connection signal="priority_changed_no_args" from="MovementWander/WanderPriority" to="MovementSampler" method="enable"] [connection signal="timeout" from="MovementWander/TiredTimer" to="MovementWander" method="clear_direction"] +[connection signal="changed_target" from="MovementRunFromHunter" to="MovementRunFromHunter/RunFromHunterPriority" method="priority_conditional"] +[connection signal="changed_target" from="MovementRunFromHunter" to="MovementRunFromHunter" method="log_target" unbinds=1] +[connection signal="move" from="MovementRunFromHunter" to="." method="_on_move"] +[connection signal="move_disabled" from="MovementRunFromHunter" to="MovementWander" method="clear_direction"] +[connection signal="priority_changed_no_args" from="MovementRunFromHunter/RunFromHunterPriority" to="MovementSampler" method="enable"] +[connection signal="tracked" from="MovementRunFromHunter/HunterSense" to="MovementRunFromHunter/HunterSense/TargetPicker" method="set_target_if_null"] +[connection signal="untracked" from="MovementRunFromHunter/HunterSense" to="MovementRunFromHunter/HunterSense/TargetPicker" method="clear_if_target"] +[connection signal="target_changed" from="MovementRunFromHunter/HunterSense/TargetPicker" to="MovementRunFromHunter" method="set_target" unbinds=1] [connection signal="changed_target" from="MovementRunFromMouse" to="MovementRunFromMouse/RunFromMousePriority" method="priority_conditional"] [connection signal="move" from="MovementRunFromMouse" to="." method="_on_move"] [connection signal="move_enabled" from="MovementRunFromMouse" to="MovementWander" method="clear_direction"] [connection signal="priority_changed_no_args" from="MovementRunFromMouse/RunFromMousePriority" to="MovementSampler" method="enable"] [connection signal="cursor_entered" from="MovementRunFromMouse/CursorSense" to="MovementRunFromMouse" method="set_target"] [connection signal="cursor_exited" from="MovementRunFromMouse/CursorSense" to="MovementRunFromMouse" method="clear_target" unbinds=1] -[connection signal="changed_target" from="MovementRunFromHunter" to="MovementRunFromHunter/RunFromHunterPriority" method="priority_conditional"] -[connection signal="move" from="MovementRunFromHunter" to="." method="_on_move"] -[connection signal="move_disabled" from="MovementRunFromHunter" to="MovementWander" method="clear_direction"] -[connection signal="priority_changed_no_args" from="MovementRunFromHunter/RunFromHunterPriority" to="MovementSampler" method="enable"] -[connection signal="tracked" from="MovementRunFromHunter/HunterSense" to="MovementRunFromHunter" method="set_target"] -[connection signal="untracked" from="MovementRunFromHunter/HunterSense" to="MovementRunFromHunter" method="clear_target" unbinds=1] diff --git a/random.gd b/random.gd index 2e9b2cb..baed659 100644 --- a/random.gd +++ b/random.gd @@ -14,6 +14,7 @@ static var rng: RandomNumberGenerator = null: static func sample(array: Array[Variant], imin = null, imax = null) -> Variant: if len(array) == 0: + Log.w(null, "Sampling from an empty array.") return null if imin == null: imin = 0 diff --git a/scenes/game/main_game.tscn b/scenes/game/main_game.tscn index 6e95fcd..f8af012 100644 --- a/scenes/game/main_game.tscn +++ b/scenes/game/main_game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=10 format=3 uid="uid://cxj5aud02f40j"] +[gd_scene load_steps=11 format=3 uid="uid://cxj5aud02f40j"] [ext_resource type="Script" path="res://scenes/game/main_game.gd" id="1_wiglu"] [ext_resource type="PackedScene" uid="uid://dm068vaseh45n" path="res://scenes/game/game_camera.tscn" id="2_db5xs"] @@ -811,6 +811,8 @@ terrain_set_0/terrain_1/name = "Dirt" terrain_set_0/terrain_1/color = Color(0.619608, 0.407843, 0.172549, 1) sources/0 = SubResource("TileSetAtlasSource_058kb") +[sub_resource type="WorldBoundaryShape2D" id="WorldBoundaryShape2D_htttx"] + [node name="MainGame" type="Node2D"] script = ExtResource("1_wiglu") @@ -830,19 +832,44 @@ unique_name_in_owner = true [node name="Cursor" parent="." instance=ExtResource("5_g504x")] [node name="Sheep" parent="." instance=ExtResource("6_j2kdp")] -position = Vector2(-221, -32) - -[node name="Sheep2" parent="." instance=ExtResource("6_j2kdp")] -position = Vector2(-187, 190) - -[node name="Sheep3" parent="." instance=ExtResource("6_j2kdp")] -position = Vector2(230, 216) - -[node name="Sheep4" parent="." instance=ExtResource("6_j2kdp")] -position = Vector2(307, -33) - -[node name="Sheep5" parent="." instance=ExtResource("6_j2kdp")] -position = Vector2(182, -217) +position = Vector2(-246, 25) [node name="Imp" parent="." instance=ExtResource("7_7od2n")] -position = Vector2(-65, -233) +position = Vector2(237, 10) + +[node name="Walls" type="Node2D" parent="."] + +[node name="BottomBoundary" type="StaticBody2D" parent="Walls"] +position = Vector2(0, 360) +collision_layer = 2 +collision_mask = 0 + +[node name="Shape" type="CollisionShape2D" parent="Walls/BottomBoundary"] +shape = SubResource("WorldBoundaryShape2D_htttx") + +[node name="TopBoundary" type="StaticBody2D" parent="Walls"] +position = Vector2(0, -360) +rotation = 3.14159 +collision_layer = 2 +collision_mask = 0 + +[node name="Shape" type="CollisionShape2D" parent="Walls/TopBoundary"] +shape = SubResource("WorldBoundaryShape2D_htttx") + +[node name="RightBoundary" type="StaticBody2D" parent="Walls"] +position = Vector2(640, 0) +rotation = 4.71239 +collision_layer = 2 +collision_mask = 0 + +[node name="Shape" type="CollisionShape2D" parent="Walls/RightBoundary"] +shape = SubResource("WorldBoundaryShape2D_htttx") + +[node name="LeftBoundary" type="StaticBody2D" parent="Walls"] +position = Vector2(-640, 0) +rotation = 1.5708 +collision_layer = 2 +collision_mask = 0 + +[node name="Shape" type="CollisionShape2D" parent="Walls/LeftBoundary"] +shape = SubResource("WorldBoundaryShape2D_htttx")