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 }
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); }
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); }