// 通过一个棋子模板初始化一个棋子物体的state组件
    public void Initialize(GameObject ParaChessBoard, Vector2Int InterCoord, Piece PieceTamplate)
    {
        // 为棋子物体的state组件初始化所有位置信息
        ChessBoardInternalCoordinate = InterCoord;
        ChessBoardInternalPosition   = ParaChessBoard.GetComponent <ChessBoardController>().GetCheckerboardPosition(InterCoord);
        ChessBoardOuterCoordinate    = ParaChessBoard.GetComponent <ChessBoardController>().ChessBoardOuterCoordinate;
        LocateChessboard             = ParaChessBoard;

        PieceInfoController ThisPieceInfoController = this.GetComponent <PieceInfoController>();

        // 为棋子物体的state组件初始化所有基础属性
        ThisPieceInfoController.SetPieceID(PieceTamplate.GetPieceID());
        ThisPieceInfoController.SetPieceName(PieceTamplate.GetPieceName());
        ThisPieceInfoController.SetPieceCostMineral(PieceTamplate.GetPieceMineralCost());
        ThisPieceInfoController.SetPieceCostGas(PieceTamplate.GetPieceGasCost());
        SetRetreatThreshold(PieceTamplate.GetRetreatThreshold());
        SetCardMainImage(PieceTamplate.GetCardMainImage());
        SetUnitIconImage(PieceTamplate.GetUnitIconImage());
        SetCardDescriptionItemList(PieceTamplate.GetCardDescriptionItemList());
        PieceDeathEffect = PieceTamplate.GetPieceDeathEffect();

        // 为棋子物体的state组件初始化所有棋子应该包含的单位
        for (int i = 0; i < PieceTamplate.GetUnitTypeNum(); i++)
        {
            for (int j = 0; j < PieceTamplate.GetUnitNum(i); j++)
            {
                Unit NewUnit = new Unit();

                // 根据单位模板将单位初始化为预定单位
                NewUnit.InitialUnit(PieceTamplate.GetUnitTamplate(i));

                // 设置单位所在的棋子引用
                NewUnit.SetLocatePiece(this.transform.parent.gameObject);

                // 将新生成的单位添加入棋子单位字典中
                InitialUnit(NewUnit);
            }
        }

        // 加载棋子默认棋子底座
        MainPiecePedestalInfo = PieceTamplate.GetPiecePedestalInfo();

        if (MainPiecePedestalInfo != null)
        {
            MainPiecePedestal = MainPiecePedestalInfo.LoadPedestal(this.transform.parent.gameObject);
        }

        MainPieceStatusInfo = PieceTamplate.GetPieceStatusInfo();

        if (MainPieceStatusInfo != null)
        {
            MainPieceStatus = MainPieceStatusInfo.LoadStatus(this.transform.parent.gameObject, MainPiecePedestal);
        }

        // 初始化棋子UI
        this.GetComponent <PieceUIController>().InitializePieceUI();
    }
