// 当前单位接收伤害
    public void ReceiveDamage(Unit AttackUnit, int DamageAmount)
    {
        // 伤害响应部分

        // 实际伤害结算
        int CurrentHealth = GetCurrentHealth();

        if (CurrentHealth - DamageAmount <= 0)
        {
            CurrentHealth = 0;
            IsAlive       = false;

            // 每当一个棋子包含的单位不在存活就需要检查棋子是否还存活
            PieceStateController TmpPieceStateController = LocatePiece.GetComponentInChildren <PieceStateController>();

            // 如果棋子包含的存活单位为0则判定棋子不再存活
            if (TmpPieceStateController.GetAliveUnitNum() == 0)
            {
                Debug.Log("Piece is not alive.");

                // 调用棋子亡语函数
                TmpPieceStateController.PieceDead(AttackUnit);
            }
        }
        else
        {
            CurrentHealth -= DamageAmount;
        }

        SetCurrentHealth(CurrentHealth);
    }
Exemple #2
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);
    }