From a2c35c44cb9fbe649b2054e35c2150b284b94709 Mon Sep 17 00:00:00 2001 From: = <=> Date: Sat, 2 May 2026 19:53:29 +0200 Subject: [PATCH] Added more symbols to the game, added gates blocking pathfinding and improved DSL feedback system with enum for better control and UX --- Assets/EnergySymbol.aseprite | Bin 0 -> 424 bytes Assets/EnergySymbol.png | Bin 0 -> 306 bytes Assets/EnergySymbol.png.import | 40 ++++++++++++++++ Assets/Objects/Tiles.glb | Bin 1085776 -> 1084480 bytes Assets/OptionsSymbol.aseprite | Bin 0 -> 375 bytes Assets/OptionsSymbol.png | Bin 0 -> 147 bytes Assets/OptionsSymbol.png.import | 40 ++++++++++++++++ Assets/RobotSymbol.aseprite | Bin 0 -> 406 bytes Assets/RobotSymbol.png | Bin 0 -> 212 bytes Assets/RobotSymbol.png.import | 40 ++++++++++++++++ Assets/WaterSymbol.aseprite | Bin 0 -> 456 bytes Assets/WaterSymbol.png | Bin 0 -> 287 bytes Assets/WaterSymbol.png.import | 40 ++++++++++++++++ Scenes/Game.tscn | 62 +++++++++++++++++++++---- Scripts/DSL/NodeResult.cs | 6 +++ Scripts/DSL/NodeResult.cs.uid | 1 + Scripts/DSL/Nodes/CraftNode.cs | 4 +- Scripts/DSL/Nodes/HarvestNode.cs | 4 +- Scripts/DSL/Nodes/MoveNode.cs | 19 ++++---- Scripts/DSL/Nodes/ProgramNode.cs | 3 +- Scripts/Robot/Robot.cs | 19 ++++++-- Scripts/WorldGeneration/Layer.cs | 6 ++- Scripts/WorldGeneration/Pathfinding.cs | 16 +++++++ Scripts/WorldGeneration/Tile.cs | 5 +- Scripts/WorldGeneration/WFC.cs | 2 +- 25 files changed, 277 insertions(+), 30 deletions(-) create mode 100644 Assets/EnergySymbol.aseprite create mode 100644 Assets/EnergySymbol.png create mode 100644 Assets/EnergySymbol.png.import create mode 100644 Assets/OptionsSymbol.aseprite create mode 100644 Assets/OptionsSymbol.png create mode 100644 Assets/OptionsSymbol.png.import create mode 100644 Assets/RobotSymbol.aseprite create mode 100644 Assets/RobotSymbol.png create mode 100644 Assets/RobotSymbol.png.import create mode 100644 Assets/WaterSymbol.aseprite create mode 100644 Assets/WaterSymbol.png create mode 100644 Assets/WaterSymbol.png.import create mode 100644 Scripts/DSL/NodeResult.cs create mode 100644 Scripts/DSL/NodeResult.cs.uid diff --git a/Assets/EnergySymbol.aseprite b/Assets/EnergySymbol.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..e7c7465342c9dca5f75e6ebf878cf93cefe05154 GIT binary patch literal 424 zcmZ3%$iVPmDIyADL{+>3Ji=OK?VUJqy^9bn*Qq}3)of`pao(;%&q{o63MzO zAe)5&D5?NtC@Gk@YS^S%8uo`--!D|VxghP`;aR^wnaz9}khRaid`g~orhbsOijj?_ zy?u#6LQ{0!!{pijPx#>`6pHR9J=0m%$FgFbqQjf-9f1|3C9NyY5gfBVr?Hj%{i9x~h3jleCLCSr@|| zL)q`D24ChWmU*H#Pyu8q07G%^07%^*&tU6`1+chR08)y37Qp771xTsx833z$1|a2d z-vzL{?*gP;?js^@;JV8FsF!YZ2#Er0gdD}1r9+*58NnGq95F?T0w4vKHPI(^b07*qoM6N<$ Ef^OY+GXMYp literal 0 HcmV?d00001 diff --git a/Assets/EnergySymbol.png.import b/Assets/EnergySymbol.png.import new file mode 100644 index 0000000..8639054 --- /dev/null +++ b/Assets/EnergySymbol.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://deuxffyhsrinn" +path="res://.godot/imported/EnergySymbol.png-64f11837bac65e727f9268f845f35249.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/EnergySymbol.png" +dest_files=["res://.godot/imported/EnergySymbol.png-64f11837bac65e727f9268f845f35249.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/Objects/Tiles.glb b/Assets/Objects/Tiles.glb index 7e7ce1d8f42d26fcd9c480870fcd896a31d2324b..995c14161de7605f6af942acb034100150b3cd59 100644 GIT binary patch delta 53142 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

