/// <summary> /// Permet d'extraire un ResourceStack de ce stack. /// Les ressources les plus anciennes seront priorisées et Qte sera retire de ce stack /// </summary> /// <param name="qte"></param> /// <returns>un ResourceStack contenant Qte m3 ou null si ce n'est pas possible</returns> public ResourceStack GetSubStack(int qte) { // Il faut si possible creer un stack qui contient les ressources les plus anciennes // de ce stack et les enlever de ce stack. Il ne faut pas garder de resourceElement vide if (qte > 0 && qte <= Qte) { ResourceStack subStack = new ResourceStack(Type); foreach (ResourceElement re in _ResourceElementsInto) { if (subStack.Qte + re.Quantity < qte && re.Quantity > 0) { subStack.Add(re); // On ajoute l'élément entier. } else if (subStack.Qte < qte) { subStack.Add(re.Split(qte - subStack.Qte)); } } CleanResourceElementList(); onChange(this); return(subStack); } else { return(null); } }
/// <summary> /// Permet d'ajouter un stack dans ce hangar. Le stack sera vide dans la transaction. /// </summary> /// <param name="stack">Le stack a ajouter.</param> public void Add(ResourceStack stack) { ResourceStack inHangar = null; for (int i = 0; i < ResourceStacks.Count; i++) //trouver si un stack de ce type existe, sinon en creer un { if (ResourceStacks[i].Type == stack.Type) { inHangar = ResourceStacks[i]; } } if (inHangar == null) // Il n'existait pas de stack dans le hangar. { ResourceStack s = stack.GetSubStack(stack.Qte); ResourceStacks.Add(s); // Fait une copie dans le hangar et vide l'ancien stack onNewStack(s); } else { inHangar.Add(stack); // Combine les stacks } }