From 1de059d8065e51891e3ae10448c574affaa6441d Mon Sep 17 00:00:00 2001 From: Serhii Snitsaruk Date: Mon, 5 Feb 2024 16:26:40 +0100 Subject: [PATCH] Demo: Numerous improvements, refactoring and comments --- demo/demo/agents/agent_base.tscn | 588 ++++++++++-------- demo/demo/agents/ninja_star/ninja_star.tscn | 2 +- demo/demo/agents/player/player.gd | 18 +- demo/demo/agents/player/player.tscn | 8 +- .../demo/agents/player/states/attack_state.gd | 48 +- .../{DodgeState.gd => states/dodge_state.gd} | 13 +- demo/demo/agents/player/states/move_state.gd | 7 +- demo/demo/agents/scripts/agent_base.gd | 25 +- demo/demo/ai/tasks/arrive_pos.gd | 25 +- demo/demo/ai/tasks/back_away.gd | 3 +- demo/demo/ai/tasks/is_aligned_with_target.gd | 35 ++ demo/demo/ai/tasks/move_forward.gd | 3 +- demo/demo/ai/tasks/pursue.gd | 3 +- demo/demo/ai/tasks/select_flanking_pos.gd | 8 +- demo/demo/ai/trees/02_agent_charger.tres | 4 +- demo/demo/ai/trees/03_agent_imp.tres | 30 +- demo/demo/ai/trees/04_agent_skirmisher.tres | 57 +- demo/demo/ai/trees/05_agent_ranged.tres | 76 ++- demo/demo/ai/trees/06_agent_melee_combo.tres | 16 +- .../demo/ai/trees/07_agent_melee_nuanced.tres | 26 +- demo/demo/ai/trees/08_agent_demon.tres | 6 +- demo/demo/ai/trees/09_agent_summoner.tres | 18 +- demo/demo/assets/ui.theme | Bin 2249125 -> 2249319 bytes demo/demo/scenes/game.gd | 15 +- demo/demo/scenes/game.tscn | 135 ++-- demo/demo/scenes/showcase.gd | 2 - demo/demo/scenes/showcase.tscn | 98 ++- demo/project.godot | 1 + 28 files changed, 730 insertions(+), 540 deletions(-) rename demo/demo/agents/player/{DodgeState.gd => states/dodge_state.gd} (68%) create mode 100644 demo/demo/ai/tasks/is_aligned_with_target.gd diff --git a/demo/demo/agents/agent_base.tscn b/demo/demo/agents/agent_base.tscn index ebadbe6..4848460 100644 --- a/demo/demo/agents/agent_base.tscn +++ b/demo/demo/agents/agent_base.tscn @@ -11,10 +11,10 @@ [ext_resource type="Script" path="res://demo/agents/scripts/hurtbox.gd" id="6_jnvxm"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_2k81i"] -size = Vector2(130, 35) +size = Vector2(140, 40) [sub_resource type="RectangleShape2D" id="RectangleShape2D_26abe"] -size = Vector2(80, 35) +size = Vector2(88, 40) [sub_resource type="Curve" id="Curve_noh01"] _data = [Vector2(0, 0.010989), 0.0, 0.0, 0, 0, Vector2(0.151111, 1), 1.3559, 1.3559, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] @@ -399,6 +399,18 @@ tracks/26/keys = { "update": 1, "values": [false] } +tracks/27/type = "value" +tracks/27/imported = false +tracks/27/enabled = true +tracks/27/path = NodePath("Root/Hurtbox/HurtboxCollisionShape2D:disabled") +tracks/27/interp = 1 +tracks/27/loop_wrap = true +tracks/27/keys = { +"times": PackedFloat32Array(0), +"transitions": PackedFloat32Array(1), +"update": 1, +"values": [false] +} [sub_resource type="Animation" id="Animation_8wj70"] resource_name = "attack_1" @@ -668,6 +680,18 @@ tracks/21/keys = { "update": 1, "values": [true, false, true, true] } +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Root/Hitbox:knockback_enabled") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, false, false] +} [sub_resource type="Animation" id="Animation_s1dey"] resource_name = "attack_2" @@ -937,6 +961,18 @@ tracks/21/keys = { "update": 1, "values": [true, false, true] } +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Root/Hitbox:knockback_enabled") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.2, 0.3), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 1, +"values": [false, false, false] +} [sub_resource type="Animation" id="Animation_g7a0r"] resource_name = "attack_3" @@ -2295,6 +2331,286 @@ tracks/24/keys = { "values": [false, false] } +[sub_resource type="Animation" id="Animation_msfb2"] +resource_name = "dodge" +length = 0.4 +tracks/0/type = "value" +tracks/0/imported = false +tracks/0/enabled = true +tracks/0/path = NodePath("Root/Rig:position") +tracks/0/interp = 1 +tracks/0/loop_wrap = true +tracks/0/keys = { +"times": PackedFloat32Array(0, 0.1, 0.4), +"transitions": PackedFloat32Array(1, 1, 1), +"update": 0, +"values": [Vector2(0, -76), Vector2(0, -38), Vector2(0, -76)] +} +tracks/1/type = "value" +tracks/1/imported = false +tracks/1/enabled = true +tracks/1/path = NodePath("Root/Rig:rotation") +tracks/1/interp = 2 +tracks/1/loop_wrap = true +tracks/1/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 2, +"values": [0.0, 2.35619, 6.28319, 12.5664] +} +tracks/2/type = "value" +tracks/2/imported = false +tracks/2/enabled = true +tracks/2/path = NodePath("Root/Rig:scale") +tracks/2/interp = 1 +tracks/2/loop_wrap = true +tracks/2/keys = { +"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 0.5), Vector2(1, 0.5), Vector2(1, 0.5), Vector2(1, 1)] +} +tracks/3/type = "value" +tracks/3/imported = false +tracks/3/enabled = true +tracks/3/path = NodePath("Root/Rig/LegL:position") +tracks/3/interp = 1 +tracks/3/loop_wrap = true +tracks/3/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-29, 65), Vector2(-24.8287, 40.1066), Vector2(-24.8287, 40.1066), Vector2(-29, 65)] +} +tracks/4/type = "value" +tracks/4/imported = false +tracks/4/enabled = true +tracks/4/path = NodePath("Root/Rig/LegL:rotation") +tracks/4/interp = 1 +tracks/4/loop_wrap = true +tracks/4/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/5/type = "value" +tracks/5/imported = false +tracks/5/enabled = true +tracks/5/path = NodePath("Root/Rig/LegL:scale") +tracks/5/interp = 1 +tracks/5/loop_wrap = true +tracks/5/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/6/type = "value" +tracks/6/imported = false +tracks/6/enabled = true +tracks/6/path = NodePath("Root/Rig/LegR:position") +tracks/6/interp = 1 +tracks/6/loop_wrap = true +tracks/6/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(31, 65), Vector2(26.1794, 41.8884), Vector2(26.1794, 41.8884), Vector2(31, 65)] +} +tracks/7/type = "value" +tracks/7/imported = false +tracks/7/enabled = true +tracks/7/path = NodePath("Root/Rig/LegR:rotation") +tracks/7/interp = 1 +tracks/7/loop_wrap = true +tracks/7/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/8/type = "value" +tracks/8/imported = false +tracks/8/enabled = true +tracks/8/path = NodePath("Root/Rig/LegR:scale") +tracks/8/interp = 1 +tracks/8/loop_wrap = true +tracks/8/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/9/type = "value" +tracks/9/imported = false +tracks/9/enabled = true +tracks/9/path = NodePath("Root/Rig/Body:position") +tracks/9/interp = 1 +tracks/9/loop_wrap = true +tracks/9/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(5, 53), Vector2(5, 53), Vector2(5, 53), Vector2(5, 53)] +} +tracks/10/type = "value" +tracks/10/imported = false +tracks/10/enabled = true +tracks/10/path = NodePath("Root/Rig/Body:rotation") +tracks/10/interp = 1 +tracks/10/loop_wrap = true +tracks/10/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/11/type = "value" +tracks/11/imported = false +tracks/11/enabled = true +tracks/11/path = NodePath("Root/Rig/Body:scale") +tracks/11/interp = 1 +tracks/11/loop_wrap = true +tracks/11/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/12/type = "value" +tracks/12/imported = false +tracks/12/enabled = true +tracks/12/path = NodePath("Root/Rig/Body/Hat:position") +tracks/12/interp = 1 +tracks/12/loop_wrap = true +tracks/12/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(2, -91), Vector2(2, -91), Vector2(2, -91), Vector2(2, -91)] +} +tracks/13/type = "value" +tracks/13/imported = false +tracks/13/enabled = true +tracks/13/path = NodePath("Root/Rig/Body/Hat:rotation") +tracks/13/interp = 1 +tracks/13/loop_wrap = true +tracks/13/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/14/type = "value" +tracks/14/imported = false +tracks/14/enabled = true +tracks/14/path = NodePath("Root/Rig/Body/Hat:scale") +tracks/14/interp = 1 +tracks/14/loop_wrap = true +tracks/14/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/15/type = "value" +tracks/15/imported = false +tracks/15/enabled = true +tracks/15/path = NodePath("Root/Rig/Body/HandL:position") +tracks/15/interp = 1 +tracks/15/loop_wrap = true +tracks/15/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(-60, -53), Vector2(-19.9999, -52.9358), Vector2(-19.9999, -52.9358), Vector2(-60, -53)] +} +tracks/16/type = "value" +tracks/16/imported = false +tracks/16/enabled = true +tracks/16/path = NodePath("Root/Rig/Body/HandL:rotation") +tracks/16/interp = 1 +tracks/16/loop_wrap = true +tracks/16/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/17/type = "value" +tracks/17/imported = false +tracks/17/enabled = true +tracks/17/path = NodePath("Root/Rig/Body/HandL:scale") +tracks/17/interp = 1 +tracks/17/loop_wrap = true +tracks/17/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/18/type = "value" +tracks/18/imported = false +tracks/18/enabled = true +tracks/18/path = NodePath("Root/Rig/Body/HandR:position") +tracks/18/interp = 1 +tracks/18/loop_wrap = true +tracks/18/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(51, -51), Vector2(21.9955, -54.1155), Vector2(21.9955, -54.1155), Vector2(51, -51)] +} +tracks/19/type = "value" +tracks/19/imported = false +tracks/19/enabled = true +tracks/19/path = NodePath("Root/Rig/Body/HandR:rotation") +tracks/19/interp = 1 +tracks/19/loop_wrap = true +tracks/19/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [0.0, 0.0, 0.0, 0.0] +} +tracks/20/type = "value" +tracks/20/imported = false +tracks/20/enabled = true +tracks/20/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/20/interp = 1 +tracks/20/loop_wrap = true +tracks/20/keys = { +"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1), +"update": 0, +"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] +} +tracks/21/type = "value" +tracks/21/imported = false +tracks/21/enabled = true +tracks/21/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") +tracks/21/interp = 1 +tracks/21/loop_wrap = true +tracks/21/keys = { +"times": PackedFloat32Array(0, 0.0001, 0.1, 0.2, 0.3, 0.4), +"transitions": PackedFloat32Array(1, 1, 1, 1, 1, 1), +"update": 1, +"values": [true, true, true, true, true, true] +} +tracks/22/type = "value" +tracks/22/imported = false +tracks/22/enabled = true +tracks/22/path = NodePath("Root/Hurtbox/HurtboxCollisionShape2D:disabled") +tracks/22/interp = 1 +tracks/22/loop_wrap = true +tracks/22/keys = { +"times": PackedFloat32Array(0, 0.4), +"transitions": PackedFloat32Array(1, 1), +"update": 1, +"values": [true, false] +} + [sub_resource type="Animation" id="Animation_gowr5"] resource_name = "hurt" length = 0.25 @@ -4043,273 +4359,17 @@ tracks/19/keys = { "update": 1, "values": [true, true] } - -[sub_resource type="Animation" id="Animation_msfb2"] -resource_name = "dodge" -length = 0.4 -tracks/0/type = "value" -tracks/0/imported = false -tracks/0/enabled = true -tracks/0/path = NodePath("Root/Rig:position") -tracks/0/interp = 1 -tracks/0/loop_wrap = true -tracks/0/keys = { -"times": PackedFloat32Array(0, 0.1, 0.4), -"transitions": PackedFloat32Array(1, 1, 1), -"update": 0, -"values": [Vector2(0, -76), Vector2(0, -38), Vector2(0, -76)] -} -tracks/1/type = "value" -tracks/1/imported = false -tracks/1/enabled = true -tracks/1/path = NodePath("Root/Rig:rotation") -tracks/1/interp = 2 -tracks/1/loop_wrap = true -tracks/1/keys = { -"times": PackedFloat32Array(0, 0.1, 0.2, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 2, -"values": [0.0, 2.35619, 6.28319, 12.5664] -} -tracks/2/type = "value" -tracks/2/imported = false -tracks/2/enabled = true -tracks/2/path = NodePath("Root/Rig:scale") -tracks/2/interp = 1 -tracks/2/loop_wrap = true -tracks/2/keys = { -"times": PackedFloat32Array(0, 0.1, 0.2, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1, 1), -"update": 0, -"values": [Vector2(1, 1), Vector2(1, 0.5), Vector2(1, 0.5), Vector2(1, 0.5), Vector2(1, 1)] -} -tracks/3/type = "value" -tracks/3/imported = false -tracks/3/enabled = true -tracks/3/path = NodePath("Root/Rig/LegL:position") -tracks/3/interp = 1 -tracks/3/loop_wrap = true -tracks/3/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(-29, 65), Vector2(-24.8287, 40.1066), Vector2(-24.8287, 40.1066), Vector2(-29, 65)] -} -tracks/4/type = "value" -tracks/4/imported = false -tracks/4/enabled = true -tracks/4/path = NodePath("Root/Rig/LegL:rotation") -tracks/4/interp = 1 -tracks/4/loop_wrap = true -tracks/4/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [0.0, 0.0, 0.0, 0.0] -} -tracks/5/type = "value" -tracks/5/imported = false -tracks/5/enabled = true -tracks/5/path = NodePath("Root/Rig/LegL:scale") -tracks/5/interp = 1 -tracks/5/loop_wrap = true -tracks/5/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] -} -tracks/6/type = "value" -tracks/6/imported = false -tracks/6/enabled = true -tracks/6/path = NodePath("Root/Rig/LegR:position") -tracks/6/interp = 1 -tracks/6/loop_wrap = true -tracks/6/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(31, 65), Vector2(26.1794, 41.8884), Vector2(26.1794, 41.8884), Vector2(31, 65)] -} -tracks/7/type = "value" -tracks/7/imported = false -tracks/7/enabled = true -tracks/7/path = NodePath("Root/Rig/LegR:rotation") -tracks/7/interp = 1 -tracks/7/loop_wrap = true -tracks/7/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [0.0, 0.0, 0.0, 0.0] -} -tracks/8/type = "value" -tracks/8/imported = false -tracks/8/enabled = true -tracks/8/path = NodePath("Root/Rig/LegR:scale") -tracks/8/interp = 1 -tracks/8/loop_wrap = true -tracks/8/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] -} -tracks/9/type = "value" -tracks/9/imported = false -tracks/9/enabled = true -tracks/9/path = NodePath("Root/Rig/Body:position") -tracks/9/interp = 1 -tracks/9/loop_wrap = true -tracks/9/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(5, 53), Vector2(5, 53), Vector2(5, 53), Vector2(5, 53)] -} -tracks/10/type = "value" -tracks/10/imported = false -tracks/10/enabled = true -tracks/10/path = NodePath("Root/Rig/Body:rotation") -tracks/10/interp = 1 -tracks/10/loop_wrap = true -tracks/10/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [0.0, 0.0, 0.0, 0.0] -} -tracks/11/type = "value" -tracks/11/imported = false -tracks/11/enabled = true -tracks/11/path = NodePath("Root/Rig/Body:scale") -tracks/11/interp = 1 -tracks/11/loop_wrap = true -tracks/11/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] -} -tracks/12/type = "value" -tracks/12/imported = false -tracks/12/enabled = true -tracks/12/path = NodePath("Root/Rig/Body/Hat:position") -tracks/12/interp = 1 -tracks/12/loop_wrap = true -tracks/12/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(2, -91), Vector2(2, -91), Vector2(2, -91), Vector2(2, -91)] -} -tracks/13/type = "value" -tracks/13/imported = false -tracks/13/enabled = true -tracks/13/path = NodePath("Root/Rig/Body/Hat:rotation") -tracks/13/interp = 1 -tracks/13/loop_wrap = true -tracks/13/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [0.0, 0.0, 0.0, 0.0] -} -tracks/14/type = "value" -tracks/14/imported = false -tracks/14/enabled = true -tracks/14/path = NodePath("Root/Rig/Body/Hat:scale") -tracks/14/interp = 1 -tracks/14/loop_wrap = true -tracks/14/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] -} -tracks/15/type = "value" -tracks/15/imported = false -tracks/15/enabled = true -tracks/15/path = NodePath("Root/Rig/Body/HandL:position") -tracks/15/interp = 1 -tracks/15/loop_wrap = true -tracks/15/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(-60, -53), Vector2(-19.9999, -52.9358), Vector2(-19.9999, -52.9358), Vector2(-60, -53)] -} -tracks/16/type = "value" -tracks/16/imported = false -tracks/16/enabled = true -tracks/16/path = NodePath("Root/Rig/Body/HandL:rotation") -tracks/16/interp = 1 -tracks/16/loop_wrap = true -tracks/16/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [0.0, 0.0, 0.0, 0.0] -} -tracks/17/type = "value" -tracks/17/imported = false -tracks/17/enabled = true -tracks/17/path = NodePath("Root/Rig/Body/HandL:scale") -tracks/17/interp = 1 -tracks/17/loop_wrap = true -tracks/17/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] -} -tracks/18/type = "value" -tracks/18/imported = false -tracks/18/enabled = true -tracks/18/path = NodePath("Root/Rig/Body/HandR:position") -tracks/18/interp = 1 -tracks/18/loop_wrap = true -tracks/18/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(51, -51), Vector2(21.9955, -54.1155), Vector2(21.9955, -54.1155), Vector2(51, -51)] -} -tracks/19/type = "value" -tracks/19/imported = false -tracks/19/enabled = true -tracks/19/path = NodePath("Root/Rig/Body/HandR:rotation") -tracks/19/interp = 1 -tracks/19/loop_wrap = true -tracks/19/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [0.0, 0.0, 0.0, 0.0] -} tracks/20/type = "value" tracks/20/imported = false tracks/20/enabled = true -tracks/20/path = NodePath("Root/Rig/Body/HandR:scale") +tracks/20/path = NodePath("Root/Hurtbox/HurtboxCollisionShape2D:disabled") tracks/20/interp = 1 tracks/20/loop_wrap = true tracks/20/keys = { -"times": PackedFloat32Array(0, 0.1, 0.3, 0.4), -"transitions": PackedFloat32Array(1, 1, 1, 1), -"update": 0, -"values": [Vector2(1, 1), Vector2(1, 1), Vector2(1, 1), Vector2(1, 1)] -} -tracks/21/type = "value" -tracks/21/imported = false -tracks/21/enabled = true -tracks/21/path = NodePath("Root/Hitbox/HitboxCollisionShape2D:disabled") -tracks/21/interp = 1 -tracks/21/loop_wrap = true -tracks/21/keys = { -"times": PackedFloat32Array(0, 0.4), +"times": PackedFloat32Array(0, 0.6), "transitions": PackedFloat32Array(1, 1), "update": 1, -"values": [true, true] +"values": [false, false] } [sub_resource type="AnimationLibrary" id="AnimationLibrary_ws2ti"] @@ -4396,9 +4456,8 @@ region_rect = Rect2(111, 34, 26.9272, 26.6298) [node name="WeaponNinjaStar" type="Sprite2D" parent="Root"] visible = false -position = Vector2(-55, -76.0016) -rotation = 2.89599e-05 -scale = Vector2(0.999985, 0.999984) +position = Vector2(-55, -76) +scale = Vector2(0.999982, 0.999981) texture = ExtResource("4_1c5xq") [node name="Hitbox" type="Area2D" parent="Root"] @@ -4468,6 +4527,7 @@ shape = SubResource("CircleShape2D_0c228") script = ExtResource("4_qwtrf") [node name="AnimationPlayer" type="AnimationPlayer" parent="."] +callback_mode_method = 1 libraries = { "": SubResource("AnimationLibrary_ws2ti") } diff --git a/demo/demo/agents/ninja_star/ninja_star.tscn b/demo/demo/agents/ninja_star/ninja_star.tscn index 5da0075..58aab69 100644 --- a/demo/demo/agents/ninja_star/ninja_star.tscn +++ b/demo/demo/agents/ninja_star/ninja_star.tscn @@ -7,7 +7,7 @@ [ext_resource type="Texture2D" uid="uid://bdusy0qqtw0th" path="res://demo/assets/smoke.png" id="5_t37aw"] [sub_resource type="CircleShape2D" id="CircleShape2D_7uc1b"] -radius = 25.13 +radius = 28.0 [sub_resource type="Curve" id="Curve_ugmtv"] _data = [Vector2(0, 0.010989), 0.0, 0.0, 0, 0, Vector2(0.151111, 1), 1.3559, 1.3559, 0, 0, Vector2(1, 0), 0.0, 0.0, 0, 0] diff --git a/demo/demo/agents/player/player.gd b/demo/demo/agents/player/player.gd index 177b786..f429e78 100644 --- a/demo/demo/agents/player/player.gd +++ b/demo/demo/agents/player/player.gd @@ -21,6 +21,7 @@ extends "res://demo/agents/scripts/agent_base.gd" @onready var dodge_state: LimboState = $LimboHSM/DodgeState var can_dodge: bool = true +var attack_pressed: bool = false func _ready() -> void: @@ -34,11 +35,19 @@ func _unhandled_input(event: InputEvent) -> void: if event.is_echo(): return if event.is_action_pressed("attack"): - hsm.dispatch("attack!") + attack_pressed = true + _process_attack_input() if event.is_action_pressed("dodge"): hsm.dispatch("dodge!") +func _process_attack_input() -> void: + if not attack_pressed or hsm.get_active_state() == attack_state: + return + hsm.dispatch("attack!") + attack_pressed = false + + func _init_state_machine() -> void: hsm.add_transition(idle_state, move_state, idle_state.EVENT_FINISHED) hsm.add_transition(move_state, idle_state, move_state.EVENT_FINISHED) @@ -47,7 +56,14 @@ func _init_state_machine() -> void: hsm.add_transition(attack_state, move_state, attack_state.EVENT_FINISHED) hsm.add_transition(hsm.ANYSTATE, dodge_state, "dodge!") hsm.add_transition(dodge_state, move_state, dodge_state.EVENT_FINISHED) + dodge_state.set_guard(_can_dodge) + attack_state.set_guard(attack_state.can_enter) + + # Process attack input buffer when move_state is entered. + # This way we can buffer the attack button presses and chain the attacks. + move_state.call_on_enter(_process_attack_input) + hsm.initialize(self) hsm.set_active(true) hsm.set_guard(_can_dodge) diff --git a/demo/demo/agents/player/player.tscn b/demo/demo/agents/player/player.tscn index 1ff8364..7821af3 100644 --- a/demo/demo/agents/player/player.tscn +++ b/demo/demo/agents/player/player.tscn @@ -5,10 +5,10 @@ [ext_resource type="Script" path="res://demo/agents/player/states/idle_state.gd" id="3_ekb12"] [ext_resource type="Script" path="res://demo/agents/player/states/move_state.gd" id="4_paikn"] [ext_resource type="Script" path="res://demo/agents/player/states/attack_state.gd" id="5_mpgu6"] -[ext_resource type="Script" path="res://demo/agents/player/DodgeState.gd" id="6_7o4a6"] +[ext_resource type="Script" path="res://demo/agents/player/states/dodge_state.gd" id="6_7o4a6"] [sub_resource type="RectangleShape2D" id="RectangleShape2D_8pofm"] -size = Vector2(130, 45) +size = Vector2(150, 50) [node name="Player" groups=["player"] instance=ExtResource("1_mswd4")] collision_layer = 0 @@ -17,9 +17,7 @@ script = ExtResource("2_24nyi") dodge_cooldown = 0.4 [node name="WeaponNinjaStar" parent="Root" index="1"] -position = Vector2(-55, -76) -rotation = 0.0 -scale = Vector2(0.999983, 0.999976) +scale = Vector2(0.999983, 0.999974) [node name="Hitbox" parent="Root" index="2"] collision_mask = 8 diff --git a/demo/demo/agents/player/states/attack_state.gd b/demo/demo/agents/player/states/attack_state.gd index 5868875..5f1557d 100644 --- a/demo/demo/agents/player/states/attack_state.gd +++ b/demo/demo/agents/player/states/attack_state.gd @@ -16,31 +16,45 @@ extends LimboState @export var animations: Array[StringName] @export var hitbox: Hitbox -var attack_pressed: int +## Cooldown duration after third attack in the combo is complete. +@export var combo_cooldown: float = 0.1 + +var anim_index: int = 0 +var last_attack_msec: int = -10000 +var _can_enter: bool = true -func _unhandled_input(event: InputEvent) -> void: - if event.is_echo(): - return - if event.is_action_pressed("attack"): - attack_pressed += 1 +## This func is used to prevent entering this state using LimboState.set_guard(). +## Entry is denied for a short duration after the third attack in the combo is complete. +func can_enter() -> bool: + return _can_enter func _enter() -> void: - attack_pressed = 0 - hitbox.damage = 1 - for idx in animations.size(): - hitbox.damage = 2 if idx == 2 else 1 # deal 2 damage on third attack - animation_player.play(animations[idx]) - await animation_player.animation_finished - if attack_pressed <= 0 or not is_active(): - # Interrupt combo if player didn't press attack button again, - # or state is no longer active. - break - attack_pressed -= 1 + if (Time.get_ticks_msec() - last_attack_msec) < 200: + # Perform next attack animation in the 3-part combo, if an attack was recently performed. + anim_index = (anim_index + 1) % 3 + else: + anim_index = 0 + + var horizontal_move: float = Input.get_axis(&"move_left", &"move_right") + if not is_zero_approx(horizontal_move): + agent.face_dir(horizontal_move) + + hitbox.damage = 2 if anim_index == 2 else 1 # deal 2 damage on a third attack in the combo + animation_player.play(animations[anim_index]) + + await animation_player.animation_finished if is_active(): get_root().dispatch(EVENT_FINISHED) func _exit() -> void: hitbox.damage = 1 + last_attack_msec = Time.get_ticks_msec() + if anim_index == 2 and _can_enter: + # Prevent entering this state for a short duration after the third attack + # in the combo sequence is complete. + _can_enter = false + await get_tree().create_timer(combo_cooldown).timeout + _can_enter = true diff --git a/demo/demo/agents/player/DodgeState.gd b/demo/demo/agents/player/states/dodge_state.gd similarity index 68% rename from demo/demo/agents/player/DodgeState.gd rename to demo/demo/agents/player/states/dodge_state.gd index 18e7643..399e293 100644 --- a/demo/demo/agents/player/DodgeState.gd +++ b/demo/demo/agents/player/states/dodge_state.gd @@ -1,3 +1,13 @@ +#* +#* dodge_state.gd +#* ============================================================================= +#* Copyright 2021-2024 Serhii Snitsaruk +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* extends LimboState ## Dodge state. @@ -33,7 +43,6 @@ func _exit() -> void: func _update(p_delta: float) -> void: elapsed_time += p_delta var desired_velocity: Vector2 = move_dir * dodge_speed - agent.velocity = lerp(agent.velocity, desired_velocity, 0.2) - agent.move_and_slide() + agent.move(desired_velocity) if elapsed_time > duration: get_root().dispatch(EVENT_FINISHED) diff --git a/demo/demo/agents/player/states/move_state.gd b/demo/demo/agents/player/states/move_state.gd index b3c128b..dbfcaf8 100644 --- a/demo/demo/agents/player/states/move_state.gd +++ b/demo/demo/agents/player/states/move_state.gd @@ -27,10 +27,11 @@ func _update(_delta: float) -> void: var horizontal_move: float = Input.get_axis(&"move_left", &"move_right") var vertical_move: float = Input.get_axis(&"move_up", &"move_down") + if not is_zero_approx(horizontal_move): + agent.face_dir(horizontal_move) + var desired_velocity := Vector2(horizontal_move, vertical_move * VERTICAL_FACTOR) * speed - agent.velocity = lerp(agent.velocity, desired_velocity, 0.2) - agent.move_and_slide() - agent.update_facing() + agent.move(desired_velocity) if horizontal_move == 0.0 and vertical_move == 0.0: get_root().dispatch(EVENT_FINISHED) diff --git a/demo/demo/agents/scripts/agent_base.gd b/demo/demo/agents/scripts/agent_base.gd index 6ec0f16..832bc75 100644 --- a/demo/demo/agents/scripts/agent_base.gd +++ b/demo/demo/agents/scripts/agent_base.gd @@ -20,8 +20,11 @@ const MINION_RESOURCE := "res://demo/agents/03_agent_imp.tscn" const NinjaStar := preload("res://demo/agents/ninja_star/ninja_star.tscn") const Fireball := preload("res://demo/agents/fireball/fireball.tscn") +var summon_count: int = 0 + var _frames_since_facing_update: int = 0 var _is_dead: bool = false +var _moved_this_frame: bool = false @onready var animation_player: AnimationPlayer = $AnimationPlayer @onready var health: Health = $Health @@ -34,6 +37,23 @@ func _ready() -> void: health.damaged.connect(_damaged) health.death.connect(die) + +func _physics_process(_delta: float) -> void: + _post_physics_process.call_deferred() + + +func _post_physics_process() -> void: + if not _moved_this_frame: + velocity = lerp(velocity, Vector2.ZERO, 0.5) + _moved_this_frame = false + + +func move(p_velocity: Vector2) -> void: + velocity = lerp(velocity, p_velocity, 0.2) + move_and_slide() + _moved_this_frame = true + + ## Update agent's facing in the velocity direction. func update_facing() -> void: _frames_since_facing_update += 1 @@ -74,6 +94,8 @@ func summon_minion(p_position: Vector2) -> void: get_parent().add_child(minion) minion.position = p_position minion.play_summoning_effect() + summon_count += 1 + minion.death.connect(func(): summon_count -= 1) ## Method is used when this agent is summoned from the dungeons of the castle AaaAaaAAAAAaaAAaaaaaa @@ -113,8 +135,7 @@ func apply_knockback(knockback: Vector2, frames: int = 10) -> void: if knockback.is_zero_approx(): return for i in range(frames): - velocity = lerp(velocity, knockback, 0.2) - move_and_slide() + move(knockback) await get_tree().physics_frame diff --git a/demo/demo/ai/tasks/arrive_pos.gd b/demo/demo/ai/tasks/arrive_pos.gd index 03f1c09..0cd016c 100644 --- a/demo/demo/ai/tasks/arrive_pos.gd +++ b/demo/demo/ai/tasks/arrive_pos.gd @@ -23,12 +23,18 @@ extends BTAction ## How close should the agent be to the target position to return SUCCESS. @export var tolerance := 50.0 +## Specifies the node to avoid (valid Node2D is expected). +## If not empty, agent will circle around the node while moving into position. +@export var avoid_var: String + func _generate_name() -> String: - return "Arrive pos: %s" % [ + return "Arrive pos: %s%s" % [ LimboUtility.decorate_var(target_position_var), + "" if avoid_var.is_empty() else " avoid: " + LimboUtility.decorate_var(avoid_var) ] + func _tick(_delta: float) -> Status: var target_pos: Vector2 = blackboard.get_var(target_position_var, Vector2.ZERO) if target_pos.distance_to(agent.global_position) < tolerance: @@ -43,8 +49,21 @@ func _tick(_delta: float) -> Status: vertical_factor = clampf(vertical_factor, 0.0, 1.0) dir.y *= vertical_factor + # Avoid the node specified by `avoid_var`. + # I.e., if `avoid_var` is set, agent will circle around that node while moving into position. + if not avoid_var.is_empty(): + var avoid_node: Node2D = blackboard.get_var(avoid_var) + if is_instance_valid(avoid_node): + var distance_vector: Vector2 = avoid_node.global_position - agent.global_position + if dir.dot(distance_vector) > 0.0: + var side := dir.rotated(PI * 0.5).normalized() + # The closer we are to the avoid target, the stronger is the avoidance. + var strength: float = remap(distance_vector.length(), 200.0, 400.0, 1.0, 0.0) + strength = clampf(strength, 0.0, 1.0) + var avoidance := side * signf(-side.dot(distance_vector)) * strength + dir += avoidance + var desired_velocity: Vector2 = dir.normalized() * speed - agent.velocity = lerp(agent.velocity, desired_velocity, 0.2) - agent.move_and_slide() + agent.move(desired_velocity) agent.update_facing() return RUNNING diff --git a/demo/demo/ai/tasks/back_away.gd b/demo/demo/ai/tasks/back_away.gd index 374dc18..d0d1a08 100644 --- a/demo/demo/ai/tasks/back_away.gd +++ b/demo/demo/ai/tasks/back_away.gd @@ -34,7 +34,6 @@ func _enter() -> void: # Called each time this task is ticked (aka executed). func _tick(_delta: float) -> Status: - agent.velocity = lerp(agent.velocity, _desired_velocity, 0.2) - agent.move_and_slide() + agent.move(_desired_velocity) agent.face_dir(-signf(_dir.x)) return RUNNING diff --git a/demo/demo/ai/tasks/is_aligned_with_target.gd b/demo/demo/ai/tasks/is_aligned_with_target.gd new file mode 100644 index 0000000..c8c4e3d --- /dev/null +++ b/demo/demo/ai/tasks/is_aligned_with_target.gd @@ -0,0 +1,35 @@ +#* +#* is_aligned_with_target.gd +#* ============================================================================= +#* Copyright 2021-2024 Serhii Snitsaruk +#* +#* Use of this source code is governed by an MIT-style +#* license that can be found in the LICENSE file or at +#* https://opensource.org/licenses/MIT. +#* ============================================================================= +#* +@tool +extends BTCondition +## IsAlignedWithTarget +## Returns SUCCESS if the agent is horizontally aligned with the target. +## Returns FAILURE if not aligned or if target is not a valid node instance. + + +@export var target_var: String = "target" +@export var tolerance: float = 30.0 + + +# Display a customized name (requires @tool). +func _generate_name() -> String: + return "IsAlignedWithTarget " + LimboUtility.decorate_var(target_var) + + +# Called each time this task is ticked (aka executed). +func _tick(_delta: float) -> Status: + var target := blackboard.get_var(target_var) as Node2D + if not is_instance_valid(target): + return FAILURE + var y_diff: float = absf(target.global_position.y - agent.global_position.y) + if y_diff < tolerance: + return SUCCESS + return FAILURE diff --git a/demo/demo/ai/tasks/move_forward.gd b/demo/demo/ai/tasks/move_forward.gd index 9326755..fe923cc 100644 --- a/demo/demo/ai/tasks/move_forward.gd +++ b/demo/demo/ai/tasks/move_forward.gd @@ -31,8 +31,7 @@ func _tick(_delta: float) -> Status: var facing: float = agent.get_facing() var speed: float = blackboard.get_var(speed_var, 100.0) var desired_velocity: Vector2 = Vector2.RIGHT * facing * speed - agent.velocity = lerp(agent.velocity, desired_velocity, 0.2) - agent.move_and_slide() + agent.move(desired_velocity) agent.update_facing() if elapsed_time > duration: return SUCCESS diff --git a/demo/demo/ai/tasks/pursue.gd b/demo/demo/ai/tasks/pursue.gd index 430a1ac..ac050d5 100644 --- a/demo/demo/ai/tasks/pursue.gd +++ b/demo/demo/ai/tasks/pursue.gd @@ -60,8 +60,7 @@ func _tick(_delta: float) -> Status: var speed: float = blackboard.get_var(speed_var, 200.0) var desired_velocity: Vector2 = agent.global_position.direction_to(_waypoint) * speed - agent.velocity = lerp(agent.velocity, desired_velocity, 0.2) - agent.move_and_slide() + agent.move(desired_velocity) agent.update_facing() return RUNNING diff --git a/demo/demo/ai/tasks/select_flanking_pos.gd b/demo/demo/ai/tasks/select_flanking_pos.gd index c465515..7e4a856 100644 --- a/demo/demo/ai/tasks/select_flanking_pos.gd +++ b/demo/demo/ai/tasks/select_flanking_pos.gd @@ -63,8 +63,12 @@ func _tick(_delta: float) -> Status: AgentSide.FRONT: dir = target.get_facing() - var flank_pos: Vector2 = target.global_position - flank_pos.x += dir * randf_range(range_min, range_max) + var flank_pos: Vector2 + var offset := Vector2(dir * randf_range(range_min, range_max), 0.0) + flank_pos = target.global_position + offset + if not agent.is_good_position(flank_pos): + # Choose the opposite side if preferred is not good (i.e., inside a collision shape). + flank_pos = target.global_position - offset blackboard.set_var(position_var, flank_pos) return SUCCESS diff --git a/demo/demo/ai/trees/02_agent_charger.tres b/demo/demo/ai/trees/02_agent_charger.tres index b91833c..62429d6 100644 --- a/demo/demo/ai/trees/02_agent_charger.tres +++ b/demo/demo/ai/trees/02_agent_charger.tres @@ -61,6 +61,7 @@ script = ExtResource("3_u2ra5") target_position_var = "flank_pos" speed_var = "speed" tolerance = 50.0 +avoid_var = "" [sub_resource type="BTTimeLimit" id="BTTimeLimit_is5ag"] time_limit = 3.0 @@ -85,6 +86,7 @@ animation_name = &"charge_prepare" blend = 0.1 [sub_resource type="BTWait" id="BTWait_ovu3r"] +duration = 0.6 [sub_resource type="BTSequence" id="BTSequence_mde2g"] custom_name = "Anticipation" @@ -102,7 +104,7 @@ blend = 0.05 [sub_resource type="BTAction" id="BTAction_o18uk"] script = ExtResource("5_ucvak") speed_var = "charge_speed" -duration = 2.0 +duration = 1.5 [sub_resource type="BTSequence" id="BTSequence_8lur1"] custom_name = "Charge!" diff --git a/demo/demo/ai/trees/03_agent_imp.tres b/demo/demo/ai/trees/03_agent_imp.tres index 9a69ab3..1216477 100644 --- a/demo/demo/ai/trees/03_agent_imp.tres +++ b/demo/demo/ai/trees/03_agent_imp.tres @@ -1,4 +1,4 @@ -[gd_resource type="BehaviorTree" load_steps=35 format=3 uid="uid://c2bxoo68ywb27"] +[gd_resource type="BehaviorTree" load_steps=30 format=3 uid="uid://c2bxoo68ywb27"] [ext_resource type="Script" path="res://demo/ai/tasks/select_random_nearby_pos.gd" id="1_cdtqu"] [ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="2_31fsn"] @@ -13,24 +13,6 @@ var/speed/value = 400.0 var/speed/hint = 1 var/speed/hint_string = "10,1000,10" -[sub_resource type="BBNode" id="BBNode_6xa35"] -saved_value = NodePath("AnimationPlayer") -resource_name = "AnimationPlayer" - -[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_4q5m7"] -animation_player = SubResource("BBNode_6xa35") -animation_name = &"idle" -blend = 0.1 - -[sub_resource type="BTRandomWait" id="BTRandomWait_025eh"] - -[sub_resource type="BTSequence" id="BTSequence_ds6uq"] -custom_name = "Idle" -children = [SubResource("BTPlayAnimation_4q5m7"), SubResource("BTRandomWait_025eh")] - -[sub_resource type="BTCooldown" id="BTCooldown_u2lrv"] -children = [SubResource("BTSequence_ds6uq")] - [sub_resource type="BBNode" id="BBNode_3y70b"] saved_value = NodePath("AnimationPlayer") resource_name = "AnimationPlayer" @@ -51,13 +33,13 @@ script = ExtResource("2_31fsn") target_position_var = "pos" speed_var = "speed" tolerance = 50.0 +avoid_var = "" [sub_resource type="BTSequence" id="BTSequence_k184c"] custom_name = "Chaotic Walk" children = [SubResource("BTPlayAnimation_klk26"), SubResource("BTAction_chmiy"), SubResource("BTAction_5kivl")] [sub_resource type="BTProbability" id="BTProbability_ifsry"] -run_chance = 0.6 children = [SubResource("BTSequence_k184c")] [sub_resource type="BBNode" id="BBNode_nrd4b"] @@ -70,10 +52,10 @@ animation_name = &"idle" blend = 0.1 [sub_resource type="BTRandomWait" id="BTRandomWait_xlud8"] -min_duration = 0.5 +min_duration = 0.7 max_duration = 1.5 -[sub_resource type="BTSequence" id="BTSequence_yhjh1"] +[sub_resource type="BTSequence" id="BTSequence_n5ltc"] custom_name = "Pause before action" children = [SubResource("BTPlayAnimation_qiw21"), SubResource("BTRandomWait_xlud8")] @@ -127,10 +109,10 @@ children = [SubResource("BTAction_kidxn"), SubResource("BTWait_tadkc"), SubResou [sub_resource type="BTSequence" id="BTSequence_pxl2k"] custom_name = "Engage player" -children = [SubResource("BTSequence_yhjh1"), SubResource("BTSequence_1xfnq"), SubResource("BTSequence_ww5v2")] +children = [SubResource("BTSequence_n5ltc"), SubResource("BTSequence_1xfnq"), SubResource("BTSequence_ww5v2")] [sub_resource type="BTSelector" id="BTSelector_y3llm"] -children = [SubResource("BTCooldown_u2lrv"), SubResource("BTProbability_ifsry"), SubResource("BTSequence_pxl2k")] +children = [SubResource("BTProbability_ifsry"), SubResource("BTSequence_pxl2k")] [resource] blackboard_plan = SubResource("BlackboardPlan_46tbn") diff --git a/demo/demo/ai/trees/04_agent_skirmisher.tres b/demo/demo/ai/trees/04_agent_skirmisher.tres index 0933e1e..ef14256 100644 --- a/demo/demo/ai/trees/04_agent_skirmisher.tres +++ b/demo/demo/ai/trees/04_agent_skirmisher.tres @@ -1,7 +1,8 @@ -[gd_resource type="BehaviorTree" load_steps=39 format=3 uid="uid://qqmjvbeibatn"] +[gd_resource type="BehaviorTree" load_steps=44 format=3 uid="uid://qqmjvbeibatn"] [ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_2883n"] [ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="2_cjso2"] +[ext_resource type="Script" path="res://demo/ai/tasks/pursue.gd" id="2_lpckh"] [ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="3_treio"] [ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="4_57x51"] [ext_resource type="Script" path="res://demo/ai/tasks/in_range.gd" id="5_p5dih"] @@ -34,6 +35,7 @@ animation_name = &"idle" blend = 0.1 [sub_resource type="BTRandomWait" id="BTRandomWait_xlud8"] +min_duration = 2.0 max_duration = 3.0 [sub_resource type="BTSequence" id="BTSequence_yhjh1"] @@ -46,28 +48,51 @@ children = [SubResource("BTSequence_yhjh1")] [sub_resource type="BTCondition" id="BTCondition_uk4dg"] script = ExtResource("5_p5dih") distance_min = 0.0 -distance_max = 170.0 +distance_max = 300.0 target_var = "target" +[sub_resource type="BBNode" id="BBNode_7c0g0"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_sty80"] +animation_player = SubResource("BBNode_7c0g0") +animation_name = &"walk" +blend = 0.1 +speed = 1.2 + +[sub_resource type="BTAction" id="BTAction_jryg6"] +script = ExtResource("2_lpckh") +target_var = "target" +speed_var = "speed" +approach_distance = 100.0 + +[sub_resource type="BTTimeLimit" id="BTTimeLimit_lkphr"] +time_limit = 1.0 +children = [SubResource("BTAction_jryg6")] + [sub_resource type="BTAction" id="BTAction_kidxn"] script = ExtResource("4_57x51") target_var = "target" [sub_resource type="BTWait" id="BTWait_tadkc"] -duration = 0.1 +duration = 0.2 -[sub_resource type="BBNode" id="BBNode_s8evu"] +[sub_resource type="BBNode" id="BBNode_kcqly"] saved_value = NodePath("AnimationPlayer") resource_name = "AnimationPlayer" -[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_ppmxd"] +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_hngi6"] await_completion = 2.0 -animation_player = SubResource("BBNode_s8evu") +animation_player = SubResource("BBNode_kcqly") animation_name = &"attack_3" +[sub_resource type="BTWait" id="BTWait_cm8jy"] +duration = 0.5 + [sub_resource type="BTSequence" id="BTSequence_ww5v2"] custom_name = "Melee attack" -children = [SubResource("BTCondition_uk4dg"), SubResource("BTAction_kidxn"), SubResource("BTWait_tadkc"), SubResource("BTPlayAnimation_ppmxd")] +children = [SubResource("BTCondition_uk4dg"), SubResource("BTPlayAnimation_sty80"), SubResource("BTTimeLimit_lkphr"), SubResource("BTAction_kidxn"), SubResource("BTWait_tadkc"), SubResource("BTPlayAnimation_hngi6"), SubResource("BTWait_cm8jy")] [sub_resource type="BTCooldown" id="BTCooldown_ksvfy"] duration = 2.0 @@ -76,7 +101,7 @@ children = [SubResource("BTSequence_ww5v2")] [sub_resource type="BTCondition" id="BTCondition_fpufi"] script = ExtResource("5_p5dih") distance_min = 0.0 -distance_max = 250.0 +distance_max = 300.0 target_var = "target" [sub_resource type="BBNode" id="BBNode_3iqcf"] @@ -112,13 +137,9 @@ blend = 0.1 [sub_resource type="BTRandomWait" id="BTRandomWait_jw0cm"] -[sub_resource type="BTSequence" id="BTSequence_bhacl"] -custom_name = "Chill" -children = [SubResource("BTPlayAnimation_e61er"), SubResource("BTRandomWait_jw0cm")] - [sub_resource type="BTSequence" id="BTSequence_y12eg"] -custom_name = "Back away" -children = [SubResource("BTCondition_fpufi"), SubResource("BTPlayAnimation_ee0ff"), SubResource("BTAlwaysSucceed_nw4ep"), SubResource("BTSequence_bhacl")] +custom_name = "Disengage" +children = [SubResource("BTCondition_fpufi"), SubResource("BTPlayAnimation_ee0ff"), SubResource("BTAlwaysSucceed_nw4ep"), SubResource("BTPlayAnimation_e61er"), SubResource("BTRandomWait_jw0cm")] [sub_resource type="BBNode" id="BBNode_wpj6d"] saved_value = NodePath("AnimationPlayer") @@ -139,8 +160,8 @@ output_var = "target" script = ExtResource("2_cjso2") target_var = "target" flank_side = 2 -range_min = 100 -range_max = 100 +range_min = 90 +range_max = 90 position_var = "flank_pos" [sub_resource type="BTAction" id="BTAction_tv4lt"] @@ -148,13 +169,13 @@ script = ExtResource("3_treio") target_position_var = "flank_pos" speed_var = "fast_speed" tolerance = 50.0 +avoid_var = "target" [sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"] -time_limit = 4.0 children = [SubResource("BTAction_tv4lt")] [sub_resource type="BTSequence" id="BTSequence_rgwic"] -custom_name = "Skirmish" +custom_name = "Flank from behind" children = [SubResource("BTPlayAnimation_olf37"), SubResource("BTAction_ulbrf"), SubResource("BTAction_g5ayy"), SubResource("BTTimeLimit_xek5v")] [sub_resource type="BTSelector" id="BTSelector_2jnau"] diff --git a/demo/demo/ai/trees/05_agent_ranged.tres b/demo/demo/ai/trees/05_agent_ranged.tres index f72120f..e9a49a1 100644 --- a/demo/demo/ai/trees/05_agent_ranged.tres +++ b/demo/demo/ai/trees/05_agent_ranged.tres @@ -1,7 +1,7 @@ -[gd_resource type="BehaviorTree" load_steps=40 format=3 uid="uid://cqluon1y1hnn5"] +[gd_resource type="BehaviorTree" load_steps=41 format=3 uid="uid://cqluon1y1hnn5"] [ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_4xk1i"] -[ext_resource type="Script" path="res://demo/ai/tasks/select_random_nearby_pos.gd" id="2_647kx"] +[ext_resource type="Script" path="res://demo/ai/tasks/is_aligned_with_target.gd" id="2_a8qex"] [ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="3_q4r2p"] [ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="4_53hao"] [ext_resource type="Script" path="res://demo/ai/tasks/face_target.gd" id="5_aexyq"] @@ -12,6 +12,11 @@ var/speed/type = 3 var/speed/value = 400.0 var/speed/hint = 1 var/speed/hint_string = "10,1000,10" +var/run_speed/name = "run_speed" +var/run_speed/type = 3 +var/run_speed/value = 600.0 +var/run_speed/hint = 1 +var/run_speed/hint_string = "10,1000,10" [sub_resource type="BBNode" id="BBNode_nrd4b"] saved_value = NodePath("AnimationPlayer") @@ -23,8 +28,8 @@ animation_name = &"idle" blend = 0.1 [sub_resource type="BTRandomWait" id="BTRandomWait_xlud8"] -min_duration = 1.2 -max_duration = 2.5 +min_duration = 0.7 +max_duration = 1.5 [sub_resource type="BTAction" id="BTAction_c4cxo"] script = ExtResource("1_4xk1i") @@ -35,15 +40,6 @@ output_var = "target" custom_name = "Take a break" children = [SubResource("BTPlayAnimation_qiw21"), SubResource("BTRandomWait_xlud8"), SubResource("BTAction_c4cxo")] -[sub_resource type="BTComment" id="BTComment_qhsko"] -custom_name = "He is bored attacking player all the time ;)" - -[sub_resource type="BTAction" id="BTAction_lpk67"] -script = ExtResource("2_647kx") -range_min = 300.0 -range_max = 500.0 -position_var = "pos" - [sub_resource type="BBNode" id="BBNode_ok0r5"] saved_value = NodePath("AnimationPlayer") resource_name = "AnimationPlayer" @@ -52,25 +48,43 @@ resource_name = "AnimationPlayer" animation_player = SubResource("BBNode_ok0r5") animation_name = &"walk" blend = 0.1 +speed = 1.5 -[sub_resource type="BTAction" id="BTAction_apfsn"] +[sub_resource type="BTAction" id="BTAction_op6l6"] +script = ExtResource("4_53hao") +target_var = "target" +flank_side = 1 +range_min = 400 +range_max = 1000 +position_var = "pos" + +[sub_resource type="BTAction" id="BTAction_ycjun"] script = ExtResource("3_q4r2p") target_position_var = "pos" -speed_var = "speed" +speed_var = "run_speed" tolerance = 50.0 +avoid_var = "target" -[sub_resource type="BTTimeLimit" id="BTTimeLimit_baob7"] -time_limit = 3.0 -children = [SubResource("BTAction_apfsn")] +[sub_resource type="BTTimeLimit" id="BTTimeLimit_gadc6"] +time_limit = 7.0 +children = [SubResource("BTAction_ycjun")] + +[sub_resource type="BTAction" id="BTAction_poqpu"] +script = ExtResource("5_aexyq") +target_var = "target" [sub_resource type="BTSequence" id="BTSequence_0gdqn"] -custom_name = "Random Walk" -children = [SubResource("BTComment_qhsko"), SubResource("BTAction_lpk67"), SubResource("BTPlayAnimation_unftu"), SubResource("BTTimeLimit_baob7")] +custom_name = "Change flank" +children = [SubResource("BTPlayAnimation_unftu"), SubResource("BTAction_op6l6"), SubResource("BTTimeLimit_gadc6"), SubResource("BTAction_poqpu")] -[sub_resource type="BTProbability" id="BTProbability_sat88"] -run_chance = 0.3 +[sub_resource type="BTCooldown" id="BTCooldown_2lneu"] +duration = 7.0 children = [SubResource("BTSequence_0gdqn")] +[sub_resource type="BTProbability" id="BTProbability_6sydk"] +run_chance = 0.3 +children = [SubResource("BTCooldown_2lneu")] + [sub_resource type="BTAction" id="BTAction_kuuw2"] script = ExtResource("4_53hao") target_var = "target" @@ -93,6 +107,7 @@ script = ExtResource("3_q4r2p") target_position_var = "shoot_pos" speed_var = "speed" tolerance = 50.0 +avoid_var = "" [sub_resource type="BTTimeLimit" id="BTTimeLimit_24ath"] children = [SubResource("BTAction_66hsk")] @@ -101,10 +116,10 @@ children = [SubResource("BTAction_66hsk")] script = ExtResource("5_aexyq") target_var = "target" -[sub_resource type="BTSequence" id="BTSequence_lhg7f"] -custom_name = "Get into position" -children = [SubResource("BTAction_kuuw2"), SubResource("BTPlayAnimation_panch"), SubResource("BTTimeLimit_24ath"), SubResource("BTAction_enw2m")] -metadata/_weight_ = 1.0 +[sub_resource type="BTCondition" id="BTCondition_1fnyc"] +script = ExtResource("2_a8qex") +target_var = "target" +tolerance = 150.0 [sub_resource type="BBNode" id="BBNode_s6vt4"] saved_value = NodePath("AnimationPlayer") @@ -147,12 +162,13 @@ metadata/_weight_ = 1.0 times = 3 children = [SubResource("BTSequence_rgbq3")] -[sub_resource type="BTSequence" id="BTSequence_h2tm0"] -custom_name = "Align and shoot" -children = [SubResource("BTSequence_lhg7f"), SubResource("BTRepeat_g08ia")] +[sub_resource type="BTSequence" id="BTSequence_lhg7f"] +custom_name = "Get into position" +children = [SubResource("BTAction_kuuw2"), SubResource("BTPlayAnimation_panch"), SubResource("BTTimeLimit_24ath"), SubResource("BTAction_enw2m"), SubResource("BTCondition_1fnyc"), SubResource("BTRepeat_g08ia")] +metadata/_weight_ = 1.0 [sub_resource type="BTSelector" id="BTSelector_1rrya"] -children = [SubResource("BTProbability_sat88"), SubResource("BTSequence_h2tm0")] +children = [SubResource("BTProbability_6sydk"), SubResource("BTSequence_lhg7f")] [sub_resource type="BTSequence" id="BTSequence_pxl2k"] custom_name = "Main" diff --git a/demo/demo/ai/trees/06_agent_melee_combo.tres b/demo/demo/ai/trees/06_agent_melee_combo.tres index 1eb62d2..cf7bd8e 100644 --- a/demo/demo/ai/trees/06_agent_melee_combo.tres +++ b/demo/demo/ai/trees/06_agent_melee_combo.tres @@ -1,4 +1,4 @@ -[gd_resource type="BehaviorTree" load_steps=37 format=3 uid="uid://cpncl1db8j12f"] +[gd_resource type="BehaviorTree" load_steps=39 format=3 uid="uid://cpncl1db8j12f"] [ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_sf4l8"] [ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="2_5nwkp"] @@ -62,6 +62,7 @@ script = ExtResource("3_3tom2") target_position_var = "pos" speed_var = "speed" tolerance = 50.0 +avoid_var = "" [sub_resource type="BTTimeLimit" id="BTTimeLimit_xek5v"] children = [SubResource("BTAction_ygjnc")] @@ -74,8 +75,17 @@ children = [SubResource("BTAction_85keo"), SubResource("BTPlayAnimation_olf37"), script = ExtResource("4_hi228") target_var = "target" +[sub_resource type="BBNode" id="BBNode_giv5l"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_usdja"] +animation_player = SubResource("BBNode_giv5l") +animation_name = &"idle" +blend = 0.1 + [sub_resource type="BTWait" id="BTWait_tadkc"] -duration = 0.2 +duration = 0.4 [sub_resource type="BBNode" id="BBNode_s8evu"] saved_value = NodePath("AnimationPlayer") @@ -142,7 +152,7 @@ duration = 0.5 [sub_resource type="BTSequence" id="BTSequence_ww5v2"] custom_name = "Combo Melee attack" -children = [SubResource("BTAction_kidxn"), SubResource("BTWait_tadkc"), SubResource("BTParallel_ec2e3"), SubResource("BTWait_c0lo0"), SubResource("BTParallel_thojy"), SubResource("BTWait_y3pmv"), SubResource("BTParallel_qmdfb"), SubResource("BTWait_nxyko")] +children = [SubResource("BTAction_kidxn"), SubResource("BTPlayAnimation_usdja"), SubResource("BTWait_tadkc"), SubResource("BTParallel_ec2e3"), SubResource("BTWait_c0lo0"), SubResource("BTParallel_thojy"), SubResource("BTWait_y3pmv"), SubResource("BTParallel_qmdfb"), SubResource("BTWait_nxyko")] [sub_resource type="BTSequence" id="BTSequence_pxl2k"] children = [SubResource("BTSequence_yhjh1"), SubResource("BTSequence_1xfnq"), SubResource("BTSequence_ww5v2")] diff --git a/demo/demo/ai/trees/07_agent_melee_nuanced.tres b/demo/demo/ai/trees/07_agent_melee_nuanced.tres index 64d1bde..7b675df 100644 --- a/demo/demo/ai/trees/07_agent_melee_nuanced.tres +++ b/demo/demo/ai/trees/07_agent_melee_nuanced.tres @@ -1,4 +1,4 @@ -[gd_resource type="BehaviorTree" load_steps=46 format=3 uid="uid://c2u6sljqkim0n"] +[gd_resource type="BehaviorTree" load_steps=49 format=3 uid="uid://c2u6sljqkim0n"] [ext_resource type="Script" path="res://demo/ai/tasks/get_first_in_group.gd" id="1_08fik"] [ext_resource type="Script" path="res://demo/ai/tasks/select_flanking_pos.gd" id="2_te3yo"] @@ -28,6 +28,8 @@ animation_name = &"idle" blend = 0.1 [sub_resource type="BTRandomWait" id="BTRandomWait_xlud8"] +min_duration = 0.7 +max_duration = 1.5 [sub_resource type="BTAction" id="BTAction_c4cxo"] script = ExtResource("1_08fik") @@ -61,6 +63,7 @@ script = ExtResource("3_svwk8") target_position_var = "flank_pos" speed_var = "flank_speed" tolerance = 50.0 +avoid_var = "target" [sub_resource type="BTTimeLimit" id="BTTimeLimit_24ath"] children = [SubResource("BTAction_66hsk")] @@ -105,18 +108,30 @@ target_var = "target" [sub_resource type="BTWait" id="BTWait_tadkc"] duration = 0.1 -[sub_resource type="BBNode" id="BBNode_s8evu"] +[sub_resource type="BBNode" id="BBNode_g8qww"] saved_value = NodePath("AnimationPlayer") resource_name = "AnimationPlayer" -[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_ppmxd"] +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_a8yqu"] await_completion = 2.0 -animation_player = SubResource("BBNode_s8evu") +animation_player = SubResource("BBNode_g8qww") +animation_name = &"attack_2" + +[sub_resource type="BTWait" id="BTWait_vjstl"] +duration = 0.1 + +[sub_resource type="BBNode" id="BBNode_rfop0"] +saved_value = NodePath("AnimationPlayer") +resource_name = "AnimationPlayer" + +[sub_resource type="BTPlayAnimation" id="BTPlayAnimation_8oyw6"] +await_completion = 2.0 +animation_player = SubResource("BBNode_rfop0") animation_name = &"attack_3" [sub_resource type="BTSequence" id="BTSequence_1xfnq"] custom_name = "Approach and melee attack" -children = [SubResource("BTPlayAnimation_olf37"), SubResource("BTTimeLimit_xek5v"), SubResource("BTAction_kidxn"), SubResource("BTWait_tadkc"), SubResource("BTPlayAnimation_ppmxd")] +children = [SubResource("BTPlayAnimation_olf37"), SubResource("BTTimeLimit_xek5v"), SubResource("BTAction_kidxn"), SubResource("BTWait_tadkc"), SubResource("BTPlayAnimation_a8yqu"), SubResource("BTWait_vjstl"), SubResource("BTPlayAnimation_8oyw6")] metadata/_weight_ = 4.0 [sub_resource type="BTAction" id="BTAction_mf87t"] @@ -141,6 +156,7 @@ script = ExtResource("3_svwk8") target_position_var = "pos" speed_var = "speed" tolerance = 50.0 +avoid_var = "" [sub_resource type="BTTimeLimit" id="BTTimeLimit_tidwl"] time_limit = 3.0 diff --git a/demo/demo/ai/trees/08_agent_demon.tres b/demo/demo/ai/trees/08_agent_demon.tres index 27838be..d98b6c8 100644 --- a/demo/demo/ai/trees/08_agent_demon.tres +++ b/demo/demo/ai/trees/08_agent_demon.tres @@ -24,6 +24,7 @@ animation_name = &"idle" blend = 0.1 [sub_resource type="BTRandomWait" id="BTRandomWait_j6cjm"] +min_duration = 2.0 max_duration = 3.0 [sub_resource type="BTSequence" id="BTSequence_5thv4"] @@ -125,6 +126,7 @@ script = ExtResource("6_0pfsl") target_position_var = "pos" speed_var = "speed" tolerance = 50.0 +avoid_var = "" [sub_resource type="BTTimeLimit" id="BTTimeLimit_jyks2"] children = [SubResource("BTAction_vb5c3")] @@ -170,7 +172,7 @@ node = SubResource("BBNode_dv5b5") method = &"spit_fire" [sub_resource type="BTComment" id="BTComment_fndxk"] -custom_name = "Short break after" +custom_name = "Wind down" [sub_resource type="BBNode" id="BBNode_m68ui"] saved_value = NodePath("AnimationPlayer") @@ -182,7 +184,7 @@ animation_name = &"idle" blend = 0.1 [sub_resource type="BTRandomWait" id="BTRandomWait_v0el8"] -min_duration = 0.5 +min_duration = 0.7 max_duration = 1.5 [sub_resource type="BTSequence" id="BTSequence_djtph"] diff --git a/demo/demo/ai/trees/09_agent_summoner.tres b/demo/demo/ai/trees/09_agent_summoner.tres index 97eda70..6ef56e4 100644 --- a/demo/demo/ai/trees/09_agent_summoner.tres +++ b/demo/demo/ai/trees/09_agent_summoner.tres @@ -1,4 +1,4 @@ -[gd_resource type="BehaviorTree" load_steps=33 format=3 uid="uid://cpxk7jnqpwwlc"] +[gd_resource type="BehaviorTree" load_steps=35 format=3 uid="uid://cpxk7jnqpwwlc"] [ext_resource type="Script" path="res://demo/ai/tasks/select_random_nearby_pos.gd" id="1_sgn0p"] [ext_resource type="Script" path="res://demo/ai/tasks/arrive_pos.gd" id="2_pshl2"] @@ -33,6 +33,16 @@ children = [SubResource("BTPlayAnimation_sot6a"), SubResource("BTRandomWait_0wc6 [sub_resource type="BTRunLimit" id="BTRunLimit_x2jr4"] children = [SubResource("BTSequence_kwkxc")] +[sub_resource type="BBVariant" id="BBVariant_y3x7n"] +type = 2 +saved_value = 6 +resource_name = "6" + +[sub_resource type="BTCheckAgentProperty" id="BTCheckAgentProperty_olmdj"] +property = &"summon_count" +check_type = 1 +value = SubResource("BBVariant_y3x7n") + [sub_resource type="BTComment" id="BTComment_ef6y0"] custom_name = "Variable $summon_cooldown is updated by the Cooldown task below" @@ -85,11 +95,10 @@ cooldown_state_var = "summon_cooldown" children = [SubResource("BTCallMethod_4ath5")] [sub_resource type="BTWait" id="BTWait_tdhfn"] -duration = 0.5 [sub_resource type="BTSequence" id="BTSequence_2n742"] -custom_name = "Summon" -children = [SubResource("BTCheckVar_hc3o3"), SubResource("BTPlayAnimation_6leni"), SubResource("BTWait_8og18"), SubResource("BTAction_yeyns"), SubResource("BTCooldown_25f70"), SubResource("BTWait_tdhfn")] +custom_name = "Summon minion" +children = [SubResource("BTCheckAgentProperty_olmdj"), SubResource("BTCheckVar_hc3o3"), SubResource("BTPlayAnimation_6leni"), SubResource("BTWait_8og18"), SubResource("BTAction_yeyns"), SubResource("BTCooldown_25f70"), SubResource("BTWait_tdhfn")] [sub_resource type="BTAction" id="BTAction_33wje"] script = ExtResource("1_sgn0p") @@ -111,6 +120,7 @@ script = ExtResource("2_pshl2") target_position_var = "pos" speed_var = "speed" tolerance = 50.0 +avoid_var = "" [sub_resource type="BTTimeLimit" id="BTTimeLimit_i05cm"] time_limit = 3.0 diff --git a/demo/demo/assets/ui.theme b/demo/demo/assets/ui.theme index 80536615f1e147915bcb781883a3c3d53b290e18..56d2c4533c271c0c73d040a77213f6a0fcf5ac20 100644 GIT binary patch delta 85178 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 I(Uq0`Kd_+S3IG5A delta 84967 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 P_s36Anpay#M&|zkb4I9t diff --git a/demo/demo/scenes/game.gd b/demo/demo/scenes/game.gd index 911fa9f..0fbcd77 100644 --- a/demo/demo/scenes/game.gd +++ b/demo/demo/scenes/game.gd @@ -13,14 +13,13 @@ const Summoner := preload("res://demo/agents/09_agent_summoner.tscn") const WAVES: Array = [ [Simple, Simple, Nuanced], [Simple, Nuanced, Charger], - [Simple, Simple, Ranged, Nuanced], + [Simple, Simple, Simple, Ranged, Nuanced], [Simple, Simple, Summoner], - [Ranged, Skirmisher, Nuanced, Simple], - [Nuanced, Nuanced, Combo, Ranged], - [Demon, Charger, Simple, Simple, Skirmisher], - [Demon, Nuanced, Combo, Demon], - [Summoner, Ranged, Nuanced, Nuanced, Ranged, Skirmisher], - + [Ranged, Skirmisher, Nuanced, Simple, Simple], + [Nuanced, Nuanced, Combo, Ranged, Simple], + [Demon, Charger, Simple, Simple, Simple, Skirmisher], + [Demon, Demon, Nuanced, Combo], + [Summoner, Ranged, Nuanced, Nuanced, Ranged, Skirmisher, Simple], [Demon, Demon, Summoner, Skirmisher, Nuanced, Nuanced, Combo], ] @@ -38,11 +37,9 @@ func _ready() -> void: hp_bar.max_value = player.get_health().max_health player.get_health().damaged.connect(func(_a,_b): hp_bar.value = player.get_health().get_current()) player.death.connect(_on_player_death) - round_counter.hide() func _update_round_counter() -> void: - round_counter.show() round_counter.text = "Round %s/%s" % [wave_index + 1, WAVES.size()] diff --git a/demo/demo/scenes/game.tscn b/demo/demo/scenes/game.tscn index cd69daa..ec1e026 100644 --- a/demo/demo/scenes/game.tscn +++ b/demo/demo/scenes/game.tscn @@ -1,4 +1,4 @@ -[gd_scene load_steps=15 format=3 uid="uid://clyhgbpfpmtw7"] +[gd_scene load_steps=14 format=3 uid="uid://clyhgbpfpmtw7"] [ext_resource type="Script" path="res://demo/scenes/game.gd" id="1_qw71e"] [ext_resource type="Theme" uid="uid://boqtjf88xcpu4" path="res://demo/assets/ui.theme" id="2_r21q3"] @@ -12,6 +12,12 @@ [ext_resource type="PackedScene" uid="uid://bpd1wmw2f7bvg" path="res://demo/props/gong.tscn" id="10_tftjb"] [ext_resource type="PackedScene" uid="uid://d07ag5dcje13i" path="res://demo/agents/player/player.tscn" id="11_bndob"] +[sub_resource type="LabelSettings" id="LabelSettings_qvxvp"] +font = ExtResource("4_w0vii") +font_size = 33 +outline_size = 11 +outline_color = Color(0.258915, 0.234974, 0.191974, 1) + [sub_resource type="LabelSettings" id="LabelSettings_628x3"] font = ExtResource("4_w0vii") font_size = 36 @@ -19,19 +25,7 @@ font_color = Color(1, 1, 0.239216, 1) outline_size = 20 outline_color = Color(0.211521, 0.23888, 0.290166, 1) -[sub_resource type="LabelSettings" id="LabelSettings_0r6iv"] -font = ExtResource("4_w0vii") -font_size = 37 -outline_size = 15 -outline_color = Color(0.211521, 0.23888, 0.290166, 1) - -[sub_resource type="LabelSettings" id="LabelSettings_qvxvp"] -font = ExtResource("4_w0vii") -font_size = 33 -outline_size = 11 -outline_color = Color(0.258915, 0.234974, 0.191974, 1) - -[node name="Demo" type="Node2D"] +[node name="Game" type="Node2D"] y_sort_enabled = true script = ExtResource("1_qw71e") @@ -46,6 +40,49 @@ grow_horizontal = 2 grow_vertical = 2 theme = ExtResource("2_r21q3") +[node name="Toolbar" type="PanelContainer" parent="UI Layer/Control"] +custom_minimum_size = Vector2(0, 54.26) +layout_mode = 1 +anchors_preset = 10 +anchor_right = 1.0 +offset_bottom = 64.0 +grow_horizontal = 2 + +[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control/Toolbar"] +layout_mode = 2 +theme_override_constants/separation = 4 + +[node name="ToggleFullscreen" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"] +layout_mode = 2 +focus_mode = 0 +theme_override_fonts/font = ExtResource("4_w0vii") +theme_override_font_sizes/font_size = 22 +text = "Toggle Fullscreen" +script = ExtResource("5_m16ov") + +[node name="Switch to Showcase" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"] +layout_mode = 2 +focus_mode = 0 +theme_override_fonts/font = ExtResource("4_w0vii") +theme_override_font_sizes/font_size = 22 +text = "Switch to Showcase +" + +[node name="RoundCounter" type="Label" parent="UI Layer/Control/Toolbar/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +size_flags_horizontal = 6 +text = "Strike the Gong to begin!" +label_settings = SubResource("LabelSettings_qvxvp") + +[node name="HPBar" type="TextureProgressBar" parent="UI Layer/Control/Toolbar/HBoxContainer"] +unique_name_in_owner = true +layout_mode = 2 +value = 100.0 +texture_under = ExtResource("6_622dk") +texture_over = ExtResource("7_430mt") +texture_progress = ExtResource("8_invih") + [node name="Logo" type="TextureRect" parent="UI Layer/Control"] layout_mode = 1 anchors_preset = 3 @@ -79,73 +116,8 @@ label_settings = SubResource("LabelSettings_628x3") horizontal_alignment = 2 vertical_alignment = 1 -[node name="VBoxContainer" type="VBoxContainer" parent="UI Layer/Control"] -layout_mode = 1 -anchors_preset = 3 -anchor_left = 1.0 -anchor_top = 1.0 -anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = -394.0 -offset_top = -231.0 -offset_right = 99.0 -offset_bottom = 39.0 -grow_horizontal = 0 -grow_vertical = 0 - -[node name="Controls" type="Label" parent="UI Layer/Control/VBoxContainer"] -layout_mode = 2 -text = "Move WASD -Attack ENTER or F -Dodge SPACE" -label_settings = SubResource("LabelSettings_0r6iv") - -[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control"] -layout_mode = 0 -offset_left = 1512.0 -offset_top = 29.0 -offset_right = 1912.0 -offset_bottom = 74.0 - -[node name="ToggleFullscreen" type="Button" parent="UI Layer/Control/HBoxContainer"] -layout_mode = 2 -focus_mode = 0 -theme_override_fonts/font = ExtResource("4_w0vii") -theme_override_font_sizes/font_size = 22 -text = "Toggle Fullscreen" -script = ExtResource("5_m16ov") - -[node name="Switch to Showcase" type="Button" parent="UI Layer/Control/HBoxContainer"] -layout_mode = 2 -focus_mode = 0 -theme_override_fonts/font = ExtResource("4_w0vii") -theme_override_font_sizes/font_size = 22 -text = "Switch to Showcase -" - -[node name="HPBar" type="TextureProgressBar" parent="UI Layer/Control"] -unique_name_in_owner = true -layout_mode = 0 -offset_left = 25.0 -offset_top = 24.0 -offset_right = 405.0 -offset_bottom = 84.0 -value = 100.0 -texture_under = ExtResource("6_622dk") -texture_over = ExtResource("7_430mt") -texture_progress = ExtResource("8_invih") - -[node name="RoundCounter" type="Label" parent="UI Layer/Control"] -unique_name_in_owner = true -layout_mode = 1 -offset_left = 441.0 -offset_top = 29.0 -offset_right = 610.0 -offset_bottom = 81.0 -text = "Round: 0/1" -label_settings = SubResource("LabelSettings_qvxvp") - [node name="Arena" parent="." instance=ExtResource("9_k3uu1")] +metadata/_edit_lock_ = true [node name="Gong" parent="." instance=ExtResource("10_tftjb")] position = Vector2(923, -21) @@ -154,6 +126,7 @@ position = Vector2(923, -21) position = Vector2(843, 455) [node name="Camera2D" type="Camera2D" parent="Player"] +position = Vector2(0, -100) zoom = Vector2(0.88, 0.88) process_callback = 0 position_smoothing_enabled = true @@ -194,5 +167,5 @@ position = Vector2(629, 417) [node name="SpawnPosition10" type="Marker2D" parent="SpawnPoints"] position = Vector2(1859, 3) -[connection signal="pressed" from="UI Layer/Control/HBoxContainer/Switch to Showcase" to="." method="_on_switch_to_showcase_pressed"] +[connection signal="pressed" from="UI Layer/Control/Toolbar/HBoxContainer/Switch to Showcase" to="." method="_on_switch_to_showcase_pressed"] [connection signal="gong_struck" from="Gong" to="." method="_on_gong_gong_struck"] diff --git a/demo/demo/scenes/showcase.gd b/demo/demo/scenes/showcase.gd index e3268f9..82714c7 100644 --- a/demo/demo/scenes/showcase.gd +++ b/demo/demo/scenes/showcase.gd @@ -2,7 +2,6 @@ extends Node2D @onready var behavior_tree_view: BehaviorTreeView = %BehaviorTreeView @onready var camera: Camera2D = $Camera2D -@onready var resource_name: Label = %ResourceName @onready var agent_selection: MenuButton = %AgentSelection @onready var previous: Button = %Previous @onready var next: Button = %Next @@ -68,7 +67,6 @@ func _load_agent(file_name: String) -> void: add_child(agent) bt_player = agent.find_child("BTPlayer") _attach_camera(agent) - resource_name.text = bt_player.behavior_tree.resource_path.get_file() func _on_agent_selection_id_pressed(id: int) -> void: diff --git a/demo/demo/scenes/showcase.tscn b/demo/demo/scenes/showcase.tscn index e0be5ce..3b893a0 100644 --- a/demo/demo/scenes/showcase.tscn +++ b/demo/demo/scenes/showcase.tscn @@ -11,7 +11,8 @@ [sub_resource type="LabelSettings" id="LabelSettings_3uhve"] font = ExtResource("3_7vli5") -font_size = 29 +font_size = 26 +font_color = Color(0.804089, 0.811917, 0.823636, 1) outline_size = 10 outline_color = Color(0.145083, 0.168536, 0.203708, 1) @@ -38,51 +39,69 @@ grow_horizontal = 2 grow_vertical = 2 theme = ExtResource("2_3d7dj") -[node name="Panel" type="Panel" parent="UI Layer/Control"] -custom_minimum_size = Vector2(600, 0) +[node name="Toolbar" type="PanelContainer" parent="UI Layer/Control"] +custom_minimum_size = Vector2(0, 54.26) layout_mode = 1 -anchors_preset = 11 -anchor_left = 1.0 +anchors_preset = 10 anchor_right = 1.0 -anchor_bottom = 1.0 -offset_left = -600.0 -grow_horizontal = 0 -grow_vertical = 2 +offset_right = -612.0 +offset_bottom = 58.0 +grow_horizontal = 2 -[node name="ClickToSelect" type="Label" parent="UI Layer/Control"] +[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control/Toolbar"] +layout_mode = 2 +theme_override_constants/separation = 4 + +[node name="ToggleFullscreen" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"] +layout_mode = 2 +focus_mode = 0 +theme_override_fonts/font = ExtResource("3_7vli5") +theme_override_font_sizes/font_size = 22 +text = "Toggle Fullscreen" +script = ExtResource("6_uggpo") + +[node name="SwitchToGame" type="Button" parent="UI Layer/Control/Toolbar/HBoxContainer"] +layout_mode = 2 +focus_mode = 0 +theme_override_fonts/font = ExtResource("3_7vli5") +theme_override_font_sizes/font_size = 22 +text = "Switch to Game" + +[node name="ClickToSelect" type="Label" parent="UI Layer/Control/Toolbar/HBoxContainer"] unique_name_in_owner = true layout_mode = 2 -offset_left = 992.0 -offset_top = -2.0 -offset_right = 1305.0 -offset_bottom = 52.0 +size_flags_horizontal = 10 text = "Select Agent ➤" label_settings = SubResource("LabelSettings_3uhve") horizontal_alignment = 2 -vertical_alignment = 1 -[node name="VBoxContainer" type="VBoxContainer" parent="UI Layer/Control"] -custom_minimum_size = Vector2(600, 0) +[node name="BehaviorInspector" type="PanelContainer" parent="UI Layer/Control"] layout_mode = 1 anchors_preset = 11 anchor_left = 1.0 anchor_right = 1.0 anchor_bottom = 1.0 +offset_left = -612.0 grow_horizontal = 0 grow_vertical = 2 -theme_override_constants/separation = 0 -[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control/VBoxContainer"] +[node name="VBoxContainer" type="VBoxContainer" parent="UI Layer/Control/BehaviorInspector"] +custom_minimum_size = Vector2(600, 0) layout_mode = 2 +theme_override_constants/separation = 4 -[node name="Previous" type="Button" parent="UI Layer/Control/VBoxContainer/HBoxContainer"] +[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control/BehaviorInspector/VBoxContainer"] +layout_mode = 2 +theme_override_constants/separation = 4 + +[node name="Previous" type="Button" parent="UI Layer/Control/BehaviorInspector/VBoxContainer/HBoxContainer"] unique_name_in_owner = true layout_mode = 2 focus_mode = 0 theme_override_font_sizes/font_size = 28 text = "⬅" -[node name="AgentSelection" type="MenuButton" parent="UI Layer/Control/VBoxContainer/HBoxContainer"] +[node name="AgentSelection" type="MenuButton" parent="UI Layer/Control/BehaviorInspector/VBoxContainer/HBoxContainer"] unique_name_in_owner = true custom_minimum_size = Vector2(400, 50) layout_mode = 2 @@ -93,23 +112,14 @@ text = "02_agent_imp.tres " flat = false -[node name="Next" type="Button" parent="UI Layer/Control/VBoxContainer/HBoxContainer"] +[node name="Next" type="Button" parent="UI Layer/Control/BehaviorInspector/VBoxContainer/HBoxContainer"] unique_name_in_owner = true layout_mode = 2 focus_mode = 0 theme_override_font_sizes/font_size = 28 text = "➡" -[node name="ResourceName" type="Label" parent="UI Layer/Control/VBoxContainer"] -unique_name_in_owner = true -visible = false -layout_mode = 2 -text = "o2_agent_imp.tres" -label_settings = SubResource("LabelSettings_3uhve") -horizontal_alignment = 2 -vertical_alignment = 1 - -[node name="BehaviorTreeView" type="BehaviorTreeView" parent="UI Layer/Control/VBoxContainer"] +[node name="BehaviorTreeView" type="BehaviorTreeView" parent="UI Layer/Control/BehaviorInspector/VBoxContainer"] unique_name_in_owner = true custom_minimum_size = Vector2(600, 0) layout_mode = 2 @@ -148,28 +158,6 @@ label_settings = SubResource("LabelSettings_la4ui") horizontal_alignment = 2 vertical_alignment = 1 -[node name="HBoxContainer" type="HBoxContainer" parent="UI Layer/Control"] -layout_mode = 0 -offset_left = 8.0 -offset_top = 8.0 -offset_right = 191.0 -offset_bottom = 53.0 - -[node name="ToggleFullscreen" type="Button" parent="UI Layer/Control/HBoxContainer"] -layout_mode = 2 -focus_mode = 0 -theme_override_fonts/font = ExtResource("3_7vli5") -theme_override_font_sizes/font_size = 22 -text = "Toggle Fullscreen" -script = ExtResource("6_uggpo") - -[node name="SwitchToGame" type="Button" parent="UI Layer/Control/HBoxContainer"] -layout_mode = 2 -focus_mode = 0 -theme_override_fonts/font = ExtResource("3_7vli5") -theme_override_font_sizes/font_size = 22 -text = "Switch to Game" - [node name="Camera2D" type="Camera2D" parent="."] position = Vector2(400, 0) zoom = Vector2(0.88, 0.88) @@ -188,4 +176,4 @@ metadata/_edit_lock_ = true [node name="Dummy" parent="." instance=ExtResource("8_apshw")] position = Vector2(1106, 423) -[connection signal="pressed" from="UI Layer/Control/HBoxContainer/SwitchToGame" to="." method="_on_switch_to_game_pressed"] +[connection signal="pressed" from="UI Layer/Control/Toolbar/HBoxContainer/SwitchToGame" to="." method="_on_switch_to_game_pressed"] diff --git a/demo/project.godot b/demo/project.godot index 5b694f9..7f8b52f 100644 --- a/demo/project.godot +++ b/demo/project.godot @@ -19,6 +19,7 @@ config/icon="res://demo/icon.svg" window/size/viewport_width=1920 window/size/viewport_height=1080 +window/size/mode=3 window/size/window_width_override=1280 window/size/window_height_override=720 window/stretch/mode="canvas_items"