/// <summary> /// Gets called when a skillshot is detected, take into account that it can trigger twice for the same skillshot, one when OnProcessSpellCast is called and another when OnMissileCreate is called. /// </summary> /// <param name="skillshot">The detected skillshot</param> private static void TriggerOnDetectSkillshot(Skillshot skillshot) { OnDetectSkillshot?.Invoke(skillshot); }
private static void TriggerOnDetectSkillshot(SpellDatabaseEntry spellDatabaseEntry, AIBaseClient caster, SkillshotDetectionType detectionType, Vector2 start, Vector2 end, int time, MissileClient missile = null) { Skillshot skillshot = null; switch (spellDatabaseEntry.SpellType) { case SpellType.SkillshotMissileArc: skillshot = new SkillshotMissileArc(spellDatabaseEntry); break; case SpellType.SkillshotMissileCircle: skillshot = new SkillshotMissileCircle(spellDatabaseEntry); break; case SpellType.SkillshotMissileLine: skillshot = new SkillshotMissileLine(spellDatabaseEntry); break; case SpellType.SkillshotCircle: skillshot = new SkillshotCircle(spellDatabaseEntry); break; case SpellType.SkillshotCone: skillshot = new SkillshotCone(spellDatabaseEntry); break; case SpellType.SkillshotLine: skillshot = new SkillshotLine(spellDatabaseEntry); break; case SpellType.SkillshotRing: skillshot = new SkillshotRing(spellDatabaseEntry); break; } if (skillshot == null) { return; } var type = Type.GetType( $"EnsoulSharp.SDK.Core.Wrappers.Spells.Detector.Skillshots_{skillshot.SData.ChampionName}{skillshot.SData.Slot}"); if (type != null) { skillshot = (Skillshot)Activator.CreateInstance(type); } skillshot.DetectionType = detectionType; skillshot.Caster = caster; skillshot.StartPosition = start; skillshot.EndPosition = end; skillshot.StartTime = time; if (missile != null) { try { ((SkillshotMissile)skillshot).Missile = missile; } catch (Exception) { Logging.Write()(LogLevel.Warn, "Wrong SpellType for Skillshot {0}, a Missile Type was expected", skillshot.SData.SpellName); } } if (!skillshot.Process()) { return; } TriggerOnDetectSkillshot(skillshot); }