示例#1
0
    private List <BlockEffects> activeBlocks = new List <BlockEffects>(); // blocks comme bouclier qui bloque



    /// <summary>
    /// Résoud les effets à traiter
    /// </summary>
    public void Solve()
    {
        int k = 0;

        while (k < ToBeTreated.Count)
        {
            Effect element = ToBeTreated[k];


            bool canUse = true;
            int  l      = 0;
            while (l < ActiveBlocks.Count)
            {
                BlockEffects blockEffect = ActiveBlocks[l]; // si il n'y a pas de block, on applique l'effet



                if (blockEffect.ContientEffetType(element))

                {
                    blockEffect.NumberToBlock -= 1;
                    if (blockEffect.NumberToBlock > 0 || blockEffect.TourEffetActif > 0)
                    {
                        canUse = false;

                        break; // petite opti
                    }
                }
                l++;
            }
            if (canUse)
            {
                element.Use();
            }
            element.TourEffetActif--;
            k++;
        }
        int i = 0;

        while (i < ToBeTreated.Count) // la différence diminue de 1 a chaque tour de boucle
        {
            if (ToBeTreated[i].TourEffetActif <= 0)
            {
                ToBeTreated.RemoveAt(i);
            }
            else
            {
                i++;
            }
        }

        ActiveBlocks.RemoveAll(x => x.NumberToBlock <= 0 && x.TourEffetActif < 0);// si il n'y a plus de coup a bloquer ni de tour effet actif on le supprime de la liste des blocs actifs
    }
示例#2
0
    public bool CalculateEffectBlocked(Effect effect)
    {
        NetIdeable target    = effect.GetTarget();
        bool       isblocked = false;

        foreach (Effect eff in target.AttachedEffects)
        {
            if (eff.GetType() == typeof(BlockEffects))
            {
                BlockEffects block = (BlockEffects)eff;
                if (block.listEffectsToBlock.Exists((x) => x.GetType() == effect.GetType()) && block.numberToBlock > 0)
                {
                    block.numberToBlock--;
                    isblocked = true;
                }
            }
        }
        effect.GetTarget().AttachedEffects.RemoveAll((x) => x.GetType() == typeof(BlockEffects) && ((BlockEffects)x).numberToBlock <= 0);
        return(isblocked);
    }
示例#3
0
 public BlockEffects(BlockEffects other) : base(other)
 {
     this.listEffectsToBlock = other.listEffectsToBlock.ConvertAll(effect => effect.Clone());//deep copy the list
     this.numberToBlock      = other.numberToBlock;
     //this.listEffectsToBlock(other.listEffectsToBlock);
 }