private void ConectBlock(int info, BitDirection dir, Vector2 pos) { //マスを確認して、つなげたらつなぐ if (CheckConect(dir, info) == true) { PutNextBlock((BitDirection)ReveseBit((int)dir), pos, info); } }
// ブロックの通路を調べ、つなげるかどうかを判定 private bool CheckConect(BitDirection dir, int info) { // 判定方向に道がない if ((info & (int)dir) == 0) { return(false); } return(true); }
// 現在判定している通路に合うように回転させ,次に置くブロックを選択 private void PutNextBlock(BitDirection dir, Vector2 position, int info) { int length = _mapGen.GetRoomInfos().Length; OneRoomInfo nextInfo = _mapGen.GetRoomInfos()[Random.Range(1, length)]; // プレハブリストからランダムに取得 //通路データを取得 _nextBlock = nextInfo; int nextCorridor = nextInfo.passagePos; // 3回転以内でつながる int i = 0; // TDOO: このループ気持ち悪いので今度直す while (i < 3) { // つながってなかったら if (((int)dir & nextCorridor) == 0 // もしくは 右にも手前にも通路がなかったら回転する || ((nextCorridor & (int)BitDirection.RIGHT) == 0 && (nextCorridor & (int)BitDirection.FRONT) == 0)) { // Bitデータを回転 nextCorridor = RotateBitClockwise(nextCorridor); i++; } else { break; } } // オブジェクトの座標を計算 Vector3 pos = new Vector3(position.x * _mapGen.ModelSize, 0, position.y * (-_mapGen.ModelSize)); // オブジェクトの回転量を計算 Quaternion rot = Quaternion.identity; rot = Quaternion.Euler(0.0f, 90.0f * i, 0.0f); // オブジェクトの生成 var block = Instantiate(_nextBlock, pos, rot, gameObject.transform); // つくったオブジェクトを配列に格納 block.passagePos = nextCorridor; _mapGen._maps[(int)position.x, (int)position.y] = block; _mapGen._rooms.Add(block); }
public void WriteBitThenBytesLsb(BitDirection direction) { BitStream stream = new BitStream(direction); stream.WriteBit(true); stream.Write(BitConverter.GetBytes((ushort)0xFFFF)); stream.Flush(); stream.Seek(0, SeekOrigin.Begin); Assert.Equal(1, stream.ReadBit()); Span <byte> bytes = new byte[2]; stream.Read(bytes); ushort us = BitConverter.ToUInt16(bytes); Assert.Equal(0xFFFF, us); }
/// <summary> /// Initializes inner stream, which this instance of bitstream will operate on /// </summary> /// <param name="direction"></param> /// <param name="inner"></param> public BitStream(BitDirection direction, Stream inner) { _direction = direction; Inner = inner; }
/// <summary> /// Initalizez stream wrapping internal memory stream /// </summary> /// <param name="direction"></param> public BitStream(BitDirection direction) { _direction = direction; Inner = new MemoryStream(); }
public static BitStream FromBytes(BitDirection direction, params byte[] bytes) { return(new BitStream(direction, new MemoryStream(bytes))); }