Пример #1
0
 private void ConectBlock(int info, BitDirection dir, Vector2 pos)
 {
     //マスを確認して、つなげたらつなぐ
     if (CheckConect(dir, info) == true)
     {
         PutNextBlock((BitDirection)ReveseBit((int)dir), pos, info);
     }
 }
Пример #2
0
    // ブロックの通路を調べ、つなげるかどうかを判定
    private bool CheckConect(BitDirection dir, int info)
    {
        // 判定方向に道がない
        if ((info & (int)dir) == 0)
        {
            return(false);
        }

        return(true);
    }
Пример #3
0
    // 現在判定している通路に合うように回転させ,次に置くブロックを選択
    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);
    }
Пример #4
0
        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);
        }
Пример #5
0
 /// <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;
 }
Пример #6
0
 /// <summary>
 ///     Initalizez stream wrapping internal memory stream
 /// </summary>
 /// <param name="direction"></param>
 public BitStream(BitDirection direction)
 {
     _direction = direction;
     Inner      = new MemoryStream();
 }
Пример #7
0
 public static BitStream FromBytes(BitDirection direction, params byte[] bytes)
 {
     return(new BitStream(direction, new MemoryStream(bytes)));
 }