예제 #1
0
        public DistanceEffect(TibiaGameData GameData, int ID, MapPosition From, MapPosition To)
        {
            this.ID = ID;
            Sprite  = GameData.GetDistanceEffectSprite(ID);

            int dx = To.X - From.X;
            int dy = To.Y - From.Y;

            /*
             * 0 = NW
             * 1 = N
             * 2 = NE
             * 3 = W
             * 4 = C
             * 5 = E
             * 6 = SW
             * 7 = S
             * 8 = SE
             * */

            double tan = 10;

            if (dx != 0)
            {
                tan = (float)dy / (float)dx;
            }

            if (Math.Abs(tan) < 0.4142f)
            {
                if (dx > 0)
                {
                    Frame = 5;            // EAST
                }
                else
                {
                    Frame = 3;// WEST
                }
            }
            else if (Math.Abs(tan) < 2.4142f)
            {
                if (tan > 0)
                {
                    if (dy > 0)
                    {
                        Frame = 8;// SOUTH EAST
                    }
                    else
                    {
                        Frame = 0;// NORTH WEST;
                    }
                }
                else
                { //tan < 0
                    if (dx > 0)
                    {
                        Frame = 2;// NORTH EAST;
                    }
                    else
                    {
                        Frame = 6;// SOUTH WEST
                    }
                }
            }
            else
            {
                if (dy > 0)
                {
                    Frame = 7;// SOUTH
                }
                else
                {
                    Frame = 1;// NORTH
                }
            }

            Duration = Math.Sqrt(dx * dx + dy * dy) / 10;
            Offset   = new Vector2(
                (From.X - Math.Max(From.X, To.X)) * 32,
                (From.Y - Math.Max(From.Y, To.Y)) * 32
                );
            Speed = new Vector2(Math.Sign(dx) * 160, Math.Sign(dy) * 160);
            //Speed -= Offset;
        }