Esempio n. 1
0
    protected override Vector3 AttemptMove(Layer2D layer, Direction dir)
    {
        var move = base.AttemptMove(layer, dir);

        // スタミナを減らす
        _stamina--;
        InGameManager.GetInstance().staminaText.text = "Stamina: " + Stamina;

        CheckIfGameOver();

        // ゴールがある場合リロード
        if (InGameManager.GetInstance().GoalCheck(ChipUtil.GetChipPos(new Vector2(move.x, move.y))))
        {
            // 遅延してリスタート
            Restart();

            // プレイヤーを一度無効
            enabled = false;
        }

        // プレイヤーのターンを終了する
        InGameManager.GetInstance().playersTurn = false;

        return(move);
    }
Esempio n. 2
0
    public void MoveEnemy(Layer2D layer)
    {
        int xDir = 0;
        int yDir = 0;

        if (Mathf.Abs(target.position.x - transform.position.x) < float.Epsilon)
        {
            yDir = target.position.y > transform.position.y ? 1 : -1;
        }

        else
        {
            xDir = target.position.x > transform.position.x ? 1 : -1;
        }

        var dir = ChipUtil.CreateDirection(new Vector2Int(xDir, yDir));

        AttemptMove(layer, dir);
    }
Esempio n. 3
0
    private void Update()
    {
        // 自分のターンじゃないとき処理しない
        if (!InGameManager.GetInstance().playersTurn)
        {
            return;
        }

        int horizontal = 0;     // 水平移動方向
        int vertical   = 0;     // 垂直移動方向

        // 水平移動方向設定
        horizontal = (int)(Input.GetAxisRaw("Horizontal"));
        // 垂直移動方向取得
        vertical = (int)(Input.GetAxisRaw("Vertical"));

        // 移動があるか確認
        if (horizontal != 0 || vertical != 0)
        {
            var dir  = ChipUtil.CreateDirection(new Vector2Int(horizontal, vertical));
            var list = InGameManager.GetInstance().LayerList;
            AttemptMove(list[(int)LayerType.Under], dir);
        }
    }
Esempio n. 4
0
    public override void Generate(List <Layer2D> layer)
    {
        // データ取得
        WIDTH  = layer[(int)LayerType.Under].Width;
        HEIGHT = layer[(int)LayerType.Under].Height;

        // 生成可能位置リストを取得
        var popList = new List <KeyValuePair <int, int> >();

        popList = GetGeneratedList(layer[(int)LayerType.Under]);

        // 生成可能位置にプレイヤーを作成

        int rand = Random.Range(0, popList.Count - 1);

        var token = Util.CreateToken(0.0f, 0.0f, "Sprites\\Tile\\goal", "", "Goal");

        token.Renderer.sortingOrder = 1;
        var x = popList[rand].Key;
        var y = popList[rand].Value;

        layer[(int)LayerType.Top].Set(x, y, (int)ChipType.Goal);
        token.SetPosition(ChipUtil.GetChipPos(new Vector2(x, y)));
    }
Esempio n. 5
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);
    }
Esempio n. 6
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;
    }
Esempio n. 7
0
    public Vector2Int GetChipPosition()
    {
        var cPos = ChipUtil.GetChipPos(transform.position);

        return(cPos);
    }
Esempio n. 8
0
    public void SetChipPosition(Vector2Int pos)
    {
        var wPos = ChipUtil.GetWorldPos(pos);

        base.SetPosition(wPos.x, wPos.y);
    }