summaryrefslogtreecommitdiff
path: root/src/Plugins
diff options
context:
space:
mode:
authorAsh Wolf <ninji@wuffs.org>2023-07-06 10:49:52 +0100
committerAsh Wolf <ninji@wuffs.org>2023-07-06 10:49:52 +0100
commit96a63139221587c6be9659c1e07eacd3a8e7f048 (patch)
tree23aef453ef216c97b762637f553d131646fd5985 /src/Plugins
parent27fc86e8c0450a7fe33d76344c4d53e23a70a6c3 (diff)
downloadt2win-96a63139221587c6be9659c1e07eacd3a8e7f048.tar.gz
t2win-96a63139221587c6be9659c1e07eacd3a8e7f048.zip
add untested Burger code
Diffstat (limited to '')
-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
14 files changed, 1170 insertions, 11 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);