public void Attach(mapBlock other) { startPoint = other.endPoint; instance.transform.position = startPoint; // 同时计算出endpoint }
private void doSwitch() { m_currentBlock = m_nextBlock; m_currentBlock.InitStartBlock(); // 生成一个新的 m_nextBlock = generateBlock(); m_nextBlock.Attach(m_currentBlock); }
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); }
public void InitStartPoint() { // 初始的时候先随机两个 System.Random rand = new System.Random(); m_currentBlock = generateBlock(); m_currentBlock.InitStartBlock(); m_nextBlock = generateBlock(); m_nextBlock.Attach(m_currentBlock); }
//初始化地圖方格座標 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))); } } }
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); }
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); } }
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); } }
private void recycleBlock(mapBlock block) { m_blockPool.Add(block); block.Deactive(); }
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); }
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; }
//初始化 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); }
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); }