Beispiel #2
0
    // Use this for initialization
    void Start()
    {
        ClientManager = GameObject.Find("ClientManager");

        ThisPieceStateController = this.GetComponent <PieceStateController>();
        ThisPieceInfoController  = this.GetComponent <PieceInfoController>();


        //ChessBoardManager = GameObject.Find("ChessBoardManager");

        //CheckerBoardSize = LocateChessboard.GetComponent<ChessBoardInfoController>().CheckerBoardSize;
        //ChessBoardSize = LocateChessboard.GetComponent<ChessBoardInfoController>().ChessBoardSize;
        //GeneratePositionX = LocateChessboard.GetComponent<ChessBoardInfoController>().ChessBoardOuterPosition.x;
        //GeneratePositionZ = LocateChessboard.GetComponent<ChessBoardInfoController>().ChessBoardOuterPosition.y;
        //InitPosition = LocateChessboard.GetComponent<ChessBoardInfoController>().InitPosition;

        // 载入可操作目标预制体
        OperatbleTargetPrefab = (GameObject)Resources.Load("Prefabs/OperatbleTarget");

        HintTargetPrefab = (GameObject)Resources.Load("Prefabs/HintTarget");

        //ThisPieceStateController = this.transform.parent.GetComponent<PieceStateController>();

        if (OperatbleTargetPrefab == null)
        {
            Debug.Log("OperatbleTargetPrefab load fail");
        }

        // TODO: 动态调整可操作目标数组的长度
        OperatblePreviews = new GameObject[10];

        HintPreviews = new GameObject[20];

        AttackTargets = new GameObject[20];

        MoveDirectionX[0] = 1; MoveDirectionY[0] = 1;
        MoveDirectionX[1] = 1; MoveDirectionY[1] = 0;
        MoveDirectionX[2] = 1; MoveDirectionY[2] = -1;
        MoveDirectionX[3] = 0; MoveDirectionY[3] = -1;
        MoveDirectionX[4] = -1; MoveDirectionY[4] = -1;
        MoveDirectionX[5] = -1; MoveDirectionY[5] = 0;
        MoveDirectionX[6] = -1; MoveDirectionY[6] = 1;
        MoveDirectionX[7] = 0; MoveDirectionY[7] = 1;
    }
    // 通过一个棋子模板初始化一个位于棋盘外(尚未被部署到棋盘上的)棋子物体的state组件
    public void Initialize(Piece PieceTamplate)
    {
        PieceInfoController ThisPieceInfoController = this.GetComponent <PieceInfoController>();

        // 为棋子物体的state组件初始化所有基础属性
        ThisPieceInfoController.SetPieceID(PieceTamplate.GetPieceID());
        ThisPieceInfoController.SetPieceName(PieceTamplate.GetPieceName());
        ThisPieceInfoController.SetPieceCostMineral(PieceTamplate.GetPieceMineralCost());
        ThisPieceInfoController.SetPieceCostGas(PieceTamplate.GetPieceGasCost());
        SetRetreatThreshold(PieceTamplate.GetRetreatThreshold());
        SetCardMainImage(PieceTamplate.GetCardMainImage());
        SetUnitIconImage(PieceTamplate.GetUnitIconImage());
        SetCardDescriptionItemList(PieceTamplate.GetCardDescriptionItemList());
        PieceDeathEffect = PieceTamplate.GetPieceDeathEffect();

        this.transform.parent.name = PieceTamplate.GetPieceName();

        // 为棋子物体的state组件初始化所有棋子应该包含的单位
        for (int i = 0; i < PieceTamplate.GetUnitTypeNum(); i++)
        {
            for (int j = 0; j < PieceTamplate.GetUnitNum(i); j++)
            {
                Unit NewUnit = new Unit();

                // 根据单位模板将单位初始化为预定单位
                NewUnit.InitialUnit(PieceTamplate.GetUnitTamplate(i));

                // 设置单位所在的棋子引用
                NewUnit.SetLocatePiece(this.transform.parent.gameObject);

                // 将新生成的单位添加入棋子单位字典中
                InitialUnit(NewUnit);
            }
        }

        // 加载棋子默认棋子底座
        MainPiecePedestalInfo = PieceTamplate.GetPiecePedestalInfo();

        if (MainPiecePedestalInfo != null)
        {
            MainPiecePedestal = MainPiecePedestalInfo.LoadPedestal(this.transform.parent.gameObject);
        }

        MainPieceStatusInfo = PieceTamplate.GetPieceStatusInfo();

        if (MainPieceStatusInfo != null)
        {
            MainPieceStatus = MainPieceStatusInfo.LoadStatus(this.transform.parent.gameObject, MainPiecePedestal);
        }

        // 取消当前棋子的碰撞体并且将整体隐藏(棋子本体以及棋子UI)
        this.GetComponent <CapsuleCollider>().enabled = false;
        this.transform.parent.gameObject.SetActive(false);
        //this.GetComponent<PieceUIController>().HidePieceUIBase();

        // 初始化棋子UI
        //this.GetComponent<PieceUIController>().InitializePieceUI();

        // 隐藏棋子UI
        //this.GetComponent<PieceUIController>().HidePieceUIBase();
    }
Beispiel #4
0
    // 将一个棋子当前的状态信息装入展示卡牌当中
    public void LoadInfoFromPiece(GameObject ParaPiece)
    {
        PieceInfoController  ParaPieceInfoController  = ParaPiece.GetComponentInChildren <PieceInfoController>();
        PieceStateController ParaPieceStateController = ParaPiece.GetComponentInChildren <PieceStateController>();

        CardNameText.GetComponent <Text>().text = ParaPieceInfoController.GetPieceName();

        if (ParaPieceStateController.GetCardMainImage() != null)
        {
            MainImage.GetComponent <RawImage>().texture = ParaPieceStateController.GetCardMainImage();
        }
        else
        {
        }

        //MainImage.GetComponent<RawImage>().texture =
        // 也许在单位数目为1的时候英雄棋子和普通杂兵棋子需要区别对待(英雄类棋子直接隐藏单位数目图标和单位数目文本)
        PieceUnitNumText.GetComponent <Text>().text = (ParaPieceStateController.GetAliveUnitNum()).ToString();
        MineralText.GetComponent <Text>().text      = (ParaPieceInfoController.GetPieceCostMineral()).ToString();
        GasText.GetComponent <Text>().text          = (ParaPieceInfoController.GetPieceCostGas()).ToString();

        List <string> CardDescriptionItemList = ParaPieceStateController.GetCardDescriptionItemList();

        int CharacterNum = 0;

        if (CardDescriptionItemList != null)
        {
            //Debug.Log("get it");

            for (int i = 0; i < CardDescriptionItemList.Count; i++)
            {
                CharacterNum += CardDescriptionItemList[i].Length;
            }

            // 如果描述项字符总量过多则需要调整文本中的字体大小
            if (CharacterNum <= 56)
            {
                string Res = "";

                // 组装卡牌描述区文本,每个描述项之间用一个空格隔开
                for (int i = 0; i < CardDescriptionItemList.Count; i++)
                {
                    if (i == CardDescriptionItemList.Count - 1)
                    {
                        Res += CardDescriptionItemList[i];
                    }
                    else
                    {
                        Res += (CardDescriptionItemList[i] + " ");
                    }
                }

                // 将卡牌描述区文本设置到text属性
                CardDescription.transform.Find("CardDescriptionText").gameObject.GetComponent <Text>().text = Res;
            }
        }

        // 更新生命值状态条
        float HealthPercentage = ParaPieceStateController.GetRationOfHealth();

        float HealthBarWidth    = 145 * HealthPercentage;
        float HealthBarPosition = 145 * (1 - HealthPercentage);

        HealthBar.GetComponent <RectTransform>().sizeDelta     = new Vector2(HealthBarWidth, 6);
        HealthBar.GetComponent <RectTransform>().localPosition = new Vector3((float)(HealthBarPosition / 2.0), 0, 0);
    }
