public List<Vector3> move(Level level, Transform transform, TimeDirection timeD, out Vector3 rotation) { List <Vector3> movement = new List<Vector3>(); //might not want to return empty objects this often //move these to start rotation = Vector3.zero; //first check if grabbing something //might want to add delay before going further to allow for turning before moving block if(level.getEntity(transform.position,transform.TransformDirection(Vector3.forward)).type==states.block) { grabbing = true; } //otherwise turn to block else { List<Entity> temp = level.getsurroundingEntity(transform.position); { foreach(Entity entity in temp) { if(entity.type==states.block) { grabbing = true; float angle = Vector3.Angle(transform.TransformDirection(Vector3.forward),entity.obj.transform.position-transform.position); Vector3 cross = Vector3.Cross(transform.TransformDirection(Vector3.forward),entity.obj.transform.position-transform.position); rotation = (cross.y>0)?new Vector3(0,angle,0):new Vector3(0,-angle,0); return movement; } } } } //if block is in front if(grabbing) { if(transform.TransformDirection(Vector3.forward)==Vector3.right||transform.TransformDirection(Vector3.forward)==Vector3.left) { if (timeD.direction==Vector3.right) movement.Add (Vector3.right); else if(timeD.direction==Vector3.left) movement.Add (Vector3.left); } else if(transform.TransformDirection(Vector3.forward)==Vector3.forward||transform.TransformDirection(Vector3.forward)==Vector3.back) { if (timeD.direction==Vector3.forward) movement.Add (Vector3.forward); else if(timeD.direction==Vector3.back) movement.Add (Vector3.back); } else{ return new List<Vector3>(); } //if returning actual values, then fix up the moves to account for both objects if (movement.Count>0&&timeD.time>0.1f) return move_checks(level, movement,transform); } return new List<Vector3>(); }