예제 #1
0
    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));
    }
예제 #2
0
    // 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;
                    }
                }
            }
        }
    }