✨ Toggle build
🐛 Fix world gen tiles didn't align with placed ones
This commit is contained in:
@@ -376,14 +376,16 @@ public partial class NaturalResourceGenerator : Node2D
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
var instance = scene.Instantiate() as Node2D;
|
if (scene.Instantiate() is not Node2D instance)
|
||||||
if (instance == null)
|
|
||||||
{
|
{
|
||||||
GD.PrintErr($"{LogPrefix} Failed to instantiate scene for: {tileType}");
|
GD.PrintErr($"{LogPrefix} Failed to instantiate scene for: {tileType}");
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
instance.GlobalPosition = GridUtils.GridToWorld(cell);
|
// Use the same positioning logic as PlacementManager
|
||||||
|
var rotatedSize = building.GetRotatedSize(0f); // 0f for no rotation
|
||||||
|
var offset = GridUtils.GetCenterOffset(rotatedSize, 0f); // 0f for no rotation
|
||||||
|
instance.GlobalPosition = GridUtils.GridToWorld(cell) + offset;
|
||||||
instance.ZIndex = (int)building.Layer;
|
instance.ZIndex = (int)building.Layer;
|
||||||
AddChild(instance);
|
AddChild(instance);
|
||||||
Grid.OccupyArea(cell, instance, building.Size, 0f, building.Layer);
|
Grid.OccupyArea(cell, instance, building.Size, 0f, building.Layer);
|
||||||
|
@@ -11,11 +11,15 @@ public partial class PlacementManager : Node2D
|
|||||||
[Export] public GridManager Grid { get; set; }
|
[Export] public GridManager Grid { get; set; }
|
||||||
[Export] public ResourceManager Inventory { get; set; }
|
[Export] public ResourceManager Inventory { get; set; }
|
||||||
[Export] public BuildingRegistry Registry { get; set; }
|
[Export] public BuildingRegistry Registry { get; set; }
|
||||||
|
|
||||||
[Export] public int MaxConcurrentBuilds { get; set; } = 6; // Make it adjustable in editor
|
[Export] public int MaxConcurrentBuilds { get; set; } = 6; // Make it adjustable in editor
|
||||||
|
[Export] public bool Enabled { get; set; } = true;
|
||||||
|
[Export] public StringName ToggleBuildAction { get; set; } = "toggle_build";
|
||||||
|
|
||||||
private static readonly List<string> BuildableTiles = ["wall", "miner"];
|
private static readonly List<string> BuildableTiles = ["wall", "miner"];
|
||||||
private readonly Dictionary<Node2D, BuildTask> _buildTasks = new();
|
private readonly Dictionary<Node2D, BuildTask> _buildTasks = new();
|
||||||
private AudioStreamPlayer _completionSound;
|
private AudioStreamPlayer _completionSound;
|
||||||
|
private Node2D _currentGhost; // Keep track of the current ghost building
|
||||||
|
|
||||||
public override void _Ready()
|
public override void _Ready()
|
||||||
{
|
{
|
||||||
@@ -153,6 +157,8 @@ public partial class PlacementManager : Node2D
|
|||||||
|
|
||||||
public override void _Process(double delta)
|
public override void _Process(double delta)
|
||||||
{
|
{
|
||||||
|
if (!Enabled) return;
|
||||||
|
|
||||||
// Snap mouse to grid
|
// Snap mouse to grid
|
||||||
var mousePos = GetGlobalMousePosition();
|
var mousePos = GetGlobalMousePosition();
|
||||||
var newHoveredCell = GridUtils.WorldToGrid(mousePos);
|
var newHoveredCell = GridUtils.WorldToGrid(mousePos);
|
||||||
@@ -267,6 +273,21 @@ public partial class PlacementManager : Node2D
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void _Input(InputEvent @event)
|
||||||
|
{
|
||||||
|
if (@event.IsActionPressed(ToggleBuildAction))
|
||||||
|
{
|
||||||
|
Enabled = !Enabled;
|
||||||
|
|
||||||
|
// Hide ghost building when disabling
|
||||||
|
if (!Enabled && _ghostBuilding != null && _ghostBuilding.IsInsideTree())
|
||||||
|
{
|
||||||
|
_ghostBuilding.QueueFree();
|
||||||
|
_ghostBuilding = null;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public override void _ExitTree()
|
public override void _ExitTree()
|
||||||
{
|
{
|
||||||
base._ExitTree();
|
base._ExitTree();
|
||||||
|
@@ -75,6 +75,11 @@ switch_tile={
|
|||||||
"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":93,"key_label":0,"unicode":93,"location":0,"echo":false,"script":null)
|
"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":93,"key_label":0,"unicode":93,"location":0,"echo":false,"script":null)
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
toggle_build={
|
||||||
|
"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":66,"key_label":0,"unicode":98,"location":0,"echo":false,"script":null)
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|
||||||
[rendering]
|
[rendering]
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user