예제 #1
0
파일: mapBlock.cs 프로젝트: bYsdTd/GVRGame
    public void Attach(mapBlock other)
    {
        startPoint = other.endPoint;

        instance.transform.position = startPoint;

        // 同时计算出endpoint
    }
예제 #2
0
    private void doSwitch()
    {
        m_currentBlock = m_nextBlock;
        m_currentBlock.InitStartBlock();

        // 生成一个新的
        m_nextBlock = generateBlock();
        m_nextBlock.Attach(m_currentBlock);
    }
예제 #3
0
 void Start()
 {
     _mapWidth  = transform.localScale.x;
     _mapHeight = transform.localScale.y;
     //新增開始區塊範圍
     StartBlock        = new mapBlock();
     StartBlock.minPos = new Point(0, _mapHeight * (7.0 / 8.0));
     StartBlock.maxPos = new Point(_mapWidth * (1.0 / 8.0), _mapHeight);
 }
예제 #4
0
    public void InitStartPoint()
    {
        // 初始的时候先随机两个
        System.Random rand = new System.Random();

        m_currentBlock = generateBlock();
        m_currentBlock.InitStartBlock();

        m_nextBlock = generateBlock();
        m_nextBlock.Attach(m_currentBlock);
    }
예제 #5
0
 //初始化地圖方格座標
 private void InitBlock()
 {
     //新增開始區塊範圍
     for (int i = 0; i < ScreenHeightBlock; i++)
     {
         for (int j = 0; j < ScreenWidthBlock; j++)
         {
             StartBlock[i, j]        = new mapBlock();
             StartBlock[i, j].minPos = new Point((double)(_mapWidth * (j / (double)ScreenWidthBlock)), (double)(_mapHeight * (i / (double)ScreenHeightBlock)));
             StartBlock[i, j].maxPos = new Point((double)(_mapWidth * ((j + 1) / (double)ScreenWidthBlock)), (double)(_mapHeight * ((i + 1) / (double)ScreenHeightBlock)));
         }
     }
 }
예제 #6
0
    private mapBlock generateBlock()
    {
        System.Random rand   = new System.Random();
        int           index1 = rand.Next(0, m_blockPool.Count - 1);
        mapBlock      block  = m_blockPool[index1];

        m_blockPool.RemoveAt(index1);
        block.Active();

        int type = rand.Next(0, 2);

        block.type = type;

        return(block);
    }
예제 #7
0
 private static int CompareBlocksByPosition(mapBlock x, mapBlock y)
 {
     if (x.location - y.location > 0)
     {
         return(1);
     }
     else if (x.location - y.location < 0)
     {
         return(-1);
     }
     else
     {
         return(0);
     }
 }
예제 #8
0
    public void InitAllMapBlock()
    {
        string[] prefabNames = new string[] { "Prefab/block1", "Prefab/block2", "Prefab/block3" };

        for (int i = 0; i < prefabNames.Length; ++i)
        {
            GameObject prefabObj = Resources.Load(prefabNames[i]) as GameObject;

            GameObject blockInstance = GameObject.Instantiate(prefabObj);

            mapBlock mapBlockInstance = new mapBlock(blockInstance);
            mapBlockInstance.Deactive();

            mapBlockInstance.instance.transform.SetParent(m_rootGameObj.transform);

            m_blockPool.Add(mapBlockInstance);
        }
    }
예제 #9
0
 private void recycleBlock(mapBlock block)
 {
     m_blockPool.Add(block);
     block.Deactive();
 }
