public bool CanCast(Skill skill) { if (Core.Player.IsIncapacitated) { return(false); } if (!Core.Hotbar.ActivePowers.Contains(skill.SNOPower)) { return(false); } if (!HasEnoughCharges(skill)) { return(false); } if (!HasEnoughResource(skill)) { return(false); } PowerManager.CanCastFlags reason; if (!PowerManager.CanCast(skill.SNOPower, out reason)) { if (reason != PowerManager.CanCastFlags.PowerInvalidTarget || !AllowInvalidTargetPowers.Contains(skill.SNOPower)) { Core.Logger.Debug(LogCategory.Spells, $"PowerManager CanCast failed for {skill.SNOPower} with flags: {reason}"); return(false); } } return(true); }
public bool CanCast(Skill skill) { if (Core.Player.IsIncapacitated) { return(false); } var snoPower = skill.SNOPower; if (!Core.Hotbar.ActivePowers.Contains(snoPower)) { return(false); } if (!HasEnoughCharges(skill)) { return(false); } if (!HasEnoughResource(skill)) { return(false); } if (!PowerManager.CanCast(snoPower, out var reason)) { if (reason != PowerManager.CanCastFlags.PowerInvalidTarget || !AllowInvalidTargetPowers.Contains(snoPower)) { // TODO: This call is very expensive, 27636ms/31065ms spent in this func. // Core.Logger.Debug(LogCategory.Spells, $"PowerManager CanCast failed for {snoPower} with flags: {reason}"); return(false); } } return(true); }