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; } }
/// <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; } }
/* * 캐릭터의 이동이 끝나면 호출되는 함수 * 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; } }