Files
2026-02-02 04:50:13 +01:00

346 lines
9.0 KiB
C++

/* ScummVM - Graphic Adventure Engine
*
* ScummVM is the legal property of its developers, whose names
* are too numerous to list here. Please refer to the COPYRIGHT
* file distributed with this source distribution.
*
* This program is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program. If not, see <http://www.gnu.org/licenses/>.
*
*/
#ifndef BAGEL_SPACEBAR_SRAF_COMPUTER_H
#define BAGEL_SPACEBAR_SRAF_COMPUTER_H
#include "bagel/spacebar/boflib/gui/button.h"
#include "bagel/spacebar/boflib/gui/list_box.h"
#include "bagel/spacebar/boflib/gui/text_box.h"
#include "bagel/spacebar/boflib/gui/dialog.h"
#include "bagel/spacebar/boflib/file.h"
#include "bagel/spacebar/baglib/storage_dev_win.h"
namespace Bagel {
namespace SpaceBar {
class SrafCompItem {
public:
const char *_pItem;
};
enum SELLERS {
IRK4 = 0, YEEF8, QUOSH23
};
class DealSummarySellerItem {
public:
SELLERS _eSellerID;
int _nSellerOffer;
const char *_pSellerName;
};
enum BUYERS {
PYLON3 = 0, DIPPIK10, VEBBIL18, GUNG14,
REYES24, GILD13, HEM20, DORK44, RAWLEY23,
JELLA37, SINJIN11, HUNDEY42, CHANDRA15, CLANG2,
MINMARTZN, MINMARTBA, MINMARTRG, MINMARTUT,
MINMARTPN, MINMARTSZ
};
enum STAFFERS {
NORG72 = 0, PNURTH81, ZIG64, LENTIL24, VARGAS20, CHURG53, DURTEEN97
};
class DealSummaryBuyerItem {
public:
BUYERS _eBuyerID;
int _nBuyerOffer;
const char *_pBuyerName;
};
#define mOtherParty 0x0001
#define mBuyer 0x0002
#define mSeller 0x0004
// The ordering of these flags must match the ordering of these same
// characters in the array in which they are defined.
#define mNorg72 0x0008
#define mPnurth81 0x0010
#define mZig64 0x0020
#define mLentil24 0x0040
#define mVargas20 0x0080
#define mChurg53 0x0100
#define mStafferMale 0x0200
#define mStafferFemale 0x0400
class DispatchedTeamItem {
public:
int _nFlags = 0;
int _nMeetWithID = 0;
int _nDispatchTime = 0;
int _nTeamCaptain = 0;
int _nMeetingTime = 0;
};
class SrafTextScreen : public CBofDialog {
private:
static CBofWindow *_pSaveActiveWin;
CBofTextBox *_pTextBox = nullptr; // Bof text box for all kinds of cool info
CBofBmpButton *_pOKButton = nullptr;
CBofString _text;
CBofRect gCompDisplay;
CBofRect gTextWindow;
CBofRect gStafferDisplay;
CBofRect gSrafTextWindow;
public:
SrafTextScreen(const CBofString &str, bool isText = false);
virtual ~SrafTextScreen();
int createTextScreen(CBofWindow *pParent = nullptr);
void displayTextScreen();
void onBofButton(CBofObject *, int) override;
void onClose() override;
void onPaint(CBofRect * pRect) override;
};
// Number of constants...
#define NUM_MAIL_MESSAGES 8
#define NUM_MINERALS 14
#define NUM_STAFFERS 6
#define NUM_MAIN_ITEMS 11
#define NUM_SELLERS 3
#define NUM_BUYERS 20
#define NUM_OTHER_PARTYS 3
#define NUM_MUSICAL_SCORES 7
#define NUM_CODE_WORDS 10
#define NUM_SRAFCOMPBUTT 11
#define NUM_OFFERINGS 2
// Constants for get meet member
#define kOthersList 1
#define kSellersList 2
#define kBuyersList 3
#define kStaffersList 4
// Sraffin text only screens (for stuff like biographies)
class SrafComputer : public CBagStorageDevWnd {
public:
SrafComputer();
virtual ~SrafComputer();
void onKeyHit(uint32 lKey, uint32 nRepCount) override;
ErrorCode attach() override;
ErrorCode detach() override;
void onLButtonDown(uint32 nFlags, CBofPoint *xPoint, void * = nullptr) override;
void onLButtonUp(uint32 nFlags, CBofPoint *xPoint, void * = nullptr) override;
void onMainLoop() override;
void onPaint(CBofRect *pRect) override;
void onBofButton(CBofObject *, int) override;
void onBofListBox(CBofObject *pListBox, int nItemIndex) override;
void setOn();
void setOff();
void setQuit();
void alignAtColumn(CBofString &sStr, const char *szRightText, int nAlignAt);
CBofString &buildBidString(int index);
void deleteListBox();
ErrorCode createListBox();
void fillMain();
void hideAllButtons();
void activateDealSummary();
void activateBuyerBids();
void activateDealBackground();
void activateSellerBios();
void activateOtherBios();
void activateStaffBios();
void activateDispatchTeam();
void activateCurrentEMail();
void activateAudioSettings();
void activateRoboButler();
void activateCheckTeams();
void activateCodeWords();
void deactivateMainScreen();
void activateMainScreen();
void initDealSummary();
void initBuyerBids();
void initDealBackground();
void initSellerBios();
void initOtherBios();
void initStaffBios();
void initDispatchTeam();
void initCurrentEMail();
void initAudioSettings();
void initRoboButler();
void onListMainScreen();
void onListDealSummary();
void onListBuyerBids();
void onListDealBackground();
void onListSellerBios();
void onListOtherBios();
void onListStaffBios();
void onListDispatchTeam();
void onListCurrentEMail();
void onListAudioSettings();
void onListRoboButler();
void onListCheckTeams();
void onListCodeWords();
void onButtonMainScreen(CBofButton *pButton, int nState);
void onButtonDealSummary(CBofButton *pButton, int nState);
void onButtonBuyerBids(CBofButton *pButton, int nState);
void onButtonDealBackground(CBofButton *pButton, int nState);
void onButtonSellerBios(CBofButton *pButton, int nState);
void onButtonOtherBios(CBofButton *pButton, int nState);
void onButtonStaffBios(CBofButton *pButton, int nState);
void onButtonDispatchTeam(CBofButton *pButton, int nState);
void onButtonCurrentEMail(CBofButton *pButton, int nState);
void onButtonAudioSettings(CBofButton *pButton, int nState);
void onButtonRoboButler(CBofButton *pButton, int nState);
void onButtonCheckTeams(CBofButton *pButton, int nState);
void onButtonCodeWords(CBofButton *pButton, int nState);
// biography support routines
void displayTextScreen(CBofString &);
void recalcSellerSummaryList();
void recalcBuyerSummaryList();
void recalcDispatchList(int);
bool onButtonSubmitOffer();
// support routines to return info about a list
int getMeetMember(int);
/**
* Search the specified list and return the index of a true member, if there
* is one, return the element in the list that has "meet with" set to true.
*/
int getAdjustedIndex(int, int, bool);
// Dispatch support routines
bool verifyDispatchTeam();
void notifyBoss(CBofString &, int);
int calculateMeetingTime(int nFlags);
bool reportMeetingStatus(int);
/**
* Search the specified list and return the index of a true member, if there
* is one, return the element in the list that has "meet with" set to true.
*/
void setMeetingResult(int, int, bool);
int getTeamCaptain(int nFlags);
int getTeamGender(int nFlags);
// Robobutler service methods
void doOrderBeverage();
void doOrderSnack();
void doShowChowButtons();
// To activate the main screen from outside the sraffan computer
static void setMainScreen();
static CBofBitmap *getComputerBackdrop();
// User interaction
void displayMessage(const char *szMsg);
// Finally, all done!
void incrementTurnCount();
/**
* This dynamically updates the turncount on the screen,
* must know which line to update though.
*/
void displayTurnCount(int);
void onButtonFinished(bool);
// Save/Restore
void saveSraffanVars();
void restoreSraffanVars();
protected:
enum SrafCompModeC {
SC_ON, SC_OFF, SC_DONE
} _eMode;
enum SrafCurScreen {
SC_MAIN, SC_DEAL, SC_BIDS, SC_BACKGROUND_DATA,
SC_SELLER_BIOS, SC_OTHER_BIOS, SC_STAFF_BIOS,
SC_DISPATCH, SC_EMAIL, SC_AUDIO, SC_ORDER,
SC_CHECK_TEAMS, SC_CODE_WORDS
} _eCurScreen;
CBofBmpButton *_pButtons[NUM_SRAFCOMPBUTT];
COLORREF _cTextColor;
COLORREF _cTextHiliteColor;
COLORREF _cTextLineColor;
CBofListBox *_pLBox; // Main screen list
CBofList<SrafCompItem> *_pMainList;
CBofList<DealSummarySellerItem> *_pSellerSummaryList;
CBofList<DealSummaryBuyerItem> *_pBuyerSummaryList;
CBofList<DispatchedTeamItem> *_pTeamList;
CBofBitmap *_pStafferBmp[NUM_STAFFERS + 1]; // (one extra staffer, durteen)
int _nSelection;
int _nListPointSize;
int _nListItemHeight;
SrafTextScreen *_pTextOnlyScreen;
// Code words
CBofString *_pszGroup1Word;
CBofString *_pszGroup2Word;
bool _bSrafAttached;
static bool _bSwonzaEnlightened;
static int _nStartingTime;
static SrafComputer *_pHead; // Unique pointer to head of list
static bool _bRandomAudio;
static int _nRandomTime;
static bool _bFailureNotified;
private:
CBofRect gCompDisplay;
CBofRect gTextWindow;
CBofRect gStafferDisplay;
CBofRect gSrafTextWindow;
CBofString gBidStr;
};
} // namespace SpaceBar
} // namespace Bagel
#endif