Example #1
0
        static void Main(string[] args)
        {
            PeriodicVisitor pNormalVisitor  = new RegularPeriodicVisitor();
            PeriodicVisitor pCritVisitor    = new OverpowPeriodicVisitor();
            Visitor         normalVisitor   = new RegularHitVisitor();
            Visitor         criticalVisitor = new CriticalHitVisitor();

            ICharacter            character = new Character();
            DamagingProjectile    dProj1    = new DamagingProjectile(5);
            DamagingProjectile    dProj2    = new DamagingProjectile(7);
            HealingProjectile     hProj1    = new HealingProjectile(4);
            PoisonProjectile      pProj1    = new PoisonProjectile(2.5, 10);
            RestorationProjectile rProj1    = new RestorationProjectile(3, 8);

            double duration = 0.0, value = 0.0;

            dProj1.Shoot();
            character.ReceiveHit(dProj1.Accept(normalVisitor));
            character.ReceiveHit(dProj1.Accept(criticalVisitor));

            hProj1.Shoot();
            character.ReceiveHit(hProj1.Accept(normalVisitor));
            character.ReceiveHit(hProj1.Accept(criticalVisitor));

            pProj1.Shoot();
            value = pProj1.Accept(pNormalVisitor, ref duration);
            character.AddEffect(value, duration);
            value = pProj1.Accept(pCritVisitor, ref duration);
            character.AddEffect(value, duration);

            rProj1.Shoot();
            value = rProj1.Accept(pNormalVisitor, ref duration);
            character.AddEffect(value, duration);
            value = rProj1.Accept(pCritVisitor, ref duration);
            character.AddEffect(value, duration);

            Console.ReadKey();
        }
        protected virtual void DrawDamageSettings()
        {
            DamagingProjectile settings = target as DamagingProjectile;

            IntField(ref settings.Damage, ObjectNames.NicifyVariableName(nameof(DamagingProjectile.Damage)));
            LineBreak();
            BoolField(ref settings.AOEDamage, ObjectNames.NicifyVariableName(nameof(DamagingProjectile.AOEDamage)));
            if (settings.AOEDamage)
            {
                IncreaseIndent();
                FloatField(ref settings.AOERange, ObjectNames.NicifyVariableName(nameof(DamagingProjectile.AOERange)));
                LineBreak();
                BoolField(ref settings.AOEOnTimeOut, ObjectNames.NicifyVariableName(nameof(DamagingProjectile.AOEOnTimeOut)));
                LineBreak();
                BoolField(ref settings.AOEHasFalloff, ObjectNames.NicifyVariableName(nameof(DamagingProjectile.AOEHasFalloff)));
                if (settings.AOEHasFalloff)
                {
                    IncreaseIndent();
                    FloatField(ref settings.ZeroOutAOERange, ObjectNames.NicifyVariableName(nameof(DamagingProjectile.ZeroOutAOERange)));
                    DecreaseIndent();
                }
            }
        }
Example #3
0
 public override double Visit(DamagingProjectile projectile)
 {
     return(-projectile.Value);
 }
Example #4
0
 public abstract double Visit(DamagingProjectile projectile);