#include "FoodDef.h" #include "../../Common/StdFoodInfoDialog.h" #include "Trash.h" #include "T2DateTime.h" #include "T2People.h" #include "T2SoundPlayer.h" #include "T2TemplatePluginList.h" #include "T2Tenant.h" #include "T2TowerDoc.h" #include "T2TowerMainView.h" #include "UT2Utils.h" #ifdef _DEBUG #define new DEBUG_NEW #undef THIS_FILE static char THIS_FILE[] = __FILE__; #endif FoodDef::FoodDef(DWORD inType, T2PluginSpecifier &inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) : T2TenantDef(inType, inSpecifier, inResFile, inWorldDef, inPlugin) { } /*virtual*/ FoodDef::~FoodDef() { } /*virtual*/ void FoodDef::LoadSound(T2TowerDoc *inDoc) { inDoc->mSoundPlayer->AddSound(CalcSoundID(1000), SoundPriority_3, 165, mModuleHandle); } /*virtual*/ BOOL FoodDef::ChangeStatusOnIdle(T2TowerDoc *inDoc, T2Tenant *inTenant, int inStatus) { BOOL isChange = false; T2DateTime *theNow = inDoc->GetNow(); if (inTenant->IsOpen()) { unsigned int closeTime = inTenant->GetCloseTime(); if (!theNow->WithinMinutes(closeTime, closeTime + 8)) { inTenant->CollectCustomer(inDoc); if (inTenant->SetPeopleAnime()) isChange = true; if (theNow->GetMinutes() < 8) { BOOL estimateChanged = inTenant->UpdateCommercialEstimate(); isChange |= (inDoc->GetViewMode() == kEvalView) && estimateChanged; } if (UT2Utils::Randomize(7) == 0) inTenant->PlaySound(inDoc, 1000, SoundMask_2, SoundFlags_1); } else { if (inDoc->IsDustOn()) inTenant->IncWorkCount(); inDoc->DoPayTool( -inTenant->CalcInMoney(), kFundGroup3, inTenant->GetEquipDef(), // I got money from the restaurant. // "レストランの売上金が入りました。" "\x83\x8C\x83\x58\x83\x67\x83\x89\x83\x93\x82\xCC\x94\x84\x8F\xE3\x8B\xE0\x82\xAA\x93\xFC\x82\xE8\x82\xDC\x82\xB5\x82\xBD\x81\x42", kTimeLimitLength30Min, kTimeLimitTypeCategory); if (inTenant->GetOpenTime() != closeTime) { inTenant->PushOutAllCustomer(inDoc); inTenant->SetStatus(kTenantStatus15); inTenant->SetPatIndex(0); inTenant->SetAllPeopleToSleep(); isChange = true; } else { inTenant->ClearTotalCustomer(); TakeOutTrash(inDoc, inTenant, theNow->GetRawMinutes()); if (inTenant->GetWorkCount() > 2) { inTenant->SetMark(1); inTenant->PushOutAll(inDoc); inTenant->SetStatus(kTenantStatus13); inTenant->SetPatIndex(0); isChange = true; } } BOOL estimateChanged = inTenant->UpdateCommercialEstimate(); isChange |= (inDoc->GetViewMode() == kEvalView) && estimateChanged; } } else { if (inStatus == kTenantStatus13 || inStatus == kTenantStatus12) { unsigned int threshold = inTenant->GetOpenTime() - 60; if (!theNow->WithinMinutes(threshold, threshold + 8)) { inTenant->PushOutAll(inDoc); } else { inTenant->CallBelongPeople(theNow->GetRawMinutes()); inTenant->SetStatus(kTenantStatus14); inTenant->ClearTotalCustomer(); inTenant->ClearReserveCount(); inTenant->UpdateCommercialEstimate(); isChange = true; } } else if (inStatus == kTenantStatus14) { unsigned int theOpenTime = inTenant->GetOpenTime(); unsigned int theCloseTime = inTenant->GetCloseTime(); if (theNow->WithinMinutes(theOpenTime, theCloseTime)) { if (inTenant->GetMark() != 1) { if (inTenant->GetBelongCount() == inTenant->GetBelongCapacity()) { inTenant->SetStatus(kTenantStatus30); inTenant->SetPatIndex(1); inTenant->SetPeopleAnime(); isChange = true; } } else { TakeOutTrash(inDoc, inTenant, theNow->GetRawMinutes()); if (inTenant->GetWorkCount() < 3) { inTenant->SetMark(-1); isChange = true; } } } else if (theNow->WithinMinutes(theCloseTime, theCloseTime + 8)) { inTenant->SetStatus(kTenantStatus13); } } else if (inStatus == kTenantStatus15) { TakeOutTrash(inDoc, inTenant, theNow->GetRawMinutes()); if (inTenant->GetWorkCount() > 2) { inTenant->SetMark(1); isChange = true; } inTenant->SetStatus(kTenantStatus13); } else if (inStatus == kTenantStatus11) { if (theNow->GetRawMinutes() < 8) inTenant->SetStatus(kTenantStatus12); } else if (inStatus == kTenantStatus10) { if (theNow->GetMinutes() < 8 && inTenant->CollectEmployee(inDoc)) { UnkVF(inDoc, inTenant); int newStatus; if (theNow->GetRawMinutes() >= (inTenant->GetOpenTime() - 60)) newStatus = kTenantStatus11; else newStatus = kTenantStatus12; inTenant->SetStatus(newStatus); } } else if (inStatus == kTenantStatus9) { int newStatus; if (inTenant->GetBelongCapacity() > 0) newStatus = kTenantStatus10; else if (theNow->GetRawMinutes() >= inTenant->GetOpenTime()) newStatus = kTenantStatus11; else newStatus = kTenantStatus12; inTenant->SetStatus(newStatus); inTenant->SetPatIndex(0); isChange = true; } } return isChange; } /*virtual*/ void FoodDef::EnterTenant(T2TowerDoc *inDoc, T2Tenant *inTenant, T2People *inPeople) { BOOL changed = false; if (inTenant->IsBelongPeople(inPeople)) { if (inPeople->GetStyle() == kPeopleStyle0) { inPeople->ChangeStyle(kPeopleStyle1); } else if (inPeople->GetStyle() == kPeopleStyle2) { inPeople->ChangeStyle(kPeopleStyle1); inTenant->IncWorkCount(); if (inTenant->GetWorkCount() > 2) { inTenant->SetMark(1); changed = true; } } if (!inTenant->IsOpen()) { inPeople->SetToSleep(); } else { inTenant->SetPeopleAnime(); changed = true; } } else { T2DateTime *theNow = inDoc->GetNow(); #line 273 _ASSERT(theNow != NULL); inTenant->EnterCustomer(inPeople, theNow->GetRawMinutes()); int numCustomer = inTenant->GetCustomerCount(); if (numCustomer == 1) { inTenant->SetStatus(kTenantStatus31); inTenant->UpdatePatternIndex(2); changed = true; } else if (numCustomer == (inTenant->GetCapacity() / 2)) { inTenant->SetStatus(kTenantStatus32); inTenant->UpdatePatternIndex(3); changed = true; } } if (changed) { inTenant->SetDrawMode(DrawMode1); T2TowerMainView *theMainView = inDoc->GetMainView(); if (theMainView) { RECT area; inTenant->GetEquipArea(area); theMainView->InvalUnitRect(area); } } } /*virtual*/ void FoodDef::LeaveTenant(T2TowerDoc *inDoc, T2Tenant *inTenant, T2People *inPeople) { BOOL changed = false; if (inTenant->IsBelongPeople(inPeople)) { if (inPeople->GetStyle() == kPeopleStyle1) inPeople->ChangeStyle(kPeopleStyle0); if (inTenant->IsOpen()) { inTenant->SetPeopleAnime(); changed = true; } } else { int numCustomer = inTenant->GetCustomerCount(); if (numCustomer == 0) { inTenant->SetStatus(kTenantStatus30); inTenant->UpdatePatternIndex(1); changed = true; } else if (numCustomer == (inTenant->GetCapacity() / 2 - 1)) { inTenant->SetStatus(kTenantStatus31); inTenant->UpdatePatternIndex(2); changed = true; } } if (changed) { inTenant->SetDrawMode(DrawMode1); T2TowerMainView *theMainView = inDoc->GetMainView(); if (theMainView) { RECT area; inTenant->GetEquipArea(area); theMainView->InvalUnitRect(area); } } } /*virtual*/ int FoodDef::EmergencyProc(T2TowerDoc *inDoc, T2Equip *inEquip) { T2Tenant *theTenant = (T2Tenant *) inEquip; theTenant->PushOutAll(inDoc); theTenant->ClearReserveCount(); if (theTenant->GetStatus() == kTenantStatus14) theTenant->SetStatus(kTenantStatus13); if (theTenant->GetOpenTime() == theTenant->GetCloseTime() && theTenant->IsOpen()) theTenant->SetStatus(kTenantStatus13); return 0; } /*virtual*/ void FoodDef::UnkVF(T2TowerDoc *inDoc, T2Tenant *inTenant) { T2TemplatePluginList *silhouetteTemplates = inDoc->GetSilhouetteTemplates(); if (silhouetteTemplates) { BOOL done = false; for (int i = 0; !done; i++) { T2People *thePeople = inTenant->GetBelongPeople(i); if (thePeople) { int theType1, theType2; if (thePeople->IsMale()) { theType1 = 1004; theType2 = 1008; } else { theType1 = 1005; theType2 = 1009; } T2SilhouetteDef *theSilhouetteDef = silhouetteTemplates->FindSilhouette(theType1); thePeople->SetSilhouetteDef(kPeopleStyle1, theSilhouetteDef); theSilhouetteDef = silhouetteTemplates->FindSilhouette(theType2); thePeople->SetSilhouetteDef(kPeopleStyle2, theSilhouetteDef); } else { done = true; } } } } /*virtual*/ T2InfoDialog *FoodDef::ConstructInfoDialog(T2Equip *inEquip) { return new StdFoodInfoDialog((T2Tenant *) inEquip); }