#include "CResFile.h" #include "T2Archive.h" #include "T2PeopleTimeZoneList.h" #include "T2PeopleType.h" #include "T2PeopleTypeArray.h" #include "T2PoolDef.h" #include "T2WorldDef.h" T2PeopleTimeZoneList::T2PeopleTimeZoneList(unsigned int someNum, unsigned int isFixed, T2WorldDef* worldDef) : LArray(sizeof(T2PeopleTypeArray *)) { mIsFixed = isFixed; _20 = 0; mHoursPerItem = 0; mCurrentItem = 0; mCurrentHour = 0; mWorldDef = worldDef; for (unsigned int i = 0; i < someNum; i++) { T2PeopleTypeArray *array = new T2PeopleTypeArray(isFixed); Add(array); } mHoursPerItem = 24 / someNum; } T2PeopleTimeZoneList::T2PeopleTimeZoneList(T2Archive& archive, T2WorldDef* worldDef) : LArray(sizeof(T2PeopleTypeArray *)) { _20 = 0; mWorldDef = worldDef; int count; archive >> count; unsigned char uc; char c; archive >> uc; mIsFixed = uc != 0; archive >> c; mHoursPerItem = c; archive >> c; mCurrentItem = c; archive >> c; mCurrentHour = c; for (int i = 0; i < count; i++) { T2PeopleTypeArray *theArray = new T2PeopleTypeArray(archive); Add(theArray); } } /*virtual*/ T2PeopleTimeZoneList::~T2PeopleTimeZoneList() { LArrayIterator iterator(*this); T2PeopleTypeArray *theArray; while (iterator.Next(&theArray)) delete theArray; } void T2PeopleTimeZoneList::Add(T2PeopleTypeArray* inArray) { InsertItemsAt(1, mItemCount + 1, &inArray); } void T2PeopleTimeZoneList::Add(T2PeopleType* inPeopleType, T2PoolDefDemandElem* inDemandElem) { LArrayIterator iterator(*this); T2PeopleTypeArray *theArray; unsigned int timeZoneType = 0; while (iterator.Next(&theArray)) { inPeopleType->SetTimeZoneType(timeZoneType); TimeZoneInfo *theTimeZoneInfo = inDemandElem->GetTimeZoneInfo(timeZoneType); CResFile resFile; if (resFile.OpenResource(mWorldDef->mModuleHandle, theTimeZoneInfo->m0, 'PzDf')) { T2PoolTimeZoneDef *theTimeZoneDef = new T2PoolTimeZoneDef(resFile); theArray->Add(inPeopleType, theTimeZoneDef, theTimeZoneInfo->m4); delete theTimeZoneDef; } else { CString str; str.Format("** T2PeopleTimeZoneDef not found : %d **\r\n", theTimeZoneInfo->m0); OutputDebugString(str); } timeZoneType++; } } void T2PeopleTimeZoneList::Init(unsigned int someNum, float limit) { mCurrentItem = someNum / mHoursPerItem; mCurrentHour = someNum % mHoursPerItem; LArrayIterator iterator(*this); T2PeopleTypeArray *theArray; while (iterator.Next(&theArray)) theArray->InitSearchLimit(limit); } void T2PeopleTimeZoneList::IncHour(float limit) { mCurrentHour++; if (mCurrentHour >= mHoursPerItem) { T2PeopleTypeArray *thePrevArray = CurrentItem(); if (thePrevArray) thePrevArray->AdjustLife(); mCurrentHour = 0; mCurrentItem++; if (mCurrentItem > GetCount()) mCurrentItem = 0; T2PeopleTypeArray *theNewArray = CurrentItem(); if (theNewArray) theNewArray->InitSearchLimit(limit); } } T2PeopleTypeArray* T2PeopleTimeZoneList::GetItem(int inIndex) const { T2PeopleTypeArray *theArray; int index = inIndex + 1; if (!FetchItemAt(index, &theArray)) theArray = NULL; return theArray; } T2PeopleTypeArray* T2PeopleTimeZoneList::CurrentItem() const { return GetItem(mCurrentItem); } BOOL T2PeopleTimeZoneList::Find(T2TenantMemberDef* inTenantMemberDef, int inEconoType, unsigned int inTransportType, BOOL inCheckOnlyFirstEconoType) const { T2PeopleTypeArray *theArray = CurrentItem(); return theArray->Find(inTenantMemberDef, inEconoType, inTransportType, inCheckOnlyFirstEconoType); } BOOL T2PeopleTimeZoneList::Call(T2TenantMemberDef* inTenantMemberDef, int inEconoType, unsigned int inTransportType, T2PeopleType& outPeopleType) { T2PeopleTypeArray *theArray = CurrentItem(); return theArray->Call(inTenantMemberDef, inEconoType, inTransportType, outPeopleType); } void T2PeopleTimeZoneList::DispatchRestore(T2PeopleType& inPeopleType) { T2PeopleTypeArray *theArray = GetItem(inPeopleType.GetTimeZoneType()); if (theArray) theArray->Restore(inPeopleType); } void T2PeopleTimeZoneList::DispatchAdd(T2PeopleType* inPeopleType) { T2PeopleTypeArray *theArray = GetItem(inPeopleType->GetTimeZoneType()); if (theArray) theArray->Add(inPeopleType, 1); } void T2PeopleTimeZoneList::Write(T2Archive& archive) { archive << mItemCount; unsigned char uc; char c; uc = mIsFixed ? 1 : 0; archive << uc; c = mHoursPerItem; archive << c; c = mCurrentItem; archive << c; c = mCurrentHour; archive << c; for (int i = 0; i < mItemCount; i++) { T2PeopleTypeArray *theArray = GetItem(i); if (theArray) theArray->Write(archive); } }