// 通过一个棋子模板初始化一个棋子物体的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();
    }
 // 向棋子雕像模板库中添加一个新棋子雕像模板
 public void AddPieceStatusInfo(PieceStatusInfo NewPieceStatusInfo)
 {
     if (!PieceStatusInfoLibrary.ContainsKey(NewPieceStatusInfo.GetPieceStatusID()))
     {
         PieceStatusInfoLibrary.Add(NewPieceStatusInfo.GetPieceStatusID(), NewPieceStatusInfo);
     }
     else
     {
         Debug.LogError("Same PieceStatusInfo has existed in library.");
     }
 }
    // 从XML中载入棋子雕像模板信息
    public void LoadStatusFromXML()
    {
        string filePath = Application.dataPath + "/Resources/Status.xml";

        if (File.Exists(filePath))
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(filePath);
            XmlNodeList node = xmlDoc.SelectSingleNode("PieceStatus").ChildNodes;
            foreach (XmlElement PieceStatusInfo in node)
            {
                PieceStatusInfo NewPieceStatus = new PieceStatusInfo();

                foreach (XmlElement PieceStatusItem in PieceStatusInfo.ChildNodes)
                {
                    if (PieceStatusItem.Name == "PieceStatusID")
                    {
                        //Debug.Log(PieceStatusItem.InnerText);
                        NewPieceStatus.SetPieceStatusID(PieceStatusItem.InnerText);
                        NewPieceStatus.SetStatusPrefab(PieceStatusItem.InnerText);
                    }
                    else if (PieceStatusItem.Name == "PieceStatusName")
                    {
                        NewPieceStatus.SetPieceStatusName(PieceStatusItem.InnerText);
                    }
                    else if (PieceStatusItem.Name == "Position")
                    {
                        //NewPieceStatus.SetLocalPosition(StringToVector3(PieceStatusItem.InnerText));
                    }
                    else if (PieceStatusItem.Name == "Scale")
                    {
                        NewPieceStatus.SetLocalScale(PublicUtility.StringToVector3(PieceStatusItem.InnerText));
                        //Debug.Log(StringToVector3(PieceStatusItem.InnerText));
                    }
                    else if (PieceStatusItem.Name == "Rotation")
                    {
                        NewPieceStatus.SetLocalRotation(PublicUtility.StringToVector3(PieceStatusItem.InnerText));
                    }
                }

                AddPieceStatusInfo(NewPieceStatus);
            }
        }
    }
    // 通过一个棋子模板初始化一个位于棋盘外(尚未被部署到棋盘上的)棋子物体的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();
    }
Пример #5
0
 public void SetPieceStatusInfo(PieceStatusInfo NewPieceStatusInfo)
 {
     MainPieceStatusInfo = NewPieceStatusInfo;
 }