Beispiel #5
0
    // 鼠标左键点选棋子后在主场景中显示所有的 可移动位置 和 可攻击位置
    public void OperationPreview()
    {
        PreviewIndex = 0;

        ThisPieceStateController = this.GetComponent <PieceStateController>();
        ThisPieceInfoController  = this.GetComponent <PieceInfoController>();

        ThisPieceStateController.DisplayAllUnit();

        GameObject LocateChessboard = ThisPieceStateController.LocateChessboard;

        CheckerBoardSize = LocateChessboard.GetComponent <ChessBoardController>().CheckerBoardSize;
        ChessBoardSize   = LocateChessboard.GetComponent <ChessBoardController>().ChessBoardSize;
        //GeneratePositionX = LocateChessboard.GetComponent<ChessBoardInfoController>().ChessBoardOuterPosition.x;
        //GeneratePositionZ = LocateChessboard.GetComponent<ChessBoardInfoController>().ChessBoardOuterPosition.y;
        //InitPosition = LocateChessboard.GetComponent<ChessBoardInfoController>().InitPosition;

        //Debug.Log("233");
        this.GetComponent <MeshRenderer>().material = PieceSelectedMaterial;

        if (this.GetComponent <PieceInfoController>().HasOrientation == false)
        {
            // 获取该棋子在棋盘中的坐标
            Vector2Int CurrentCoordinate = ThisPieceStateController.ChessBoardInternalCoordinate;

            // 进行常规移动位置计算
            for (int i = 0; i < 8; i++)
            {
                for (int j = 1; j <= ThisPieceInfoController.BaseMoveAbility[i]; j++)
                {
                    Vector2Int NewInterCoord = new Vector2Int();
                    Vector2Int NewOuterCoord = new Vector2Int();

                    Vector2Int ParaInterCoord = new Vector2Int(CurrentCoordinate.x + j * MoveDirectionX[i], CurrentCoordinate.y + j * MoveDirectionY[i]);

                    if (CheckerBoardAvaliable(ParaInterCoord, out NewInterCoord, out NewOuterCoord) == true)
                    {
                        GenerateHintTarget(NewInterCoord, NewOuterCoord, 1);
                        GenerateOperatableTarget(NewInterCoord, NewOuterCoord);
                    }
                }
            }

            // 进行特殊移动位置计算

            // 进行常规攻击位置计算
            for (int i = 0; i < 8; i++)
            {
                for (int j = 1; j <= ThisPieceInfoController.BaseAttackAbility[i]; j++)
                {
                    Vector2Int NewInterCoord = new Vector2Int();
                    Vector2Int NewOuterCoord = new Vector2Int();

                    Vector2Int ParaInterCoord = new Vector2Int((int)CurrentCoordinate.x + j * MoveDirectionX[i], (int)CurrentCoordinate.y + j * MoveDirectionY[i]);

                    if (CheckerBoardAvaliable(ParaInterCoord, out NewInterCoord, out NewOuterCoord) == true)
                    {
                        GenerateHintTarget(NewInterCoord, NewOuterCoord, 2);
                        //GenerateOperatableTarget(NewInterCoord, NewOuterCoord);
                        GameObject AttackTargetPiece = GetCheckerPiece(NewInterCoord, NewOuterCoord);
                        if (AttackTargetPiece != null)
                        {
                            //Debug.Log(AttackTargetPiece.name);
                            AttackTargets[AttackTargetIndex++] = AttackTargetPiece;

                            AttackTargetPiece.GetComponentInChildren <PieceStateController>().IsAttackTarget = true;
                        }
                    }
                }
            }
        }
        else
        {
        }
    }