コード例 #1
0
ファイル: I_Tetrimino.cs プロジェクト: nanbokku/tetris
    public override void Rotate(Data.DirectionX direction)
    {
        var nextRot = Rotation;

        nextRot = Rotation == Data.BlockRotation.Normal ? Data.BlockRotation.Right : Data.BlockRotation.Normal;

        CheckAndRotate(nextRot, rotCoodinate);
    }
コード例 #2
0
    // 指定した方向にブロックが接触しているか判定する
    // MEMO: 衝突判定イベントでブロックが接触しているか判定するのではどうしてもずれが生じたため,移動前にこのメソッドで接触していないか確認する
    public bool IsTouchingInOtherBlock(Data.DirectionX direction)
    {
        var distance = DistanceToOtherBlock(direction);

        // 接触していない
        if (distance < 0 || distance > Data.BlockInterval.x)
        {
            return(false);
        }

        return(true);
    }
コード例 #3
0
ファイル: Tetrimino.cs プロジェクト: nanbokku/tetris
    // direction方向に接触しているか
    protected bool IsTouchingIn(Data.DirectionX direction)
    {
        foreach (var block in Blocks)
        {
            if (block.IsTouchingInOtherBlock(direction))
            {
                return(true);
            }
        }

        return(false);
    }
コード例 #4
0
    public override void Translate(Data.DirectionX direction)
    {
        if (IsTouchingIn(direction))
        {
            return;
        }

        transform.Translate((int)direction * Data.BlockInterval.x, 0f, 0f);

        foreach (var block in Blocks)
        {
            var pos = block.Position;
            block.Position = new Data.BlockPosition(pos.x + (int)direction, pos.y);
        }
    }
コード例 #5
0
    // 指定した方向にある,最も近い他ブロックとの距離を求める
    // 他ブロック以外のものが指定方向にある場合は負の値を返す.
    private float DistanceToOtherBlock(Data.DirectionX direction)
    {
        var        ray = new Ray(this.transform.position, Vector3.right * (int)direction);
        RaycastHit hit;

        if (!Physics.Raycast(ray.origin, ray.direction, out hit, Mathf.Infinity))
        {
            return(-1);
        }

        // 同じテトリミノを構成するブロックは無視
        if (hit.collider.transform.parent == this.transform.parent)
        {
            return(-1);
        }

        return(hit.distance);
    }
コード例 #6
0
    public override void Rotate(Data.DirectionX direction)
    {
        var nextRot = Rotation;

        // 左向きの状態で右回転をしたとき,Normal状態に戻す
        if (direction == Data.DirectionX.Right && Rotation == Data.BlockRotation.Left)
        {
            nextRot = Data.BlockRotation.Normal;
        }
        // 通常状態で左回転をしたとき,Left状態にする
        else if (direction == Data.DirectionX.Left && Rotation == Data.BlockRotation.Normal)
        {
            nextRot = Data.BlockRotation.Left;
        }
        else
        {
            nextRot += (int)direction;
        }

        CheckAndRotate(nextRot, rotCoodinate);
    }
コード例 #7
0
ファイル: Player.cs プロジェクト: nanbokku/tetris
    private void Translate(Data.DirectionX dir)
    {
        // 前回と移動方向が異なる場合
        if (prevdir != dir)
        {
            prevdir  = dir;
            prevtime = Time.time;

            OnTranslated(dir);
            return;
        }

        // 一定の時間間隔で移動
        if (Time.time - prevtime < MinTranslationInterval)
        {
            return;
        }

        prevtime = Time.time;

        OnTranslated(dir);
    }
コード例 #8
0
ファイル: Tetrimino.cs プロジェクト: nanbokku/tetris
 public abstract void Rotate(Data.DirectionX direction);
コード例 #9
0
ファイル: Tetrimino.cs プロジェクト: nanbokku/tetris
 public abstract void Translate(Data.DirectionX direction);
コード例 #10
0
ファイル: O_Tetrimino.cs プロジェクト: nanbokku/tetris
 public override void Rotate(Data.DirectionX direction)
 {
 }