Beispiel #1
0
    //設置棋子於指定位置
    //[input] name=棋子名稱 / pos=位置 / player=玩家陣營(True=正面方/False=反面方) / isKing=是否為王
    public void CreateChess(AnimalChessName name, CellBehavior cell, Camps player, bool isKing)
    {
        GameObject    chessGo     = Instantiate(chessPrefab, cell.GetComponent <RectTransform>()); //創建指定的棋子物件
        ChessBehavior ChessScript = chessGo.GetComponent <ChessBehavior>();                        //取得棋子腳本

        ChessScript.ChessInitialize(Dict_ChessAttribute[name], player, isKing);                    //套用棋子屬性設定

        cell.chessScript = ChessScript;                                                            //將棋子腳本註冊至所在的棋格上
    }
    public void CheckReachable()
    {
        // mark all heap as unreachable
        foreach (GameObject go in heap.Values)
        {
            CellBehavior cb = go.GetComponent <CellBehavior>();
            cb.reachable = false;
        }
        foreach (GameObject go in stack.Values)
        {
            CellBehavior cb = go.GetComponent <CellBehavior>();
            if (cb.tag == "pointer")
            {
                PointerController pc = (PointerController)cb;
                if (pc.Target != null)
                {
                    MarkReachable(pc.Target);
                }
            }
        }
        int reached = 1;

        while (reached > 0)
        {
            reached = 0;
            foreach (GameObject go in heap.Values)
            {
                CellBehavior cb = go.GetComponent <CellBehavior>();
                if (cb.reachable)
                {
                    if (cb.tag == "pointer")
                    {
                        PointerController pc = (PointerController)cb;
                        if (pc.Target != null)
                        {
                            reached += MarkReachable(pc.Target);
                        }
                    }
                }
            }
        }
        foreach (GameObject go in heap.Values)
        {
            CellBehavior cb = go.GetComponent <CellBehavior>();
            if (!cb.reachable)
            {
                cb.GetComponent <SpriteRenderer>().color = new Color(0, 0, 0, 1);
            }
        }
    }