diff options
author | Ash Wolf <ninji@wuffs.org> | 2023-06-28 22:22:32 +0100 |
---|---|---|
committer | Ash Wolf <ninji@wuffs.org> | 2023-06-28 22:22:32 +0100 |
commit | c0c336500955a23e344651e5412c9d9d441ef4ee (patch) | |
tree | 790769c748db307cf3314f6e896e2f61c68561a2 /src/T2DLL/T2PeopleArrayList.cpp | |
parent | 37e364b2c6cc7487a1c888d256a73e5337bb7189 (diff) | |
download | t2win-c0c336500955a23e344651e5412c9d9d441ef4ee.tar.gz t2win-c0c336500955a23e344651e5412c9d9d441ef4ee.zip |
first pass of T2DLL
Diffstat (limited to '')
-rw-r--r-- | src/T2DLL/T2PeopleArrayList.cpp | 130 |
1 files changed, 119 insertions, 11 deletions
diff --git a/src/T2DLL/T2PeopleArrayList.cpp b/src/T2DLL/T2PeopleArrayList.cpp index 19db7d8..91b94a6 100644 --- a/src/T2DLL/T2PeopleArrayList.cpp +++ b/src/T2DLL/T2PeopleArrayList.cpp @@ -1,46 +1,154 @@ +#include "T2Archive.h" +#include "T2PeopleArray.h" #include "T2PeopleArrayList.h" T2PeopleArrayList::T2PeopleArrayList() { + mCounter = 0; + T2PeopleArray *peopleArray = new T2PeopleArray; + Add(peopleArray); } /*virtual*/ T2PeopleArrayList::~T2PeopleArrayList() { + LArrayIterator iterator(*this); + T2PeopleArray *peopleArray; + + while (iterator.Next(&peopleArray)) + delete peopleArray; } -void T2PeopleArrayList::Add(T2PeopleArray*) { +void T2PeopleArrayList::Add(T2PeopleArray* peopleArray) { + LArray::Add(&peopleArray); } unsigned int T2PeopleArrayList::GetItemCount() { + return GetCount(); } -T2PeopleArray* T2PeopleArrayList::GetItemAt(int) { +T2PeopleArray* T2PeopleArrayList::GetItemAt(int index) { + T2PeopleArray *peopleArray; + FetchItemAt(index, &peopleArray); + return peopleArray; } -T2People* T2PeopleArrayList::FindPeople(unsigned int) { +T2People* T2PeopleArrayList::FindPeople(unsigned int peopleID) { + LArrayIterator iterator(*this); + T2PeopleArray *peopleArray; + + while (iterator.Next(&peopleArray)) { + T2People *people = peopleArray->FindPeople(peopleID); + if (people) + return people; + } + + return NULL; } T2People* T2PeopleArrayList::FindUnusedPeople() { + T2People *result = NULL; + LArrayIterator iterator(*this); + T2PeopleArray *peopleArray = NULL; + + while (!result && iterator.Next(&peopleArray)) { + result = peopleArray->FindUnusedPeople(); + } + + if (!result) { + unsigned int newStartID = 1; + if (peopleArray) + newStartID = peopleArray->GetStartID() + 256; + + peopleArray = new T2PeopleArray(newStartID); + if (peopleArray) { + Add(peopleArray); + result = peopleArray->FindUnusedPeople(); + } + } + + return result; } -void T2PeopleArrayList::DispatchIdle(T2TowerDoc*) { +void T2PeopleArrayList::DispatchIdle(T2TowerDoc* towerDoc) { + LArrayIterator iterator(*this); + T2PeopleArray *peopleArray; + + while (iterator.Next(&peopleArray)) + peopleArray->DispatchIdle(towerDoc, mCounter); + + mCounter++; + if (mCounter >= 8) + mCounter = 0; } -void T2PeopleArrayList::DrawSearchedPerson(T2TowerDoc*) { +void T2PeopleArrayList::DrawSearchedPerson(T2TowerDoc* towerDoc) { + LArrayIterator iterator(*this); + T2PeopleArray *peopleArray; + + while (iterator.Next(&peopleArray)) + peopleArray->DrawSearchedPerson(towerDoc); } -void T2PeopleArrayList::SetWalkPeople(int) { +void T2PeopleArrayList::SetWalkPeople(int v) { + LArrayIterator iterator(*this); + T2PeopleArray *peopleArray; + + while (iterator.Next(&peopleArray)) + peopleArray->SetWalkPeople(v); } -void T2PeopleArrayList::TenantRemoved(unsigned int) { +void T2PeopleArrayList::TenantRemoved(unsigned int v) { + LArrayIterator iterator(*this); + T2PeopleArray *peopleArray; + + while (iterator.Next(&peopleArray)) + peopleArray->TenantRemoved(v); } -void T2PeopleArrayList::AddStress(int) { +void T2PeopleArrayList::AddStress(int v) { + LArrayIterator iterator(*this); + T2PeopleArray *peopleArray; + + while (iterator.Next(&peopleArray)) + peopleArray->AddStress(v); } -void T2PeopleArrayList::Read(T2Archive&, T2TowerDoc*) { +void T2PeopleArrayList::Read(T2Archive& archive, T2TowerDoc* towerDoc) { + int count; + archive >> count; + + RemoveItemsAt(GetCount(), 1); + unsigned int startID = 1; + + for (int i = 0; i < count; i++) { + Add(new T2PeopleArray(startID)); + startID += 256; + } + + T2PeopleArray *peopleArray; + + LArrayIterator iterator1(*this); + while (iterator1.Next(&peopleArray)) + peopleArray->Read(archive, towerDoc); + + LArrayIterator iterator2(*this); + while (iterator2.Next(&peopleArray)) + peopleArray->ResolveLink(this); } -void T2PeopleArrayList::Write(T2Archive&) { +void T2PeopleArrayList::Write(T2Archive& archive) { + int count = GetItemCount(); + archive << count; + + LArrayIterator iterator(*this); + T2PeopleArray *peopleArray; + + while (iterator.Next(&peopleArray)) + peopleArray->Write(archive); } -void T2PeopleArrayList::BreakoutEmergency(T2TowerDoc*) { +void T2PeopleArrayList::BreakoutEmergency(T2TowerDoc* towerDoc) { + LArrayIterator iterator(*this); + T2PeopleArray *peopleArray; + + while (iterator.Next(&peopleArray)) + peopleArray->BreakoutEmergency(towerDoc); } |