Skip to content

Commit d700d4e

Browse files
YankesMeridianOXC
authored andcommitted
Fix "leak" of items when project is canceled
1 parent 46e92b4 commit d700d4e

4 files changed

Lines changed: 20 additions & 10 deletions

File tree

‎src/Basescape/ResearchInfoState.cpp‎

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -179,11 +179,6 @@ void ResearchInfoState::btnOkClick(Action *)
179179
*/
180180
void ResearchInfoState::btnCancelClick(Action *)
181181
{
182-
const RuleResearch *ruleResearch = _rule ? _rule : _project->getRules();
183-
if (ruleResearch->needItem() && ruleResearch->destroyItem())
184-
{
185-
_base->getStorageItems()->addItem(ruleResearch->getName(), 1);
186-
}
187182
_base->removeResearch(_project);
188183
_game->popState();
189184
}

‎src/Savegame/Base.cpp‎

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1095,6 +1095,15 @@ void Base::removeResearch(ResearchProject * project)
10951095
{
10961096
_research.erase(iter);
10971097
}
1098+
1099+
const RuleResearch *ruleResearch = project->getRules();
1100+
if (!project->isFinished())
1101+
{
1102+
if (ruleResearch->needItem() && ruleResearch->destroyItem())
1103+
{
1104+
getStorageItems()->addItem(ruleResearch->getName(), 1);
1105+
}
1106+
}
10981107
delete project;
10991108
}
11001109

‎src/Savegame/ResearchProject.cpp‎

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -37,11 +37,15 @@ ResearchProject::ResearchProject(RuleResearch * p, int c) : _project(p), _assign
3737
bool ResearchProject::step()
3838
{
3939
_spent += _assigned;
40-
if (_spent >= getCost())
41-
{
42-
return true;
43-
}
44-
return false;
40+
return isFinished();
41+
}
42+
43+
/**
44+
* gets state of project.
45+
*/
46+
bool ResearchProject::isFinished()
47+
{
48+
return _spent >= getCost();
4549
}
4650

4751
/**

‎src/Savegame/ResearchProject.h‎

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,8 @@ class ResearchProject
3939
ResearchProject(RuleResearch * p, int c = 0);
4040
/// Game logic. Called every new day to compute time spent.
4141
bool step();
42+
/// gets state of project.
43+
bool isFinished();
4244
/// set the number of scientist assigned to this ResearchProject
4345
void setAssigned (int nb);
4446
/// get the number of scientist assigned to this ResearchProject

0 commit comments

Comments
 (0)