using Godot; public class HarvestNode : ProgramNode { public HarvestNode() { DisplayText = "Harvest"; } public override NodeResult Execute(Robot robot, double delta) { Vector3I mapIndex = Pathfinding.GetClosestStartPoint(robot.Position); Tile tile = GameData.map[mapIndex.Y].tiles[mapIndex.X, mapIndex.Z]; if (!tile.containsResource) { lastExecutionMessage = "No resource on this tile"; return NodeResult.FAILURE; } if (!tile.resource.CanExtract()) { lastExecutionMessage = "Resource is depleted and not endless or you haven't unlocked it yet"; return NodeResult.SUCCESS; } if (tile.resource.Extract(delta)) { if (!GameData.inventory.AddItem(new Item {data = tile.resource.item}, 1)) { lastExecutionMessage = "Not enough space"; return NodeResult.FAILURE; } } return NodeResult.RUNNING; } public override void ReadParameters(NodeDisplay display) { } public override ProgramNode Duplicate() { HarvestNode duplicate = new HarvestNode(); return duplicate; } public override void Setup(NodeDisplay display) { } public override string Save() { return $"Name: {DisplayText}"; } }