From 3b935d70dcf4bf05bac9c4fc7a1b1ececa27cf06 Mon Sep 17 00:00:00 2001 From: Xanatos <10531466+XanatosX@users.noreply.github.com> Date: Sat, 20 Jun 2026 19:45:39 +0200 Subject: [PATCH] feat: add AI personalities Commit will allow the addition of AI personalities, this allows different action sets for each AI agent. This does add some different behavior to the AI. fix $194 --- entities/ui/main_menu/scenes/MainMenu.tscn | 10 ++++- .../assets/EasyAiPlayer.tres | 2 +- .../assets/HardAiPlayer.tres | 2 +- .../assets/NormalAiPlayer.tres | 2 +- .../resources/AIPersonality.gd | 12 ++++++ .../resources/AIPersonality.gd.uid | 1 + .../entities/ai_difficulty/assets/EasyAi.tres | 20 ++------- .../entities/ai_difficulty/assets/HardAi.tres | 39 ++--------------- .../ai_difficulty/assets/NormalAi.tres | 39 ++--------------- .../personalities/easy/DefaultEasy.tres | 27 ++++++++++++ .../personalities/hard/DefaultHard.tres | 43 +++++++++++++++++++ .../personalities/normal/DefaultNormal.tres | 43 +++++++++++++++++++ .../resources/AiDifficultyResource.gd | 39 +++++++++++------ 13 files changed, 172 insertions(+), 107 deletions(-) create mode 100644 entities/ui/quick_game_selection/resources/AIPersonality.gd create mode 100644 entities/ui/quick_game_selection/resources/AIPersonality.gd.uid create mode 100644 shared/entities/ai_difficulty/assets/personalities/easy/DefaultEasy.tres create mode 100644 shared/entities/ai_difficulty/assets/personalities/hard/DefaultHard.tres create mode 100644 shared/entities/ai_difficulty/assets/personalities/normal/DefaultNormal.tres diff --git a/entities/ui/main_menu/scenes/MainMenu.tscn b/entities/ui/main_menu/scenes/MainMenu.tscn index 9b09cd74..815ac7b1 100644 --- a/entities/ui/main_menu/scenes/MainMenu.tscn +++ b/entities/ui/main_menu/scenes/MainMenu.tscn @@ -8,6 +8,8 @@ [ext_resource type="Script" uid="uid://bcxjaw3jedjv5" path="res://shared/resources/control_animation/ControlAnimation.gd" id="4_psgpi"] [ext_resource type="PackedScene" uid="uid://dkd4cftggpymb" path="res://entities/ui/game_lobby/scenes/GameLobby.tscn" id="6_yklgi"] [ext_resource type="Script" uid="uid://cymc6ui77jfei" path="res://shared/entities/clickable_button/resources/actions/OpenSceneAction.gd" id="7_bdxeb"] +[ext_resource type="PackedScene" uid="uid://bcc3pe48h2wb8" path="res://entities/ui/multiplayer_server_browser/scenes/MultiplayerServerBrowser.tscn" id="8_a83js"] +[ext_resource type="Texture2D" uid="uid://cvvijbfoink4y" path="res://assets/icons/MultiplayerIcon.tres" id="8_gciok"] [ext_resource type="Resource" uid="uid://cakox3m20wk7q" path="res://shared/resources/control_animation/resources/DefaultButtonEnter.tres" id="9_0jj68"] [ext_resource type="Texture2D" uid="uid://wa0qa5dgmjgk" path="res://assets/icons/AiIcon.tres" id="9_e2yd3"] [ext_resource type="Resource" uid="uid://by7h6kfigwa21" path="res://shared/resources/control_animation/resources/DefaultButtonAnimation.tres" id="9_exu4r"] @@ -42,6 +44,12 @@ scene_template = ExtResource("6_yklgi") transmit_click_position = true metadata/_custom_type_script = "uid://cymc6ui77jfei" +[sub_resource type="Resource" id="Resource_cu1bk"] +script = ExtResource("7_bdxeb") +scene_template = ExtResource("8_a83js") +transmit_click_position = true +metadata/_custom_type_script = "uid://cymc6ui77jfei" + [sub_resource type="Resource" id="Resource_88f22"] script = ExtResource("11_3ka4x") metadata/_custom_type_script = "uid://d0jijr8wa6o8v" @@ -173,7 +181,7 @@ dynamic_neighbor_right = NodePath("../../../../../AvailableAiModes/PanelContaine [node name="ControlAnimationComponent" type="Node" parent="CenterMainMenu/PanelContainer/MarginContainer/VBoxContainer/Quick Game AI" unique_id=1338105200 node_paths=PackedStringArray("await_component")] script = ExtResource("3_aqmwr") -await_component = NodePath("") +await_component = NodePath("../../LocalMultiplayer/ControlAnimationComponent") enter_values = ExtResource("9_0jj68") hover_values = ExtResource("9_exu4r") metadata/_custom_type_script = "uid://rxshx7ma8nn3" diff --git a/entities/ui/quick_game_selection/assets/EasyAiPlayer.tres b/entities/ui/quick_game_selection/assets/EasyAiPlayer.tres index 63569a5e..a5d61084 100644 --- a/entities/ui/quick_game_selection/assets/EasyAiPlayer.tres +++ b/entities/ui/quick_game_selection/assets/EasyAiPlayer.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="PlayerResource" load_steps=3 format=3 uid="uid://dyvxj1se1pkhk"] +[gd_resource type="Resource" script_class="PlayerResource" format=3 uid="uid://dyvxj1se1pkhk"] [ext_resource type="Resource" uid="uid://bvccy0uqye5ff" path="res://shared/entities/ai_difficulty/assets/EasyAi.tres" id="1_qgh7o"] [ext_resource type="Script" uid="uid://bftxc2q2j26m7" path="res://entities/ui/quick_game_selection/resources/PlayerResource.gd" id="1_t7m73"] diff --git a/entities/ui/quick_game_selection/assets/HardAiPlayer.tres b/entities/ui/quick_game_selection/assets/HardAiPlayer.tres index c3f6d6f5..c9d599c6 100644 --- a/entities/ui/quick_game_selection/assets/HardAiPlayer.tres +++ b/entities/ui/quick_game_selection/assets/HardAiPlayer.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="PlayerResource" load_steps=3 format=3 uid="uid://ilmb724usqpk"] +[gd_resource type="Resource" script_class="PlayerResource" format=3 uid="uid://ilmb724usqpk"] [ext_resource type="Resource" uid="uid://gy5cebbq2aed" path="res://shared/entities/ai_difficulty/assets/HardAi.tres" id="1_0bmhw"] [ext_resource type="Script" uid="uid://bftxc2q2j26m7" path="res://entities/ui/quick_game_selection/resources/PlayerResource.gd" id="1_bokcx"] diff --git a/entities/ui/quick_game_selection/assets/NormalAiPlayer.tres b/entities/ui/quick_game_selection/assets/NormalAiPlayer.tres index 6a3484e0..2b062313 100644 --- a/entities/ui/quick_game_selection/assets/NormalAiPlayer.tres +++ b/entities/ui/quick_game_selection/assets/NormalAiPlayer.tres @@ -1,4 +1,4 @@ -[gd_resource type="Resource" script_class="PlayerResource" load_steps=3 format=3 uid="uid://cfwklxtc01411"] +[gd_resource type="Resource" script_class="PlayerResource" format=3 uid="uid://cfwklxtc01411"] [ext_resource type="Script" uid="uid://bftxc2q2j26m7" path="res://entities/ui/quick_game_selection/resources/PlayerResource.gd" id="1_4ui00"] [ext_resource type="Resource" uid="uid://dlrxaqb0lgbif" path="res://shared/entities/ai_difficulty/assets/NormalAi.tres" id="1_itdo1"] diff --git a/entities/ui/quick_game_selection/resources/AIPersonality.gd b/entities/ui/quick_game_selection/resources/AIPersonality.gd new file mode 100644 index 00000000..15bf5c4a --- /dev/null +++ b/entities/ui/quick_game_selection/resources/AIPersonality.gd @@ -0,0 +1,12 @@ +class_name AIPersonality extends Resource + +@export var _name: TextTranslation +@export var _actions: Array[AiBehaviorNode] + +func get_actions() -> Array[AiBehaviorNode]: + return _actions + +func get_personality_name() -> String: + if _name == null: + return "NOT FOUND" + return tr(_name.key) \ No newline at end of file diff --git a/entities/ui/quick_game_selection/resources/AIPersonality.gd.uid b/entities/ui/quick_game_selection/resources/AIPersonality.gd.uid new file mode 100644 index 00000000..bb1e126f --- /dev/null +++ b/entities/ui/quick_game_selection/resources/AIPersonality.gd.uid @@ -0,0 +1 @@ +uid://ge0n5xow746e diff --git a/shared/entities/ai_difficulty/assets/EasyAi.tres b/shared/entities/ai_difficulty/assets/EasyAi.tres index ef51a50d..031d62b7 100644 --- a/shared/entities/ai_difficulty/assets/EasyAi.tres +++ b/shared/entities/ai_difficulty/assets/EasyAi.tres @@ -1,25 +1,11 @@ [gd_resource type="Resource" script_class="AiDifficultyResource" format=3 uid="uid://bvccy0uqye5ff"] -[ext_resource type="Script" uid="uid://c1te0iu0444y4" path="res://shared/entities/ai_behavior/resources/AiBehaviorNode.gd" id="1_hial1"] -[ext_resource type="Script" uid="uid://cvnxi5g1235m6" path="res://shared/entities/ai_behavior/resources/behaviors/OpenRandomCard.gd" id="2_qtr07"] -[ext_resource type="Script" uid="uid://d0vjenabf7c5i" path="res://shared/entities/ai_behavior/resources/behaviors/OpenLastRevealedCard.gd" id="3_6amew"] -[ext_resource type="Script" uid="uid://7biix5hsjheq" path="res://shared/entities/ai_behavior/resources/behaviors/GetMatchingCard.gd" id="4_3q2jm"] +[ext_resource type="Resource" uid="uid://b6djpcdgasv2k" path="res://shared/entities/ai_difficulty/assets/personalities/easy/DefaultEasy.tres" id="2_3q14x"] +[ext_resource type="Script" uid="uid://ge0n5xow746e" path="res://entities/ui/quick_game_selection/resources/AIPersonality.gd" id="5_6amew"] [ext_resource type="Script" uid="uid://cagpu6d10g55o" path="res://shared/entities/ai_difficulty/resources/AiDifficultyResource.gd" id="5_a6nve"] -[sub_resource type="Resource" id="Resource_ixrth"] -script = ExtResource("2_qtr07") -probability = 100 - -[sub_resource type="Resource" id="Resource_dy1nx"] -script = ExtResource("3_6amew") -probability = 200 - -[sub_resource type="Resource" id="Resource_tjakf"] -script = ExtResource("4_3q2jm") -probability = 1 - [resource] script = ExtResource("5_a6nve") name = "EASY_AI" card_memory = 3 -actions = Array[ExtResource("1_hial1")]([SubResource("Resource_ixrth"), SubResource("Resource_dy1nx"), SubResource("Resource_tjakf")]) +personalities = Array[ExtResource("5_6amew")]([ExtResource("2_3q14x")]) diff --git a/shared/entities/ai_difficulty/assets/HardAi.tres b/shared/entities/ai_difficulty/assets/HardAi.tres index 2064ba10..3eb6e8a1 100644 --- a/shared/entities/ai_difficulty/assets/HardAi.tres +++ b/shared/entities/ai_difficulty/assets/HardAi.tres @@ -1,44 +1,11 @@ [gd_resource type="Resource" script_class="AiDifficultyResource" format=3 uid="uid://gy5cebbq2aed"] -[ext_resource type="Script" uid="uid://c1te0iu0444y4" path="res://shared/entities/ai_behavior/resources/AiBehaviorNode.gd" id="1_a4d02"] -[ext_resource type="Script" uid="uid://7biix5hsjheq" path="res://shared/entities/ai_behavior/resources/behaviors/GetMatchingCard.gd" id="2_omeps"] -[ext_resource type="Script" uid="uid://d0vjenabf7c5i" path="res://shared/entities/ai_behavior/resources/behaviors/OpenLastRevealedCard.gd" id="3_1ag7k"] -[ext_resource type="Script" uid="uid://cvnxi5g1235m6" path="res://shared/entities/ai_behavior/resources/behaviors/OpenRandomCard.gd" id="4_12url"] -[ext_resource type="Script" uid="uid://bda4016im6e8w" path="res://shared/entities/ai_behavior/resources/behaviors/OpenRandomBlackboardCard.gd" id="5_m36if"] -[ext_resource type="Script" uid="uid://cnc4s4mdqoccc" path="res://shared/entities/ai_behavior/resources/behaviors/OpenFirstMatchingCard.gd" id="6_vwxy4"] -[ext_resource type="Script" uid="uid://b27mb346tnwgt" path="res://shared/entities/ai_behavior/resources/behaviors/OpenUnknownCard.gd" id="7_arvnp"] +[ext_resource type="Resource" uid="uid://buxwoogbx0we1" path="res://shared/entities/ai_difficulty/assets/personalities/hard/DefaultHard.tres" id="2_enud5"] [ext_resource type="Script" uid="uid://cagpu6d10g55o" path="res://shared/entities/ai_difficulty/resources/AiDifficultyResource.gd" id="8_1jgkt"] - -[sub_resource type="Resource" id="Resource_er0g6"] -script = ExtResource("2_omeps") -probability = 80 - -[sub_resource type="Resource" id="Resource_6c2om"] -script = ExtResource("3_1ag7k") -probability = 10 - -[sub_resource type="Resource" id="Resource_q8pdn"] -script = ExtResource("4_12url") - -[sub_resource type="Resource" id="Resource_5evvt"] -script = ExtResource("5_m36if") -backup_action = SubResource("Resource_q8pdn") -probability = 10 - -[sub_resource type="Resource" id="Resource_ud30y"] -script = ExtResource("4_12url") -probability = 1 - -[sub_resource type="Resource" id="Resource_4gy06"] -script = ExtResource("6_vwxy4") -probability = 160 - -[sub_resource type="Resource" id="Resource_6asb8"] -script = ExtResource("7_arvnp") -probability = 40 +[ext_resource type="Script" uid="uid://ge0n5xow746e" path="res://entities/ui/quick_game_selection/resources/AIPersonality.gd" id="8_omeps"] [resource] script = ExtResource("8_1jgkt") name = "HARD_AI" card_memory = 18 -actions = Array[ExtResource("1_a4d02")]([SubResource("Resource_er0g6"), SubResource("Resource_6c2om"), SubResource("Resource_5evvt"), SubResource("Resource_ud30y"), SubResource("Resource_4gy06"), SubResource("Resource_6asb8")]) +personalities = Array[ExtResource("8_omeps")]([ExtResource("2_enud5")]) diff --git a/shared/entities/ai_difficulty/assets/NormalAi.tres b/shared/entities/ai_difficulty/assets/NormalAi.tres index 42feac88..1b7070a0 100644 --- a/shared/entities/ai_difficulty/assets/NormalAi.tres +++ b/shared/entities/ai_difficulty/assets/NormalAi.tres @@ -1,44 +1,11 @@ [gd_resource type="Resource" script_class="AiDifficultyResource" format=3 uid="uid://dlrxaqb0lgbif"] -[ext_resource type="Script" uid="uid://c1te0iu0444y4" path="res://shared/entities/ai_behavior/resources/AiBehaviorNode.gd" id="1_qk5mp"] -[ext_resource type="Script" uid="uid://cvnxi5g1235m6" path="res://shared/entities/ai_behavior/resources/behaviors/OpenRandomCard.gd" id="2_ovakn"] -[ext_resource type="Script" uid="uid://bda4016im6e8w" path="res://shared/entities/ai_behavior/resources/behaviors/OpenRandomBlackboardCard.gd" id="3_lhahp"] -[ext_resource type="Script" uid="uid://d0vjenabf7c5i" path="res://shared/entities/ai_behavior/resources/behaviors/OpenLastRevealedCard.gd" id="4_4h6yg"] -[ext_resource type="Script" uid="uid://7biix5hsjheq" path="res://shared/entities/ai_behavior/resources/behaviors/GetMatchingCard.gd" id="5_do2nh"] -[ext_resource type="Script" uid="uid://b27mb346tnwgt" path="res://shared/entities/ai_behavior/resources/behaviors/OpenUnknownCard.gd" id="6_8anug"] -[ext_resource type="Script" uid="uid://cnc4s4mdqoccc" path="res://shared/entities/ai_behavior/resources/behaviors/OpenFirstMatchingCard.gd" id="7_g4f26"] +[ext_resource type="Resource" uid="uid://cb7p5mu7qw70" path="res://shared/entities/ai_difficulty/assets/personalities/normal/DefaultNormal.tres" id="2_gn82v"] +[ext_resource type="Script" uid="uid://ge0n5xow746e" path="res://entities/ui/quick_game_selection/resources/AIPersonality.gd" id="8_ovakn"] [ext_resource type="Script" uid="uid://cagpu6d10g55o" path="res://shared/entities/ai_difficulty/resources/AiDifficultyResource.gd" id="8_sv3b7"] -[sub_resource type="Resource" id="Resource_4nkae"] -script = ExtResource("2_ovakn") - -[sub_resource type="Resource" id="Resource_uddj3"] -script = ExtResource("3_lhahp") -backup_action = SubResource("Resource_4nkae") -probability = 7 - -[sub_resource type="Resource" id="Resource_s2nqo"] -script = ExtResource("4_4h6yg") -probability = 2 - -[sub_resource type="Resource" id="Resource_y13pc"] -script = ExtResource("2_ovakn") -probability = 15 - -[sub_resource type="Resource" id="Resource_2wkxe"] -script = ExtResource("5_do2nh") -probability = 8 - -[sub_resource type="Resource" id="Resource_coya5"] -script = ExtResource("6_8anug") -probability = 10 - -[sub_resource type="Resource" id="Resource_nqkde"] -script = ExtResource("7_g4f26") -probability = 5 - [resource] script = ExtResource("8_sv3b7") name = "NORMAL_AI" card_memory = 10 -actions = Array[ExtResource("1_qk5mp")]([SubResource("Resource_uddj3"), SubResource("Resource_s2nqo"), SubResource("Resource_y13pc"), SubResource("Resource_2wkxe"), SubResource("Resource_coya5"), SubResource("Resource_nqkde")]) +personalities = Array[ExtResource("8_ovakn")]([ExtResource("2_gn82v")]) diff --git a/shared/entities/ai_difficulty/assets/personalities/easy/DefaultEasy.tres b/shared/entities/ai_difficulty/assets/personalities/easy/DefaultEasy.tres new file mode 100644 index 00000000..c2160f1e --- /dev/null +++ b/shared/entities/ai_difficulty/assets/personalities/easy/DefaultEasy.tres @@ -0,0 +1,27 @@ +[gd_resource type="Resource" script_class="AIPersonality" format=3 uid="uid://b6djpcdgasv2k"] + +[ext_resource type="Script" uid="uid://c1te0iu0444y4" path="res://shared/entities/ai_behavior/resources/AiBehaviorNode.gd" id="1_iwyd0"] +[ext_resource type="Script" uid="uid://ge0n5xow746e" path="res://entities/ui/quick_game_selection/resources/AIPersonality.gd" id="2_7aujl"] +[ext_resource type="Script" uid="uid://cvnxi5g1235m6" path="res://shared/entities/ai_behavior/resources/behaviors/OpenRandomCard.gd" id="2_up5va"] +[ext_resource type="Script" uid="uid://d0vjenabf7c5i" path="res://shared/entities/ai_behavior/resources/behaviors/OpenLastRevealedCard.gd" id="3_ehijr"] +[ext_resource type="Script" uid="uid://7biix5hsjheq" path="res://shared/entities/ai_behavior/resources/behaviors/GetMatchingCard.gd" id="4_42hdf"] + +[sub_resource type="Resource" id="Resource_y5oy8"] +script = ExtResource("2_up5va") +probability = 100 +metadata/_custom_type_script = "uid://cvnxi5g1235m6" + +[sub_resource type="Resource" id="Resource_v0g6q"] +script = ExtResource("3_ehijr") +probability = 200 +metadata/_custom_type_script = "uid://d0vjenabf7c5i" + +[sub_resource type="Resource" id="Resource_v3ile"] +script = ExtResource("4_42hdf") +probability = 1 +metadata/_custom_type_script = "uid://7biix5hsjheq" + +[resource] +script = ExtResource("2_7aujl") +_actions = Array[ExtResource("1_iwyd0")]([SubResource("Resource_y5oy8"), SubResource("Resource_v0g6q"), SubResource("Resource_v3ile")]) +metadata/_custom_type_script = "uid://ge0n5xow746e" diff --git a/shared/entities/ai_difficulty/assets/personalities/hard/DefaultHard.tres b/shared/entities/ai_difficulty/assets/personalities/hard/DefaultHard.tres new file mode 100644 index 00000000..dc5b9607 --- /dev/null +++ b/shared/entities/ai_difficulty/assets/personalities/hard/DefaultHard.tres @@ -0,0 +1,43 @@ +[gd_resource type="Resource" script_class="AIPersonality" format=3 uid="uid://buxwoogbx0we1"] + +[ext_resource type="Script" uid="uid://c1te0iu0444y4" path="res://shared/entities/ai_behavior/resources/AiBehaviorNode.gd" id="1_wkhyo"] +[ext_resource type="Script" uid="uid://7biix5hsjheq" path="res://shared/entities/ai_behavior/resources/behaviors/GetMatchingCard.gd" id="2_hr8kj"] +[ext_resource type="Script" uid="uid://d0vjenabf7c5i" path="res://shared/entities/ai_behavior/resources/behaviors/OpenLastRevealedCard.gd" id="3_ojhtq"] +[ext_resource type="Script" uid="uid://cvnxi5g1235m6" path="res://shared/entities/ai_behavior/resources/behaviors/OpenRandomCard.gd" id="4_6r11o"] +[ext_resource type="Script" uid="uid://bda4016im6e8w" path="res://shared/entities/ai_behavior/resources/behaviors/OpenRandomBlackboardCard.gd" id="5_kuyix"] +[ext_resource type="Script" uid="uid://cnc4s4mdqoccc" path="res://shared/entities/ai_behavior/resources/behaviors/OpenFirstMatchingCard.gd" id="6_0vdhh"] +[ext_resource type="Script" uid="uid://b27mb346tnwgt" path="res://shared/entities/ai_behavior/resources/behaviors/OpenUnknownCard.gd" id="7_78sqf"] +[ext_resource type="Script" uid="uid://ge0n5xow746e" path="res://entities/ui/quick_game_selection/resources/AIPersonality.gd" id="8_1hj11"] + +[sub_resource type="Resource" id="Resource_er0g6"] +script = ExtResource("2_hr8kj") +probability = 80 + +[sub_resource type="Resource" id="Resource_6c2om"] +script = ExtResource("3_ojhtq") +probability = 10 + +[sub_resource type="Resource" id="Resource_q8pdn"] +script = ExtResource("4_6r11o") + +[sub_resource type="Resource" id="Resource_5evvt"] +script = ExtResource("5_kuyix") +backup_action = SubResource("Resource_q8pdn") +probability = 10 + +[sub_resource type="Resource" id="Resource_ud30y"] +script = ExtResource("4_6r11o") +probability = 1 + +[sub_resource type="Resource" id="Resource_4gy06"] +script = ExtResource("6_0vdhh") +probability = 160 + +[sub_resource type="Resource" id="Resource_6asb8"] +script = ExtResource("7_78sqf") +probability = 40 + +[resource] +script = ExtResource("8_1hj11") +_actions = Array[ExtResource("1_wkhyo")]([SubResource("Resource_er0g6"), SubResource("Resource_6c2om"), SubResource("Resource_5evvt"), SubResource("Resource_ud30y"), SubResource("Resource_4gy06"), SubResource("Resource_6asb8")]) +metadata/_custom_type_script = "uid://ge0n5xow746e" diff --git a/shared/entities/ai_difficulty/assets/personalities/normal/DefaultNormal.tres b/shared/entities/ai_difficulty/assets/personalities/normal/DefaultNormal.tres new file mode 100644 index 00000000..18d1f80e --- /dev/null +++ b/shared/entities/ai_difficulty/assets/personalities/normal/DefaultNormal.tres @@ -0,0 +1,43 @@ +[gd_resource type="Resource" script_class="AIPersonality" format=3 uid="uid://cb7p5mu7qw70"] + +[ext_resource type="Script" uid="uid://c1te0iu0444y4" path="res://shared/entities/ai_behavior/resources/AiBehaviorNode.gd" id="1_ym2ok"] +[ext_resource type="Script" uid="uid://cvnxi5g1235m6" path="res://shared/entities/ai_behavior/resources/behaviors/OpenRandomCard.gd" id="2_aff3y"] +[ext_resource type="Script" uid="uid://ge0n5xow746e" path="res://entities/ui/quick_game_selection/resources/AIPersonality.gd" id="2_logt5"] +[ext_resource type="Script" uid="uid://bda4016im6e8w" path="res://shared/entities/ai_behavior/resources/behaviors/OpenRandomBlackboardCard.gd" id="3_rsvwe"] +[ext_resource type="Script" uid="uid://d0vjenabf7c5i" path="res://shared/entities/ai_behavior/resources/behaviors/OpenLastRevealedCard.gd" id="4_jpmf5"] +[ext_resource type="Script" uid="uid://7biix5hsjheq" path="res://shared/entities/ai_behavior/resources/behaviors/GetMatchingCard.gd" id="5_68x6a"] +[ext_resource type="Script" uid="uid://b27mb346tnwgt" path="res://shared/entities/ai_behavior/resources/behaviors/OpenUnknownCard.gd" id="6_o3elp"] +[ext_resource type="Script" uid="uid://cnc4s4mdqoccc" path="res://shared/entities/ai_behavior/resources/behaviors/OpenFirstMatchingCard.gd" id="7_231mc"] + +[sub_resource type="Resource" id="Resource_4nkae"] +script = ExtResource("2_aff3y") + +[sub_resource type="Resource" id="Resource_uddj3"] +script = ExtResource("3_rsvwe") +backup_action = SubResource("Resource_4nkae") +probability = 7 + +[sub_resource type="Resource" id="Resource_s2nqo"] +script = ExtResource("4_jpmf5") +probability = 2 + +[sub_resource type="Resource" id="Resource_y13pc"] +script = ExtResource("2_aff3y") +probability = 15 + +[sub_resource type="Resource" id="Resource_2wkxe"] +script = ExtResource("5_68x6a") +probability = 8 + +[sub_resource type="Resource" id="Resource_coya5"] +script = ExtResource("6_o3elp") +probability = 10 + +[sub_resource type="Resource" id="Resource_nqkde"] +script = ExtResource("7_231mc") +probability = 5 + +[resource] +script = ExtResource("2_logt5") +_actions = Array[ExtResource("1_ym2ok")]([SubResource("Resource_uddj3"), SubResource("Resource_s2nqo"), SubResource("Resource_y13pc"), SubResource("Resource_2wkxe"), SubResource("Resource_coya5"), SubResource("Resource_nqkde")]) +metadata/_custom_type_script = "uid://ge0n5xow746e" diff --git a/shared/entities/ai_difficulty/resources/AiDifficultyResource.gd b/shared/entities/ai_difficulty/resources/AiDifficultyResource.gd index dc40ab63..dd334bf0 100644 --- a/shared/entities/ai_difficulty/resources/AiDifficultyResource.gd +++ b/shared/entities/ai_difficulty/resources/AiDifficultyResource.gd @@ -3,25 +3,36 @@ class_name AiDifficultyResource extends Resource @export var name: String ## Set to -1 if the memory should be unlimited @export_range(-1, 200) var card_memory: int = -1: - set(value): - card_memory = value - blackboard = Blackboard.new(card_memory) -@export var actions: Array[AiBehaviorNode] + set(value): + card_memory = value + blackboard = Blackboard.new(card_memory) + +@export var personalities: Array[AIPersonality] var blackboard: Blackboard +var _personality: AIPersonality = null + +func get_personality_name() -> String: + return _get_personality().get_personality_name() + +func _get_personality() -> AIPersonality: + if _personality == null: + _personality = personalities.pick_random() + return _personality func execute_action(grid: GameCardGrid) -> void: - var possible_actions: Array[AiBehaviorNode] = actions.filter(func(current_action: AiBehaviorNode) -> bool: return current_action.can_execute(blackboard, grid)) - var loot_table: LootTable = LootTable.new() - for action: AiBehaviorNode in possible_actions: - loot_table.add_to_table(action, action.get_execution_probability()) + var actions: Array[AiBehaviorNode] = _get_personality().get_actions() + var possible_actions: Array[AiBehaviorNode] = actions.filter(func(current_action: AiBehaviorNode) -> bool: return current_action.can_execute(blackboard, grid)) + var loot_table: LootTable = LootTable.new() + for action: AiBehaviorNode in possible_actions: + loot_table.add_to_table(action, action.get_execution_probability()) - var action: AiBehaviorNode = loot_table.get_loot() as AiBehaviorNode - if action == null: - printerr("Action was null, but there should be something ...") - return - action.execute_action(blackboard, grid) + var action: AiBehaviorNode = loot_table.get_loot() as AiBehaviorNode + if action == null: + printerr("Action was null, but there should be something ...") + return + action.execute_action(blackboard, grid) func get_translated_name() -> String: - return tr(name) \ No newline at end of file + return tr(name) \ No newline at end of file