Ejemplo n.º 1
0
        public Vector2 GetMissilePosition(int time)
        {
            var t = Math.Max(0, Utils.GameTimeTickCount + time - StartTick - SpellData.Delay);
            int x;

            if (SpellData.MissileAccel == 0)
            {
                x = t * SpellData.MissileSpeed / 1000;
            }
            else
            {
                var t1 = (SpellData.MissileAccel > 0
                    ? SpellData.MissileMaxSpeed
                    : SpellData.MissileMinSpeed - SpellData.MissileSpeed) * 1000f / SpellData.MissileAccel;
                x = t <= t1
                    ? (int)
                    (t * SpellData.MissileSpeed / 1000d + 0.5d * SpellData.MissileAccel * Math.Pow(t / 1000d, 2))
                    : (int)
                    (t1 * SpellData.MissileSpeed / 1000d + 0.5d * SpellData.MissileAccel * Math.Pow(t1 / 1000d, 2) +
                     (t - t1) / 1000d *
                     (SpellData.MissileAccel < 0 ? SpellData.MissileMaxSpeed : SpellData.MissileMinSpeed));
            }
            t = (int)Math.Max(0, Math.Min(CollisionEnd.Distance(Start), x));
            return(Start + Direction * t);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Returns the missile position after time time.
        /// </summary>
        public Vector2 GetMissilePosition(int time)
        {
            var t = Math.Max(0, Environment.TickCount + time - StartTick - SpellData.Delay);

            t = (int)Math.Max(0, Math.Min(CollisionEnd.Distance(Start), t * SpellData.MissileSpeed / 1000));
            return(Start + Direction * t);
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Returns the missile position after time time.
        /// </summary>
        public Vector2 GetMissilePosition(int time)
        {
            var t = Math.Max(0, Utils.TickCount + time - StartTick - SpellData.Delay);
            var x = 0;

            // Missile with acceleration = 0.
            if (SpellData.MissileAccel == 0)
            {
                x = t * SpellData.MissileSpeed / 1000;
            }
            // Missile with constant acceleration.
            else
            {
                var t1 = (SpellData.MissileAccel > 0
                    ? SpellData.MissileMaxSpeed
                    : SpellData.MissileMinSpeed - SpellData.MissileSpeed) * 1000f / SpellData.MissileAccel;

                if (t <= t1)
                {
                    x = (int)(t * SpellData.MissileSpeed / 1000d + 0.5d * SpellData.MissileAccel * Math.Pow(t / 1000d, 2));
                }
                else
                {
                    x = (int)(t1 * SpellData.MissileSpeed / 1000d + 0.5d * SpellData.MissileAccel * Math.Pow(t1 / 1000d, 2)
                              + (t - t1) / 1000d * (SpellData.MissileAccel < 0 ? SpellData.MissileMinSpeed : SpellData.MissileMaxSpeed));
                }
            }

            t = (int)Math.Max(0, Math.Min(CollisionEnd.Distance(Start), x));
            return(Start + Direction * t);
        }
Ejemplo n.º 4
0
 public void OnCollisionExit(Collision collision)
 {
     CollisionEnd.Invoke(collision);
 }