예제 #1
0
파일: Skillshot.cs 프로젝트: riwalry1/AIO
        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.LSDistance(Start), x));
            return(Start + Direction * t);
        }
예제 #2
0
        /// <summary>
        ///     Returns the missile position after time time.
        /// </summary>
        public Vector2 GetMissilePosition(int time)
        {
            var t = Math.Max(0, System.Environment.TickCount + time - StartTick - SkillshotData.Delay);


            var x = 0;

            //Missile with acceleration = 0.
            if (SkillshotData.MissileAccel == 0)
            {
                x = t * SkillshotData.MissileSpeed / 1000;
            }

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

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

            t = (int)Math.Max(0, Math.Min(CollisionEnd.LSDistance(StartPosition), x));
            return(StartPosition + Direction * t);
        }