summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/Plugins/Common/StdFoodInfoDialog.cpp67
-rw-r--r--src/Plugins/Common/StdFoodInfoDialog.h10
-rw-r--r--src/Plugins/Common/StdShopInfoDialog.cpp187
-rw-r--r--src/Plugins/Common/StdShopInfoDialog.h17
-rw-r--r--src/Plugins/Common/StdTenantInfoDialog.cpp390
-rw-r--r--src/Plugins/Common/StdTenantInfoDialog.h24
-rw-r--r--src/Plugins/Food/Burger/Burger.cpp52
-rw-r--r--src/Plugins/Food/Burger/Burger.h6
-rw-r--r--src/Plugins/Food/Common/FoodDef.cpp291
-rw-r--r--src/Plugins/Food/Common/FoodDef.h14
-rw-r--r--src/Plugins/Food/Common/FoodPlugin.cpp8
-rw-r--r--src/Plugins/Food/Common/FoodPlugin.h6
-rw-r--r--src/Plugins/Food/Common/Trash.cpp103
-rw-r--r--src/Plugins/Food/Common/Trash.h6
-rw-r--r--src/T2DLL/T2Maru_Reggae.cpp4
-rw-r--r--src/T2DLL/T2People.cpp4
-rw-r--r--src/T2DLL/T2RouteNavigator.h2
-rw-r--r--src/T2DLL/T2Settlement.cpp2
-rw-r--r--src/T2DLL/T2SoundPlayer.h6
-rw-r--r--src/T2DLL/T2Tenant.cpp2
-rw-r--r--src/T2DLL/T2Tenant.h38
-rw-r--r--src/T2DLL/T2TenantDef.cpp14
-rw-r--r--src/T2DLL/T2ToolDef.h7
-rw-r--r--src/T2DLL/T2TowerMessage.h2
-rw-r--r--src/T2DLL/T2VisitVIP.cpp2
-rw-r--r--src/T2TowerDoc.cpp38
-rw-r--r--src/T2TowerDoc.h2
-rw-r--r--src/T2TowerMainView.cpp2
28 files changed, 1240 insertions, 66 deletions
diff --git a/src/Plugins/Common/StdFoodInfoDialog.cpp b/src/Plugins/Common/StdFoodInfoDialog.cpp
index 59d8a8a..e3002bd 100644
--- a/src/Plugins/Common/StdFoodInfoDialog.cpp
+++ b/src/Plugins/Common/StdFoodInfoDialog.cpp
@@ -1,7 +1,74 @@
+#include "../Food/Common/Trash.h"
#include "StdFoodInfoDialog.h"
+#include "T2EquipPtrList.h"
+#include "T2RouteNavigator.h"
+#include "T2Tenant.h"
+#include "T2TowerDoc.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
+
+StdFoodInfoDialog::StdFoodInfoDialog(T2Tenant *inTenant)
+ : StdShopInfoDialog(inTenant)
+{
+}
+
+StdFoodInfoDialog::~StdFoodInfoDialog() {
+}
+
+/*virtual*/ void StdFoodInfoDialog::GenerateComments() {
+ StdShopInfoDialog::GenerateComments();
+
+ if (GetDocument()->IsDustOn()) {
+ T2EquipPtrList *theTrashFacilityList = GetTrashFacilities(GetDocument(), GetTenant());
+ if (!theTrashFacilityList || theTrashFacilityList->GetCount() == 0) {
+ // EN: There's no Trash Facility.
+ AppendComment(14);
+ } else {
+ T2RouteNavigator *theNavi = GetDocument()->GetRouteNavi();
+#line 48
+ _ASSERT(theNavi != NULL);
+
+ BOOL isNotConnected = true;
+ T2Tenant *tenant = NULL;
+ POINT theTenantExit = GetTenant()->GetExitPt();
+
+ LArrayIterator iterator(*theTrashFacilityList);
+ while (iterator.Next(&tenant)) {
+ if (theNavi->CheckRoute(theTenantExit, tenant->GetEntrancePt(), 1000, kRouteType1)) {
+ isNotConnected = false;
+ break;
+ }
+ }
+
+ if (isNotConnected) {
+ // EN: Item not connected to Trash Facility.
+ AppendComment(15);
+ }
+ }
+ }
+
+ if (GetTenant()->GetWorkCount() >= 3) {
+ // EN: Forced to close.
+ AppendComment(16);
+ } else if (GetTenant()->GetWorkCount() > 0) {
+ // EN: Full of garbage.
+ AppendComment(15);
+ }
+}
+
+/*virtual*/ BOOL StdFoodInfoDialog::GenerateStatusProc(CString &outStr, BOOL &outIsBad) {
+ BOOL result = false;
+
+ if (GetTenant()->GetWorkCount() >= 3) {
+ // "営業停止" - Suspension of business
+ outStr = "\x89\x63\x8B\xC6\x92\xE2\x8E\x7E";
+ outIsBad = true;
+ result = true;
+ }
+
+ return result;
+}
diff --git a/src/Plugins/Common/StdFoodInfoDialog.h b/src/Plugins/Common/StdFoodInfoDialog.h
index 3a72974..f340a18 100644
--- a/src/Plugins/Common/StdFoodInfoDialog.h
+++ b/src/Plugins/Common/StdFoodInfoDialog.h
@@ -1,5 +1,13 @@
#pragma once
#include "common.h"
+#include "StdShopInfoDialog.h"
-class StdFoodInfoDialog {
+class StdFoodInfoDialog : public StdShopInfoDialog {
+public:
+ StdFoodInfoDialog(T2Tenant *inTenant);
+ virtual ~StdFoodInfoDialog();
+
+protected:
+ virtual void GenerateComments();
+ virtual BOOL GenerateStatusProc(CString &outStr, BOOL &outIsBad);
};
diff --git a/src/Plugins/Common/StdShopInfoDialog.cpp b/src/Plugins/Common/StdShopInfoDialog.cpp
index a3ee04d..43e7283 100644
--- a/src/Plugins/Common/StdShopInfoDialog.cpp
+++ b/src/Plugins/Common/StdShopInfoDialog.cpp
@@ -1,7 +1,194 @@
#include "StdShopInfoDialog.h"
+#include "T2DateTime.h"
+#include "T2DlgItemArrows.h"
+#include "T2DlgItemEdit.h"
+#include "T2DlgItemMerchandiseField.h"
+#include "T2Tenant.h"
+#include "T2TenantMemberDef.h"
+#include "T2TenantMemberTableDef.h"
+#include "T2TowerDoc.h"
+#include "T2WorldDef.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
+
+StdShopInfoDialog::StdShopInfoDialog(T2Tenant *inTenant)
+ : StdTenantInfoDialog(inTenant)
+ , mNumMerchandise(0)
+{
+}
+
+/*virtual*/ StdShopInfoDialog::~StdShopInfoDialog() {
+}
+
+/*virtual*/ void StdShopInfoDialog::GenerateComments() {
+ StdTenantInfoDialog::GenerateComments();
+
+ T2DateTime *now = GetDocument()->GetNow();
+#line 40
+ _ASSERT(now != NULL);
+
+ if (GetTenant()->IsOpen()) {
+ // EN: There aren't many customers.
+ int id = 18;
+
+ switch (GetTenant()->CalcEstimateColor()) {
+ case 9:
+ // EN: There aren't many customers.
+ id = 18;
+ break;
+ case 14:
+ // EN: There are a few customers.
+ id = 19;
+ break;
+ case 12:
+ // EN: Business is booming.
+ id = 20;
+ break;
+ }
+
+ AppendComment(id);
+
+ if (id == 20 && now->IsHoliday(GetDocument())) {
+ // EN: There are many customers due to the weekend.
+ AppendComment(21);
+ }
+
+ if (id == 18 && GetDocument()->GetWorldDef()->IsRainyDay(now)) {
+ // EN: There are fewer customers because its a rainy day.
+ AppendComment(22);
+ }
+ } else {
+ if (GetTenant()->GetStatus() == kTenantStatus11) {
+ // EN: Will be opened tomorrow.
+ AppendComment(23);
+ }
+ }
+}
+
+/*virtual*/ void StdShopInfoDialog::OnT2Create() {
+ StdTenantInfoDialog::OnT2Create();
+
+ if (!GetTenant()->IsFire())
+ InitNormal();
+ else
+ InitFire();
+}
+
+/*virtual*/ void StdShopInfoDialog::OnT2OK() {
+ StdTenantInfoDialog::OnT2OK();
+
+ if (!GetTenant()->IsFire())
+ SaveMerchandise();
+}
+
+void StdShopInfoDialog::InitNormal() {
+ T2TenantMemberTableDef *theTMT = GetTenant()->GetMerchandiseTMT();
+ if (theTMT) {
+ mNumMerchandise = theTMT->GetNumOfElem();
+
+ for (int i = 0; i < 4; i++) {
+ T2TenantMemberDef *theMerchandise = (i < mNumMerchandise) ? theTMT->GetElem(i) : NULL;
+
+ T2DlgItem *text = GetT2DlgItem(8001 + i * 4);
+ if (text && theMerchandise) {
+ CString name;
+ theMerchandise->GetName(name);
+ text->SetDescriptor(name);
+ }
+
+ T2DlgItem *merchandise = GetT2DlgItem(8002 + i * 4);
+ if (merchandise) {
+ if (theMerchandise)
+ merchandise->SetValue(theMerchandise->GetPercent());
+ else
+ merchandise->EnableWindow(false);
+ }
+
+ T2DlgItemArrows *arrows = (T2DlgItemArrows *) GetT2DlgItem(8003 + i * 4);
+ if (arrows) {
+ if (theMerchandise)
+ arrows->SetValue(theMerchandise->GetPercent());
+
+ arrows->SetMinValue(0);
+ arrows->SetMaxValue(100);
+ arrows->ShowWindow(SW_HIDE);
+ }
+ }
+ }
+}
+
+void StdShopInfoDialog::InitFire() {
+ for (int i = 0; i < 4; i++) {
+ T2DlgItem *merchandise = GetT2DlgItem(8002 + i * 4);
+ merchandise->EnableWindow(false);
+
+ T2DlgItemArrows *arrows = (T2DlgItemArrows *) GetT2DlgItem(8003 + i * 4);
+ arrows->ShowWindow(SW_HIDE);
+ }
+}
+
+void StdShopInfoDialog::SaveMerchandise() {
+ if (mNumMerchandise > 0) {
+ int i, array[4];
+
+ for (i = 0; i < 4; i++) {
+ T2DlgItem *theField = GetT2DlgItem(8002 + i * 4);
+ if (theField)
+ array[i] = theField->GetValue();
+ else
+ break;
+ }
+
+ GetTenant()->SetMerchandise(i, array);
+ }
+}
+
+/*virtual*/ BOOL StdShopInfoDialog::OnT2DialogCommand(WPARAM inWParam, LPARAM inLParam) {
+ BOOL result = false;
+ WORD code = HIWORD(inWParam);
+ WORD itemID = LOWORD(inWParam);
+
+ for (int n = 0; n < 4; n++) {
+ if (itemID == (8003 + n * 4)) {
+ result = true;
+
+ T2DlgItemArrows *arrows = (T2DlgItemArrows *) GetT2DlgItem(8003 + n * 4);
+ T2DlgItemMerchandiseField *field = (T2DlgItemMerchandiseField *) GetT2DlgItem(8002 + n * 4);
+ if (arrows && field) {
+ int change = arrows->GetValue() - field->GetValue();
+ if (change == 0)
+ break;
+
+ for (int next = (n + 1) % mNumMerchandise; next != n; next = (next + 1) % mNumMerchandise) {
+ T2DlgItemArrows *nextArrows = (T2DlgItemArrows *) GetT2DlgItem(8003 + next * 4);
+ T2DlgItemMerchandiseField *nextField = (T2DlgItemMerchandiseField *) GetT2DlgItem(8002 + next * 4);
+
+ if (nextArrows && nextField) {
+ int nextValue = nextField->GetValue();
+ if ((change > 0 && nextValue > 0) || (change < 0 && nextValue < 100)) {
+ nextValue -= change;
+ nextField->SetValue(nextValue);
+ nextArrows->SetValue(nextValue);
+ nextField->Invalidate();
+
+ field->SetValue(arrows->GetValue());
+ field->SelectAll();
+ field->Invalidate();
+ break;
+ }
+ }
+ }
+ }
+ break;
+ }
+ }
+
+ if (!result)
+ result = StdTenantInfoDialog::OnT2DialogCommand(inWParam, inLParam);
+
+ return result;
+}
diff --git a/src/Plugins/Common/StdShopInfoDialog.h b/src/Plugins/Common/StdShopInfoDialog.h
index d1f79d7..280b2cc 100644
--- a/src/Plugins/Common/StdShopInfoDialog.h
+++ b/src/Plugins/Common/StdShopInfoDialog.h
@@ -1,5 +1,20 @@
#pragma once
#include "common.h"
+#include "StdTenantInfoDialog.h"
-class StdShopInfoDialog {
+class StdShopInfoDialog : public StdTenantInfoDialog {
+public:
+ StdShopInfoDialog(T2Tenant *inTenant);
+ virtual ~StdShopInfoDialog();
+
+protected:
+ virtual void GenerateComments();
+ virtual void OnT2Create();
+ virtual void OnT2OK();
+ void InitNormal();
+ void InitFire();
+ void SaveMerchandise();
+ virtual BOOL OnT2DialogCommand(WPARAM inWParam, LPARAM inLParam);
+
+ int mNumMerchandise;
};
diff --git a/src/Plugins/Common/StdTenantInfoDialog.cpp b/src/Plugins/Common/StdTenantInfoDialog.cpp
index 0cac85b..3bad68c 100644
--- a/src/Plugins/Common/StdTenantInfoDialog.cpp
+++ b/src/Plugins/Common/StdTenantInfoDialog.cpp
@@ -1,7 +1,387 @@
#include "StdTenantInfoDialog.h"
+#include "T2DlgItemCustomerGage.h"
+#include "T2DlgItemPeopleView.h"
+#include "T2DlgItemProfitsGage.h"
+#include "T2DlgItemText.h"
+#include "T2FloorInfo.h"
+#include "T2Maru_Reggae.h"
+#include "T2Mover.h"
+#include "T2Name.h"
+#include "T2NameList.h"
+#include "T2People.h"
+#include "T2PeopleLinkIterator.h"
+#include "T2PeoplePtrList.h"
+#include "T2RouteCEArray.h"
+#include "T2RouteNavigator.h"
+#include "T2Tenant.h"
+#include "T2TenantDef.h"
+#include "T2TowerDoc.h"
+#include "T2WorldDef.h"
+#include "UT2Coordinate.h"
+#include "UT2Utils.h"
-#ifdef _DEBUG
-#define new DEBUG_NEW
-#undef THIS_FILE
-static char THIS_FILE[] = __FILE__;
-#endif
+StdTenantInfoDialog::StdTenantInfoDialog(T2Tenant *inTenant)
+ : T2TenantInfoDialog(inTenant)
+ , mNumCommentLines(0)
+{
+ mIsFavorited = 0;
+}
+
+/*virtual*/ StdTenantInfoDialog::~StdTenantInfoDialog() {
+}
+
+/*virtual*/ BOOL StdTenantInfoDialog::OnT2DialogCommand(WPARAM inWParam, LPARAM inLParam) {
+ WORD code = HIWORD(inWParam);
+ WORD id = LOWORD(inWParam);
+
+ if (code == -1 && id == 7090) { // favourite button
+ GetT2DlgItem(7090)->EnableWindow(false);
+ mIsFavorited = 1;
+
+ CString name;
+ T2DlgItem *nameField = (T2DlgItem *) GetDlgItem(7003);
+ nameField->GetDescriptor(name);
+
+ if (name == "")
+ nameField->SetDescriptor(mTenantName);
+ }
+}
+
+/*virtual*/ void StdTenantInfoDialog::OnT2Create() {
+ if (!GetDocument() || !GetDocument()->mWorldDef)
+ return;
+
+ CString text;
+ T2DlgItem *item = NULL;
+
+ // ID
+ item = GetT2DlgItem(7001);
+ if (item) {
+ int roomNumber = GetTenant()->GetRoomNumber(GetDocument()->mFloorInfo);
+ UT2Utils::GetRoomNumberString(roomNumber, text);
+ item->SetDescriptor(text);
+ }
+
+ // Name
+ item = GetT2DlgItem(7003);
+ if (item) {
+ T2Name *theName = GetDocument()->mNameDB->Search(GetTenant());
+ if (theName) {
+ unsigned int id;
+ theName->GetName(mTenantName, id);
+ } else {
+ GetTenant()->GetTypicalName(mTenantName);
+ }
+ item->SetDescriptor(mTenantName);
+ }
+
+ // Image
+ item = GetT2DlgItem(7004);
+ if (item)
+ UpdateViewOfTenant(item);
+
+ GenerateStatus();
+
+ if (!GetTenant()->IsFire()) {
+ // Hours
+ item = GetT2DlgItem(7021);
+ if (item) {
+ int theOpenTime = GetTenant()->GetOpenTime();
+ int theCloseTime = GetTenant()->GetCloseTime();
+ text.Format(
+ "%d:%02d\x81\x60%d:%02d",
+ theOpenTime / 60, theOpenTime % 60,
+ theCloseTime / 60, theCloseTime % 60
+ );
+ item->SetDescriptor(text);
+ }
+
+ item = GetT2DlgItem(7022);
+ if (item) {
+ text.Format("%d", GetDocument()->mWorldDef->ExchangeMoney(GetTenant()->GetInMoney()));
+ item->SetDescriptor(text);
+ }
+
+ item = GetT2DlgItem(7023);
+ if (item) {
+ item->GetDescriptor(text);
+ text += GetDocument()->mWorldDef->GetMoneyUnit();
+ item->SetDescriptor(text);
+ }
+
+ // Customers
+ item = GetT2DlgItem(7030);
+ if (item) {
+ text.Format("%d", GetTenant()->GetTotalCustomer());
+ item->SetDescriptor(text);
+ }
+
+ item = GetT2DlgItem(7031);
+ if (item) {
+ text.Format("%d", GetDocument()->mWorldDef->ExchangeMoney(GetTenant()->GetInMoney() * 100));
+ item->SetDescriptor(text);
+ }
+
+ item = GetT2DlgItem(7032);
+ if (item) {
+ item->GetDescriptor(text);
+ text += GetDocument()->mWorldDef->GetMoneyUnit();
+ item->SetDescriptor(text);
+ }
+
+ item = GetT2DlgItem(7042);
+ if (item) {
+ T2DlgItemProfitsGage *profitsGage = (T2DlgItemProfitsGage *) item;
+ profitsGage->SetTenant(GetTenant());
+ }
+
+ item = GetT2DlgItem(7043);
+ if (item) {
+ item->GetDescriptor(text);
+ text += GetDocument()->mWorldDef->GetMoneyUnit();
+ item->SetDescriptor(text);
+ }
+
+ T2PeoplePtrList *theBelongList = GetTenant()->GetBelongList();
+ item = GetT2DlgItem(7060);
+ if (theBelongList && item) {
+ T2DlgItemPeopleView *peopleView = (T2DlgItemPeopleView *) item;
+ peopleView->StartAdd();
+
+ T2People *thePeople;
+ LArrayIterator iterator(*theBelongList);
+
+ while (iterator.Next(&thePeople)) {
+ if (thePeople && thePeople->GetCurTenantID() == GetTenant()->GetEquipID())
+ peopleView->AddOne(thePeople);
+ }
+
+ peopleView->FinishAdd();
+ }
+
+ T2People *theFirstPeople = GetTenant()->GetFirstPeople();
+ item = GetT2DlgItem(7061);
+ if (theFirstPeople && item) {
+ T2DlgItemPeopleView *thePeopleView = (T2DlgItemPeopleView *) item;
+ thePeopleView->StartAdd();
+
+ T2People *thePeople;
+ T2PeopleLinkIterator theIterator(theFirstPeople);
+
+ while (theIterator.Next(&thePeople)) {
+ if (
+ thePeople &&
+ thePeople->GetCurTenantID() == GetTenant()->GetEquipID() &&
+ thePeople->GetWorkTenant() != GetTenant()->GetEquipID()
+ )
+ thePeopleView->AddOne(thePeople);
+ }
+
+ thePeopleView->FinishAdd();
+ }
+
+ item = GetT2DlgItem(7042);
+ if (item) {
+ T2DlgItemCustomerGage *customerGage = (T2DlgItemCustomerGage *) item;
+ customerGage->SetTenant(GetTenant());
+ }
+ }
+
+ T2Name *theExistingName = mTowerDoc->mNameDB->Search(GetTenant());
+ if (theExistingName)
+ GetT2DlgItem(7090)->EnableWindow(false);
+
+ GenerateComments();
+}
+
+/*virtual*/ void StdTenantInfoDialog::OnT2Destroy() {
+ // empty
+}
+
+/*virtual*/ void StdTenantInfoDialog::AppendLine(const CString &inStr) {
+ if (mNumCommentLines < 4) {
+ mNumCommentLines++;
+
+ T2DlgItem *theItem = GetT2DlgItem(7080);
+ if (theItem) {
+ CString str;
+ theItem->GetDescriptor(str);
+ str += '\r';
+ theItem->SetDescriptor(str);
+ }
+ }
+}
+
+/*virtual*/ void StdTenantInfoDialog::AppendComment(unsigned int inID, T2Equip *inEquip) {
+ CString str, comment;
+
+ if (inEquip)
+ inEquip->GetTypicalName(str);
+
+ GetCommentString(inID, comment);
+ str += comment;
+ AppendLine(str);
+}
+
+/*virtual*/ void StdTenantInfoDialog::UpdateViewOfTenant(T2DlgItem *inItem) {
+ T2TenantDef *theTenantDef = GetTenantDef();
+ T2Tenant *theTenant = GetTenant();
+ CString str;
+
+ if (theTenantDef && theTenant) {
+ if (theTenant->IsFire()) {
+ inItem->SetDescriptor("Rubble");
+ inItem->SetValue(0);
+ } else {
+ inItem->SetValue(
+ GetTenant()->GetValiation() * 1000 +
+ theTenantDef->mHeight * 100 +
+ GetTenant()->GetPatIndex()
+ );
+ }
+
+ CRect theDialogArea, theTenantRect;
+ GetClientRect(theDialogArea);
+ theTenant->GetEquipArea(theTenantRect);
+
+ CSize theSize = theTenantRect.Size();
+
+ int multiplier = (theSize.cy == 1) ? 2 : 1;
+ int theHeight = ((theSize.cy * UT2Coordinate::UnitVSize(0)) - UT2Coordinate::CalcRoofThick(0) - UT2Coordinate::CalcFloorThick(0)) * multiplier;
+ int theWidth = min(theSize.cx * UT2Coordinate::UnitHSize(0) * multiplier, theDialogArea.Width() - 26);
+
+ CRect rect(0, 0, theWidth, theHeight);
+ inItem->MapWindowPoints(inItem->GetParent(), rect);
+ inItem->MoveWindow(rect);
+
+ T2DlgItem *theBox = GetT2DlgItem(7504);
+ if (theBox) {
+ rect.InflateRect(1, 1);
+ theBox->MoveWindow(rect);
+ }
+ }
+}
+
+/*virtual*/ BOOL StdTenantInfoDialog::GenerateStatusProc(CString &outStr, BOOL &outIsBad) {
+ return false;
+}
+
+void StdTenantInfoDialog::GenerateStatus() {
+ T2DlgItemText *theTextItem = (T2DlgItemText *) GetT2DlgItem(7010);
+ if (theTextItem) {
+ CString str;
+ BOOL bad = false;
+
+ if (!GetDocument()->GetRouteNavi()->IsConnectRouteFromLobby(GetTenant()->GetEntrancePt())) {
+ // "ロビー未接続" - Lobby not connected
+ str = "\x83\x8D\x83\x72\x81\x5B\x96\xA2\x90\xDA\x91\xB1";
+ bad = true;
+ } else if (0) {
+ // "停電" - Blackout
+ str = "\x92\xE2\x93\x64";
+ bad = true;
+ } else if (GetTenant()->IsFire()) {
+ // "火災の焼け跡" - fire scars
+ str = "\x89\xCE\x8D\xD0\x82\xCC\x8F\xC4\x82\xAF\x90\xD5";
+ bad = true;
+ } else if (GenerateStatusProc(str, bad)) {
+ // use it as-is
+ } else {
+ // "稼働中" - in operation
+ str = "\x89\xD2\x93\xAD\x92\x86";
+ }
+
+ theTextItem->SetDescriptor(str);
+ if (bad)
+ theTextItem->SetTextColor(PALETTERGB(255, 0, 0));
+ }
+}
+
+/*virtual*/ void StdTenantInfoDialog::GenerateComments() {
+ ClearComment();
+
+ if (!GetDocument()->GetRouteNavi()->IsConnectRouteFromLobby(GetTenant()->GetEntrancePt())) {
+ // EN: Need a more direct route to destination.
+ AppendComment(2);
+ } else if (GetTenant()->GetInMoney() != 0 && GetTenant()->GetBelongCapacity() != 0) {
+ T2Tenant *theEntranceFloor = GetDocument()->mFloorInfo->GetTenant(GetTenant()->GetEntranceFloorID());
+#line 380
+ _ASSERT(theEntranceFloor != NULL);
+
+ POINT entrancePt = GetTenant()->GetEntrancePt();
+ T2Mover *nearMover = NULL;
+ unsigned int nearMoverScore = 0xFFFFFFFF;
+
+ unsigned int theID = 0;
+ LArrayIterator iterator(*theEntranceFloor->GetCEArray());
+ while (iterator.Next(&theID)) {
+ T2Mover *theMover = GetDocument()->mFloorInfo->GetMover(theID);
+ if (!theMover || !theMover->IsSetAttribute(kMoverAttrRoutingTable0))
+ continue;
+
+ CRect moverArea;
+ theMover->GetEquipArea(moverArea);
+
+ int h = (moverArea.left + moverArea.right) / 2;
+ int theDistance = abs(h - entrancePt.x);
+ if (theDistance < nearMoverScore) {
+ nearMover = theMover;
+ nearMoverScore = theDistance;
+ }
+ }
+
+ if (nearMover) {
+ if (nearMoverScore >= 160) {
+ if (nearMover->IsStair()) {
+ // EN: is far away.
+ AppendComment(6, nearMover);
+ } else {
+ // EN: Elevator is far away.
+ AppendComment(4);
+ }
+ } else if (nearMoverScore >= 96) {
+ if (nearMover->IsStair()) {
+ // EN: is a bit far away.
+ AppendComment(5, nearMover);
+ } else {
+ // EN: Elevator is far away.
+ AppendComment(4);
+ }
+ }
+ }
+ }
+
+ T2Maru_Reggae *theReggae = GetDocument()->mWorldDef->GetReggae();
+ if (theReggae && theReggae->GetVisitTenant() == GetTenant()) {
+ // EN: Uncle Reggae is noisy and annoying.
+ AppendComment(8);
+ }
+}
+
+/*virtual*/ void StdTenantInfoDialog::OnT2OK() {
+ CString str;
+ ((T2DlgItem *) GetDlgItem(7003))->GetDescriptor(str);
+ if (str == "")
+ str = mTenantName;
+
+ if (mTenantName != str || mIsFavorited == 1) {
+ T2Name *theName = mTowerDoc->mNameDB->Search(GetTenant());
+ if (theName) {
+ theName->SetName(str);
+ } else {
+ T2Name *newName = new T2Name(str, GetTenant(), false);
+ mTowerDoc->mNameDB->Add(newName);
+ }
+ }
+}
+
+/*virtual*/ void StdTenantInfoDialog::OnT2Cancel() {
+ // empty
+}
+
+void StdTenantInfoDialog::ClearComment() {
+ T2DlgItem *theItem = GetT2DlgItem(7080);
+ if (theItem)
+ theItem->SetDescriptor("");
+ mNumCommentLines = 0;
+}
diff --git a/src/Plugins/Common/StdTenantInfoDialog.h b/src/Plugins/Common/StdTenantInfoDialog.h
index b2e1eac..6220261 100644
--- a/src/Plugins/Common/StdTenantInfoDialog.h
+++ b/src/Plugins/Common/StdTenantInfoDialog.h
@@ -1,5 +1,27 @@
#pragma once
#include "common.h"
+#include "T2TenantInfoDialog.h"
-class StdTenantInfoDialog {
+class StdTenantInfoDialog : public T2TenantInfoDialog {
+public:
+ StdTenantInfoDialog(T2Tenant *inTenant);
+ virtual ~StdTenantInfoDialog();
+
+protected:
+ virtual BOOL OnT2DialogCommand(WPARAM inWParam, LPARAM inLParam);
+ virtual void OnT2Create();
+ virtual void OnT2Destroy();
+ virtual void OnT2OK();
+ virtual void OnT2Cancel();
+ virtual void AppendLine(const CString &inStr);
+ virtual void AppendComment(unsigned int inID, T2Equip *inEquip = NULL);
+ virtual void GenerateComments();
+ virtual BOOL GenerateStatusProc(CString &outStr, BOOL &outIsBad);
+ virtual void UpdateViewOfTenant(T2DlgItem *inItem);
+ void GenerateStatus();
+ void ClearComment();
+
+ int mNumCommentLines;
+ CString mTenantName;
+ int mIsFavorited;
};
diff --git a/src/Plugins/Food/Burger/Burger.cpp b/src/Plugins/Food/Burger/Burger.cpp
index 4b81d7b..e18f508 100644
--- a/src/Plugins/Food/Burger/Burger.cpp
+++ b/src/Plugins/Food/Burger/Burger.cpp
@@ -1,7 +1,59 @@
#include "Burger.h"
+#include "T2PluginSpecifier.h"
+#include "../Common/FoodDef.h"
+#include "../Common/FoodPlugin.h"
#ifdef _DEBUG
#define new DEBUG_NEW
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
+
+BEGIN_MESSAGE_MAP(CBurgerApp, CWinApp)
+END_MESSAGE_MAP()
+
+CBurgerApp::CBurgerApp() {
+}
+
+CBurgerApp theApp;
+
+FoodPlugin *sFoodPlugin;
+FoodDef *sFoodDef;
+
+extern "C" void *AFX_EXT_API CALLBACK ConstructProgramPlugin(T2PluginSpecifier *inSpecifier) {
+ if (!sFoodPlugin) {
+#line 88
+ sFoodPlugin = new FoodPlugin('TnPl', inSpecifier);
+ }
+
+ return sFoodPlugin;
+}
+
+extern "C" void *AFX_EXT_API CALLBACK ConstructTemplatePlugin(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) {
+ if (!sFoodDef) {
+#line 101
+ sFoodDef = new FoodDef('TnDf', *inSpecifier, inResFile, inWorldDef, inPlugin);
+ }
+
+ return sFoodDef;
+}
+
+extern "C" void *AFX_EXT_API CALLBACK DestructProgramPlugin() {
+ delete sFoodPlugin;
+ sFoodPlugin = NULL;
+
+ delete sFoodDef;
+ sFoodDef = NULL;
+
+ return NULL;
+}
+
+extern "C" T2PluginSpecifier *AFX_EXT_API CALLBACK GetAttr(T2PluginSpecifier *inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin) {
+#line 120
+ T2PluginSpecifier *specifier = new T2PluginSpecifier;
+ specifier->mPluginName = "Burgar";
+ specifier->mType = 'TnPl';
+ specifier->mAttrib = 0xFFFFFFFF;
+ specifier->mGameLevel = 0;
+ return specifier;
+}
diff --git a/src/Plugins/Food/Burger/Burger.h b/src/Plugins/Food/Burger/Burger.h
index a99da1b..37b2774 100644
--- a/src/Plugins/Food/Burger/Burger.h
+++ b/src/Plugins/Food/Burger/Burger.h
@@ -1,5 +1,9 @@
#pragma once
#include "common.h"
-class Burger {
+class CBurgerApp : public CWinApp {
+public:
+ CBurgerApp();
+
+ DECLARE_MESSAGE_MAP()
};
diff --git a/src/Plugins/Food/Common/FoodDef.cpp b/src/Plugins/Food/Common/FoodDef.cpp
index 821a063..dfc84ad 100644
--- a/src/Plugins/Food/Common/FoodDef.cpp
+++ b/src/Plugins/Food/Common/FoodDef.cpp
@@ -1,7 +1,298 @@
#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);
+}
diff --git a/src/Plugins/Food/Common/FoodDef.h b/src/Plugins/Food/Common/FoodDef.h
index 93bbe62..f425270 100644
--- a/src/Plugins/Food/Common/FoodDef.h
+++ b/src/Plugins/Food/Common/FoodDef.h
@@ -1,5 +1,17 @@
#pragma once
#include "common.h"
+#include "T2TenantDef.h"
-class FoodDef {
+class FoodDef : public T2TenantDef {
+public:
+ FoodDef(DWORD inType, T2PluginSpecifier &inSpecifier, CResFile *inResFile, T2WorldDef *inWorldDef, T2TenantPlugin *inPlugin);
+ virtual ~FoodDef();
+
+ virtual void LoadSound(T2TowerDoc *inDoc);
+ virtual BOOL ChangeStatusOnIdle(T2TowerDoc *inDoc, T2Tenant *inTenant, int inStatus);
+ virtual void EnterTenant(T2TowerDoc *inDoc, T2Tenant *inTenant, T2People *inPeople);
+ virtual void LeaveTenant(T2TowerDoc *inDoc, T2Tenant *inTenant, T2People *inPeople);
+ virtual int EmergencyProc(T2TowerDoc *inDoc, T2Equip *inEquip);
+ virtual void UnkVF(T2TowerDoc *inDoc, T2Tenant *inTenant);
+ virtual T2InfoDialog *ConstructInfoDialog(T2Equip *inEquip);
};
diff --git a/src/Plugins/Food/Common/FoodPlugin.cpp b/src/Plugins/Food/Common/FoodPlugin.cpp
index 2b5d041..22e72fe 100644
--- a/src/Plugins/Food/Common/FoodPlugin.cpp
+++ b/src/Plugins/Food/Common/FoodPlugin.cpp
@@ -5,3 +5,11 @@
#undef THIS_FILE
static char THIS_FILE[] = __FILE__;
#endif
+
+FoodPlugin::FoodPlugin(DWORD inType, T2PluginSpecifier &inSpecifier)
+ : T2TenantPlugin(inType, inSpecifier)
+{
+}
+
+/*virtual*/ FoodPlugin::~FoodPlugin() {
+}
diff --git a/src/Plugins/Food/Common/FoodPlugin.h b/src/Plugins/Food/Common/FoodPlugin.h
index 157d64c..5cd0a5a 100644
--- a/src/Plugins/Food/Common/FoodPlugin.h
+++ b/src/Plugins/Food/Common/FoodPlugin.h
@@ -1,5 +1,9 @@
#pragma once
#include "common.h"
+#include "T2TenantPlugin.h"
-class FoodPlugin {
+class FoodPlugin : public T2TenantPlugin {
+public:
+ FoodPlugin(DWORD inType, T2PluginSpecifier &inSpecifier);
+ virtual ~FoodPlugin();
};
diff --git a/src/Plugins/Food/Common/Trash.cpp b/src/Plugins/Food/Common/Trash.cpp
new file mode 100644
index 0000000..15e7c6c
--- /dev/null
+++ b/src/Plugins/Food/Common/Trash.cpp
@@ -0,0 +1,103 @@
+// actual name unknown
+#include "T2EquipPtrList.h"
+#include "T2People.h"
+#include "T2RegistedTenantDB.h"
+#include "T2RouteNavigator.h"
+#include "T2Tenant.h"
+#include "T2TowerDoc.h"
+#include "T2TowerMessage.h"
+#include "Trash.h"
+
+void TakeOutTrash(T2TowerDoc *inDoc, T2Tenant *inTenant, unsigned int inTime) {
+ unsigned int numBelong = inTenant->GetBelongCapacity();
+
+ for (unsigned int i = 1; inTenant->GetWorkCount() > 0 && i <= numBelong; i++) {
+ T2People *thePeople = inTenant->GetBelongPeopleIn(i);
+ if (thePeople) {
+ T2Tenant *theFacility = SelectTrashFacility(inDoc, inTenant, thePeople);
+ if (theFacility) {
+ inTenant->DecWorkCount();
+ thePeople->ChangeStyle(kPeopleStyle2);
+ thePeople->SetDestination(theFacility->GetEquipID(), inTime);
+ thePeople->SetReturn(inTenant->GetEquipID(), inTime);
+ theFacility->IncReserveCount(1);
+ } else {
+ break;
+ }
+ }
+ }
+}
+
+T2Tenant *SelectTrashFacility(T2TowerDoc *inDoc, T2Tenant *inTenant, T2People *inPeople) {
+ BOOL isConnectedRoute = false;
+ BOOL isFacilityBuildFinish = false;
+ BOOL isFacilityRegisted = false;
+
+ T2Tenant *theTrashFacility = NULL;
+ T2EquipPtrList *theTrashFacilityList = GetTrashFacilities(inDoc, inTenant);
+
+ if (theTrashFacilityList && theTrashFacilityList->GetCount() > 0) {
+ T2RouteNavigator *theNavi = inDoc->GetRouteNavi();
+ if (theNavi) {
+ POINT exitPt = inTenant->GetExitPt();
+
+ LArrayIterator iterator(*theTrashFacilityList);
+ T2Tenant *tenant;
+
+ while (!theTrashFacility && iterator.Next(&tenant)) {
+ if (tenant->IsBuildFinish()) {
+ POINT entrancePt = tenant->GetEntrancePt();
+
+ if (theNavi->CheckRoute(exitPt, entrancePt, 1000, kRouteType1)) {
+ if ((tenant->GetTotalCustomer() + tenant->GetReserveCount()) < tenant->GetCapacity())
+ theTrashFacility = tenant;
+
+ isConnectedRoute = true;
+ }
+
+ isFacilityBuildFinish = true;
+ }
+ }
+ }
+
+ isFacilityRegisted = true;
+ }
+
+ if (!theTrashFacility) {
+ if (isConnectedRoute) {
+ inDoc->GetTowerMessage()->PassiveInfoBarMessage(
+ // We need to expand the garbage collection area.
+ // "ゴミ回収場の拡張が必要です。"
+ "\x83\x53\x83\x7E\x89\xF1\x8E\xFB\x8F\xEA\x82\xCC\x8A\x67\x92\xA3\x82\xAA\x95\x4B\x97\x76\x82\xC5\x82\xB7\x81\x42",
+ 180);
+ } else if (isFacilityBuildFinish) {
+ inDoc->GetTowerMessage()->PeopleBalloonMessage(
+ // Where is the garbage collection point?
+ // "ゴミ回収場はどこにあるのかな?"
+ "\x83\x53\x83\x7E\x89\xF1\x8E\xFB\x8F\xEA\x82\xCD\x82\xC7\x82\xB1\x82\xC9\x82\xA0\x82\xE9\x82\xCC\x82\xA9\x82\xC8\x81\x48",
+ inPeople);
+ } else if (!isFacilityRegisted) {
+ inDoc->GetTowerMessage()->PassiveInfoBarMessage(
+ // A garbage collection point is required in the building.
+ // "ビル内にゴミ回収場が必要です。"
+ "\x83\x72\x83\x8B\x93\xE0\x82\xC9\x83\x53\x83\x7E\x89\xF1\x8E\xFB\x8F\xEA\x82\xAA\x95\x4B\x97\x76\x82\xC5\x82\xB7\x81\x42",
+ 180);
+ }
+ }
+
+ return theTrashFacility;
+}
+
+T2EquipPtrList *GetTrashFacilities(T2TowerDoc *inDoc, T2Tenant *inTenant) {
+ T2EquipPtrList *theList = inTenant->GetRelatedTenantList();
+
+ if (!theList) {
+ T2RegistedTenantDB *theDB = inDoc->GetRegistedTenantDB();
+ if (theDB) {
+ theList = theDB->GetList(kTenantRegistID2);
+ inTenant->SetRelatedTenant(theList);
+ }
+ }
+
+ return theList;
+}
diff --git a/src/Plugins/Food/Common/Trash.h b/src/Plugins/Food/Common/Trash.h
new file mode 100644
index 0000000..59b7fdd
--- /dev/null
+++ b/src/Plugins/Food/Common/Trash.h
@@ -0,0 +1,6 @@
+#pragma once
+#include "common.h"
+
+void TakeOutTrash(T2TowerDoc *inDoc, T2Tenant *inTenant, unsigned int inTime);
+T2Tenant *SelectTrashFacility(T2TowerDoc *inDoc, T2Tenant *inTenant, T2People *inPeople);
+T2EquipPtrList *GetTrashFacilities(T2TowerDoc *inDoc, T2Tenant *inTenant);
diff --git a/src/T2DLL/T2Maru_Reggae.cpp b/src/T2DLL/T2Maru_Reggae.cpp
index ee863ea..1c6fd2c 100644
--- a/src/T2DLL/T2Maru_Reggae.cpp
+++ b/src/T2DLL/T2Maru_Reggae.cpp
@@ -379,7 +379,7 @@ void T2Maru_Reggae::ReggaeReception(T2TowerDoc* inDoc, T2People* inPeople) {
if ((mCounter % 60) == 0) {
CString message;
MakeClaimMessage(inDoc, theTenant, message);
- inDoc->towerDoc_vf13C()->InfoBarMessage(message, 180, NULL);
+ inDoc->GetTowerMessage()->InfoBarMessage(message, 180, NULL);
if (!mGuardman)
mGuardman = new T2Guardman(this, inDoc, theTenant);
@@ -409,7 +409,7 @@ void T2Maru_Reggae::ReggaeReception(T2TowerDoc* inDoc, T2People* inPeople) {
curPos = inPeople->GetCurPosition();
theTenant = inDoc->GetFloorInfo()->GetTenant(curPos.y, curPos.x);
MakeClaimMessage(inDoc, theTenant, message);
- inDoc->towerDoc_vf13C()->CancelInfoBarMessage(message);
+ inDoc->GetTowerMessage()->CancelInfoBarMessage(message);
// "レゲエのおじさんは警備員につかまりました。"
// Uncle Reggae was caught by a security guard.
diff --git a/src/T2DLL/T2People.cpp b/src/T2DLL/T2People.cpp
index c83373a..4ce0737 100644
--- a/src/T2DLL/T2People.cpp
+++ b/src/T2DLL/T2People.cpp
@@ -437,7 +437,7 @@ void T2People::SolveNoRoute(T2TowerDoc* towerDoc) {
if (IsWalk()) {
// "道がないよ~" - there is no way
CString theMessage = "\x93\xB9\x82\xAA\x82\xC8\x82\xA2\x82\xE6\x81\x60";
- towerDoc->towerDoc_vf13C()->PeopleBalloonMessage(theMessage, this);
+ towerDoc->GetTowerMessage()->PeopleBalloonMessage(theMessage, this);
RECT theRect;
CalcWalkingSilhouetteArea(theRect);
@@ -987,7 +987,7 @@ BOOL T2People::SearchToilet(T2TowerDoc* towerDoc) {
ok = true;
} else {
SetReturnToDestination();
- T2TowerMessage *towerMessage = towerDoc->towerDoc_vf13C();
+ T2TowerMessage *towerMessage = towerDoc->GetTowerMessage();
if (towerMessage) {
// "トイレが混んでいる" - toilet is crowded
CString msg = "\x83\x67\x83\x43\x83\x8C\x82\xAA\x8D\xAC\x82\xF1\x82\xC5\x82\xA2\x82\xE9";
diff --git a/src/T2DLL/T2RouteNavigator.h b/src/T2DLL/T2RouteNavigator.h
index a667e07..b12a6b9 100644
--- a/src/T2DLL/T2RouteNavigator.h
+++ b/src/T2DLL/T2RouteNavigator.h
@@ -3,7 +3,9 @@
enum {
kRouteTypeNeg1 = -1,
+ // Normal people movement
kRouteType0 = 0,
+ // Trash disposal
kRouteType1 = 1,
kRouteType2 = 2,
kRouteType3 = 3,
diff --git a/src/T2DLL/T2Settlement.cpp b/src/T2DLL/T2Settlement.cpp
index 30ea8e5..ed60b5f 100644
--- a/src/T2DLL/T2Settlement.cpp
+++ b/src/T2DLL/T2Settlement.cpp
@@ -154,7 +154,7 @@ void T2Settlement::EmitPayToolMessage(T2TowerDoc* towerDoc, T2ToolDef* inToolDef
SetTimeLimitOfMessage(towerDoc, inToolDef, type, theTimeLimit);
delete theTimeLimit;
- towerDoc->towerDoc_vf13C()->InfoBarMessage(str, 120, "Cash");
+ towerDoc->GetTowerMessage()->InfoBarMessage(str, 120, "Cash");
}
}
diff --git a/src/T2DLL/T2SoundPlayer.h b/src/T2DLL/T2SoundPlayer.h
index 667ac13..01eb326 100644
--- a/src/T2DLL/T2SoundPlayer.h
+++ b/src/T2DLL/T2SoundPlayer.h
@@ -10,15 +10,19 @@ enum PLAYMODE {
enum SOUNDPRIORITY {
SoundPriority_0,
- SoundPriority_1
+ SoundPriority_1,
+ SoundPriority_2,
+ SoundPriority_3
};
enum {
+ SoundMask_2 = 2,
SoundMask_10 = 0x10,
SoundMask_20 = 0x20,
};
enum {
+ SoundFlags_1 = 1,
SoundFlags_10 = 0x10,
SoundFlags_20 = 0x20,
SoundFlags_10000 = 0x10000
diff --git a/src/T2DLL/T2Tenant.cpp b/src/T2DLL/T2Tenant.cpp
index 0a29db6..dadaf21 100644
--- a/src/T2DLL/T2Tenant.cpp
+++ b/src/T2DLL/T2Tenant.cpp
@@ -852,7 +852,7 @@ void T2Tenant::CollectCustomer(T2TowerDoc* inDoc, int inNum) {
}
}
- CollectCustomer(inDoc, (T2Tenant *) NULL);
+ CollectCustomer(inDoc);
}
int T2Tenant::CollectEmployee(T2TowerDoc* inDoc) {
diff --git a/src/T2DLL/T2Tenant.h b/src/T2DLL/T2Tenant.h
index e3ac271..6b374fc 100644
--- a/src/T2DLL/T2Tenant.h
+++ b/src/T2DLL/T2Tenant.h
@@ -10,6 +10,12 @@ enum {
kTenantStatus2 = 2,
kTenantStatus9 = 9,
kTenantStatus10 = 10,
+ // means it's opening tomorrow
+ kTenantStatus11 = 11,
+ kTenantStatus12 = 12,
+ kTenantStatus13 = 13,
+ kTenantStatus14 = 14,
+ kTenantStatus15 = 15,
kTenantStatus30 = 30,
kTenantStatus9999 = 9999,
kTenantStatus10000 = 10000,
@@ -25,16 +31,26 @@ enum {
};
enum {
- kTenantRegistID1 = 1, // hotel rooms
- kTenantRegistID2 = 2, // trash facilities
- kTenantRegistID3 = 3, // parking
- kTenantRegistID4 = 4, // hospital
- kTenantRegistID5 = 5, // security
- kTenantRegistID6 = 6, // school
- kTenantRegistID7 = 7, // toilets
- kTenantRegistID8 = 8, // metro railway
- kTenantRegistID9 = 9, // boat deck
- kTenantRegistID10 = 10, // ticket booth
+ // hotel rooms
+ kTenantRegistID1 = 1,
+ // trash facilities
+ kTenantRegistID2 = 2,
+ // parking
+ kTenantRegistID3 = 3,
+ // hospital
+ kTenantRegistID4 = 4,
+ // security
+ kTenantRegistID5 = 5,
+ // school
+ kTenantRegistID6 = 6,
+ // toilets
+ kTenantRegistID7 = 7,
+ // metro railway
+ kTenantRegistID8 = 8,
+ // boat deck
+ kTenantRegistID9 = 9,
+ // ticket booth
+ kTenantRegistID10 = 10,
};
class AFX_CLASS_EXPORT T2Tenant : public T2Equip {
@@ -104,7 +120,7 @@ public:
void UpdatePatternIndex();
void UpdatePatternIndex(int inIndex);
int GetNumOfPattern() const;
- void CollectCustomer(T2TowerDoc* inDoc, T2Tenant* inTenant);
+ void CollectCustomer(T2TowerDoc* inDoc, T2Tenant* inTenant = NULL);
void CollectCustomer(T2TowerDoc* inDoc, int inNum);
int CollectEmployee(T2TowerDoc* inDoc);
void RegistBelongPeople(T2People* inPeople);
diff --git a/src/T2DLL/T2TenantDef.cpp b/src/T2DLL/T2TenantDef.cpp
index 3cde569..e05e982 100644
--- a/src/T2DLL/T2TenantDef.cpp
+++ b/src/T2DLL/T2TenantDef.cpp
@@ -144,14 +144,14 @@ T2TenantDef::T2TenantDef(DWORD type, T2PluginSpecifier& specifier, CResFile* res
int status = theEquip->GetStatus();
unsigned int result = 0;
- if (status < kStatus10) {
- if (status <= kStatus2 || status == kStatus9)
+ if (status < kTenantStatus10) {
+ if (status <= kTenantStatus2 || status == kTenantStatus9)
result = 1;
status++;
theEquip->SetStatus(status);
- if (status == kStatus10) {
+ if (status == kTenantStatus10) {
BuildFinish(towerDoc, theEquip);
towerDoc->mTowerMainView->InvalUnitRect(theEquip->mArea, true);
}
@@ -160,8 +160,8 @@ T2TenantDef::T2TenantDef(DWORD type, T2PluginSpecifier& specifier, CResFile* res
T2Tenant *theTenant = (T2Tenant *) theEquip;
status = theTenant->GetStatus();
- if (status >= kStatus9 && ChangeStatusOnIdle(towerDoc, theTenant, status)) {
- if (status == kStatus9)
+ if (status >= kTenantStatus9 && ChangeStatusOnIdle(towerDoc, theTenant, status)) {
+ if (status == kTenantStatus9)
theTenant->SetDrawMode(DrawMode2);
else
theTenant->SetDrawMode(DrawMode1);
@@ -181,7 +181,7 @@ T2TenantDef::T2TenantDef(DWORD type, T2PluginSpecifier& specifier, CResFile* res
if (GetCategory() != 100 && rect.top <= towerDoc->mWorldDef->mTopFloorLine) {
if (inShowError) {
// EN: Only Final item can be placed on the top floor of building.
- towerDoc->towerDoc_vf13C()->BuildErr(68, NULL);
+ towerDoc->GetTowerMessage()->BuildErr(68, NULL);
}
return AreaCheckCode_0;
}
@@ -189,7 +189,7 @@ T2TenantDef::T2TenantDef(DWORD type, T2PluginSpecifier& specifier, CResFile* res
if (rect.bottom > towerDoc->mWorldDef->mBottomFloorLine) {
if (inShowError) {
// EN: Can not place items beyond the edges of the floor below.
- towerDoc->towerDoc_vf13C()->BuildErr(2, NULL);
+ towerDoc->GetTowerMessage()->BuildErr(2, NULL);
}
return AreaCheckCode_0;
}
diff --git a/src/T2DLL/T2ToolDef.h b/src/T2DLL/T2ToolDef.h
index bb42d77..d819b5c 100644
--- a/src/T2DLL/T2ToolDef.h
+++ b/src/T2DLL/T2ToolDef.h
@@ -110,13 +110,6 @@ public:
int GetOutMoney(unsigned int id) const;
void SetOutMoney(unsigned int id, int money);
-protected:
- friend class T2Mover;
- friend class T2Settlement;
- friend class T2TemplatePluginList;
- friend class T2ToolHelpWnd;
- friend class T2TowerDoc;
-
int mToolType;
int mWidth;
int mHeight;
diff --git a/src/T2DLL/T2TowerMessage.h b/src/T2DLL/T2TowerMessage.h
index 67d40ad..300963d 100644
--- a/src/T2DLL/T2TowerMessage.h
+++ b/src/T2DLL/T2TowerMessage.h
@@ -30,7 +30,7 @@ public:
void SpendTime();
void SpendTime2();
void CancelInfoBarMessage(const CString& inText);
- void PassiveInfoBarMessage(const char* inText, int inDelay, const char* inSoundID);
+ void PassiveInfoBarMessage(const char* inText, int inDelay, const char* inSoundID = NULL);
void SetCaptureRect(RECT inRect);
private:
diff --git a/src/T2DLL/T2VisitVIP.cpp b/src/T2DLL/T2VisitVIP.cpp
index 0b190d9..fdda3e1 100644
--- a/src/T2DLL/T2VisitVIP.cpp
+++ b/src/T2DLL/T2VisitVIP.cpp
@@ -177,7 +177,7 @@ T2VisitVIP::T2VisitVIP(T2TowerEvent* inTowerEvent, int inSubID, int inLevelBit,
// "の設置が必要です。" - installation is required.
str += "\x82\xCC\x90\xDD\x92\x75\x82\xAA\x95\x4B\x97\x76\x82\xC5\x82\xB7\x81\x42";
- inDoc->towerDoc_vf13C()->InfoBarMessage(str, 900, NULL);
+ inDoc->GetTowerMessage()->InfoBarMessage(str, 900, NULL);
} else if (!theSpecifier) {
inDoc->mA0 |= mVisitFlag;
mStatus = kVisitVIPStatus4;
diff --git a/src/T2TowerDoc.cpp b/src/T2TowerDoc.cpp
index f9bcf5f..7fb998b 100644
--- a/src/T2TowerDoc.cpp
+++ b/src/T2TowerDoc.cpp
@@ -2242,7 +2242,7 @@ void T2TowerDoc::LoadSoundForPlugin(T2TemplatePlugin *inPlugin) {
if (!inTenant->IsBuildFinish()) {
// EN: Can not remove the item under construction until it is completed.
- towerDoc_vf13C()->BuildErr(52, NULL);
+ GetTowerMessage()->BuildErr(52, NULL);
if (!inSkipSounds)
mSoundPlayer->Play("No", SoundMask_20, SoundFlags_20, &inPt2, PlayMode_2, 100);
@@ -2282,7 +2282,7 @@ BOOL T2TowerDoc::OutsideAreaCheck(T2Tenant *inTenant, BOOL inShowError) {
if (mFloorInfo->GetOutObjID(v, h) != 0) {
if (inShowError) {
// EN: Can not remove this floor because an outside item is placed.
- towerDoc_vf13C()->BuildErr(69 /*nice*/, NULL);
+ GetTowerMessage()->BuildErr(69 /*nice*/, NULL);
}
return false;
}
@@ -2559,7 +2559,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
success = false;
if (inShowError) {
// EN: Shortage of construction money.
- towerDoc_vf13C()->BuildErr(10, NULL);
+ GetTowerMessage()->BuildErr(10, NULL);
}
}
}
@@ -2577,7 +2577,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (inRect.top < buildArea.top || inRect.bottom > buildArea.bottom || inRect.left < buildArea.left || inRect.right > buildArea.right) {
if (inShowErr) {
// EN: Can not place items here.
- towerDoc_vf13C()->BuildErr(8, NULL);
+ GetTowerMessage()->BuildErr(8, NULL);
}
return false;
}
@@ -2585,7 +2585,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (!mFloorInfo->IsAreaBuildable(inRect)) {
if (inShowErr) {
// EN: Can not place items here.
- towerDoc_vf13C()->BuildErr(8, NULL);
+ GetTowerMessage()->BuildErr(8, NULL);
}
return false;
}
@@ -2596,7 +2596,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (inRect.bottom != mWorldDef->mGroundLine) {
if (inShowErr) {
// EN: This item can only be placed on the lobby floor.
- towerDoc_vf13C()->BuildErr(23, NULL);
+ GetTowerMessage()->BuildErr(23, NULL);
}
return false;
}
@@ -2604,7 +2604,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (mWorldDef->mGroundLine > inRect.top && inRect.bottom > (mWorldDef->mGroundLine - mWorldDef->GetLobbyHeight())) {
if (inShowErr) {
// EN: Can not place this item on the lobby floor.
- towerDoc_vf13C()->BuildErr(24, NULL);
+ GetTowerMessage()->BuildErr(24, NULL);
}
return false;
}
@@ -2614,7 +2614,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (inRect.bottom > mWorldDef->mGroundLine) {
if (inShowErr) {
// EN: Can not place this item underground.
- towerDoc_vf13C()->BuildErr(6, NULL);
+ GetTowerMessage()->BuildErr(6, NULL);
}
return false;
}
@@ -2624,7 +2624,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (inRect.top < mWorldDef->mGroundLine) {
if (inShowErr) {
// EN: Can not place this item above ground.
- towerDoc_vf13C()->BuildErr(7, NULL);
+ GetTowerMessage()->BuildErr(7, NULL);
}
return false;
}
@@ -2640,7 +2640,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (IntersectRect(&tmp, &inRect, &equip->mArea)) {
if (inShowErr) {
// EN: Can not place items where something else already exists.
- towerDoc_vf13C()->BuildErr(9, NULL);
+ GetTowerMessage()->BuildErr(9, NULL);
}
return false;
}
@@ -2652,7 +2652,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (theTenant && (isBuildingFloor || !theTenant->IsFloor())) {
if (inShowErr) {
// EN: Can not place items where something else already exists.
- towerDoc_vf13C()->BuildErr(9, NULL);
+ GetTowerMessage()->BuildErr(9, NULL);
}
return false;
}
@@ -2677,7 +2677,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (m1A0->GetCurBuildCount() >= m1A0->GetMaxBuildCount()) {
if (_B0) {
// EN: Can not make additional placement of this item.
- towerDoc_vf13C()->BuildErr(11, NULL);
+ GetTowerMessage()->BuildErr(11, NULL);
}
result = false;
}
@@ -2886,10 +2886,10 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (!inIsFromMouseMove) {
if (inDef->IsStair()) {
// EN: can not be placed there.
- towerDoc_vf13C()->BuildErr(41, inDef);
+ GetTowerMessage()->BuildErr(41, inDef);
} else {
// EN: Can not place elevator system there.
- towerDoc_vf13C()->BuildErr(42, NULL);
+ GetTowerMessage()->BuildErr(42, NULL);
}
}
return false;
@@ -2904,7 +2904,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (theTenant && theTenant->IsSetAttribute(kTenantAttr40000)) {
if (!inIsFromMouseMove) {
// EN: Can not place a transit system on the Sky Bridge.
- towerDoc_vf13C()->BuildErr(72, NULL);
+ GetTowerMessage()->BuildErr(72, NULL);
}
return false;
}
@@ -2915,10 +2915,10 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (!inIsFromMouseMove) {
if (inDef->IsStair()) {
// EN: requires space on both sides.
- towerDoc_vf13C()->BuildErr(32, inDef);
+ GetTowerMessage()->BuildErr(32, inDef);
} else {
// EN: The elevator item requires space on both sides.
- towerDoc_vf13C()->BuildErr(33, NULL);
+ GetTowerMessage()->BuildErr(33, NULL);
}
}
return false;
@@ -2931,7 +2931,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (cost > GetCurrentFunds()) {
if (!inIsFromMouseMove) {
// EN: Shortage of construction money.
- towerDoc_vf13C()->BuildErr(10, NULL);
+ GetTowerMessage()->BuildErr(10, NULL);
}
return false;
}
@@ -2948,7 +2948,7 @@ void T2TowerDoc::CalcCraneUpdateRect(RECT &ioRect) {
if (cost > GetCurrentFunds()) {
if (!inIsFromMouseMove) {
// EN: Shortage of construction money.
- towerDoc_vf13C()->BuildErr(10, NULL);
+ GetTowerMessage()->BuildErr(10, NULL);
}
return false;
}
diff --git a/src/T2TowerDoc.h b/src/T2TowerDoc.h
index 9371bce..7bde93f 100644
--- a/src/T2TowerDoc.h
+++ b/src/T2TowerDoc.h
@@ -130,7 +130,7 @@ public:
virtual T2Pool *GetPool() const { return mPool; }
virtual T2SoundPlayer *GetSoundPlayer() const { return mSoundPlayer; }
virtual int GetLevel() const { return mGameLevel; }
- virtual T2TowerMessage *towerDoc_vf13C() { return mTowerMessage; }
+ virtual T2TowerMessage *GetTowerMessage() { return mTowerMessage; }
// 140
virtual int GetViewMode() const { return mViewMode; }
virtual void SetViewMode(int inViewMode);
diff --git a/src/T2TowerMainView.cpp b/src/T2TowerMainView.cpp
index 87508af..64b2f37 100644
--- a/src/T2TowerMainView.cpp
+++ b/src/T2TowerMainView.cpp
@@ -970,7 +970,7 @@ void T2TowerMainView::HandleLButtonDown(CPoint inPt) {
T2Tenant *theTenant = mDocument->mFloorInfo->GetTenant(pt.y, pt.x);
if (theTenant && !theTenant->IsFloor())
- theTenant->CollectCustomer(mDocument, (T2Tenant *) NULL);
+ theTenant->CollectCustomer(mDocument);
} else if (*theToolName == "ToolInfo") {
mDocument->DoGetInfo(inPt);
} else if (*theToolName == "ToolZoom") {