fxsc|O 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 delta 76293 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 diff --git a/Assets/OptionsSymbol.aseprite b/Assets/OptionsSymbol.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..893cbe718707943001b6045bf5e645fc1c3b4175 GIT binary patch literal 375 zcmXSCWMFu(l#xLJ41pYm6d*r}e zfjr121!f=#1OI^xb_Sos%G4qSLk}Q_RRQD}R)+sfFeMT|XIIQgPDuE1-XVF;%&D%z mHd%Is&n`>wmm19a*S_b>&s{sV#69}L!1zR! th#bjRX~FoJYD@<);T3K0RZ&eFY*8Y literal 0 HcmV?d00001 diff --git a/Assets/OptionsSymbol.png.import b/Assets/OptionsSymbol.png.import new file mode 100644 index 0000000..7424d76 --- /dev/null +++ b/Assets/OptionsSymbol.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://b77mo4fhklnja" +path="res://.godot/imported/OptionsSymbol.png-6737f7fc496e85a68b0e96b880f46122.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/OptionsSymbol.png" +dest_files=["res://.godot/imported/OptionsSymbol.png-6737f7fc496e85a68b0e96b880f46122.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/RobotSymbol.aseprite b/Assets/RobotSymbol.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..fdc965e92c40df96987d6376615f6b1971197809 GIT binary patch literal 406 zcmbQn$iVPmDIyADL{+>3Ji=OK?VUJqy-QIn*Qq}3)of`pao(;%&q{o63MzO zAe)5&D5?NtC@Gk@YS^S%8uo`--!D|VxghP`;aR^wnaz9}khRaid`g~orhbsOijj?_ zy?u#6LQ{0!!{pijolqW1{sG6qjq KKbLh*2~7Y#fl_J! literal 0 HcmV?d00001 diff --git a/Assets/RobotSymbol.png.import b/Assets/RobotSymbol.png.import new file mode 100644 index 0000000..fb96486 --- /dev/null +++ b/Assets/RobotSymbol.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://ban872p4eh4gi" +path="res://.godot/imported/RobotSymbol.png-986bd050c59e116c51936dcd370ba5c4.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/RobotSymbol.png" +dest_files=["res://.godot/imported/RobotSymbol.png-986bd050c59e116c51936dcd370ba5c4.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Assets/WaterSymbol.aseprite b/Assets/WaterSymbol.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..8f3739c24df2d70a3818a37182b4196af198f9a1 GIT binary patch literal 456 zcmX@X$iVPmDIyADL{+>3Ji=OK?VUJqy_K*n*Qq}3)of`pao(;%&q{o63MzO zAe)5&D5?NtC@Gk@YS^S%8uo`--!D|VxghP`;aR^wnaz9}khRaid`g~orhbsOijj?_ zy?u#6LQ{0!!{pij}+vYR}F8=Gq?8TT|Lw%CjX}6jr(7ZV>t^JU+Pa$+kM#m-JTOU zZ|#4a@M-s1`ajcJcIrRRwz_Y^@>`WPx#*-1n}R9J=WR9h0lAPn3%-qhh#4rj#=mBF@z4G`4P{c8zi9|7PGA0)Q$1!(Taf~uv2z$XqS4HfGd^| z&|+v2s9I}zZZ*tsfXcr{`0X lBA(%#EC-ZUtQnA>zzrn?UIj{I56}Pr002ovPDHLkV1hzqapeF2 literal 0 HcmV?d00001 diff --git a/Assets/WaterSymbol.png.import b/Assets/WaterSymbol.png.import new file mode 100644 index 0000000..2d70695 --- /dev/null +++ b/Assets/WaterSymbol.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://dje86ro2e37xl" +path="res://.godot/imported/WaterSymbol.png-cfddb36cae72b19ba800831b4972a1c5.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/WaterSymbol.png" +dest_files=["res://.godot/imported/WaterSymbol.png-cfddb36cae72b19ba800831b4972a1c5.ctex"] + +[params] + +compress/mode=0 +compress/high_quality=false +compress/lossy_quality=0.7 +compress/uastc_level=0 +compress/rdo_quality_loss=0.0 +compress/hdr_compression=1 +compress/normal_map=0 +compress/channel_pack=0 +mipmaps/generate=false +mipmaps/limit=-1 +roughness/mode=0 +roughness/src_normal="" +process/channel_remap/red=0 +process/channel_remap/green=1 +process/channel_remap/blue=2 +process/channel_remap/alpha=3 +process/fix_alpha_border=true +process/premult_alpha=false +process/normal_map_invert_y=false +process/hdr_as_srgb=false +process/hdr_clamp_exposure=false +process/size_limit=0 +detect_3d/compress_to=1 diff --git a/Scenes/Game.tscn b/Scenes/Game.tscn index 13a6fb8..d5d4237 100644 --- a/Scenes/Game.tscn +++ b/Scenes/Game.tscn @@ -8,6 +8,10 @@ [ext_resource type="Script" uid="uid://k6vlo7ulvtep" path="res://Scripts/Robot/RobotList.cs" id="7_2irst"] [ext_resource type="PackedScene" uid="uid://cpq7ppe8bw2bq" path="res://Scenes/Options.tscn" id="8_71axn"] [ext_resource type="Script" uid="uid://fegfbcnlk8p5" path="res://Scripts/WorldGeneration/Map.cs" id="8_bf53h"] +[ext_resource type="Texture2D" uid="uid://deuxffyhsrinn" path="res://Assets/EnergySymbol.png" id="9_71axn"] +[ext_resource type="Texture2D" uid="uid://dje86ro2e37xl" path="res://Assets/WaterSymbol.png" id="10_71axn"] +[ext_resource type="Texture2D" uid="uid://ban872p4eh4gi" path="res://Assets/RobotSymbol.png" id="11_dahhg"] +[ext_resource type="Texture2D" uid="uid://b77mo4fhklnja" path="res://Assets/OptionsSymbol.png" id="12_3so38"] [sub_resource type="CompressedTexture2D" id="CompressedTexture2D_u44n3"] @@ -311,6 +315,48 @@ text = "Exit" visible = false layout_mode = 1 +[node name="Survival" type="PanelContainer" parent="CanvasLayer/UIHandler/MainUI/Content" unique_id=141921319] +layout_mode = 1 +offset_right = 150.0 +offset_bottom = 23.0 + +[node name="VBoxContainer" type="VBoxContainer" parent="CanvasLayer/UIHandler/MainUI/Content/Survival" unique_id=1716446061] +layout_mode = 2 + +[node name="RowEnergy" type="HBoxContainer" parent="CanvasLayer/UIHandler/MainUI/Content/Survival/VBoxContainer" unique_id=867560906] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="CanvasLayer/UIHandler/MainUI/Content/Survival/VBoxContainer/RowEnergy" unique_id=1218525340] +layout_mode = 2 +texture = ExtResource("9_71axn") +expand_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="CanvasLayer/UIHandler/MainUI/Content/Survival/VBoxContainer/RowEnergy" unique_id=32920400] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Energy: 100/100" +fit_content = true +autowrap_mode = 0 +horizontal_alignment = 1 +vertical_alignment = 1 + +[node name="RowWater" type="HBoxContainer" parent="CanvasLayer/UIHandler/MainUI/Content/Survival/VBoxContainer" unique_id=465013052] +layout_mode = 2 + +[node name="TextureRect" type="TextureRect" parent="CanvasLayer/UIHandler/MainUI/Content/Survival/VBoxContainer/RowWater" unique_id=1398125603] +layout_mode = 2 +texture = ExtResource("10_71axn") +expand_mode = 2 + +[node name="RichTextLabel" type="RichTextLabel" parent="CanvasLayer/UIHandler/MainUI/Content/Survival/VBoxContainer/RowWater" unique_id=1355787203] +layout_mode = 2 +size_flags_horizontal = 3 +text = "Water: 100/100" +fit_content = true +autowrap_mode = 0 +horizontal_alignment = 1 +vertical_alignment = 1 + [node name="FooterContainer" type="PanelContainer" parent="CanvasLayer/UIHandler/MainUI" unique_id=1495029884] layout_mode = 2 @@ -319,14 +365,6 @@ layout_mode = 2 theme_override_constants/separation = 20 alignment = 2 -[node name="Robots" type="Button" parent="CanvasLayer/UIHandler/MainUI/FooterContainer/HBoxContainer" unique_id=360269454] -layout_mode = 2 -text = "Robots (R)" - -[node name="Options" type="Button" parent="CanvasLayer/UIHandler/MainUI/FooterContainer/HBoxContainer" unique_id=293744135] -layout_mode = 2 -text = "Options (ESC)" - [node name="FPS" type="RichTextLabel" parent="CanvasLayer/UIHandler/MainUI/FooterContainer/HBoxContainer" unique_id=2029942501] layout_mode = 2 fit_content = true @@ -337,6 +375,14 @@ layout_mode = 2 fit_content = true autowrap_mode = 0 +[node name="Robots" type="TextureButton" parent="CanvasLayer/UIHandler/MainUI/FooterContainer/HBoxContainer" unique_id=1666653447] +layout_mode = 2 +texture_normal = ExtResource("11_dahhg") + +[node name="Options" type="TextureButton" parent="CanvasLayer/UIHandler/MainUI/FooterContainer/HBoxContainer" unique_id=1930105751] +layout_mode = 2 +texture_normal = ExtResource("12_3so38") + [connection signal="button_up" from="CanvasLayer/UIHandler/MainUI/Content/CodingWindow/VBoxContainer/Scripting/EditorWindow/Buttons/Clear" to="CanvasLayer/UIHandler/MainUI/Content/CodingWindow" method="ClearWindow"] [connection signal="button_up" from="CanvasLayer/UIHandler/MainUI/Content/CodingWindow/VBoxContainer/Scripting/EditorWindow/Buttons/Compile" to="CanvasLayer/UIHandler/MainUI/Content/CodingWindow" method="CompileProgram"] [connection signal="pressed" from="CanvasLayer/UIHandler/MainUI/Content/Menu/VBoxContainer/Button" to="CanvasLayer/UIHandler" method="HandleMenu"] diff --git a/Scripts/DSL/NodeResult.cs b/Scripts/DSL/NodeResult.cs new file mode 100644 index 0000000..59ca8be --- /dev/null +++ b/Scripts/DSL/NodeResult.cs @@ -0,0 +1,6 @@ +public enum NodeResult +{ + SUCCESS, + FAILURE, + RUNNING +} \ No newline at end of file diff --git a/Scripts/DSL/NodeResult.cs.uid b/Scripts/DSL/NodeResult.cs.uid new file mode 100644 index 0000000..3d962f6 --- /dev/null +++ b/Scripts/DSL/NodeResult.cs.uid @@ -0,0 +1 @@ +uid://dpp7ycquabyq8 diff --git a/Scripts/DSL/Nodes/CraftNode.cs b/Scripts/DSL/Nodes/CraftNode.cs index 5270e3a..b5f0b0e 100644 --- a/Scripts/DSL/Nodes/CraftNode.cs +++ b/Scripts/DSL/Nodes/CraftNode.cs @@ -6,7 +6,7 @@ public class CraftNode : ProgramNode { DisplayText = "Craft"; } - public override bool Execute(Robot robot, double delta) + public override NodeResult Execute(Robot robot, double delta) { GD.Print("Craft"); if (nextNode != null) @@ -15,7 +15,7 @@ public class CraftNode : ProgramNode } else { - return true; + return NodeResult.SUCCESS; } } diff --git a/Scripts/DSL/Nodes/HarvestNode.cs b/Scripts/DSL/Nodes/HarvestNode.cs index 69bc21b..0aa7d4d 100644 --- a/Scripts/DSL/Nodes/HarvestNode.cs +++ b/Scripts/DSL/Nodes/HarvestNode.cs @@ -6,7 +6,7 @@ public class HarvestNode : ProgramNode { DisplayText = "Harvest"; } - public override bool Execute(Robot robot, double delta) + public override NodeResult Execute(Robot robot, double delta) { GD.Print("Harvest"); if (nextNode != null) @@ -15,7 +15,7 @@ public class HarvestNode : ProgramNode } else { - return true; + return NodeResult.SUCCESS; } } diff --git a/Scripts/DSL/Nodes/MoveNode.cs b/Scripts/DSL/Nodes/MoveNode.cs index b4c28dc..0df9406 100644 --- a/Scripts/DSL/Nodes/MoveNode.cs +++ b/Scripts/DSL/Nodes/MoveNode.cs @@ -11,10 +11,14 @@ public class MoveNode : ProgramNode { DisplayText = "Move"; } - public override bool Execute(Robot robot, double delta) + public override NodeResult Execute(Robot robot, double delta) { pathPoints ??= [.. Pathfinding.GetPath(Pathfinding.GetClosestStartPoint(robot.Position), targetPosition)]; - + if (pathPoints.Count <= 0) + { + lastExecutionMessage = "No path available"; + return NodeResult.FAILURE; + } startPosition = robot.Position; Vector3 target = pathPoints[0] - startPosition; float distance = target.Length(); @@ -32,11 +36,12 @@ public class MoveNode : ProgramNode pathPoints.Remove(pathPoints[0]); if (pathPoints.Count <= 0) { - pathPoints = null; - return true; + lastExecutionMessage = ""; + return NodeResult.SUCCESS; } - return false; + lastExecutionMessage = ""; + return NodeResult.RUNNING; } Vector3 direction = target / distance; @@ -47,14 +52,12 @@ public class MoveNode : ProgramNode } robot.GlobalPosition += direction * (float)delta * GameData.robotSpeed; - return false; + return NodeResult.RUNNING; } public override void ReadParameters(NodeDisplay display) { HBoxContainer valueContainer = display.GetNode("./EditorDisplay/HBoxContainer/"); - - GD.Print(valueContainer.GetNode("./CoordinateX").Value); int posX = (int)valueContainer.GetNode("./CoordinateX").Value; int posY = (int)valueContainer.GetNode("./CoordinateY").Value; int posZ = (int)valueContainer.GetNode("./CoordinateZ").Value; diff --git a/Scripts/DSL/Nodes/ProgramNode.cs b/Scripts/DSL/Nodes/ProgramNode.cs index 8d6d3a2..7d5a507 100644 --- a/Scripts/DSL/Nodes/ProgramNode.cs +++ b/Scripts/DSL/Nodes/ProgramNode.cs @@ -4,8 +4,9 @@ public abstract class ProgramNode { public ProgramNode nextNode; public string DisplayText; + public string lastExecutionMessage; - public abstract bool Execute(Robot robot, double delta); + public abstract NodeResult Execute(Robot robot, double delta); public abstract void ReadParameters(NodeDisplay display); public abstract ProgramNode Duplicate(); } \ No newline at end of file diff --git a/Scripts/Robot/Robot.cs b/Scripts/Robot/Robot.cs index de2a8bf..f9dac69 100644 --- a/Scripts/Robot/Robot.cs +++ b/Scripts/Robot/Robot.cs @@ -18,13 +18,22 @@ public partial class Robot : Node3D { if (isExecuting) { - if (currentNode.Execute(this, delta)) + switch (currentNode.Execute(this, delta)) { - currentNode = currentNode.nextNode; - if (currentNode == null) - { + case NodeResult.SUCCESS: + currentNode = currentNode.nextNode; + if (currentNode == null) + { + isExecuting = false; + } + break; + case NodeResult.FAILURE: isExecuting = false; - } + GD.Print(currentNode.lastExecutionMessage); + break; + case NodeResult.RUNNING: + //Currently does nothing. + break; } } diff --git a/Scripts/WorldGeneration/Layer.cs b/Scripts/WorldGeneration/Layer.cs index 5c7fddf..2a70bb9 100644 --- a/Scripts/WorldGeneration/Layer.cs +++ b/Scripts/WorldGeneration/Layer.cs @@ -14,6 +14,7 @@ public partial class Layer : Node3D public bool hasContentGenerated = false; public Vector2I gateCoordinate; public List currentResources; + public bool isGateOpen = false; // Called when the node enters the scene tree for the first time. public override void _Ready() @@ -89,7 +90,7 @@ public partial class Layer : Node3D var node = new Node3D { Position = tile.Position, - Visible = false + Visible = tile.collapsedMesh != null && tile.collapsedMesh == "gate" }; decorationRoot.AddChild(node); @@ -115,7 +116,7 @@ public partial class Layer : Node3D for (int z = 0; z < layerSize; z++) { //Exclude spawn from border generation - if(x == 0 && z == 0) continue; + if(x == 0 && z == 0 && level == 0) continue; if (!IsBorder(x, z)) continue; @@ -155,6 +156,7 @@ public partial class Layer : Node3D if (tiles[posX, posY].tileMeshes.ContainsKey("gate")) { tiles[posX, posY].Collapse("gate"); + tiles[posX, posY].containsDecoration = true; gateCoordinate = new Vector2I(posX, posY); Propagate(gateCoordinate); break; diff --git a/Scripts/WorldGeneration/Pathfinding.cs b/Scripts/WorldGeneration/Pathfinding.cs index c139cbc..319282d 100644 --- a/Scripts/WorldGeneration/Pathfinding.cs +++ b/Scripts/WorldGeneration/Pathfinding.cs @@ -8,6 +8,7 @@ public class Pathfinding private static Dictionary coordToId = new(); private static Dictionary idToCoord = new(); private static long nextId = 1; + private static long[] layerGateIds = new long[GameData.ruinSize]; private static long GetOrCreateId(Vector3I coord) { @@ -26,6 +27,7 @@ public class Pathfinding aStar.Clear(); coordToId.Clear(); idToCoord.Clear(); + layerGateIds = new long[GameData.ruinSize]; nextId = 1; for (int y = 0; y < GameData.ruinSize; y++) @@ -43,6 +45,10 @@ public class Pathfinding long id = GetOrCreateId(coord); aStar.AddPoint(id, tile.Position); + if (tile.collapsedMesh == "gate") + { + layerGateIds[y] = id; + } } } } @@ -74,6 +80,16 @@ public class Pathfinding } } } + + for (int y = 0; y < GameData.ruinSize; y++) + { + UpdateGatePoint(y, false); + } + } + + public static void UpdateGatePoint(int layer, bool isOpen) + { + aStar.SetPointDisabled(layerGateIds[layer], !isOpen); } public static List GetPath(Vector3I start, Vector3I end) diff --git a/Scripts/WorldGeneration/Tile.cs b/Scripts/WorldGeneration/Tile.cs index e928db2..139f13d 100644 --- a/Scripts/WorldGeneration/Tile.cs +++ b/Scripts/WorldGeneration/Tile.cs @@ -132,7 +132,10 @@ public partial class Tile Position = placeholder.transform.Origin }; ContentNode.AddChild(decoration); - decoration.LookAt(transform.Origin, Vector3.Up); + if (!key.ToLower().Contains("gate")) + { + decoration.LookAt(transform.Origin, Vector3.Up); + } } } } diff --git a/Scripts/WorldGeneration/WFC.cs b/Scripts/WorldGeneration/WFC.cs index c19306e..de9c710 100644 --- a/Scripts/WorldGeneration/WFC.cs +++ b/Scripts/WorldGeneration/WFC.cs @@ -181,7 +181,7 @@ public class WFC } else { - return fromTile.collapsedMesh == "gate"; + return fromTile.collapsedMesh == "gate" && GameData.map[from.Y].isGateOpen; } }