예제 #10
0
        public imageMap(absImageStream ais)
        {
            if (ais.scheme == absImageStream.schemeType.GPT)
            {
                GPTScheme gpts = new GPTScheme(ais);

                mapBlock block = new mapBlock();
                block.location = 0;

                if (gpts.protectiveMBRExists)
                {
                    block.length = 1;
                    block.name = "MBR";
                    block.type = tileType.MBR;

                    partitionblocks.Add(block);
                }

                if (gpts.headerFound)
                {
                    block.location = 1;
                    block.length = 1;
                    block.name = "GPT Header";
                    block.type = tileType.GPT;

                    partitionblocks.Add(block);

                    block.location = gpts.tablestart;
                    block.length = gpts.tablelength / ais.sectorSize;
                    if (block.length < 1) block.length = 1;
                    block.name = "GPT Primary Table";
                    block.type = tileType.GPT;

                    partitionblocks.Add(block);
                }

                if (gpts.backupFound)
                {
                    block.location = gpts.backupHeader.mainheader;
                    block.length = 1;
                    block.name = "Backup GPT Header";
                    block.type = tileType.GPT;

                    partitionblocks.Add(block);

                    block.location = gpts.backupHeader.tablestart;
                    block.length = gpts.tablelength / ais.sectorSize;
                    if (block.length < 1) block.length = 1;
                    block.name = "GPT Backup Table";
                    block.type = tileType.GPT;

                    partitionblocks.Add(block);
                }

                foreach (GPTScheme.entry entry in gpts.entries)
                {
                    block.location = entry.partStartLBA;
                    block.length = entry.partLength;
                    block.name = entry.name;
                    block.type = tileType.vol_unknown;

                    if (gpts.findPartitionType(entry) == GPTScheme.partitionType.HFSPlus)
                    {
                        HFSPlus hfsp = new HFSPlus(ais, entry);

                        block.mapSectorsPerBlock = (int)hfsp.volHead.blockSize / ais.sectorSize;
                        forkStream fs = new forkStream(new volumeStream(hfsp), new HFSPlusFile(hfsp.volHead.allocationFile, forkStream.forkType.data), forkStream.forkType.data);

                        block.allocationMap = new byte[(int)fs.Length];
                        fs.Read(block.allocationMap, 0, (int)fs.Length);
                    }
                    else
                    {
                        block.allocationMap = null;
                    }

                    partitionblocks.Add(block);
                }

            }

            partitionblocks.Sort(CompareBlocksByPosition);
        }
예제 #11
0
 private static int CompareBlocksByPosition(mapBlock x, mapBlock y)
 {
     if (x.location - y.location > 0) return 1;
     else if (x.location - y.location < 0) return -1;
     else return 0;
 }
예제 #12
0
    //初始化
    void Start()
    {
        ScreenHeightBlock = _mapData.ScreenHeightBlock;
        ScreenWidthBlock  = _mapData.ScreenWidthBlock;

        _playerState.SetPlayerEnableOrNotByIndex(0, true);
        _playerState.SetPlayerEnableOrNotByIndex(1, true);
        _playerState.SetPlayerEnableOrNotByIndex(2, false);
        _playerState.SetPlayerEnableOrNotByIndex(3, true);
        _playerState.InitializeRealPlayer();
        StartBlock = new mapBlock[ScreenHeightBlock, ScreenWidthBlock];           //設定初始地圖陣列大小
        //初始旗標狀態
        _isDraw      = true;
        _isDebug     = true;
        _isCheatMode = true;
        _isReSet     = false;
        //設定地圖像素大小
        _mapWidth  = transform.localScale.x;
        _mapHeight = transform.localScale.y;

        //初始化棋盤格子
        for (int i = 0; i < ScreenHeightBlock; i++)
        {
            for (int j = 0; j < ScreenWidthBlock; j++)
            {
                StartBlock[i, j] = new mapBlock();
            }
        }
        InitBlock();                                                                //初始化地圖
        _mapMat = new Mat((int)_mapHeight, (int)_mapWidth, CvType.CV_8UC3);
        _mapMat.setTo(_FogOfWarColor);                                              //設定戰爭迷霧
        _tex = new Texture2D((int)_mapWidth, (int)_mapHeight);                      //設定結果圖片大小

        //玩家位置創建空間
        _pointPlayer    = new Point[4];
        _pointPlayer[0] = new Point(0, 0);
        _pointPlayer[1] = new Point(ScreenWidthBlock - 1, 0);
        _pointPlayer[2] = new Point(ScreenWidthBlock - 1, ScreenHeightBlock - 1);
        _pointPlayer[3] = new Point(0, ScreenHeightBlock - 1);

        //設定玩家初始位置
        for (int ID = 0; ID < 4; ID++)
        {
            _mapData.setPlayerPos(_pointPlayer[ID]);
        }

        //設定寶藏初始位置
        _mapData.setTreadsurePos(new Point(5, 5));
        //設定視野道具初始位置
        _mapData.setSightPos(new Point(1, 1));
        _mapData.setSightPos(new Point(6, 6));
        //設定炸彈位置
        _mapData.setBombPos(new Point(1, 2));
        _mapData.setBombPos(new Point(10, 6));
        //設定照明彈位置
        _mapData.setFlashLightPos(new Point(1, 0));
        //設定回合&誰先遊戲&還沒有人贏
        _winerFlag = -1;
        _round     = 0;
        _whoRound  = _playerState.GetRealPlayerCornerByIndex(_round % _playerState.GetEnablePlayerCount());
        this.FlageMove();
        //設定玩家顏色
        _playerColor[0] = new Scalar(255, 0, 0);
        _playerColor[1] = new Scalar(0, 0, 255);
        _playerColor[2] = new Scalar(0, 255, 0);
        _playerColor[3] = new Scalar(255, 255, 255);
        //設定移動資訊
        _moved            = false;
        _movedTimer       = 0f;
        _movedTriggerTime = 1;
        _pointRange       = 5;
        //設定玩家視野
        for (int enablePlayer = 0; enablePlayer < 4; enablePlayer++)
        {
            if (_playerState.GetIsPlayerEnableOrNotByIndex(enablePlayer))
            {
                _playerCanSee[enablePlayer] = 2;
            }
        }
        //創造寶藏
        Point PBlock = new Point(_mapData.getTreadsurePos(0).x, _mapData.getTreadsurePos(0).y);

        Point[] PT = PosToBlock((int)PBlock.x, (int)PBlock.y);
        //設定寶藏位置(說明: 原始座標是0,0在中心點 先減掉0.5倍的原始物件 再加上位置座標)
        _treasure.transform.localPosition = new Vector3((float)-0.5 + ((float)(PT[0].x + PT[1].x) / 2 / _mapWidth), (float)0.5 - ((float)(PT[0].y + PT[1].y) / 2 / _mapHeight), -1);
        SightPosInit();
        BoomPosInit();
        //設定炸彈計時
        _boomTimer       = 0f;
        _boomTriggerTime = 1;
        //設定閃爍時間
        _flicker            = true;
        _flickerTimer       = 0f;
        _flickerTriggerTime = 1;
        //UI初始化
        _moveState.text = "";

        this.RefreshOneCanMoveArea(_whoRound);
    }
