public bool Validate(ILogger log) { if (!Effects.Any()) { log.LogWarning(CompilationMessage.From($"Type {Host.FullName} has defined as an aspect, but lacks any effect.", Host)); } if (Host.HasGenericParameters) { log.LogError(CompilationMessage.From($"Aspect {Host.FullName} should not have generic parameters.", Host)); return(false); } if (Host.IsAbstract) { log.LogError(CompilationMessage.From($"Aspect {Host.FullName} cannot be static nor abstract.", Host)); return(false); } if (GetFactoryMethod() == null) { if (Factory != null) { log.LogError(CompilationMessage.From($"Type {Factory.FullName} should have 'public static object GetInstance(Type)' method in order to be aspect factory.", Host)); } else { log.LogError(CompilationMessage.From($"Aspect {Host.FullName} has no parameterless public constructor nor valid factory.", Host.Methods.First(m => m.IsConstructor && !m.IsStatic))); } return(false); } return(Effects.All(e => e.Validate(this, log))); }
public bool Validate(BaseModuleWeaver weaver) { if (!Effects.Any()) { weaver.LogWarning($"Type {Host.FullName} has defined as an aspect, but lacks any effect."); } if (Host.HasGenericParameters) { weaver.LogError($"Aspect {Host.FullName} should not have generic parameters."); return(false); } if (Host.IsAbstract) { weaver.LogError($"Aspect {Host.FullName} cannot be static nor abstract."); return(false); } if (GetFactoryMethod() == null) { if (Factory != null) { weaver.LogError($"Type {Factory.FullName} should have 'public static object GetInstance(Type)' method in order to be aspect factory."); } else { weaver.LogError($"Aspect {Host.FullName} has no parameterless public constructor nor valid factory."); } return(false); } return(Effects.All(e => e.Validate(this, weaver))); }
public virtual bool CanCast(GameField game, Player caster, Player opponent) { return(Effects.All(effect => effect.CanCast(game, caster, opponent)) && caster.Hand.Count < MaxCardsInHand && caster.BenchedPokemon.Count < MaxBenchedPokemon && caster.Hand.OfType <PokemonCard>().Count(p => p.Stage == 0) < MaxBasicInHand); }
public bool Validate(ILogger log) { var result = true; if (Scope != Scope.Global && Scope != Scope.PerInstance) { log.Log(GeneralRules.UnknownCompilationOption, Host, GeneralRules.Literals.UnknownAspectScope(Scope.ToString())); } if (!Effects.Any()) { log.Log(AspectRules.AspectShouldContainEffect, Host, Host.Name); } if (Host.HasGenericParameters) { log.Log(AspectRules.AspectMustHaveValidSignature, Host, Host.Name, AspectRules.Literals.HasGenericParams); result = false; } if (!Host.IsPublic && !Host.IsNestedPublic) { log.Log(AspectRules.AspectMustHaveValidSignature, Host, Host.Name, AspectRules.Literals.IsNotPublic); result = false; } if (Host.IsAbstract) { if (Host.IsSealed) { log.Log(AspectRules.AspectMustHaveValidSignature, Host, Host.Name, AspectRules.Literals.IsStatic); } else { log.Log(AspectRules.AspectMustHaveValidSignature, Host, Host.Name, AspectRules.Literals.IsAbstract); } result = false; } if (GetFactoryMethod() == null) { if (Factory != null) { log.Log(AspectRules.AspectFactoryMustContainFactoryMethod, Host, Factory.Name); } else { log.Log(AspectRules.AspectMustHaveContructorOrFactory, Host, Host.Name); } result = false; } var effectsValid = Effects.All(e => e.Validate(this, log)); return(result && effectsValid); }
public override bool CanActivate(GameField game, Player caster, Player opponent) { if (OnlyStopWhenSleeping) { return(!PokemonOwner.AbilityDisabled && !PokemonOwner.IsAsleep && UsedTimes < Usages && Effects.All(effect => effect.CanCast(game, caster, opponent))); } return(base.CanActivate(game, caster, opponent)); }