summaryrefslogtreecommitdiff
path: root/src/Plugins/Common/StdTenantInfoDialog.cpp
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/Plugins/Common/StdTenantInfoDialog.cpp390
1 files changed, 385 insertions, 5 deletions
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;
+}