diff options
Diffstat (limited to '')
-rw-r--r-- | src/T2DLL/T2PeopleArray.cpp | 105 |
1 files changed, 94 insertions, 11 deletions
diff --git a/src/T2DLL/T2PeopleArray.cpp b/src/T2DLL/T2PeopleArray.cpp index 53a56e9..91edc64 100644 --- a/src/T2DLL/T2PeopleArray.cpp +++ b/src/T2DLL/T2PeopleArray.cpp @@ -1,40 +1,123 @@ #include "T2PeopleArray.h" +#include "T2TowerDoc.h" -T2PeopleArray::T2PeopleArray(unsigned int) { +T2PeopleArray::T2PeopleArray(unsigned int startID) + : T2ObjectArray(startID) +{ + for (unsigned int i = 0; i < 256; i++) + mPeople[i].mMatterID = mStartID + i; } -T2People* T2PeopleArray::FindPeople(unsigned int) { +T2People* T2PeopleArray::FindPeople(unsigned int peopleID) { + unsigned int firstID = mPeople[0].GetPeopleID(); + + if (firstID > peopleID || (firstID + 256) < peopleID) + return NULL; + + for (int i = 0; i < 256; i++) { + if (mPeople[i].GetPeopleID() == peopleID) + return &mPeople[i]; + } + + return NULL; } -void T2PeopleArray::ResolveLink(T2PeopleArrayList*) { +void T2PeopleArray::ResolveLink(T2PeopleArrayList* list) { + for (int i = 0; i < 256; i++) { + if (mPeople[i].IsUsed()) + mPeople[i].ResolveLink(list); + } } T2People* T2PeopleArray::FindUnusedPeople() { + T2People *result = NULL; + + for (unsigned int i = 0; i < 256; i++) { + if (!mPeople[i].IsUsed()) { + result = &mPeople[i]; + break; + } + } + + return result; } -/*virtual*/ void T2PeopleArray::DispatchIdle(T2TowerDoc*, int) { +/*virtual*/ void T2PeopleArray::DispatchIdle(T2TowerDoc* towerDoc, int startIndex) { + int i; + T2People *people; + + people = &mPeople[startIndex]; + for (i = startIndex; i < 256; i += 8) { + if (people->mUsed) + people->Idle(towerDoc); + people += 8; + } + + people = mPeople; + int walkRate = towerDoc->towerDoc_vf148(); + for (i = 0; i < 256; i++) { + if (people->mUsed) { + if ((walkRate > 0 && !(i % walkRate)) || people->IsSetSpecialFlag(kSpecialFlag20)) + people->IdleSearchedPerson(towerDoc); + } + people++; + } } -void T2PeopleArray::DrawSearchedPerson(T2TowerDoc*) { +void T2PeopleArray::DrawSearchedPerson(T2TowerDoc* towerDoc) { + T2People *people = mPeople; + for (int i = 0; i < 256; i++) { + if (people->mUsed && people->IsWalk()) + people->DrawSearchedPerson(towerDoc); + people++; + } } -void T2PeopleArray::SetWalkPeople(int) { +void T2PeopleArray::SetWalkPeople(int v) { + for (int i = 0; i < 256; i++) + mPeople[i].SetWalk(false); + + if (v != -1) { + for (int i = 0; i < 256; i += v) + mPeople[i].SetWalk(true); + } } void T2PeopleArray::DayChanged() { + for (int i = 0; i < 256; i++) { + if (mPeople[i].IsUsed()) + mPeople[i].DayChanged(); + } } -void T2PeopleArray::TenantRemoved(unsigned int) { +void T2PeopleArray::TenantRemoved(unsigned int v) { + for (int i = 0; i < 256; i++) { + if (mPeople[i].IsUsed()) + mPeople[i].TenantRemoved(v); + } } -void T2PeopleArray::AddStress(int) { +void T2PeopleArray::AddStress(int v) { + for (int i = 0; i < 256; i++) { + if (mPeople[i].IsUsed()) + mPeople[i].IncStress(v); + } } -void T2PeopleArray::BreakoutEmergency(T2TowerDoc*) { +void T2PeopleArray::BreakoutEmergency(T2TowerDoc* towerDoc) { + for (int i = 0; i < 256; i++) { + T2People *people = &mPeople[i]; + if (people->IsUsed()) + people->BreakoutEmergency(towerDoc); + } } -void T2PeopleArray::Read(T2Archive&, T2TowerDoc*) { +void T2PeopleArray::Read(T2Archive& archive, T2TowerDoc* towerDoc) { + for (int i = 0; i < 256; i++) + mPeople[i].Load(archive, towerDoc); } -void T2PeopleArray::Write(T2Archive&) { +void T2PeopleArray::Write(T2Archive& archive) { + for (int i = 0; i < 256; i++) + mPeople[i].Save(archive); } |