/// <summary> /// retire une certaine quantite d'une ressource dans un hangar. Les resources retirees sont toujours celles des /// stacks les plus anciens. /// </summary> /// <param name="type">le type de resource a retirer</param> /// <param name="qte"></param> /// <returns>un stack qui contient la qte de resource du type si possible, null sinon</returns> public ResourceStack GetStack(ResourceElement.ResourceType type, int qte) { if (GetResourceQte(type) < qte) { return(null); } ResourceStack currentStack = null; foreach (ResourceStack s in ResourceStacks) { if (s.Type == type) { currentStack = s; } } ResourceStack result = currentStack.GetSubStack(qte); if (currentStack.Qte == 0) { onRemoveStack(currentStack); ResourceStacks.Remove(currentStack); } return(result); }
/// <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 } }