Beispiel #1
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);
            }
        }
    }