public static void RecordSpell(TrinityPower power)
        {
            if (_history.Count >= SpellHistorySize)
            {
                _history.RemoveAt(0);
            }

            // todo, need a better way than looking up skill again.
            var skill = power.GetSkill();

            if (skill != null)
            {
                if (skill.IsAttackSpender)
                {
                    _lastSpenderCast = DateTime.UtcNow;
                }

                if (skill.IsGeneratorOrPrimary)
                {
                    _lastGeneratorCast = DateTime.UtcNow;
                }
            }

            _history.Add(new SpellHistoryItem
            {
                Power          = power,
                UseTime        = DateTime.UtcNow,
                MyPosition     = Core.Player.Position,
                TargetPosition = power.TargetPosition,
                TargetAcdId    = power.TargetAcdId,
            });

            LastSpellUseTime = DateTime.UtcNow;
            LastPowerUsed    = power.SNOPower;
        }
        public static void RecordSpell(SNOPower power, int targetAcdId)
        {
            SpellTracker.TrackSpellOnUnit(targetAcdId, power);
            var p = new TrinityPower(power)
            {
                TargetAcdId = targetAcdId
            };

            RecordSpell(p);
        }
        public static void RecordSpell(SNOPower power, Vector3 position, int targetAcdId)
        {
            SpellTracker.TrackSpellOnUnit(targetAcdId, power);
            var p = new TrinityPower(power)
            {
                TargetAcdId    = targetAcdId,
                TargetPosition = position,
            };

            RecordSpell(p);
        }