コード例 #1
0
        public void Reset()
        {
            Creatures.Clear();
            Targets.Clear();
            DamageDone.Clear();
            DamageTaken.Clear();
            Deads.Clear();

            CombatCreatureGuid.Reset();
            CombatDamageDoneGuid.Reset();
            CombatDamageTakenGuid.Reset();
            CombatDeadGuid.Reset();
        }
コード例 #2
0
        public void PollingRate(int rate, long fightDuration, bool forceInterpolate)
        {
            if (forceInterpolate && Positions.Count == 0)
            {
                Positions.Add(new Point3D(short.MinValue, short.MinValue, 0, 0));
                Deads.Add(new Tuple <long, long>(0, fightDuration));
            }
            if (Positions.Count == 0)
            {
                _start = -1;
                _end   = -1;
                return;
            }
            else if (Positions.Count == 1 && !forceInterpolate)
            {
                Velocities = null;
                return;
            }
            List <Point3D> interpolatedPositions = new List <Point3D>();
            int            tablePos        = 0;
            Point3D        currentVelocity = null;

            for (int i = -50 * rate; i < fightDuration; i += rate)
            {
                Point3D pt = Positions[tablePos];
                if (i <= pt.Time)
                {
                    currentVelocity = null;
                    interpolatedPositions.Add(new Point3D(pt.X, pt.Y, pt.Z, i));
                }
                else
                {
                    if (tablePos == Positions.Count - 1)
                    {
                        interpolatedPositions.Add(new Point3D(pt.X, pt.Y, pt.Z, i));
                    }
                    else
                    {
                        Point3D ptn = Positions[tablePos + 1];
                        if (ptn.Time < i)
                        {
                            tablePos++;
                            currentVelocity = null;
                            i -= rate;
                        }
                        else
                        {
                            Point3D last     = interpolatedPositions.Last().Time > pt.Time ? interpolatedPositions.Last() : pt;
                            Point3D velocity = Velocities.Find(x => x.Time <= i && x.Time > last.Time);
                            currentVelocity = velocity ?? currentVelocity;
                            if (ptn.Time - pt.Time < 400)
                            {
                                float ratio = (float)(i - pt.Time) / (ptn.Time - pt.Time);
                                interpolatedPositions.Add(new Point3D(pt, ptn, ratio, i));
                            }
                            else
                            {
                                if (currentVelocity == null || (Math.Abs(currentVelocity.X) <= 1e-1 && Math.Abs(currentVelocity.Y) <= 1e-1))
                                {
                                    interpolatedPositions.Add(new Point3D(last.X, last.Y, last.Z, i));
                                }
                                else
                                {
                                    float ratio = (float)(i - last.Time) / (ptn.Time - last.Time);
                                    interpolatedPositions.Add(new Point3D(last, ptn, ratio, i));
                                }
                            }
                        }
                    }
                }
            }
            Positions  = interpolatedPositions.Where(x => x.Time >= 0).ToList();
            Velocities = null;
        }