mirror of
https://github.com/libretro/scummvm.git
synced 2024-12-20 00:41:12 +00:00
WINTERMUTE: Remove SXStore, since it's only usefull on iOS.
This commit is contained in:
parent
0e9d92a7af
commit
10c4aa8cec
@ -58,7 +58,6 @@
|
||||
#include "engines/wintermute/Base/scriptables/ScStack.h"
|
||||
#include "engines/wintermute/Base/scriptables/ScScript.h"
|
||||
#include "engines/wintermute/Base/scriptables/SXMath.h"
|
||||
#include "engines/wintermute/Base/scriptables/SXStore.h"
|
||||
#include "engines/wintermute/video/VidPlayer.h"
|
||||
#include "engines/wintermute/video/VidTheoraPlayer.h"
|
||||
#include "engines/wintermute/wintermute.h"
|
||||
@ -271,7 +270,6 @@ CBGame::CBGame(): CBObject(this) {
|
||||
_constrainedMemory = false;
|
||||
#endif
|
||||
|
||||
_store = NULL;
|
||||
}
|
||||
|
||||
|
||||
@ -354,9 +352,6 @@ ERRORCODE CBGame::cleanup() {
|
||||
_musicStartTime[i] = 0;
|
||||
}
|
||||
|
||||
unregisterObject(_store);
|
||||
_store = NULL;
|
||||
|
||||
unregisterObject(_fader);
|
||||
_fader = NULL;
|
||||
|
||||
@ -470,11 +465,6 @@ ERRORCODE CBGame::initialize1() {
|
||||
if (_fader == NULL)
|
||||
break;
|
||||
registerObject(_fader);
|
||||
|
||||
_store = new CSXStore(this);
|
||||
if (_store == NULL)
|
||||
break;
|
||||
registerObject(_store);
|
||||
|
||||
loaded = true;
|
||||
}
|
||||
@ -482,7 +472,6 @@ ERRORCODE CBGame::initialize1() {
|
||||
return STATUS_OK;
|
||||
} else {
|
||||
delete _mathClass;
|
||||
delete _store;
|
||||
delete _keyboardState;
|
||||
delete _transMgr;
|
||||
delete _debugMgr;
|
||||
@ -2556,8 +2545,8 @@ CScValue *CBGame::scGetProperty(const char *name) {
|
||||
// Store (RO)
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "Store") == 0) {
|
||||
if (_store) _scValue->setNative(_store, true);
|
||||
else _scValue->setNULL();
|
||||
_scValue->setNULL();
|
||||
error("Request for a SXStore-object, which is not supported by ScummVM");
|
||||
|
||||
return _scValue;
|
||||
}
|
||||
@ -2846,8 +2835,6 @@ ERRORCODE CBGame::unregisterObject(CBObject *object) {
|
||||
// is it main object?
|
||||
if (_mainObject == object) _mainObject = NULL;
|
||||
|
||||
if (_store) _store->OnObjectDestroyed(object);
|
||||
|
||||
// destroy object
|
||||
for (int i = 0; i < _regObjects.getSize(); i++) {
|
||||
if (_regObjects[i] == object) {
|
||||
@ -3314,7 +3301,6 @@ ERRORCODE CBGame::initAfterLoad() {
|
||||
CSysClassRegistry::getInstance()->enumInstances(afterLoadScript, "CScScript", NULL);
|
||||
|
||||
_scEngine->refreshScriptBreakpoints();
|
||||
if (_store) _store->afterLoad();
|
||||
|
||||
return STATUS_OK;
|
||||
}
|
||||
@ -3663,11 +3649,6 @@ ERRORCODE CBGame::persist(CBPersistMgr *persistMgr) {
|
||||
persistMgr->transfer(TMEMBER(_autoSaveSlot));
|
||||
persistMgr->transfer(TMEMBER(_cursorHidden));
|
||||
|
||||
if (persistMgr->checkVersion(1, 0, 1))
|
||||
persistMgr->transfer(TMEMBER(_store));
|
||||
else
|
||||
_store = NULL;
|
||||
|
||||
if (!persistMgr->_saving)
|
||||
_quitting = false;
|
||||
|
||||
|
@ -56,7 +56,6 @@ class CBRenderer;
|
||||
class CBRegistry;
|
||||
class CBSaveThumbHelper;
|
||||
class CBSurfaceStorage;
|
||||
class CSXStore;
|
||||
class CSXMath;
|
||||
class CBKeyboardState;
|
||||
class CVidPlayer;
|
||||
@ -179,7 +178,6 @@ public:
|
||||
CBSoundMgr *_soundMgr;
|
||||
CScEngine *_scEngine;
|
||||
CSXMath *_mathClass;
|
||||
CSXStore *_store;
|
||||
CBSurfaceStorage *_surfaceStorage;
|
||||
CBFontStorage *_fontStorage;
|
||||
CBGame();
|
||||
|
@ -1,518 +0,0 @@
|
||||
/* 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 2
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is based on WME Lite.
|
||||
* http://dead-code.org/redir.php?target=wmelite
|
||||
* Copyright (c) 2011 Jan Nedoma
|
||||
*/
|
||||
|
||||
#include "engines/wintermute/Base/BGame.h"
|
||||
#include "engines/wintermute/Base/BRegistry.h"
|
||||
#include "engines/wintermute/Base/scriptables/SXStore.h"
|
||||
#include "engines/wintermute/Base/scriptables/ScValue.h"
|
||||
#include "engines/wintermute/Base/scriptables/ScScript.h"
|
||||
#include "engines/wintermute/Base/scriptables/ScStack.h"
|
||||
#include "engines/wintermute/utils/StringUtil.h"
|
||||
|
||||
#ifdef __IPHONEOS__
|
||||
# include "IOS_StoreKit_interface.h"
|
||||
#endif
|
||||
|
||||
namespace WinterMute {
|
||||
|
||||
IMPLEMENT_PERSISTENT(CSXStore, false)
|
||||
|
||||
CBScriptable *makeSXStore(CBGame *inGame, CScStack *stack) {
|
||||
return new CSXStore(inGame);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CSXStore::CSXStore(CBGame *inGame) : CBObject(inGame) {
|
||||
#ifdef __IPHONEOS__
|
||||
StoreKit_SetExternalData((void *)this);
|
||||
#endif
|
||||
|
||||
_eventsEnabled = false;
|
||||
_lastProductRequestOwner = NULL;
|
||||
_lastPurchaseOwner = NULL;
|
||||
_lastRestoreOwner = NULL;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CSXStore::~CSXStore() {
|
||||
cleanup();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::cleanup() {
|
||||
setEventsEnabled(NULL, false);
|
||||
|
||||
for (int i = 0; i < _validProducts.getSize(); i++) {
|
||||
delete _validProducts[i];
|
||||
}
|
||||
_validProducts.removeAll();
|
||||
|
||||
|
||||
for (int i = 0; i < _transactions.getSize(); i++) {
|
||||
delete _transactions[i];
|
||||
}
|
||||
_transactions.removeAll();
|
||||
|
||||
|
||||
_lastProductRequestOwner = _lastPurchaseOwner = _lastRestoreOwner = NULL;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
ERRORCODE CSXStore::scCallMethod(CScScript *script, CScStack *stack, CScStack *thisStack, const char *name) {
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// EnableEvents
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
if (strcmp(name, "EnableEvents") == 0) {
|
||||
stack->correctParams(0);
|
||||
setEventsEnabled(script, true);
|
||||
stack->pushBool(getEventsEnabled() == true);
|
||||
return STATUS_OK;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// DisableEvents
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "DisableEvents") == 0) {
|
||||
stack->correctParams(0);
|
||||
setEventsEnabled(script, false);
|
||||
stack->pushBool(getEventsEnabled() == false);
|
||||
return STATUS_OK;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// ValidateProducts
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "ValidateProducts") == 0) {
|
||||
stack->correctParams(1);
|
||||
const char *prodIdList = stack->pop()->getString();
|
||||
_lastProductRequestOwner = script->_owner;
|
||||
validateProducts(prodIdList);
|
||||
stack->pushNULL();
|
||||
return STATUS_OK;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// GetValidProduct
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "GetValidProduct") == 0) {
|
||||
stack->correctParams(1);
|
||||
int index = stack->pop()->getInt();
|
||||
if (index >= 0 && index < _validProducts.getSize()) {
|
||||
CScValue *prod = stack->getPushValue();
|
||||
if (prod) {
|
||||
prod->setProperty("Id", _validProducts[index]->getId());
|
||||
prod->setProperty("Name", _validProducts[index]->getName());
|
||||
prod->setProperty("Description", _validProducts[index]->getDesc());
|
||||
prod->setProperty("Price", _validProducts[index]->getPrice());
|
||||
}
|
||||
} else
|
||||
stack->pushNULL();
|
||||
|
||||
return STATUS_OK;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// GetInvalidProduct
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "GetInvalidProduct") == 0) {
|
||||
stack->correctParams(1);
|
||||
int index = stack->pop()->getInt();
|
||||
if (index >= 0 && (uint32)index < _invalidProducts.size())
|
||||
stack->pushString(_invalidProducts[(uint32)index].c_str());
|
||||
else
|
||||
stack->pushNULL();
|
||||
|
||||
return STATUS_OK;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// GetTransaction
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "GetTransaction") == 0) {
|
||||
stack->correctParams(1);
|
||||
int index = stack->pop()->getInt();
|
||||
if (index >= 0 && index < _transactions.getSize()) {
|
||||
CScValue *trans = stack->getPushValue();
|
||||
if (trans) {
|
||||
trans->setProperty("Id", _transactions[index]->getId());
|
||||
trans->setProperty("ProductId", _transactions[index]->getProductId());
|
||||
trans->setProperty("State", _transactions[index]->getState());
|
||||
}
|
||||
} else
|
||||
stack->pushNULL();
|
||||
|
||||
return STATUS_OK;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Purchase
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "Purchase") == 0) {
|
||||
stack->correctParams(1);
|
||||
const char *prodId = stack->pop()->getString();
|
||||
stack->pushBool(purchase(script, prodId));
|
||||
|
||||
return STATUS_OK;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// FinishTransaction
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "FinishTransaction") == 0) {
|
||||
stack->correctParams(1);
|
||||
const char *transId = stack->pop()->getString();
|
||||
stack->pushBool(finishTransaction(script, transId));
|
||||
|
||||
return STATUS_OK;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// RestoreTransactions
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "RestoreTransactions") == 0) {
|
||||
stack->correctParams(0);
|
||||
restoreTransactions(script);
|
||||
stack->pushNULL();
|
||||
|
||||
return STATUS_OK;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// UnlockProduct
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "UnlockProduct") == 0) {
|
||||
stack->correctParams(1);
|
||||
const char *prodId = stack->pop()->getString();
|
||||
|
||||
Game->_registry->writeBool("Purchases", prodId, true);
|
||||
Game->_registry->saveValues();
|
||||
|
||||
stack->pushBool(true);
|
||||
|
||||
return STATUS_OK;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// IsProductUnlocked
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "IsProductUnlocked") == 0) {
|
||||
stack->correctParams(1);
|
||||
const char *prodId = stack->pop()->getString();
|
||||
|
||||
stack->pushBool(Game->_registry->readBool("Purchases", prodId, false));
|
||||
|
||||
return STATUS_OK;
|
||||
}
|
||||
|
||||
else return STATUS_FAILED;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
CScValue *CSXStore::scGetProperty(const char *name) {
|
||||
_scValue->setNULL();
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Type
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
if (strcmp(name, "Type") == 0) {
|
||||
_scValue->setString("store");
|
||||
return _scValue;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// Available (RO)
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "Available") == 0) {
|
||||
_scValue->setBool(isAvailable());
|
||||
return _scValue;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// EventsEnabled (RO)
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "EventsEnabled") == 0) {
|
||||
_scValue->setBool(getEventsEnabled());
|
||||
return _scValue;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// NumValidProducts (RO)
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "NumValidProducts") == 0) {
|
||||
_scValue->setInt(_validProducts.getSize());
|
||||
return _scValue;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// NumInvalidProducts (RO)
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "NumInvalidProducts") == 0) {
|
||||
_scValue->setInt((int)_invalidProducts.size());
|
||||
return _scValue;
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// NumTransactions (RO)
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
else if (strcmp(name, "NumTransactions") == 0) {
|
||||
_scValue->setInt(_transactions.getSize());
|
||||
return _scValue;
|
||||
}
|
||||
|
||||
else return _scValue;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
ERRORCODE CSXStore::persist(CBPersistMgr *persistMgr) {
|
||||
if (!persistMgr->_saving)
|
||||
cleanup();
|
||||
|
||||
CBObject::persist(persistMgr);
|
||||
|
||||
persistMgr->transfer(TMEMBER(_eventsEnabled));
|
||||
persistMgr->transfer(TMEMBER(_lastProductRequestOwner));
|
||||
persistMgr->transfer(TMEMBER(_lastPurchaseOwner));
|
||||
persistMgr->transfer(TMEMBER(_lastRestoreOwner));
|
||||
persistMgr->transfer(TMEMBER(_invalidProducts));
|
||||
|
||||
// persist valid products
|
||||
int numProducts;
|
||||
if (persistMgr->_saving) {
|
||||
numProducts = _validProducts.getSize();
|
||||
persistMgr->transfer(TMEMBER(numProducts));
|
||||
for (int i = 0; i < numProducts; i++) _validProducts[i]->persist(persistMgr);
|
||||
} else {
|
||||
numProducts = _validProducts.getSize();
|
||||
persistMgr->transfer(TMEMBER(numProducts));
|
||||
for (int i = 0; i < numProducts; i++) {
|
||||
CBStoreProduct *prod = new CBStoreProduct;
|
||||
prod->persist(persistMgr);
|
||||
_validProducts.add(prod);
|
||||
}
|
||||
}
|
||||
|
||||
return STATUS_OK;
|
||||
}
|
||||
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::afterLoad() {
|
||||
if (_eventsEnabled) {
|
||||
setEventsEnabled(NULL, true);
|
||||
}
|
||||
#ifdef __IPHONEOS__
|
||||
StoreKit_SetExternalData((void *)this);
|
||||
#endif
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::OnObjectDestroyed(CBScriptHolder *obj) {
|
||||
if (_lastProductRequestOwner == obj) _lastProductRequestOwner = NULL;
|
||||
if (_lastPurchaseOwner == obj) _lastPurchaseOwner = NULL;
|
||||
if (_lastRestoreOwner == obj) _lastRestoreOwner = NULL;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::setEventsEnabled(CScScript *script, bool val) {
|
||||
_eventsEnabled = val;
|
||||
|
||||
if (val) {
|
||||
if (script) _lastPurchaseOwner = script->_owner;
|
||||
#ifdef __IPHONEOS__
|
||||
StoreKit_EnableEvents();
|
||||
#endif
|
||||
} else {
|
||||
_lastPurchaseOwner = NULL;
|
||||
#ifdef __IPHONEOS__
|
||||
StoreKit_DisableEvents();
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::validateProducts(const char *prodIdList) {
|
||||
#ifdef __IPHONEOS__
|
||||
StoreKit_ValidateProducts(prodIdList);
|
||||
#endif
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool CSXStore::isAvailable() {
|
||||
#ifdef __IPHONEOS__
|
||||
return StoreKit_IsStoreAvailable() > 0;
|
||||
#else
|
||||
return false;
|
||||
#endif
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::receiveProductsStart() {
|
||||
for (int i = 0; i < _validProducts.getSize(); i++) {
|
||||
delete _validProducts[i];
|
||||
}
|
||||
_validProducts.removeAll();
|
||||
|
||||
_invalidProducts.clear();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::receiveProductsEnd() {
|
||||
if (_lastProductRequestOwner) _lastProductRequestOwner->applyEvent("ProductsValidated");
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::addValidProduct(const char *id, const char *name, const char *desc, const char *price) {
|
||||
CBStoreProduct *prod = new CBStoreProduct(id, name, desc, price);
|
||||
_validProducts.add(prod);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::addInvalidProduct(const char *id) {
|
||||
_invalidProducts.push_back(id);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::receiveTransactionsStart() {
|
||||
for (int i = 0; i < _transactions.getSize(); i++) {
|
||||
delete _transactions[i];
|
||||
}
|
||||
_transactions.removeAll();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::receiveTransactionsEnd() {
|
||||
if (_lastPurchaseOwner)
|
||||
_lastPurchaseOwner->applyEvent("TransactionsUpdated");
|
||||
else
|
||||
Game->applyEvent("TransactionsUpdated");
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::addTransaction(const char *id, const char *productId, const char *state) {
|
||||
CBStoreTransaction *trans = new CBStoreTransaction(id, productId, state);
|
||||
_transactions.add(trans);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool CSXStore::purchase(CScScript *script, const char *productId) {
|
||||
if (!productId) return false;
|
||||
|
||||
#ifdef __IPHONEOS__
|
||||
for (int i = 0; i < _validProducts.getSize(); i++) {
|
||||
if (strcmp(productId, _validProducts[i]->GetId()) == 0) {
|
||||
_lastPurchaseOwner = script->_owner;
|
||||
|
||||
StoreKit_Purchase(productId);
|
||||
return true;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
script->runtimeError("Store.Purchase() - '%s' is not a valid product id", productId);
|
||||
return false;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
bool CSXStore::finishTransaction(CScScript *script, const char *transId) {
|
||||
if (!transId) return false;
|
||||
#ifdef __IPHONEOS__
|
||||
for (int i = 0; i < _transactions.getSize(); i++) {
|
||||
if (strcmp(transId, _transactions[i]->GetId()) == 0) {
|
||||
if (StoreKit_FinishTransaction(transId) > 0) {
|
||||
SAFE_DELETE(_transactions[i]);
|
||||
_transactions.removeAt(i);
|
||||
return true;
|
||||
} else return false;
|
||||
}
|
||||
}
|
||||
#endif
|
||||
script->runtimeError("Store.FinishTransaction() - '%s' is not a valid transaction id", transId);
|
||||
return false;
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::restoreTransactions(CScScript *script) {
|
||||
_lastRestoreOwner = script->_owner;
|
||||
#ifdef __IPHONEOS__
|
||||
StoreKit_RestoreTransactions();
|
||||
#endif
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void CSXStore::onRestoreFinished(bool error) {
|
||||
if (_lastRestoreOwner) {
|
||||
if (error) _lastRestoreOwner->applyEvent("TransactionsRestoreFailed");
|
||||
else _lastRestoreOwner->applyEvent("TransactionsRestoreFinished");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
#ifdef __IPHONEOS__
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
// StoreKit callbacks (called from ObjC)
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void StoreKit_AddValidProductCallback(const char *id, const char *name, const char *desc, const char *price, void *data) {
|
||||
CSXStore *store = static_cast<CSXStore *>(data);
|
||||
if (store) store->AddValidProduct(id, name, desc, price);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void StoreKit_AddInvalidProductCallback(const char *id, void *data) {
|
||||
CSXStore *store = static_cast<CSXStore *>(data);
|
||||
if (store) store->AddInvalidProduct(id);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void StoreKit_ReceiveProductsStartCallback(void *data) {
|
||||
CSXStore *store = static_cast<CSXStore *>(data);
|
||||
if (store) store->ReceiveProductsStart();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void StoreKit_ReceiveProductsEndCallback(void *data) {
|
||||
CSXStore *store = static_cast<CSXStore *>(data);
|
||||
if (store) store->ReceiveProductsEnd();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void StoreKit_AddTransactionCallback(const char *id, const char *productId, const char *state, void *data) {
|
||||
CSXStore *store = static_cast<CSXStore *>(data);
|
||||
if (store) store->AddTransaction(id, productId, state);
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void StoreKit_ReceiveTransactionsStartCallback(void *data) {
|
||||
CSXStore *store = static_cast<CSXStore *>(data);
|
||||
if (store) store->ReceiveTransactionsStart();
|
||||
}
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void StoreKit_ReceiveTransactionsEndCallback(void *data) {
|
||||
CSXStore *store = static_cast<CSXStore *>(data);
|
||||
if (store) store->ReceiveTransactionsEnd();
|
||||
}
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
void StoreKit_RestoreFinishedCallback(void *data, int error) {
|
||||
CSXStore *store = static_cast<CSXStore *>(data);
|
||||
if (store) store->OnRestoreFinished(error > 0);
|
||||
}
|
||||
|
||||
#endif // __IPHONEOS__
|
||||
|
||||
} // end of namespace WinterMute
|
@ -1,175 +0,0 @@
|
||||
/* 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 2
|
||||
* 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, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||
*
|
||||
*/
|
||||
|
||||
/*
|
||||
* This file is based on WME Lite.
|
||||
* http://dead-code.org/redir.php?target=wmelite
|
||||
* Copyright (c) 2011 Jan Nedoma
|
||||
*/
|
||||
|
||||
#ifndef WINTERMUTE_SXSTORE_H
|
||||
#define WINTERMUTE_SXSTORE_H
|
||||
#include "engines/wintermute/Base/BPersistMgr.h"
|
||||
#include "engines/wintermute/utils/utils.h"
|
||||
#include "engines/wintermute/Base/BObject.h"
|
||||
|
||||
namespace WinterMute {
|
||||
|
||||
class CSXStore : public CBObject {
|
||||
public:
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
class CBStoreProduct {
|
||||
public:
|
||||
CBStoreProduct() {
|
||||
_id = _name = _desc = _price = NULL;
|
||||
}
|
||||
|
||||
CBStoreProduct(const char *id, const char *name, const char *desc, const char *price) {
|
||||
_id = _name = _desc = _price = NULL;
|
||||
|
||||
CBUtils::setString(&_id, id);
|
||||
CBUtils::setString(&_name, name);
|
||||
CBUtils::setString(&_desc, desc);
|
||||
CBUtils::setString(&_price, price);
|
||||
}
|
||||
|
||||
~CBStoreProduct() {
|
||||
delete [] _id;
|
||||
delete [] _name;
|
||||
delete [] _desc;
|
||||
delete [] _price;
|
||||
}
|
||||
|
||||
ERRORCODE persist(CBPersistMgr *persistMgr) {
|
||||
persistMgr->transfer(TMEMBER(_id));
|
||||
persistMgr->transfer(TMEMBER(_name));
|
||||
persistMgr->transfer(TMEMBER(_desc));
|
||||
persistMgr->transfer(TMEMBER(_price));
|
||||
return STATUS_OK;
|
||||
}
|
||||
|
||||
const char *getId() {
|
||||
return _id;
|
||||
}
|
||||
const char *getName() {
|
||||
return _name;
|
||||
}
|
||||
const char *getDesc() {
|
||||
return _desc;
|
||||
}
|
||||
const char *getPrice() {
|
||||
return _price;
|
||||
}
|
||||
|
||||
private:
|
||||
char *_id;
|
||||
char *_name;
|
||||
char *_desc;
|
||||
char *_price;
|
||||
};
|
||||
|
||||
//////////////////////////////////////////////////////////////////////////
|
||||
class CBStoreTransaction {
|
||||
public:
|
||||
CBStoreTransaction() {
|
||||
_id = _productId = _state = NULL;
|
||||
}
|
||||
|
||||
CBStoreTransaction(const char *id, const char *productId, const char *state) {
|
||||
_id = _productId = _state = NULL;
|
||||
|
||||
CBUtils::setString(&_id, id);
|
||||
CBUtils::setString(&_productId, productId);
|
||||
CBUtils::setString(&_state, state);
|
||||
}
|
||||
|
||||
~CBStoreTransaction() {
|
||||
delete [] _id;
|
||||
delete [] _productId;
|
||||
delete [] _state;
|
||||
}
|
||||
|
||||
const char *getId() {
|
||||
return _id;
|
||||
}
|
||||
const char *getProductId() {
|
||||
return _productId;
|
||||
}
|
||||
const char *getState() {
|
||||
return _state;
|
||||
}
|
||||
|
||||
private:
|
||||
char *_id;
|
||||
char *_productId;
|
||||
char *_state;
|
||||
};
|
||||
|
||||
|
||||
DECLARE_PERSISTENT(CSXStore, CBObject)
|
||||
CSXStore(CBGame *inGame);
|
||||
virtual ~CSXStore();
|
||||
virtual CScValue *scGetProperty(const char *name);
|
||||
virtual ERRORCODE scCallMethod(CScScript *script, CScStack *stack, CScStack *thisStack, const char *name);
|
||||
|
||||
void afterLoad();
|
||||
void OnObjectDestroyed(CBScriptHolder *obj);
|
||||
|
||||
bool isAvailable();
|
||||
void setEventsEnabled(CScScript *script, bool val);
|
||||
bool getEventsEnabled() const {
|
||||
return _eventsEnabled;
|
||||
}
|
||||
void validateProducts(const char *prodIdList);
|
||||
|
||||
void receiveTransactionsStart();
|
||||
void receiveTransactionsEnd();
|
||||
void addTransaction(const char *id, const char *productId, const char *state);
|
||||
|
||||
void receiveProductsStart();
|
||||
void receiveProductsEnd();
|
||||
void addValidProduct(const char *id, const char *name, const char *desc, const char *price);
|
||||
void addInvalidProduct(const char *id);
|
||||
|
||||
void onRestoreFinished(bool error);
|
||||
|
||||
private:
|
||||
void cleanup();
|
||||
bool purchase(CScScript *script, const char *productId);
|
||||
bool finishTransaction(CScScript *script, const char *transId);
|
||||
void restoreTransactions(CScScript *script);
|
||||
|
||||
bool _eventsEnabled;
|
||||
CBArray<CBStoreProduct *, CBStoreProduct *> _validProducts;
|
||||
AnsiStringArray _invalidProducts;
|
||||
CBScriptHolder *_lastProductRequestOwner;
|
||||
CBScriptHolder *_lastPurchaseOwner;
|
||||
CBScriptHolder *_lastRestoreOwner;
|
||||
|
||||
CBArray<CBStoreTransaction *, CBStoreTransaction *> _transactions;
|
||||
|
||||
};
|
||||
|
||||
} // end of namespace WinterMute
|
||||
|
||||
#endif
|
@ -78,7 +78,6 @@
|
||||
#include "engines/wintermute/Base/scriptables/SXMath.h"
|
||||
#include "engines/wintermute/Base/scriptables/SXMemBuffer.h"
|
||||
#include "engines/wintermute/Base/scriptables/SxObject.h"
|
||||
#include "engines/wintermute/Base/scriptables/SXStore.h"
|
||||
#include "engines/wintermute/Base/scriptables/SXString.h"
|
||||
#include "engines/wintermute/UI/UIButton.h"
|
||||
#include "engines/wintermute/UI/UIEdit.h"
|
||||
@ -152,7 +151,6 @@ void CSysClassRegistry::registerClasses() {
|
||||
REGISTER_CLASS(CSXMath, true)
|
||||
REGISTER_CLASS(CSXMemBuffer, false)
|
||||
REGISTER_CLASS(CSXObject, false)
|
||||
REGISTER_CLASS(CSXStore, false)
|
||||
REGISTER_CLASS(CSXString, false)
|
||||
|
||||
REGISTER_CLASS(CUIButton, false)
|
||||
|
Loading…
Reference in New Issue
Block a user