Exemple #1
0
    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);
    }
Exemple #2
0
    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 }));
    }