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)));
        }
Esempio n. 2
0
        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)));
        }
Esempio n. 3
0
 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);
        }
Esempio n. 5
0
        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));
        }