// 通过一个棋子模板初始化一个棋子物体的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 AddPiecePedestalInfo(PiecePedestalInfo NewPiecePedestalInfo)
 {
     if (!PiecePedestalInfoLibrary.ContainsKey(NewPiecePedestalInfo.GetPiecePedestalID()))
     {
         PiecePedestalInfoLibrary.Add(NewPiecePedestalInfo.GetPiecePedestalID(), NewPiecePedestalInfo);
     }
     else
     {
         Debug.LogError("Same PiecePedestalInfo has existed in library.");
     }
 }
    // 从XML中载入棋子底座模板信息
    public void LoadPedestalFromXML()
    {
        string filePath = Application.dataPath + "/Resources/Pedestal.xml";

        if (File.Exists(filePath))
        {
            XmlDocument xmlDoc = new XmlDocument();
            xmlDoc.Load(filePath);
            XmlNodeList node = xmlDoc.SelectSingleNode("PiecePedestal").ChildNodes;
            foreach (XmlElement PiecePedestalInfo in node)
            {
                PiecePedestalInfo NewPiecePedestal = new PiecePedestalInfo();

                foreach (XmlElement PiecePedestalItem in PiecePedestalInfo.ChildNodes)
                {
                    if (PiecePedestalItem.Name == "PiecePedestalID")
                    {
                        //Debug.Log(PiecePedestalItem.InnerText);
                        NewPiecePedestal.SetPiecePedestalID(PiecePedestalItem.InnerText);
                        NewPiecePedestal.SetPedestalPrefab(PiecePedestalItem.InnerText);
                    }
                    else if (PiecePedestalItem.Name == "PiecePedestalName")
                    {
                        NewPiecePedestal.SetPiecePedestalName(PiecePedestalItem.InnerText);
                    }
                    else if (PiecePedestalItem.Name == "Position")
                    {
                        NewPiecePedestal.SetLocalPosition(PublicUtility.StringToVector3(PiecePedestalItem.InnerText));
                    }
                    else if (PiecePedestalItem.Name == "Scale")
                    {
                        NewPiecePedestal.SetLocalScale(PublicUtility.StringToVector3(PiecePedestalItem.InnerText));
                        //Debug.Log(StringToVector3(PiecePedestalItem.InnerText));
                    }
                    else if (PiecePedestalItem.Name == "Rotation")
                    {
                        NewPiecePedestal.SetLocalRotation(PublicUtility.StringToVector3(PiecePedestalItem.InnerText));
                    }
                }

                AddPiecePedestalInfo(NewPiecePedestal);
            }
        }
    }
    //---------------------------------------------------

    public void SetPiecePedestalInfo(PiecePedestalInfo NewPiecePedestalInfo)
    {
        MainPiecePedestalInfo = NewPiecePedestalInfo;
    }
    // 通过一个棋子模板初始化一个位于棋盘外(尚未被部署到棋盘上的)棋子物体的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();
    }