[-] Fixed assert when saving a game with workers collecting resources from outside

This commit is contained in:
cybermind 2013-03-29 16:22:19 +06:00
parent 10a6d42124
commit 89eddbe415
2 changed files with 9 additions and 9 deletions

View file

@ -571,7 +571,7 @@ static void AnimateActionHarvest(CUnit &unit)
** @param unit pointer to harvester unit.
** @param source pointer to resource unit.
*/
void COrder_Resource::LoseResource(CUnit &unit, const CUnit &source)
void COrder_Resource::LoseResource(CUnit &unit, CUnit &source)
{
CUnit *depot;
const ResourceInfo &resinfo = *unit.Type->ResInfo[this->CurrentResource];
@ -581,6 +581,7 @@ void COrder_Resource::LoseResource(CUnit &unit, const CUnit &source)
if (resinfo.HarvestFromOutside) {
this->ClearGoal();
--source.Resource.Active;
}
// Continue to harvest if we aren't fully loaded
@ -730,14 +731,13 @@ int COrder_Resource::GatherResource(CUnit &unit)
// Improved version of DropOutAll that makes workers go to the depot.
LoseResource(unit, *source);
int i;
CUnit *uins;
for (i = source->InsideCount, uins = source->UnitInside;
i; --i, uins = uins->NextContained) {
if (uins->CurrentOrder()->Action == UnitActionResource) {
for (CUnit *uins = source->Resource.Workers;
uins; uins = uins->NextWorker) {
if (uins != &unit && uins->CurrentOrder()->Action == UnitActionResource) {
COrder_Resource &order = *static_cast<COrder_Resource *>(uins->CurrentOrder());
order.LoseResource(*uins, *source);
if (!uins->Anim.Unbreakable && order.State == SUB_GATHER_RESOURCE) {
order.LoseResource(*uins, *source);
}
}
}
// Don't destroy the resource twice.

View file

@ -73,7 +73,7 @@ private:
int MoveToResource(CUnit &unit);
void UnitGotoGoal(CUnit &unit, CUnit *const goal, int state);
int StartGathering(CUnit &unit);
void LoseResource(CUnit &unit, const CUnit &source);
void LoseResource(CUnit &unit, CUnit &source);
int GatherResource(CUnit &unit);
int StopGathering(CUnit &unit);
int MoveToDepot(CUnit &unit);