/// <summary>
        /// Returns if the action is even possible.
        /// </summary>
        /// <returns> True if the Building is buildable at the current position, otherwise false.</returns>
        public override bool Possible()
        {
            var action         = (Core.Models.Action)Model;
            var entityPosition = (PositionI)action.Parameters[CREATE_POSITION];
            var region         = Controller.Instance.RegionManagerController.GetRegion(entityPosition.RegionPosition);
            var type           = (long)action.Parameters[CREATION_TYPE];
            var entityDef      = Controller.Instance.DefinitionManagerController.DefinitionManager.GetDefinition((EntityType)type);
            var account        = action.Account;
            var list           = new List <long>();

            if (account != null)
            {
                account.BuildableBuildings.TryGetValue((long)Models.Definitions.EntityType.Headquarter, out list);

                if (list != null)
                {
                    if (list.Contains(type))
                    {
                        if (region.GetEntity(entityPosition.CellPosition) == null &&
                            region.GetClaimedTerritory(entityPosition) == account)
                        {
                            // check for free tile and the terrain is possesed from the current player
                            var td = (TerrainDefinition)region.GetTerrain(entityPosition.CellPosition);
                            return(td.Buildable && LogicRules.CheckResource(account, action.ActionTime, entityDef));
                        }
                    }
                }
            }
            return(false);
        }
Esempio n. 2
0
        /// <summary>
        /// Returns if the action is even possible.
        /// </summary>
        /// <returns> True if the Building is buildable at the current position, otherwise false.</returns>
        public override bool Possible()
        {
            var regionManagerC = Controller.Instance.RegionManagerController;

            var action    = (Core.Models.Action)Model;
            var positionI = (PositionI)action.Parameters[CREATE_POSITION];
            var type      = (long)action.Parameters[CREATION_TYPE];
            var entity    = Controller.Instance.RegionManagerController.GetRegion(positionI.RegionPosition).GetEntity(positionI.CellPosition);
            var list      = new List <long>();

            if (entity != null)
            {
                action.Account.BuildableBuildings.TryGetValue(entity.DefinitionID, out list);

                if (list != null)
                {
                    if (action.AccountID == entity.OwnerID && list.Contains(type))
                    {
                        RealCreatePosition = GetFreeField(positionI, regionManagerC);

                        return(RealCreatePosition != null && LogicRules.CheckResource(action.Account, action.ActionTime, Controller.Instance.DefinitionManagerController.DefinitionManager.GetDefinition((EntityType)type)));
                    }
                }
            }
            return(false);
        }
Esempio n. 3
0
        /// <summary>
        /// Returns if the action is even possible.
        /// </summary>
        /// <returns> True if the Building is buildable at the current position, otherwise false.</returns>
        public override bool Possible()
        {
            var action            = (Core.Models.Action)Model;
            var entityPosition    = (PositionI)action.Parameters[CREATE_POSITION];
            var entityCellPostion = entityPosition.CellPosition;
            var region            = Controller.Instance.RegionManagerController.GetRegion(entityPosition.RegionPosition);
            var type = (long)action.Parameters[CREATION_TYPE];

            m_type = Controller.Instance.DefinitionManagerController.DefinitionManager.GetDefinition((EntityType)type);
            var account = action.Account;

            if (type != null || account != null)
            {
                // Filter for territory buildings
                if (type == (long)Models.Definitions.EntityType.Headquarter)
                {
                    m_drawArea = Constants.HEADQUARTER_TERRITORY_RANGE;
                }
                else if (type == (long)Models.Definitions.EntityType.GuardTower)
                {
                    m_drawArea = Constants.GUARDTOWER_TERRITORY_RANGE;
                }

                if (!action.Account.TerritoryBuildings.ContainsValue((long)Core.Models.Definitions.EntityType.Headquarter) &&
                    m_type.SubType == Models.Definitions.EntityType.Headquarter &&
                    region.GetEntity(entityCellPostion) == null &&
                    region.GetClaimedTerritory(entityPosition) == null)
                {
                    // terrain check
                    var  td            = (TerrainDefinition)region.GetTerrain(entityCellPostion);
                    var  list          = LogicRules.GetSurroundedPositions(entityPosition, m_drawArea);
                    bool territoryFlag = true;
                    // check the map for enemy territory if there is a enemy territory to close at new borders a territory building cant be build
                    foreach (var position in list)
                    {
                        var tile = region.GetClaimedTerritory(position);
                        if (tile != null)
                        {
                            territoryFlag = false;
                        }
                    }
                    if (territoryFlag)
                    {
                        return(td.Buildable && LogicRules.CheckResource(account, action.ActionTime, m_type));
                    }
                }
                else if (region.GetEntity(entityCellPostion) == null &&
                         m_type.SubType != Models.Definitions.EntityType.Headquarter &&
                         region.GetClaimedTerritory(entityPosition) == account)
                {
                    // check for free tile and the terrain is possesed from the current player
                    var  td            = (TerrainDefinition)region.GetTerrain(entityCellPostion);
                    var  list          = LogicRules.GetSurroundedPositions(entityPosition, m_drawArea);
                    bool territoryFlag = true;
                    // check the map for enemy territory if there is a enemy territory to close at new borders a territory building cant be build
                    foreach (var position in list)
                    {
                        var tile = region.GetClaimedTerritory(position);
                        if (tile != account &&
                            tile != null)
                        {
                            territoryFlag = false;
                        }
                    }
                    if (territoryFlag)
                    {
                        return(td.Buildable && LogicRules.CheckResource(account, action.ActionTime, m_type));
                    }
                }
            }
            return(false);
        }