/// <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); }
/// <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); }
/// <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); }