Guest User

Untitled

a guest
Jan 9th, 2015
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #pragma strict
  2.  
  3. var speed: float = 2.5; // flops per second
  4. var size: float = 1; // block size
  5.  
  6. var flopping = false;
  7.  
  8. function Update(){
  9.  
  10.     var move = Vector2(Input.GetAxis("Horizontal"), Input.GetAxis("Vertical"));
  11.     if (move.magnitude > 0.2) Flop(move);
  12. }
  13.  
  14. function Flop(movDir: Vector2){
  15.  
  16.     var pivot: Vector3;
  17.     var dir: Vector3;
  18.      
  19.     if (flopping) return; // ignore other commands while flopping
  20.     flopping = true; // signals it's flopping
  21.     if (movDir.y > 0){ // move forward?
  22.         dir = Vector3.forward; // will flop forward
  23.         pivot = Vector3(0,-1,1); // defines point around which rotate
  24.     }
  25.     else
  26.         if (movDir.y < 0){
  27.             dir = -Vector3.forward;
  28.             pivot = Vector3(0,-1,-1);
  29.         }
  30.         else
  31.             if (movDir.x < 0){
  32.                 dir = -Vector3.right;
  33.                 pivot = Vector3(-1,-1,0);
  34.             }
  35.             else
  36.                 if (movDir.x > 0){
  37.                     dir = Vector3.right;
  38.                     pivot = Vector3(1,-1,0);
  39.                 }
  40.     AlignBlock(); // aligns block to grid before flopping
  41.     // calculates the point around which the block will flop
  42.     pivot = transform.position + (pivot * size / 2);
  43.     var org = transform.position - pivot;
  44.     var dest = (transform.position + dir * size) - pivot;
  45.     var rot0 = transform.rotation;
  46.     var rot1 = Quaternion.FromToRotation(org, dest) * rot0;
  47.     var a: float = 0;
  48.     while (a < 1){
  49.         var dt = Time.deltaTime * speed;
  50.         a += dt;
  51.         transform.position = Vector3.Slerp(org, dest, a) + pivot;
  52.         transform.rotation = Quaternion.Lerp(rot0, rot1, a);
  53.         yield;
  54.     }
  55.     if (audio) audio.Play(); // makes the flop sound
  56.     flopping = false;
  57. }
  58.  
  59.     private function AlignBlock(){
  60.  
  61.         var angles = transform.eulerAngles;
  62.         // forces euler angles to be multiple of 90
  63.         angles.x = 90 * Mathf.RoundToInt(angles.x / 90);
  64.         angles.y = 90 * Mathf.RoundToInt(angles.y / 90);
  65.         angles.z = 90 * Mathf.RoundToInt(angles.z / 90);
  66.         transform.eulerAngles = angles;
  67.         var pos = transform.position;
  68.         // forces x and z to be in a grid
  69.         pos.x = size * Mathf.RoundToInt(pos.x / size);
  70.         pos.z = size * Mathf.RoundToInt(pos.z / size);
  71.         if (!rigidbody) pos.y = size * Mathf.RoundToInt(pos.y / size);
  72.         transform.position = pos;
  73.     }
Advertisement
Add Comment
Please, Sign In to add comment