예제 #13
0
        public imageMap(absImageStream ais)
        {
            if (ais.scheme == absImageStream.schemeType.GPT)
            {
                GPTScheme gpts = new GPTScheme(ais);

                mapBlock block = new mapBlock();
                block.location = 0;

                if (gpts.protectiveMBRExists)
                {
                    block.length = 1;
                    block.name   = "MBR";
                    block.type   = tileType.MBR;

                    partitionblocks.Add(block);
                }

                if (gpts.headerFound)
                {
                    block.location = 1;
                    block.length   = 1;
                    block.name     = "GPT Header";
                    block.type     = tileType.GPT;

                    partitionblocks.Add(block);

                    block.location = gpts.tablestart;
                    block.length   = gpts.tablelength / ais.sectorSize;
                    if (block.length < 1)
                    {
                        block.length = 1;
                    }
                    block.name = "GPT Primary Table";
                    block.type = tileType.GPT;

                    partitionblocks.Add(block);
                }

                if (gpts.backupFound)
                {
                    block.location = gpts.backupHeader.mainheader;
                    block.length   = 1;
                    block.name     = "Backup GPT Header";
                    block.type     = tileType.GPT;

                    partitionblocks.Add(block);

                    block.location = gpts.backupHeader.tablestart;
                    block.length   = gpts.tablelength / ais.sectorSize;
                    if (block.length < 1)
                    {
                        block.length = 1;
                    }
                    block.name = "GPT Backup Table";
                    block.type = tileType.GPT;

                    partitionblocks.Add(block);
                }

                foreach (GPTScheme.entry entry in gpts.entries)
                {
                    block.location = entry.partStartLBA;
                    block.length   = entry.partLength;
                    block.name     = entry.name;
                    block.type     = tileType.vol_unknown;

                    if (gpts.findPartitionType(entry) == GPTScheme.partitionType.HFSPlus)
                    {
                        HFSPlus hfsp = new HFSPlus(ais, entry);

                        block.mapSectorsPerBlock = (int)hfsp.volHead.blockSize / ais.sectorSize;
                        forkStream fs = new forkStream(new volumeStream(hfsp), new HFSPlusFile(hfsp.volHead.allocationFile, forkStream.forkType.data), forkStream.forkType.data);

                        block.allocationMap = new byte[(int)fs.Length];
                        fs.Read(block.allocationMap, 0, (int)fs.Length);
                    }
                    else
                    {
                        block.allocationMap = null;
                    }

                    partitionblocks.Add(block);
                }
            }

            partitionblocks.Sort(CompareBlocksByPosition);
        }