diff options
| -rw-r--r-- | engines/wintermute/ad/ad_game.cpp | 23 | ||||
| -rw-r--r-- | engines/wintermute/ad/ad_game.h | 4 | ||||
| -rw-r--r-- | engines/wintermute/ad/ad_response.cpp | 32 | ||||
| -rw-r--r-- | engines/wintermute/ad/ad_response.h | 22 | ||||
| -rw-r--r-- | engines/wintermute/ad/ad_response_box.cpp | 38 | ||||
| -rw-r--r-- | engines/wintermute/ad/ad_response_box.h | 4 | ||||
| -rw-r--r-- | engines/wintermute/ad/ad_response_context.h | 6 | 
7 files changed, 90 insertions, 39 deletions
diff --git a/engines/wintermute/ad/ad_game.cpp b/engines/wintermute/ad/ad_game.cpp index 6042bda060..fac59dc473 100644 --- a/engines/wintermute/ad/ad_game.cpp +++ b/engines/wintermute/ad/ad_game.cpp @@ -519,9 +519,14 @@ bool AdGame::scCallMethod(ScScript *script, ScStack *stack, ScStack *thisStack,  		if (_responseBox) {  			AdResponse *res = new AdResponse(_gameRef);  			if (res) { -				res->_iD = id; -				res->setText(text); -				expandStringByStringTable(&res->_text); +				res->setID(id); + +				char *expandedText = new char[strlen(text) + 1]; +				Common::strlcpy(expandedText, text, strlen(text) + 1); +				expandStringByStringTable(&expandedText); +				res->setText(expandedText); +				delete[] expandedText; +  				if (!val1->isNULL()) {  					res->setIcon(val1->getString());  				} @@ -1742,7 +1747,7 @@ bool AdGame::endDlgBranch(const char *branchName, const char *scriptName, const  //////////////////////////////////////////////////////////////////////////  bool AdGame::clearBranchResponses(char *name) {  	for (uint32 i = 0; i < _responsesBranch.size(); i++) { -		if (scumm_stricmp(name, _responsesBranch[i]->_context) == 0) { +		if (scumm_stricmp(name, _responsesBranch[i]->getContext()) == 0) {  			delete _responsesBranch[i];  			_responsesBranch.remove_at(i);  			i--; @@ -1770,7 +1775,7 @@ bool AdGame::branchResponseUsed(int id) const {  	char *context = _dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr;  	for (uint32 i = 0; i < _responsesBranch.size(); i++) {  		if (_responsesBranch[i]->_id == id) { -			if ((context == nullptr && _responsesBranch[i]->_context == nullptr) || scumm_stricmp(context, _responsesBranch[i]->_context) == 0) { +			if ((context == nullptr && _responsesBranch[i]->getContext() == nullptr) || scumm_stricmp(context, _responsesBranch[i]->getContext()) == 0) {  				return true;  			}  		} @@ -1796,9 +1801,9 @@ bool AdGame::addGameResponse(int id) {  bool AdGame::gameResponseUsed(int id) const {  	char *context = _dlgPendingBranches.size() > 0 ? _dlgPendingBranches[_dlgPendingBranches.size() - 1] : nullptr;  	for (uint32 i = 0; i < _responsesGame.size(); i++) { -		AdResponseContext *respContext = _responsesGame[i]; +		const AdResponseContext *respContext = _responsesGame[i];  		if (respContext->_id == id) { -			if ((context == nullptr && respContext->_context == nullptr) || ((context != nullptr && respContext->_context != nullptr) && scumm_stricmp(context, respContext->_context) == 0)) { +			if ((context == nullptr && respContext->getContext() == nullptr) || ((context != nullptr && respContext->getContext() != nullptr) && scumm_stricmp(context, respContext->getContext()) == 0)) {  				return true;  			}  		} @@ -1813,7 +1818,7 @@ bool AdGame::resetResponse(int id) {  	for (uint32 i = 0; i < _responsesGame.size(); i++) {  		if (_responsesGame[i]->_id == id) { -			if ((context == nullptr && _responsesGame[i]->_context == nullptr) || scumm_stricmp(context, _responsesGame[i]->_context) == 0) { +			if ((context == nullptr && _responsesGame[i]->getContext() == nullptr) || scumm_stricmp(context, _responsesGame[i]->getContext()) == 0) {  				delete _responsesGame[i];  				_responsesGame.remove_at(i);  				break; @@ -1823,7 +1828,7 @@ bool AdGame::resetResponse(int id) {  	for (uint32 i = 0; i < _responsesBranch.size(); i++) {  		if (_responsesBranch[i]->_id == id) { -			if ((context == nullptr && _responsesBranch[i]->_context == nullptr) || scumm_stricmp(context, _responsesBranch[i]->_context) == 0) { +			if ((context == nullptr && _responsesBranch[i]->getContext() == nullptr) || scumm_stricmp(context, _responsesBranch[i]->getContext()) == 0) {  				delete _responsesBranch[i];  				_responsesBranch.remove_at(i);  				break; diff --git a/engines/wintermute/ad/ad_game.h b/engines/wintermute/ad/ad_game.h index 9bcd0bb531..dfb7f1fe8e 100644 --- a/engines/wintermute/ad/ad_game.h +++ b/engines/wintermute/ad/ad_game.h @@ -151,8 +151,8 @@ private:  	BaseArray<AdSceneState *> _sceneStates;  	BaseArray<char *> _dlgPendingBranches; -	BaseArray<AdResponseContext *> _responsesBranch; -	BaseArray<AdResponseContext *> _responsesGame; +	BaseArray<const AdResponseContext *> _responsesBranch; +	BaseArray<const AdResponseContext *> _responsesGame;  	AdResponseBox *_responseBox;  	AdInventoryBox *_inventoryBox; diff --git a/engines/wintermute/ad/ad_response.cpp b/engines/wintermute/ad/ad_response.cpp index e4993b9ad4..0e6817ae6f 100644 --- a/engines/wintermute/ad/ad_response.cpp +++ b/engines/wintermute/ad/ad_response.cpp @@ -143,4 +143,36 @@ bool AdResponse::persist(BasePersistenceManager *persistMgr) {  	return STATUS_OK;  } +void AdResponse::setID(int32 id) { +	_iD = id; +} + +BaseSprite *AdResponse::getIcon() const { +	return _icon; +} + +BaseSprite *AdResponse::getIconHover() const { +	return _iconHover; +} + +BaseSprite *AdResponse::getIconPressed() const { +	return _iconPressed; +} + +BaseFont *AdResponse::getFont() const { +	return _font; +} + +int32 AdResponse::getID() const { +	return _iD; +} +		 +const char *AdResponse::getText() const { +	return _text; +} + +const char *AdResponse::getTextOrig() const { +	return _textOrig; +} +  } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_response.h b/engines/wintermute/ad/ad_response.h index 2119067d3e..57cd302e9d 100644 --- a/engines/wintermute/ad/ad_response.h +++ b/engines/wintermute/ad/ad_response.h @@ -43,17 +43,29 @@ public:  	bool setIconHover(const char *filename);  	bool setIconPressed(const char *filename);  	void setText(const char *text); -	int32 _iD; +	void setID(int32 id); +	BaseSprite *getIcon() const; +	BaseSprite *getIconHover() const; +	BaseSprite *getIconPressed() const; +	BaseFont *getFont() const; +	int32 getID() const; + +	const char *getText() const; +	const char *getTextOrig() const; + +	AdResponse(BaseGame *inGame); +	virtual ~AdResponse(); +	TResponseType _responseType; +private:  	BaseSprite *_icon;  	BaseSprite *_iconHover;  	BaseSprite *_iconPressed;  	BaseFont *_font; + +	int32 _iD; +  	char *_text;  	char *_textOrig; -	AdResponse(BaseGame *inGame); -	virtual ~AdResponse(); -	TResponseType _responseType; -  };  } // end of namespace Wintermute diff --git a/engines/wintermute/ad/ad_response_box.cpp b/engines/wintermute/ad/ad_response_box.cpp index 015bdff12d..a4e59c6a49 100644 --- a/engines/wintermute/ad/ad_response_box.cpp +++ b/engines/wintermute/ad/ad_response_box.cpp @@ -144,16 +144,16 @@ bool AdResponseBox::createButtons() {  			btn->_sharedFonts = btn->_sharedImages = true;  			btn->_sharedCursors = true;  			// iconic -			if (_responses[i]->_icon) { -				btn->_image = _responses[i]->_icon; -				if (_responses[i]->_iconHover) { -					btn->_imageHover = _responses[i]->_iconHover; +			if (_responses[i]->getIcon()) { +				btn->_image = _responses[i]->getIcon(); +				if (_responses[i]->getIconHover()) { +					btn->_imageHover = _responses[i]->getIconHover();  				} -				if (_responses[i]->_iconPressed) { -					btn->_imagePress = _responses[i]->_iconPressed; +				if (_responses[i]->getIconPressed()) { +					btn->_imagePress = _responses[i]->getIconPressed();  				} -				btn->setCaption(_responses[i]->_text); +				btn->setCaption(_responses[i]->getText());  				if (_cursor) {  					btn->_cursor = _cursor;  				} else if (_gameRef->_activeCursor) { @@ -162,7 +162,7 @@ bool AdResponseBox::createButtons() {  			}  			// textual  			else { -				btn->setText(_responses[i]->_text); +				btn->setText(_responses[i]->getText());  				btn->_font = (_font == nullptr) ? _gameRef->getSystemFont() : _font;  				btn->_fontHover = (_fontHover == nullptr) ? _gameRef->getSystemFont() : _fontHover;  				btn->_fontPress = btn->_fontHover; @@ -173,8 +173,8 @@ bool AdResponseBox::createButtons() {  				} -				if (_responses[i]->_font) { -					btn->_font = _responses[i]->_font; +				if (_responses[i]->getFont()) { +					btn->_font = _responses[i]->getFont();  				}  				btn->_width = _responseArea.right - _responseArea.left; @@ -196,7 +196,7 @@ bool AdResponseBox::createButtons() {  			_respButtons.add(btn);  			if (_responseArea.bottom - _responseArea.top < btn->_height) { -				_gameRef->LOG(0, "Warning: Response '%s' is too high to be displayed within response box. Correcting.", _responses[i]->_text); +				_gameRef->LOG(0, "Warning: Response '%s' is too high to be displayed within response box. Correcting.", _responses[i]->getText());  				_responseArea.bottom += (btn->_height - (_responseArea.bottom - _responseArea.top));  			}  		} @@ -548,7 +548,7 @@ bool AdResponseBox::listen(BaseScriptHolder *param1, uint32 param2) {  			_scrollOffset++;  		} else if (scumm_stricmp(obj->getName(), "response") == 0) {  			if (_waitingScript) { -				_waitingScript->_stack->pushInt(_responses[param2]->_iD); +				_waitingScript->_stack->pushInt(_responses[param2]->getID());  			}  			handleResponse(_responses[param2]);  			_waitingScript = nullptr; @@ -601,7 +601,7 @@ bool AdResponseBox::weedResponses() {  	for (uint32 i = 0; i < _responses.size(); i++) {  		switch (_responses[i]->_responseType) {  		case RESPONSE_ONCE: -			if (adGame->branchResponseUsed(_responses[i]->_iD)) { +			if (adGame->branchResponseUsed(_responses[i]->getID())) {  				delete _responses[i];  				_responses.remove_at(i);  				i--; @@ -609,7 +609,7 @@ bool AdResponseBox::weedResponses() {  			break;  		case RESPONSE_ONCE_GAME: -			if (adGame->gameResponseUsed(_responses[i]->_iD)) { +			if (adGame->gameResponseUsed(_responses[i]->getID())) {  				delete _responses[i];  				_responses.remove_at(i);  				i--; @@ -642,13 +642,13 @@ UIWindow *AdResponseBox::getResponseWindow() {  	return _window;  } -void AdResponseBox::addResponse(AdResponse *response) { +void AdResponseBox::addResponse(const AdResponse *response) {  	_responses.add(response);  }  int32 AdResponseBox::getIdForResponseNum(uint32 num) const {  	assert(num < _responses.size()); -	return _responses[num]->_iD; +	return _responses[num]->getID();  }  bool AdResponseBox::handleResponseNum(uint32 num) { @@ -657,17 +657,17 @@ bool AdResponseBox::handleResponseNum(uint32 num) {  //////////////////////////////////////////////////////////////////////////  bool AdResponseBox::handleResponse(const AdResponse *response) { -	setLastResponseText(response->_text, response->_textOrig); +	setLastResponseText(response->getText(), response->getTextOrig());  	AdGame *adGame = (AdGame *)_gameRef;  	switch (response->_responseType) {  	case RESPONSE_ONCE: -		adGame->addBranchResponse(response->_iD); +		adGame->addBranchResponse(response->getID());  		break;  	case RESPONSE_ONCE_GAME: -		adGame->addGameResponse(response->_iD); +		adGame->addGameResponse(response->getID());  		break;  	default:  		debugC(kWintermuteDebugGeneral, "AdResponseBox::HandleResponse - Unhandled enum"); diff --git a/engines/wintermute/ad/ad_response_box.h b/engines/wintermute/ad/ad_response_box.h index bce6f612fa..e1b766cbdb 100644 --- a/engines/wintermute/ad/ad_response_box.h +++ b/engines/wintermute/ad/ad_response_box.h @@ -44,7 +44,7 @@ public:  	BaseObject *getPrevAccessObject(BaseObject *CurrObject);  	bool getObjects(BaseArray<UIObject *> &objects, bool interactiveOnly); -	void addResponse(AdResponse* response); +	void addResponse(const AdResponse* response);  	bool handleResponse(const AdResponse *response);  	bool handleResponseNum(uint32 num);  	int32 getIdForResponseNum(uint32 num) const; @@ -87,7 +87,7 @@ private:  	int _verticalAlign;  	TTextAlign _align;  	BaseArray<UIButton *> _respButtons; -	BaseArray<AdResponse *> _responses; +	BaseArray<const AdResponse *> _responses;  	UIWindow *_shieldWindow;  	char *_lastResponseText;  	char *_lastResponseTextOrig; diff --git a/engines/wintermute/ad/ad_response_context.h b/engines/wintermute/ad/ad_response_context.h index 14bc1abd93..f2e2a45b21 100644 --- a/engines/wintermute/ad/ad_response_context.h +++ b/engines/wintermute/ad/ad_response_context.h @@ -37,12 +37,14 @@ namespace Wintermute {  class AdResponseContext : public BaseClass {  public:  	void setContext(const char *context); +	const char *getContext() const { return _context; }  	int _id; -	char *_context; +  	DECLARE_PERSISTENT(AdResponseContext, BaseClass)  	AdResponseContext(BaseGame *inGame);  	virtual ~AdResponseContext(); - +private: +	char *_context;  };  } // end of namespace Wintermute  | 
