From c29372ca51f530b67497ad1beb8c880235fc3e91 Mon Sep 17 00:00:00 2001 From: Nicola Date: Sun, 21 Jun 2026 14:44:05 +0200 Subject: [PATCH] Removed OmniLights from Walls, added spotlights to robots. Added vase 3D model --- Assets/Objects/Decorations.glb | Bin 129008 -> 130120 bytes Prefabs/Robot/Robot.tscn | 7 +++++++ Scripts/Core/SaveGameDataApplier.cs | 1 - Scripts/Core/SaveGameDataFactory.cs | 1 - Scripts/UI/Robots/RobotList.cs | 3 ++- Scripts/World/LightHandler.cs | 6 +++--- Scripts/World/Tile.cs | 30 ++-------------------------- Scripts/World/World.cs | 20 ++----------------- 8 files changed, 16 insertions(+), 52 deletions(-) diff --git a/Assets/Objects/Decorations.glb b/Assets/Objects/Decorations.glb index 01c066877f6fd6d55a07e2298cdf7cba12d9787d..0d3090417854c18cd5e8ad1fc2cc958a0938d799 100644 GIT binary patch delta 3645 zcmds3TWl0%6h5=t?Ty{-?smH^ZDB8z3f*Zt_e;S}DR<=#77z;-C`dwEVo8J;mf6jNl z|IGZeO@IBR==|-Xz|P(47I^?*$sGoYj|Sd2`dbUbBg<^ZG*fEM@9XXF+ufZyz&@Yq z>F$3f)grQ~-maeRR74K&!EZ4*dx-6=)Ao7YV zN-~uwd7rS8P3?WQtG9o5*WO)yy=2xXG-&uaH%=*jlW8&MVoW>VR$L z7EFob8GjNNQoP|mi6N@r@E77=fl_Rw`U-!-Sx>_wRMUeq@e<_@2H(PCfdn2d3);Hx z0!iXYtPaNUeAx`_3?|VZdK2p@_jM?VJ1IuPNjycdBV32q%i=V4DZUBU_%fqF2x~9F8^MapJP7*!;_A$V2ppiZli*LLQBLD&}}KTbag} zE6Tj|)!54ORMstJE2CqwvJscW$_o_9slF78dU;L9p;)U|;B~wjYxO7`CMsB5URhqC zit?z-k;-s^q$x59(|EBm?3HvGe~PiVs;b;4bM#@_o2{yf7Krqb+Ka)es8txHkC$u?3FG!10A<&bRMG?^q5}y5#p6tb4=3M)YkobyI1bm(cir{ z)k1l7^vzW9!hJ=7=SCeX>4!3|Q4j=s#B>FJUrFS7yfL*YBuavIpz}bY?q>$tm#zQ| z)x}?!QTP6gI_APRCcr?}xs5#Bs=J!W@NACXMBH=@EkQo+)~)z3?$##}%`u~Fj_HHA zW#;A|$|HT}vOCVz&8zM^XXNE(j;NFx-G)5eur_csljhDqw%+At&ZN18?3sDc?mod} zxjVF_&%+HzV_Hw_F7k4B>YRb>-tqar&(>zYkf*l$KBzSw&dqy8x2e%>$ioe514lDy z?hIt>ZEl{ey}QWa>a~GvixO{Nd~Lw^H+&ZLx%xcZu>4I&WG^Peoq=q99-e*s>g=%x zn1JuHMed}Q=mFfw$v>341LbUH>#h9Yh!pyK!`gH2oiYu&vlc&glUd*oI1Gq56cIylXrzIibb9g@Wop>-R?v7<6YXZhJe)>_kb! zR=VTmSh$6#=_cv_O!$4-p^wDD=M1{D7PoS)wZ*N=-O}QYKKmc^hU2eW8`#rWhSoK~ zKyJgB9up(c(D;e%w=#aL@k!fi?9g&7atkb)Bej`JH<_Bu!JAB7rh14;1QYZp-@2?g zU}QqKm9IBz7upSy<2E?J6uo*<~gAb+?PKOi}Km=wJ&W33)6{bLvFbOlE z5p-ArjV8fdsD)Xe5o*9f9VCDw2m+EwB|f!Ft$ExE*%FT38922{%I*`~#gtXvY8m delta 3382 zcma)7X>3$g6h5=lW!jm}OgE;TMM3Qh)3+}z?>!a)NnIl@5f^F%BtTI*#wC`SxcrhB z+k+4jVn{@ciBSnrOiUM-s4PaKKTJs65;a6gRALmwi08hUS00q9yyTtlyZ4@Z&i9=+ zO+Psm`t8?Hc>ShT%e?^b+g~1tjE48-uHCTy{$e(tEp8ng8s0Qm+^}UR+qar8D4hKW zq9*a0tmVZ#H~L*-bbp^m7(H>{ZDKw1YAPzpLP$-KlVlB#JM zujToIEOAsz*F;?xWswu}dO@az%yE*S3X;O(anAz(%B@?5u*=)ac63#hMO9NdiBtJJ zR}fTAk$FMmG*#DCNmOZ1<2Zqncv;m1UC<;I@9_`djXwW@4sX$m1A(MR#EDQ3js=$B znt*`5pn{(S`f*iI8w(}z29x+eNb?9bJ5G$p%p9wv3i<5j!AEE| zT!EJbf#VcK=VVUc6@`i5^vWY~NUG7c`{tqq-EX znez&c)-&|uw~-`%R^_Q^62lECTpi8gb%a0Gy@s*I6uwF4s~XdUVLVgcf;)-l8!~vT zF@u{M_Tfw63_jG@jCVK3@W*hPcoye3rSR>>dAOk|jb|EP#op#Len@!_5(b(wcz|$u zQx^Xue6Bf&&o=GBcO#5Ps7?!>v3VBzqiOu2c^+k?^KOPeN9eeD>Z)i)(LKw{CcCG26$hf@Yu42Rr{n5IG6I zZ|}iKEb0?vfohpv8sSZe96l3^_(V>}(RdDzv`74+plNn)AWjFOV)rHP7wMPH%43Ng zNHX2%r%gLMhkwUge4@-$a3X%!o*Qe6dj%OY9r>}gSU^?i&%u`ebQ`DrnKz@WM;s;-MFfjtY3^{qx;6U-@Mqk6kZi-xI|x^m&iR!swy>H zs%P-3P@{Oqw9r|3RjA<-J%g9rN%~5Df{pG@8eJ`(tbW%UN%W=g+*7wru*p3~le-8n z%{X|cJUqd^%_HRUQg~H_;Sw|}uNpHdCQG*C>f#))Ha1)$X6039hRfxwoc>i;o?VAd zcot)K@|r9_*NTTHw?6TdSve_BGQ9KUL5tx%U;b`ld2X^q2@{lPN&klI#BJ}6*a?65 zEoW9R;7h(mSI*dDa-8J2JSq|$-cRCz(b|ZIDN1a(io#j%;Dw*yM z?n0~^J7;wmXZP4Un>v;UP%haQ9BXu8f^9n^a>l~;D0z}aYHTB$ud~PY+2hn<+%=-< znqo58ZrjyQZHa$~n%$~Ac#GSMAgvb8i&Pb;_vvg-Hj8{Jn8)?mEHAXsJ z(|s3UibR#^o!T{U%5%l8!#h2N((8wM?Og}Gl(lERWjJ{3hp)^X;i7dRPQCD+nHKGD zW0u7yO=n#eKcIR58&4iF4+kH!YT?fCDjH3>WLAlJ_H4?UqQ(wBAC6nB@r9TcQ&y$% z8jCe{){EA4+p|6r?6g?pTF8uSJUL(++IX_$kOAurdlE2>Y+gIU5*4i=bE2GHW;?nV z?#;b##vfkDM408H|Cr9&!HQ9^9Arj!l&FDC2$@r+>_RO3+-+3~lVd9EtQ|Z|j+vlZ z7=$|TL6Ba61<(j_ig8dth8UFE3EDvb9@-#EF$y_of-aaxaUQfn0xpNEC|(7f&;eIM zhGGU=SHOI@8cd2Nq@f>rL8GX_Qdj~iNE9Vl0n0&zJjFa% z1{5F!9*Q0aLj+P_P&A+iybyqHirvr*_0R`Nib?PT2MeKrVgt+p!BO diff --git a/Prefabs/Robot/Robot.tscn b/Prefabs/Robot/Robot.tscn index f678455..cc20906 100644 --- a/Prefabs/Robot/Robot.tscn +++ b/Prefabs/Robot/Robot.tscn @@ -15,3 +15,10 @@ script = ExtResource("2_j80uv") [node name="CollisionShape3D" type="CollisionShape3D" parent="." unique_id=1405728816] transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, -0.05883789, 0.29821777, -0.01171875) shape = SubResource("BoxShape3D_vquur") + +[node name="SpotLight3D" type="SpotLight3D" parent="." unique_id=1638370223] +transform = Transform3D(1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0.37939095, -0.31055498) +light_energy = 16.0 +spot_range = 4.0 +spot_attenuation = 0.0 +spot_angle = 75.0 diff --git a/Scripts/Core/SaveGameDataApplier.cs b/Scripts/Core/SaveGameDataApplier.cs index 97ffa09..ebb4bd0 100644 --- a/Scripts/Core/SaveGameDataApplier.cs +++ b/Scripts/Core/SaveGameDataApplier.cs @@ -137,7 +137,6 @@ public static class SaveGameDataApplier Tile tile = layer.tiles[savedTile.X, savedTile.Y]; tile.collapsedMesh = savedTile.CollapsedMesh; - tile.containsLight = savedTile.ContainsLight; tile.containsDecoration = savedTile.ContainsDecoration; tile.containsResource = savedTile.ContainsResource; tile.wasVisited = savedTile.WasVisited; diff --git a/Scripts/Core/SaveGameDataFactory.cs b/Scripts/Core/SaveGameDataFactory.cs index 5948659..137c6db 100644 --- a/Scripts/Core/SaveGameDataFactory.cs +++ b/Scripts/Core/SaveGameDataFactory.cs @@ -135,7 +135,6 @@ public static class SaveGameDataFactory X = tile.GridPosition.X, Y = tile.GridPosition.Y, CollapsedMesh = tile.collapsedMesh, - ContainsLight = tile.containsLight, ContainsDecoration = tile.containsDecoration, ContainsResource = tile.containsResource, WasVisited = tile.wasVisited, diff --git a/Scripts/UI/Robots/RobotList.cs b/Scripts/UI/Robots/RobotList.cs index e087110..038f7cd 100644 --- a/Scripts/UI/Robots/RobotList.cs +++ b/Scripts/UI/Robots/RobotList.cs @@ -101,10 +101,11 @@ public partial class RobotList : PanelContainer robot.Position = GameData.map[0].tiles[0, 0].Position; robot.robotType = spawnId; GetNode("/root/Main/World").AddChild(robot); + LightHandler.lights.Add(robot.GetNode("./SpotLight3D") as SpotLight3D); robot.Name = $"Robot #{GameData.robots.Count}"; GameData.robots.Add(robot); spawnId = ""; - + LightHandler.RedrawLights(GameData.lightColor); ReloadRobots(); ReloadSelectableRobots(); } diff --git a/Scripts/World/LightHandler.cs b/Scripts/World/LightHandler.cs index b75983a..7b3f3ad 100644 --- a/Scripts/World/LightHandler.cs +++ b/Scripts/World/LightHandler.cs @@ -3,13 +3,13 @@ using System.Collections.Generic; public static class LightHandler { - public static List lights = new List(); + public static List lights = new List(); public static void RedrawLights(Color color) { - List availableLights = new List(); + List availableLights = new List(); - foreach (OmniLight3D light in lights) + foreach (SpotLight3D light in lights) { if (!GodotObject.IsInstanceValid(light)) continue; diff --git a/Scripts/World/Tile.cs b/Scripts/World/Tile.cs index 89d6546..9d4b510 100644 --- a/Scripts/World/Tile.cs +++ b/Scripts/World/Tile.cs @@ -11,7 +11,7 @@ public partial class Tile public Vector2I GridPosition; public Node3D ContentNode; - public bool containsLight, containsDecoration, containsResource; + public bool containsDecoration, containsResource; public GameResource resource; public bool wasVisited; public event EventHandler OnTileVisited; @@ -74,7 +74,6 @@ public partial class Tile public void Reset(Dictionary tileMeshes) { collapsedMesh = null; - containsLight = false; containsDecoration = false; containsResource = false; resource = null; @@ -86,36 +85,11 @@ public partial class Tile { foreach (Placeholder placeholder in placeholders) { - if (containsLight && placeholder.name == "light") SpawnLight(contentMeshes["light"], placeholder, transform); - else if (containsResource && placeholder.name == "resource") SpawnResource(contentMeshes["resource"], placeholder, transform); + if (containsResource && placeholder.name == "resource") SpawnResource(contentMeshes["resource"], placeholder, transform); else if (containsDecoration && placeholder.name != "light" && placeholder.name != "resource") SpawnDecorations(contentMeshes, placeholder, transform); } } - private void SpawnLight(MeshInstance3D lightMesh, Placeholder placeholder, Transform3D transform) - { - MeshInstance3D light = new MeshInstance3D - { - Mesh = lightMesh.Mesh, - Position = placeholder.transform.Origin - }; - OmniLight3D lightSource = new OmniLight3D() - { - OmniAttenuation = 2f, - LightColor = GameData.lightColor, - ShadowEnabled = true, - LightEnergy = 100f, - LightIndirectEnergy = 1.5f, - OmniRange = 20f, - Position = placeholder.transform.Origin - }; - lightSource.Position.MoveToward(transform.Origin, 0.1f); - LightHandler.lights.Add(lightSource); - light.AddChild(lightSource); - ContentNode.AddChild(light); - light.LookAt(transform.Origin, Vector3.Up); - } - private void SpawnResource(MeshInstance3D resourceMesh, Placeholder placeholder, Transform3D transform) { MeshInstance3D resource = new MeshInstance3D diff --git a/Scripts/World/World.cs b/Scripts/World/World.cs index 5b0335b..66753de 100644 --- a/Scripts/World/World.cs +++ b/Scripts/World/World.cs @@ -142,6 +142,8 @@ public partial class World : Node3D robot.Position = map[0].tiles[0, 0].Position; AddChild(robot); robots.Add(robot); + LightHandler.lights.Add(robot.GetNode("./SpotLight3D") as SpotLight3D); + LightHandler.RedrawLights(lightColor); } private void SpawnSavedRobots(List savedRobots) @@ -193,7 +195,6 @@ public partial class World : Node3D { map[0].tiles[0, 0].wasVisited = true; map[0].tiles[0, 0].containsDecoration = true; - map[0].tiles[0, 0].containsLight = true; map[0].tiles[0, 0].containsResource = false; map[0].tiles[0, 0].ContentNode.Visible = true; } @@ -234,22 +235,10 @@ public partial class World : Node3D private void DistributeTileContent(Layer layer) { int currentDecoration = 0; - int currentLight = 0; int currentResource = 0; int posX, posY; - while (currentLight < layerSize * 3) - { - posX = rand.Next(layerSize); - posY = rand.Next(layerSize); - if (CannotContainLight(layer.tiles[posX, posY])) continue; - if (layer.tiles[posX, posY].containsLight) continue; - - layer.tiles[posX, posY].containsLight = true; - currentLight++; - } - while (currentDecoration < layerSize) { posX = rand.Next(layerSize); @@ -273,11 +262,6 @@ public partial class World : Node3D } } - private bool CannotContainLight(Tile tile) - { - return tile.collapsedMesh == "junction" || tile.collapsedMesh == "gate"; - } - private void HandleRenderData(List renderData) { multiMeshHandler.Build(renderData);