Пример #1
0
    protected Vector3 Move(Layer2D layer, Direction dir)
    {
        //// 移動開始場所
        //var start = new Vector3(ChipUtill.GetChipX(PosX), ChipUtill.GetChipY(PosY), 0.0f);
        var end2d = ChipUtil.MoveToPosition(GetChipPosition(), dir);
        var end   = new Vector3(ChipUtil.GetWorldPosX(end2d.x), ChipUtil.GetWorldPosY(end2d.y), 0.0f);

        // 移動先まであたり判定
        //boxCollider.enabled = false;
        //hit = Physics2D.Linecast(start, end, blockingLayer);
        //boxCollider.enabled = true;

        // 当たっていなかったら移動
        var type = ChipUtil.GetExistsChip(layer, end2d);

        if ((type != ChipType.Wall) && (type != ChipType.None))
        {
            var time = _moveTime;

            if ((dir & global::Direction.Dash) != 0)
            {
                time = 0.001f;
            }

            // 移動
            if (m_moveTween == null)
            {
                m_moveTween = this.gameObject.transform
                              .DOLocalMove(new Vector3(end.x, end.y, 0.0f)
                                           , time).OnComplete(() => { m_moveTween = null; });
            }
            return(end);
        }

        return(end);
    }
Пример #2
0
    public override void Generate(List <Layer2D> layer)
    {
        // データ取得
        WIDTH  = layer[(int)LayerType.Under].Width;
        HEIGHT = layer[(int)LayerType.Under].Height;

        // 初期化
        // 2次元配列初期化
        _layer = new Layer2D(WIDTH, HEIGHT);

        // 区画リスト作成
        _divList = new List <DgDivision>();

        // すべてを壁にする
        _layer.Fill((int)ChipType.Wall);

        // 最初の区画を作る
        CreateDivision(0, 0, WIDTH - 1, HEIGHT - 1);

        // 区画を分割する
        // 垂直 or 水平分割フラグの決定
        for (int i = 0; i < 5; i++)
        {
            bool bVertical = (Random.Range(0, 2) == 0);
            SplitDivison(bVertical);
        }
        // 区画に部屋を作る
        CreateRoom();

        // 部屋同士をつなぐ
        for (int i = 0; i < 2; i++)
        {
            ConnectRooms();
        }

        // デバッグ出力
        foreach (var div in _divList)
        {
            div.Dump();
        }
        _layer.Dump();

        // タイルを配置
        var dangeon = new GameObject("Dangeon");

        Sprite[] sprites = Resources.LoadAll <Sprite>(filePath + fileName);
        for (int j = 0; j < _layer.Height; j++)
        {
            for (int i = 0; i < _layer.Width; i++)
            {
                if (_layer.Get(i, j) == (int)ChipType.Wall)
                {
                    int    a    = Random.Range(25, 28);
                    string name = fileName + "_" + a.ToString();

                    // 壁生成
                    float x = ChipUtil.GetWorldPosX(i);
                    float y = ChipUtil.GetWorldPosY(j);
                    Util.CreateToken(x, y, filePath + fileName, name, "Wall")
                    .transform.parent = dangeon.transform;
                }
                else if (_layer.Get(i, j) == (int)ChipType.Road)
                {
                    int    a    = Random.Range(32, 39);
                    string name = fileName + "_" + a.ToString();
                    // 壁生成
                    float x = ChipUtil.GetWorldPosX(i);
                    float y = ChipUtil.GetWorldPosY(j);
                    Util.CreateToken(x, y, filePath + fileName, name, "Road")
                    .transform.parent = dangeon.transform;
                }
            }
        }

        layer[(int)LayerType.Under] = _layer;
    }