void Start() { BuildingPropertyBehavior property = this.GetComponent <BuildingPropertyBehavior>(); this.m_UpWall.SetActive(false); this.m_RightWall.SetActive(false); TilePosition upPosition = new TilePosition(property.BuildingPosition.Column, property.BuildingPosition.Row + 1); TilePosition rightPosition = new TilePosition(property.BuildingPosition.Column + 1, property.BuildingPosition.Row); if (upPosition.IsValidBuildingTilePosition()) { GameObject upObject = BattleMapData.Instance.GetBuildingObjectFromBuildingObstacleMap (upPosition.Row, upPosition.Column); if (upObject != null && upObject.GetComponent <BuildingPropertyBehavior>() != null && upObject.GetComponent <BuildingPropertyBehavior>().BuildingType == BuildingType.Wall) { this.m_UpWall.SetActive(true); BattleMapData.Instance.InflateUpActorObstacleOfWall(property); } } if (rightPosition.IsValidBuildingTilePosition()) { GameObject rightObject = BattleMapData.Instance.GetBuildingObjectFromBuildingObstacleMap (rightPosition.Row, rightPosition.Column); if (rightObject != null && rightObject.GetComponent <BuildingPropertyBehavior>() != null && rightObject.GetComponent <BuildingPropertyBehavior>().BuildingType == BuildingType.Wall) { this.m_RightWall.SetActive(true); BattleMapData.Instance.InflateRightObstacleOfWall(property); } } }
public static TilePosition FindValidInflateOneBorderPoint(IObstacleInfo obstacleInfo, bool isActor) { List <TilePosition> borders = GetInflateOneBorder(obstacleInfo, isActor); int index = Random.Range(0, borders.Count); TilePosition result = isActor ? obstacleInfo.ActorPosition + borders[index] : obstacleInfo.BuildingPosition + borders[index]; if (isActor) { while (!result.IsValidActorTilePosition()) { index = Random.Range(0, borders.Count); result = obstacleInfo.ActorPosition + borders[index]; } } else { while (!result.IsValidBuildingTilePosition()) { index = Random.Range(0, borders.Count); result = obstacleInfo.BuildingPosition + borders[index]; } } //Debug.Log(result.Row + " , " + result.Column); return(result); }
public static bool IsEdgeBuildingTilePosition(this TilePosition position) { if(!position.IsValidBuildingTilePosition()) { return false; } return (position.Column < 1 || position.Column >= ClientSystemConstants.BUILDING_TILE_MAP_SIZE.width - 1) || (position.Row < 1 || position.Row >= ClientSystemConstants.BUILDING_TILE_MAP_SIZE.height - 1); }
private bool IsNeedCheck(TilePosition position, TilePosition startPosition, int currentLayer) { if (!position.IsValidBuildingTilePosition()) { return(false); } int distance = Mathf.Abs(position.Row - startPosition.Row) + Mathf.Abs(position.Column - startPosition.Column); return(distance == currentLayer); }
public bool IsBuildable(TilePosition position, List <TilePosition> obstacleList) { foreach (TilePosition offset in obstacleList) { TilePosition temp = position + offset; if (!temp.IsValidBuildingTilePosition() || this.m_MapData[temp.Row, temp.Column]) { return(false); } } return(true); }
public bool GeneratePosition(int removableObjectNo, IMapData mapData) { RemovableObjectLogicObject logicObject = this.GetRemovableObject(removableObjectNo); List <TilePosition> validPosition = new List <TilePosition>(); for (int r = 0; r < ClientSystemConstants.BUILDING_TILE_MAP_SIZE.height; r++) { for (int c = 0; c < ClientSystemConstants.BUILDING_TILE_MAP_SIZE.width; c++) { bool isValid = true; TilePosition position = new TilePosition(c, r); foreach (TilePosition offset in logicObject.LogicData.BuildingObstacleList) { TilePosition p = position + offset; if (!p.IsValidBuildingTilePosition() || mapData.GetBuildingObjectFromBuildingObstacleMap(p.Row, p.Column) != null) { isValid = false; break; } if (LogicController.Instance.IsNewPlayer && ClientSystemConstants.INITIAL_REMOVABLE_OBJECT_INVALID_RECT.Contains( new Vector2(position.Column, position.Row))) { isValid = false; break; } } if (isValid) { validPosition.Add(position); } } } if (validPosition.Count == 0) { this.m_ObjectDict.Remove(removableObjectNo); return(false); } else { TilePosition position = validPosition[CommonHelper.GetRandomNumber(0, validPosition.Count)]; logicObject.GeneratePosition(position); return(true); } }
void Update() { TilePosition upPosition = new TilePosition(this.m_BuildingBehavior.Position.Column, this.m_BuildingBehavior.Position.Row + 1); TilePosition rightPosition = new TilePosition(this.m_BuildingBehavior.Position.Column + 1, this.m_BuildingBehavior.Position.Row); if (upPosition.IsValidBuildingTilePosition()) { GameObject upObject = EditorFactory.Instance.MapData[upPosition.Row, upPosition.Column]; if (upObject != null && upObject.GetComponent <EditorBuildingBehavior>() != null && upObject.GetComponent <EditorBuildingBehavior>().BuildingType == BuildingType.Wall) { this.m_UpWall.SetActive(true); } else { this.m_UpWall.SetActive(false); } } else { this.m_UpWall.SetActive(false); } if (rightPosition.IsValidBuildingTilePosition()) { GameObject rightObject = EditorFactory.Instance.MapData[rightPosition.Row, rightPosition.Column]; if (rightObject != null && rightObject.GetComponent <EditorBuildingBehavior>() != null && rightObject.GetComponent <EditorBuildingBehavior>().BuildingType == BuildingType.Wall) { this.m_RightWall.SetActive(true); } else { this.m_RightWall.SetActive(false); } } else { this.m_RightWall.SetActive(false); } }
void Update() { bool isValid = true; TilePosition currentPosition = PositionConvertor.GetBuildingTileIndexFromWorldPosition(this.transform.position); if (!currentPosition.IsValidBuildingTilePosition()) { isValid = false; } if (EditorFactory.Instance.MapData[currentPosition.Row, currentPosition.Column] != null) { isValid = false; } if (isValid) { this.m_Sprite.color = Color.green; } else { this.m_Sprite.color = Color.red; } }
public void Construct(Vector2 position) { TilePosition mousePosition = PositionConvertor.GetBuildingTileIndexFromScreenPosition(position); mousePosition.Row = Mathf.Clamp(mousePosition.Row, 0, ClientSystemConstants.BUILDING_TILE_MAP_SIZE.height - 1); mousePosition.Column = Mathf.Clamp(mousePosition.Column, 0, ClientSystemConstants.BUILDING_TILE_MAP_SIZE.width - 1); UICheckbox check = null; UICheckbox[] checks = this.m_SelectionGroup.GetComponentsInChildren <UICheckbox>(); foreach (UICheckbox c in checks) { if (c.isChecked) { check = c; break; } } PropsButtonInformation propsInfo = check.transform.parent.GetComponent <PropsButtonInformation>(); bool isUseProps = propsInfo != null && !(ConfigInterface.Instance.PropsConfigHelper.GetPropsData(propsInfo.Type).FunctionConfigData is PropsArmyConfigData) && !(ConfigInterface.Instance.PropsConfigHelper.GetPropsData(propsInfo.Type).FunctionConfigData is PropsMercenaryConfigData); bool isValidPosition = true; if (mousePosition.IsEdgeBuildingTilePosition()) { isValidPosition = true; } else if (!mousePosition.IsValidBuildingTilePosition()) { this.m_GridFactory.DisplayGrid(); isValidPosition = false; } else if (BattleMapData.Instance.CharacterForbiddenArray[mousePosition.Row, mousePosition.Column] && !isUseProps) { this.m_GridFactory.DisplayGrid(); isValidPosition = false; } if (isValidPosition && (BattleDirector.Instance == null || !BattleDirector.Instance.IsBattleFinished)) { ArmyButtonInformation armyInfo = check.transform.parent.GetComponent <ArmyButtonInformation>(); MercenaryButtonInformation mercenaryInfo = check.transform.parent.GetComponent <MercenaryButtonInformation>(); if (armyInfo != null) { if (armyInfo.Dropable) { Vector3 worldPosition = CameraManager.Instance.MainCamera.ScreenToWorldPoint(new Vector3(position.x, position.y, 0)); worldPosition = PositionConvertor.ClampWorldPositionOfBuildingTile(worldPosition); ArmyIdentity id = armyInfo.DropArmy(); this.m_ConstructArmyList.Add(new ConstructArmyCommand() { Position = worldPosition, Identity = id, Level = armyInfo.ArmyLevel }); } else { UIErrorMessage.Instance.ErrorMessage(ClientStringConstants.NO_ARMY_TO_DROP_WARNING_MESSAGE); } } else if (mercenaryInfo != null) { if (mercenaryInfo.Dropable) { Vector3 worldPosition = CameraManager.Instance.MainCamera.ScreenToWorldPoint(new Vector3(position.x, position.y, 0)); worldPosition = PositionConvertor.ClampWorldPositionOfBuildingTile(worldPosition); MercenaryIdentity id = mercenaryInfo.DropArmy(); this.m_ConstructMercenaryList.Add(new UserCommand <MercenaryIdentity>() { Position = worldPosition, Identity = id }); } else { UIErrorMessage.Instance.ErrorMessage(ClientStringConstants.NO_ARMY_TO_DROP_WARNING_MESSAGE); } } else if (propsInfo != null) { if (propsInfo.Dropable) { Vector3 worldPosition = CameraManager.Instance.MainCamera.ScreenToWorldPoint(new Vector3(position.x, position.y, 0)); worldPosition = PositionConvertor.ClampWorldPositionOfBuildingTile(worldPosition); int no = propsInfo.DropArmy(); this.m_UsePropsList.Add(new UsePropsCommand() { Position = worldPosition, Identity = no, PropsType = propsInfo.Type }); } else { UIErrorMessage.Instance.ErrorMessage(ClientStringConstants.NO_PROPS_TO_DROP_WARNING_MESSAGE); } } } else { if (isUseProps) { UIErrorMessage.Instance.ErrorMessage(ClientStringConstants.CAN_NOT_USE_PROPS_WARNING_MESSAGE); } else { UIErrorMessage.Instance.ErrorMessage(ClientStringConstants.CAN_NOT_DROP_ARMY_WARNING_MESSAGE); } } }