Beispiel #1
0
    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);
            }
        }
    }
Beispiel #2
0
    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);
    }
Beispiel #3
0
	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);
	}
Beispiel #4
0
    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);
    }
Beispiel #5
0
 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;
        }
    }
Beispiel #9
0
    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);
            }
        }
    }