From 95455597dab517e2231240724caeced1e5320062 Mon Sep 17 00:00:00 2001 From: = <=> Date: Wed, 29 Apr 2026 19:19:13 +0200 Subject: [PATCH] Added basic symbols for most of the resources and changed map to be revealed whilst robots are exploring. --- Assets/CopperSymbol.aseprite | Bin 0 -> 444 bytes Assets/CopperSymbol.png | Bin 0 -> 257 bytes Assets/CopperSymbol.png.import | 40 ++++++++++ Assets/IronSymbol.aseprite | Bin 0 -> 445 bytes Assets/IronSymbol.png | Bin 0 -> 259 bytes Assets/IronSymbol.png.import | 40 ++++++++++ Assets/MushroomSymbol.aseprite | Bin 0 -> 496 bytes Assets/MushroomSymbol.png | Bin 0 -> 345 bytes Assets/MushroomSymbol.png.import | 40 ++++++++++ Assets/SpiderwebSymbol.aseprite | Bin 0 -> 534 bytes Assets/SpiderwebSymbol.png | Bin 0 -> 364 bytes Assets/SpiderwebSymbol.png.import | 40 ++++++++++ Assets/TinSymbol.aseprite | Bin 0 -> 444 bytes Assets/TinSymbol.png | Bin 0 -> 258 bytes Assets/TinSymbol.png.import | 40 ++++++++++ Scenes/Game.tscn | 26 ++++++- Scripts/Camera3d.cs | 22 +++++- Scripts/DSL/Nodes/MoveNode.cs | 2 + Scripts/Helpers/ResourceLoader.cs | 13 ++++ Scripts/Helpers/UIHandler.cs | 10 +++ Scripts/WorldGeneration/Map.cs | 70 ++++++++++++++++++ Scripts/WorldGeneration/Map.cs.uid | 1 + .../WorldGeneration/ResourceDistributor.cs | 14 +--- Scripts/WorldGeneration/Tile.cs | 1 + project.godot | 15 ++-- 25 files changed, 350 insertions(+), 24 deletions(-) create mode 100644 Assets/CopperSymbol.aseprite create mode 100644 Assets/CopperSymbol.png create mode 100644 Assets/CopperSymbol.png.import create mode 100644 Assets/IronSymbol.aseprite create mode 100644 Assets/IronSymbol.png create mode 100644 Assets/IronSymbol.png.import create mode 100644 Assets/MushroomSymbol.aseprite create mode 100644 Assets/MushroomSymbol.png create mode 100644 Assets/MushroomSymbol.png.import create mode 100644 Assets/SpiderwebSymbol.aseprite create mode 100644 Assets/SpiderwebSymbol.png create mode 100644 Assets/SpiderwebSymbol.png.import create mode 100644 Assets/TinSymbol.aseprite create mode 100644 Assets/TinSymbol.png create mode 100644 Assets/TinSymbol.png.import create mode 100644 Scripts/WorldGeneration/Map.cs create mode 100644 Scripts/WorldGeneration/Map.cs.uid diff --git a/Assets/CopperSymbol.aseprite b/Assets/CopperSymbol.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..a23b9e0babfb6d1d8a09c3ac91148884997f27fa GIT binary patch literal 444 zcmdnP$iVPmDIyADL{+>3Ji=OK?VUJqy?}6n*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!!{pijPS|@QSNA9}%;PYv9xx;4MIa$|g&t7lavz)ae?|XsM+zr}SBCVeJZEt_~ zyI5B4^Sd_py*D3f{#U9f5#RAW>*=~@bIWb7O|{(={Lg&j=C>2(YVyx4Tc7dAcC+}M KWV1ref)D_Quywis literal 0 HcmV?d00001 diff --git a/Assets/CopperSymbol.png b/Assets/CopperSymbol.png new file mode 100644 index 0000000000000000000000000000000000000000..12144980d67f06d32cf455c60b52b5a54d24566a GIT binary patch literal 257 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}yFFbTLn2z= zPIVM&P~dRg`cf%(PrUlex?G#C+$fEe9Scl_>z}_k@tiTM$LnkPO~!IIuQjC&jE~Ew zui5@sXWmqkfKxK>)Kyfx1rnYGn0KlyV`0?!e5vwx!R2g*(=u9W8#yErRxV}Hc(mj6 zN|RYt3%*{uwd1SA0<-Yxt5{Z8Eall?w0xSPcf(A}%q{Lci3yADL{+>3Ji=OK?VUJqy?}An*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!!{pijPdMS)_h)neg)5Moee7^znjKOf0`%uVCUV#oTZ1>1*E^6VSQI_ z*ZcFO6=!x!%Y992U;d~2!Nu4I_f}8cJ*)iQ*NE_MC;WciKXPuHbJ;SRlv{fjef)kV MuAu*>*y`fn0AWXatpET3 literal 0 HcmV?d00001 diff --git a/Assets/IronSymbol.png b/Assets/IronSymbol.png new file mode 100644 index 0000000000000000000000000000000000000000..084050ad9d3269ef7a2cd39fe2a84efcc0dbc68d GIT binary patch literal 259 zcmeAS@N?(olHy`uVBq!ia0vp^3LwnE1|*BCs=fdz#^NA%Cx&(BWL^R}dp%toLn2z= zPCd)ppup35(4z78jy~s&e7`p^#o0JKUEUhz`)0QwNA2HRO@>-m@29f9>zNXq5>KNv%lb`)({WN43MCcty91*yLsh{m-{5tBZ}Z7EHGc@k&ZGFi`d3+|_Ye zZ}}yMuMFQVUE9$svB2#5gjp;rEOzqvr26SPPdt$FY{|uG5{Eq&p2$+DFgI=-^++>slBj8e;;&!nOV~DPR%rCSind}jny#Ou)foO2=n)1_S3j3^ HP6yADL{+>3Ji=OK?VUJqy;Ddn*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!!{pijL4{JbL zQcQXQ_xD29o_P-r=dZrh!RcEyAwXWhiz8OavC1tfS?AKlwQGzI{9PR`v2${LxrzPf zB{EkI*Cmx+|FKWkRVw>xsqy5>X;IDXrM~O0DhGJW?x~OXen9xU>z*Z*Hk4Px$6G=otR9J=WR?!iIAPfyXCvcSb?G!qLLv;o^MZaN`u0TI(dJvPsDW2`s_aky7 zdAx)Gz=?l{spKcD^;?5Lu!zaT=zX#OOYPu;b6^o+p6AL`CvYf&MGO`(5TyT{3WqDO zr3e@KmoOKk8s}>j(DKID2LOP_{hCa+{Zt&Qk%DW|j@}36$b2fY*pFZfAfzCBZVT5W z!KpV$wy^^0&IjjSPP-1^!*14q6e!viL)M0f-@5KS=4iBbN`~=QQ9=dT@i8Z`3r6pg z(=nfnMcPCH8e3)FwEZMq$3g_17*c>30TdV*L4phdKu8NP4QTqWk1SwYS%4OZ0WrG**h(bp zvVd$B2B4?{kfEet;;LbjW@*?TW_`a@#`U3+F$R%BREnN!yqBcq$)$=9oQ^-uTe z$~TY)*`&Y>Bw^q`kipL2lUSKrq+s|Q$YE7r06K+{;Xg3wAV7{mj-g`C(MbpSSQI&& zfBv6eroXwfdrDYAjF6u34foY)Po@0tulcyP`_04G0@Wav`#!!sp@{^ zjQZ^PH?ACinIsqY>{KLo)R#G*(l*y0X;L=ZCo D1vsW( literal 0 HcmV?d00001 diff --git a/Assets/SpiderwebSymbol.png b/Assets/SpiderwebSymbol.png new file mode 100644 index 0000000000000000000000000000000000000000..c608b72cd37ce12710f5cf9ae0c3886ddaf2ab0c GIT binary patch literal 364 zcmV-y0h9iTP)Px$CP_p=R9J=8SJ@82Fbt~^|NqP50am&aJ4eT535h`yd%4=S_UG6hpE9sQzHN7I z0A*iQ0iC=%DvDqRR#^A7FXWSm6qog*NiaHR0wg<$&^78nkpd`*N(t~t=kP}bg#|eI zZIK$WaEX!*PN9ld)Q@R13t;UvieRs|sgy9#2n?zb5m7C|QGm*wC4xSaf;7iAj_cgf z>K52!>rPB_p_jkxBvc|wt#bx;5wZ`%FvtlW%#YBS1W%=2o>zK0vW$-*jo!H4z$0000< KMNUMnLSTX}i<<`k literal 0 HcmV?d00001 diff --git a/Assets/SpiderwebSymbol.png.import b/Assets/SpiderwebSymbol.png.import new file mode 100644 index 0000000..e757106 --- /dev/null +++ b/Assets/SpiderwebSymbol.png.import @@ -0,0 +1,40 @@ +[remap] + +importer="texture" +type="CompressedTexture2D" +uid="uid://cdpbu73lo0pvp" +path="res://.godot/imported/SpiderwebSymbol.png-8572f6b9f7ee6361afbd8999d8ff052d.ctex" +metadata={ +"vram_texture": false +} + +[deps] + +source_file="res://Assets/SpiderwebSymbol.png" +dest_files=["res://.godot/imported/SpiderwebSymbol.png-8572f6b9f7ee6361afbd8999d8ff052d.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/TinSymbol.aseprite b/Assets/TinSymbol.aseprite new file mode 100644 index 0000000000000000000000000000000000000000..df743307221a0ac64dcd9bcddbaa73e095e93785 GIT binary patch literal 444 zcmdnP$iVPmDIyADL{+>3Ji=OK?VUJqy?}6n*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!!{pijIee>?0Rf@sg+?M{@{iea1S@oLLfd#FnhIkC{xIsAhw8^!KWvv9yl|{#DT_Jjy$egOr`yY~ zsF?g`Nz$oWy8z>PkF;(sWQ*$9_fK+VV+xnr(ZE`7@qG$ LoadResourceSymbols() + { + Dictionary symbols = new() + { + { "Iron ore", GD.Load($"res://Assets/IronSymbol.png") }, + { "Tin ore", GD.Load($"res://Assets/TinSymbol.png") }, + { "Copper ore", GD.Load($"res://Assets/CopperSymbol.png") }, + { "Mushroom", GD.Load($"res://Assets/MushroomSymbol.png") }, + { "Spiderweb", GD.Load($"res://Assets/SpiderwebSymbol.png") }, + }; + return symbols; + } } diff --git a/Scripts/Helpers/UIHandler.cs b/Scripts/Helpers/UIHandler.cs index 7f53930..33ae60e 100644 --- a/Scripts/Helpers/UIHandler.cs +++ b/Scripts/Helpers/UIHandler.cs @@ -8,6 +8,7 @@ public partial class UIHandler : Control [Export] RobotList robotList; [Export] Information information; [Export] Camera3D mainCam; + [Export] Map map; public override void _Ready() { GetNode("./MainUI/HeaderContainer/Header/LightColor").Color = GameData.lightColor; @@ -21,6 +22,15 @@ public partial class UIHandler : Control mainCam.Position = new Vector3(robot.Position.X, mainCam.Position.Y, robot.Position.Z + 3f); ShowCodingWindow(robot); }; + + if (Input.IsActionJustPressed("map")) + { + map.Visible = !map.Visible; + if (map.Visible) + { + map.ShowMap(); + } + } } public void ChangeColor(Color color) diff --git a/Scripts/WorldGeneration/Map.cs b/Scripts/WorldGeneration/Map.cs new file mode 100644 index 0000000..7c55b74 --- /dev/null +++ b/Scripts/WorldGeneration/Map.cs @@ -0,0 +1,70 @@ +using Godot; +using System; + +public partial class Map : PanelContainer +{ + [Export] GridContainer grid; + // Called when the node enters the scene tree for the first time. + public override void _Ready() + { + } + + // Called every frame. 'delta' is the elapsed time since the previous frame. + public override void _Process(double delta) + { + //TODO: This has to be temporary! Drawing each frame is way too expensive. + if (Visible) + { + ShowMap(); + } + } + + public void ShowMap() + { + grid.Columns = GameData.layerSize; + grid.AddThemeConstantOverride("h_separation", (int)(GameData.tileWidth * 2.5f)); + grid.AddThemeConstantOverride("v_separation", (int)(GameData.tileWidth * 2.5f)); + foreach (Node node in grid.GetChildren()) + { + grid.RemoveChild(node); + node.QueueFree(); + } + TextureRect texture; + Tile[,] tiles = GameData.map[GameData.currentLayer].tiles; + for (int z = 0; z < GameData.layerSize; z++) + { + for (int x = 0; x < GameData.layerSize; x++) + { + texture = new TextureRect(); + if (tiles[x, z].wasVisited) + { + if (tiles[x, z].containsResource) + { + texture.Texture = ResourceDistributor.resources[tiles[x, z].resource.name]; + } + else + { + texture.Texture = GenerateTexture(32, new Color(0,0,0,0)); + } + } + else + { + texture.Texture = GenerateTexture(32, new Color(0,0,0,1)); + } + + grid.AddChild(texture); + + } + } + } + + public Texture2D GenerateTexture(int size, Color fillColor) + { + + Image image = Image.CreateEmpty(size, size, false, Image.Format.Rgba8); + + image.Fill(fillColor); + + return ImageTexture.CreateFromImage(image); + } +} diff --git a/Scripts/WorldGeneration/Map.cs.uid b/Scripts/WorldGeneration/Map.cs.uid new file mode 100644 index 0000000..e47ebf4 --- /dev/null +++ b/Scripts/WorldGeneration/Map.cs.uid @@ -0,0 +1 @@ +uid://fegfbcnlk8p5 diff --git a/Scripts/WorldGeneration/ResourceDistributor.cs b/Scripts/WorldGeneration/ResourceDistributor.cs index 5000c26..a90d7ef 100644 --- a/Scripts/WorldGeneration/ResourceDistributor.cs +++ b/Scripts/WorldGeneration/ResourceDistributor.cs @@ -4,22 +4,14 @@ using Godot; public class ResourceDistributor { - public static List resourceNames = new() - { - "Iron ore", - "Stone", - "Copper ore", - "Spiderweb", - "Mushroom", - "Tin ore" - }; + public static Dictionary resources = ResourceLoader.LoadResourceSymbols(); public static string GetResource(List current) { - List diff = resourceNames.Except(current).ToList(); + List diff = resources.Keys.Except(current).ToList(); if (diff.Count <= 0) { - return resourceNames[GameData.rand.Next(resourceNames.Count)]; + return resources.Keys.ToList()[GameData.rand.Next(resources.Keys.Count)]; } else { diff --git a/Scripts/WorldGeneration/Tile.cs b/Scripts/WorldGeneration/Tile.cs index e898cf8..e928db2 100644 --- a/Scripts/WorldGeneration/Tile.cs +++ b/Scripts/WorldGeneration/Tile.cs @@ -13,6 +13,7 @@ public partial class Tile public bool containsLight, containsDecoration, containsResource; public GameResource resource; + public bool wasVisited; public void SetMeshes(Dictionary tileMeshes) diff --git a/project.godot b/project.godot index 8a248fc..5b3483a 100644 --- a/project.godot +++ b/project.godot @@ -77,21 +77,16 @@ spawn_robot={ "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":32,"key_label":0,"unicode":32,"location":0,"echo":false,"script":null) ] } -codingwindow={ -"deadzone": 0.2, -"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":67,"key_label":0,"unicode":99,"location":0,"echo":false,"script":null) -] -} -left_click={ -"deadzone": 0.2, -"events": [Object(InputEventMouseButton,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"button_mask":1,"position":Vector2(394, 15),"global_position":Vector2(403, 63),"factor":1.0,"button_index":1,"canceled":false,"pressed":true,"double_click":false,"script":null) -] -} robot_list={ "deadzone": 0.2, "events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":82,"key_label":0,"unicode":114,"location":0,"echo":false,"script":null) ] } +map={ +"deadzone": 0.2, +"events": [Object(InputEventKey,"resource_local_to_scene":false,"resource_name":"","device":-1,"window_id":0,"alt_pressed":false,"shift_pressed":false,"ctrl_pressed":false,"meta_pressed":false,"pressed":false,"keycode":0,"physical_keycode":77,"key_label":0,"unicode":109,"location":0,"echo":false,"script":null) +] +} [layer_names]