void MoveComplete()
    {
        ClipName = NewName;                   // change animal's clip name

        if (target != null)                   // when animal moved
        {
            target.ClipName = target.NewName; // change target's animal's clip name

            // check 3matched animals
            if (manager.CheckMatch(this) || manager.CheckMatch(target))
            {
                anim.Play(ClipName);
                target.anim.Play(target.ClipName);
                transform.localPosition        = oldPos;
                target.transform.localPosition = target.oldPos;
                manager.isMoving = false; // enable gravity
            }
            else // nothing matched animals
            {
                // back to original position
                target.Move(target.oldPos, ClipName);
                Move(oldPos, target.ClipName);
            }
            target = null;
        }
    }
Exemplo n.º 2
0
    /// <summary>
    /// ブロックオブジェクトの移動が終わると呼び出される。
    /// manager.isMovingをfalseにしてすべてのオブジェクトが移動できるようにする。
    /// オブジェクトの重力(useGravity)はmanager.isMovingの逆。
    /// オブジェクトの入れ替えが終わってないと重力がfalseになり、他のオブジェクトが重力の影響を受けないようになる。
    /// 入れ替えが終わったら重力がtrueになって重力の影響を受けるようになる。
    /// これは二つのオブジェクトを入れ替える途中で、上にあるオブジェクトが落ちないようにするメソッドである。
    /// </summary>
    void MoveComplete()
    {
        ClipName = NewName;                   // ターゲットのClipNameに変える。

        if (target != null)                   // プレイヤーが動かしたオブジェクトである場合に、このルーチンを実行する。
        {
            target.ClipName = target.NewName; // ターゲットオブジェクトのClipNameをも変える。

            // 選択したオブジェクトあるいは入れ替えたターゲット、この二つの中で1個でもマッチするものがあるかをチェック
            if (manager.CheckMatch(this) || manager.CheckMatch(target))
            {
                // 新たに設定したClipNameでアニメーションをやり直す。
                // 実際イメージがこのときから交代される。
                anim.Play(ClipName);
                target.anim.Play(target.ClipName);

                // オブジェクトの種類がすでにターゲットの種類に変えられた時点なので、
                // 座標を元に戻して、入れ替えられたように見せかける。
                transform.localPosition        = oldPos;
                target.transform.localPosition = target.oldPos;

                manager.isMoving = false; // 移動が終わったら、重力を働かせる。
            }
            else // 入れ替えた二つのオブジェクトの中で一つもマッチしないなら
            {
                // 二つのオブジェクトを元の位置に戻す。
                target.Move(target.oldPos, ClipName);
                Move(oldPos, target.ClipName);
            }
            target = null;
        }
    }
Exemplo n.º 3
0
    /*
     * 캐릭터의 이동이 끝나면 호출되는 함수
     * manager.isMoving를 false로 바꿔서 모든 캐릭터가 다시 이동할 수 있게 해준다.
     * 캐릭터의 중력(useGravity)을 manager.isMoving과 반대로 설정하고 있기 때문에
     * 캐릭터가 이동중이면 중력이 false로 되어 다른 캐릭터들이 중력의 영향을 받지 않게 되고,
     * 이동이 끝나면 다시 중력이 true로 바뀌어서 중력의 영향을 받게 된다.
     * 이것은 캐릭터 2개가 서로의 위치로 이동하는 동안 위쪽에 있는 캐릭터들이 내려오지
     * 못하게 하기 위한 것이다.
     */
    void MoveComplete()
    {
        ClipName = NewName;                   // 상대방 위치의 캐릭터명으로 바꿔준다.

        if (target != null)                   // 플레이어가 움직인 캐릭터인 경우에만 아래 루틴을 실행한다.
        {
            target.ClipName = target.NewName; // 타겟의 캐릭터명도 바꿔준다.

            // 현재 캐릭터 혹은 교환된 상대방 캐릭터 중에 1개라도 매치된 블럭이 있는지 체크한다.
            if (manager.CheckMatch(this) || manager.CheckMatch(target))
            {
                // 새로 설정된 캐릭터명으로 애니메이션을 다시 시작한다.
                // 실제로 이미지가 이 순간부터 교체된다.
                anim.Play(ClipName);
                target.anim.Play(target.ClipName);

                // 캐릭터 종류가 이미 상대방 캐릭터로 바뀐 상태이기 때문에,
                // 좌표를 원래 위치로 되돌려, 서로 교환된 것처럼 눈속임한다.
                transform.localPosition        = oldPos;
                target.transform.localPosition = target.oldPos;

                manager.isMoving = false; // 캐릭터들의 중력을 다시 적용시킨다.
            }
            else // 교환된 캐릭터 2개 중에 1개도 매치되지 않은 경우
            {
                // 2개의 캐릭터를 모두 원래 위치로 돌아가게 한다.
                target.Move(target.oldPos, ClipName);
                Move(oldPos, target.ClipName);
            }
            target = null;
        }
    }