diff --git a/Assets/Objects/Decorations.glb b/Assets/Objects/Decorations.glb index 01c0668..0d30904 100644 Binary files a/Assets/Objects/Decorations.glb and b/Assets/Objects/Decorations.glb differ 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);