Skip to content

Commit

Permalink
fix #6137
Browse files Browse the repository at this point in the history
script PostLoad runs after unit PostLoad
  • Loading branch information
rt committed Feb 16, 2019
1 parent 67286a3 commit 6250711
Show file tree
Hide file tree
Showing 3 changed files with 30 additions and 10 deletions.
27 changes: 18 additions & 9 deletions rts/Sim/Misc/Wind.cpp
Expand Up @@ -24,7 +24,8 @@ CR_REG_METADATA(EnvResourceHandler, (

CR_MEMBER(windDirTimer),

CR_MEMBER(generatorIDs)
CR_MEMBER(allGeneratorIDs),
CR_MEMBER(newGeneratorIDs)
))


Expand All @@ -45,8 +46,10 @@ void EnvResourceHandler::ResetState()

windDirTimer = 0;

generatorIDs.clear();
generatorIDs.reserve(256);
allGeneratorIDs.clear();
allGeneratorIDs.reserve(256);
newGeneratorIDs.clear();
newGeneratorIDs.reserve(256);
}

void EnvResourceHandler::LoadWind(float minStrength, float maxStrength)
Expand All @@ -61,15 +64,13 @@ void EnvResourceHandler::LoadWind(float minStrength, float maxStrength)

bool EnvResourceHandler::AddGenerator(CUnit* u) {
// duplicates should never happen, no need to check
spring::VectorInsertUnique(generatorIDs, u->id);

// start pointing in direction of wind
u->UpdateWind(curWindDir.x, curWindDir.z, curWindStrength);
spring::VectorInsertUnique(allGeneratorIDs, u->id);
spring::VectorInsertUnique(newGeneratorIDs, u->id);
return true;
}

bool EnvResourceHandler::DelGenerator(CUnit* u) {
return (spring::VectorErase(generatorIDs, u->id));
return (spring::VectorErase(allGeneratorIDs, u->id));
}


Expand Down Expand Up @@ -98,7 +99,7 @@ void EnvResourceHandler::Update()
newWindVec *= (newStrength = Clamp(newStrength, minWindStrength, maxWindStrength));

// update generators
for (const int unitID: generatorIDs) {
for (const int unitID: allGeneratorIDs) {
(unitHandler.GetUnit(unitID))->UpdateWind(newWindVec.x, newWindVec.z, newStrength);
}
} else {
Expand All @@ -112,6 +113,14 @@ void EnvResourceHandler::Update()

curWindDir = curWindVec;
curWindVec = curWindDir * (curWindStrength = Clamp(curWindStrength, minWindStrength, maxWindStrength));

for (const int unitID: newGeneratorIDs) {
// make newly added generators point in direction of wind
(unitHandler.GetUnit(unitID))->UpdateWind(curWindDir.x, curWindDir.z, curWindStrength);
}

newGeneratorIDs.clear();

}

windDirTimer = (windDirTimer + 1) % (WIND_UPDATE_RATE + 1);
Expand Down
3 changes: 2 additions & 1 deletion rts/Sim/Misc/Wind.h
Expand Up @@ -55,7 +55,8 @@ class EnvResourceHandler

int windDirTimer = 0;

std::vector<int> generatorIDs;
std::vector<int> allGeneratorIDs;
std::vector<int> newGeneratorIDs;
};

extern EnvResourceHandler envResHandler;
Expand Down
10 changes: 10 additions & 0 deletions rts/Sim/Units/Scripts/CobInstance.cpp
Expand Up @@ -77,7 +77,17 @@ void CCobInstance::Init()
void CCobInstance::PostLoad()
{
assert(unit != nullptr);
assert(cobFile == nullptr);

cobFile = cobFileHandler->GetCobFile(unit->unitDef->scriptName);

for (int threadID: threadIDs) {
CCobThread* t = cobEngine->GetThread(threadID);

t->cobInst = this;
t->cobFile = cobFile;
}

Init();
}

Expand Down

0 comments on commit 6250711

Please sign in to comment.