public static int GetRotationToShip(GameObject player, GameObject comet) { double x = 0; double y = 0; double rotZ; Direction dir = Environment2.GenerateDirection(player, comet); //right up corner if (dir.directionX > 0 && dir.directionY > 0) { if (dir.directionX < dir.directionY) { rotZ = 360 - (1 - ((dir.directionY - dir.directionX) / dir.directionY)) * 45; } else { rotZ = 315 - ((dir.directionX - dir.directionY) / dir.directionX) * 45; } } else //right down corner = 270degrees { if (dir.directionX > 0 && dir.directionY < 0) { if (dir.directionX > Mathf.Abs((float)dir.directionY)) { rotZ = 270 - (1 - ((dir.directionX - Mathf.Abs((float)dir.directionY)) / dir.directionX)) * 45; } else { rotZ = 225 - ((Mathf.Abs((float)dir.directionY) - dir.directionX) / Mathf.Abs((float)dir.directionY)) * 45; } } else //left down corner - rotation left = 90degrees { if (dir.directionX < 0 && dir.directionY < 0) { if (Mathf.Abs((float)dir.directionX) < Mathf.Abs((float)dir.directionY)) { rotZ = 180 - (1 - ((Mathf.Abs((float)dir.directionY) - Mathf.Abs((float)dir.directionX)) / Mathf.Abs((float)dir.directionY))) * 45; } else { rotZ = 135 - ((Mathf.Abs((float)dir.directionX) - Mathf.Abs((float)dir.directionY)) / Mathf.Abs((float)dir.directionX)) * 45; } } else //left up corner { if (Mathf.Abs((float)dir.directionX) > dir.directionY) { rotZ = 90 - (1 - ((Mathf.Abs((float)dir.directionX) - Mathf.Abs((float)dir.directionY)) / Mathf.Abs((float)dir.directionX))) * 45; } else { rotZ = 45 - ((Mathf.Abs((float)dir.directionY) - Mathf.Abs((float)dir.directionX)) / Mathf.Abs((float)dir.directionY)) * 45; } } } } rotZ -= player.transform.eulerAngles.z; if (rotZ > 360) { rotZ -= 360; } else { if (rotZ < 0) { rotZ += 360; } } return((int)rotZ); }
public static List <double> GetRotationAndPositionOfArrow(GameObject player, GameObject comet) { double x = 0; double y = 0; double rotZ; Direction dir = Environment2.GenerateDirection(player, comet); //right up corner if (dir.directionX > 0 && dir.directionY > 0) { if (dir.directionX < dir.directionY) { rotZ = 360 - (1 - ((dir.directionY - dir.directionX) / dir.directionY)) * 45; } else { rotZ = 315 - ((dir.directionX - dir.directionY) / dir.directionX) * 45; } } else //right down corner = 270degrees { if (dir.directionX > 0 && dir.directionY < 0) { if (dir.directionX > Mathf.Abs((float)dir.directionY)) { rotZ = 270 - (1 - ((dir.directionX - Mathf.Abs((float)dir.directionY)) / dir.directionX)) * 45; } else { rotZ = 225 - ((Mathf.Abs((float)dir.directionY) - dir.directionX) / Mathf.Abs((float)dir.directionY)) * 45; } } else //left down corner - rotation left = 90degrees { if (dir.directionX < 0 && dir.directionY < 0) { if (Mathf.Abs((float)dir.directionX) < Mathf.Abs((float)dir.directionY)) { rotZ = 180 - (1 - ((Mathf.Abs((float)dir.directionY) - Mathf.Abs((float)dir.directionX)) / Mathf.Abs((float)dir.directionY))) * 45; } else { rotZ = 135 - ((Mathf.Abs((float)dir.directionX) - Mathf.Abs((float)dir.directionY)) / Mathf.Abs((float)dir.directionX)) * 45; } } else //left up corner { if (Mathf.Abs((float)dir.directionX) > dir.directionY) { rotZ = 90 - (1 - ((Mathf.Abs((float)dir.directionX) - Mathf.Abs((float)dir.directionY)) / Mathf.Abs((float)dir.directionX))) * 45; } else { rotZ = 45 - ((Mathf.Abs((float)dir.directionY) - Mathf.Abs((float)dir.directionX)) / Mathf.Abs((float)dir.directionY)) * 45; } } } } y = Mathf.Cos((float)(rotZ * 0.0174532925)); x = Mathf.Sin((float)(rotZ * 0.0174532925)) * -1; return(new List <double>(new double[] { rotZ, x, y })); }