private async Task <bool> AddTempZone(Vector2 position, EnumZoneTypes Type) { if (Type == EnumZoneTypes.Residential) { var zone = ResidentialZoneScene.Instance(); Node z1 = zone as Node; CallDeferred("add_child", zone); var _z = z1 as ResidentialZone; _z.Position = position; TempZoneArea.Add(_z); } else if (Type == EnumZoneTypes.Business) { var zone = BusinessZoneScene.Instance(); Node z1 = zone as Node; CallDeferred("add_child", zone as Node); var _z = z1 as BusinessZone; _z.Position = position; TempZoneArea.Add(_z); } else if (Type == EnumZoneTypes.Industry) { var zone = IndustryZoneScene.Instance(); Node z1 = zone as Node; CallDeferred("add_child", zone as Node); var _z = z1 as IndustryZone; _z.Position = position; TempZoneArea.Add(_z); } return(await Task.FromResult(true).ConfigureAwait(false)); }
// Called every frame. 'delta' is the elapsed time since the previous frame. public override void _Process(float delta) { SelectRect.Position = CalculateGridMovement(); UpdateTime(delta); ObjectUnderMouse = GetObjectUnderMouse(); CompleteQueueItem(); if (!IsMouseOverHUD) { //Select an object under the mouse if (!EraseMode && !BuildMode && !ZoneMode && Input.IsActionJustPressed("leftclick")) { try { if (ObjectUnderMouse is Zone _zone) { var _z = Zones.SingleOrDefault(a => a.ID == _zone.ID); SelectedObject = _z; } else if (ObjectUnderMouse is Building _building) { var _b = Buildings.SingleOrDefault(a => a.ID == _building.ID); SelectedObject = _b; } } catch (System.Exception) { SelectedObject = null; } } //Start Zoning if not already if (!IsZoning && ZoneMode && Input.IsActionPressed("leftclick")) { IsZoning = true; TempStartPositonZone = SelectRect.Position; } //If build mode, build selected building type if (BuildMode && !IsBuilding && Input.IsActionJustPressed("leftclick")) { IsBuilding = true; Node _b = new Node(); if (buildingType == EnumBuildingTypes.Fire) { _b = FireStationScene.Instance(); } else if (buildingType == EnumBuildingTypes.Park) { _b = ParkStationScene.Instance(); } else if (buildingType == EnumBuildingTypes.Police) { _b = PoliceStationScene.Instance(); } else if (buildingType == EnumBuildingTypes.Road) { _b = RoadScene.Instance(); } else if (buildingType == EnumBuildingTypes.Util) { _b = UtilStationScene.Instance(); } Build(_b, SelectRect.Position); BuildMode = false; IsBuilding = false; _building.QueueFree(); _building = null; } //Lay road if not already if (RoadMode && !IsLayingRoad && Input.IsActionJustPressed("leftclick")) { IsLayingRoad = true; var _r = RoadScene.Instance(); Build(_r, SelectRect.Position); RoadMode = false; IsLayingRoad = false; _road.QueueFree(); _road = null; } if (ZoneMode && _zone != null) { _zone.Position = SelectRect.Position; } if (BuildMode && _building != null) { _building.Position = SelectRect.Position; } if (RoadMode && _road != null) { _road.Position = SelectRect.Position; } if (ZoneMode && Input.IsActionPressed("rightclick")) { ZoneMode = false; IsZoning = false; _zone.QueueFree(); _zone = null; if (TempZoneArea != null && TempZoneArea.Count() > 0) { for (int i = TempZoneArea.Count - 1; i >= 0; i--) { TempZoneArea[i].Free(); TempZoneArea.RemoveAt(i); } } } if (IsZoning && Input.IsActionPressed("leftclick")) { if (zoneType == EnumZoneTypes.Residential) { if (TempLastEndPositonZone != SelectRect.Position) { if (TempZoneArea == null) { TempZoneArea = new List <Node>(); } if (TempZoneArea.Count > 0) { for (int i = TempZoneArea.Count - 1; i >= 0; i--) { TempZoneArea[i].Free(); TempZoneArea.RemoveAt(i); } } ZoneArea(TempStartPositonZone, SelectRect.Position, EnumZoneTypes.Residential); TempLastEndPositonZone = SelectRect.Position; } } else if (zoneType == EnumZoneTypes.Business) { if (TempLastEndPositonZone != SelectRect.Position) { if (TempZoneArea == null) { TempZoneArea = new List <Node>(); } if (TempZoneArea.Count > 0) { for (int i = TempZoneArea.Count - 1; i >= 0; i--) { TempZoneArea[i].Free(); TempZoneArea.RemoveAt(i); } } ZoneArea(TempStartPositonZone, SelectRect.Position, EnumZoneTypes.Business); TempLastEndPositonZone = SelectRect.Position; } } else if (zoneType == EnumZoneTypes.Industry) { if (TempLastEndPositonZone != SelectRect.Position) { if (TempZoneArea == null) { TempZoneArea = new List <Node>(); } if (TempZoneArea.Count > 0) { for (int i = TempZoneArea.Count - 1; i >= 0; i--) { TempZoneArea[i].Free(); TempZoneArea.RemoveAt(i); } } ZoneArea(TempStartPositonZone, SelectRect.Position, EnumZoneTypes.Industry); TempLastEndPositonZone = SelectRect.Position; } } } if (IsZoning && Input.IsActionJustReleased("leftclick")) { if (TempZoneArea.Count > 0) { for (int i = TempZoneArea.Count - 1; i >= 0; i--) { var temp = TempZoneArea[i]; if (temp is ResidentialZone) { var zone = new ResidentialZone(); zone.Position = (temp as ResidentialZone).Position; zone.ZoneType = EnumZoneTypes.Residential; BuildQueue.Add(zone); } else if (temp is BusinessZone) { var zone = new BusinessZone(); zone.Position = (temp as BusinessZone).Position; zone.ZoneType = EnumZoneTypes.Residential; BuildQueue.Add(zone); } else if (temp is IndustryZone) { var zone = new IndustryZone(); zone.Position = (temp as IndustryZone).Position; zone.ZoneType = EnumZoneTypes.Residential; BuildQueue.Add(zone); } TempZoneArea[i].Free(); TempZoneArea.RemoveAt(i); } } ZoneMode = false; IsZoning = false; _zone.QueueFree(); _zone = null; } if (EraseMode && Input.IsActionPressed("leftclick")) { if (ObjectUnderMouse != null) { try { DeleteObject(ObjectUnderMouse); SelectedObject = null; EraseMode = false; } catch (System.Exception) { EraseMode = false; } } } } }