Jeck - Added full filtering system to deck editor and shop. I've spent 24hours on pure debugging, but there are likely a couple bugs I've missed. So please, if you find something, make an issue of it! :P Also split OptionItem classes into separate files, and added support for mixed-set boosters (which I think are way, way cool).
This commit is contained in:
@@ -8,35 +8,100 @@
|
||||
#include "../include/MTGDeck.h"
|
||||
#include "../include/Translate.h"
|
||||
#include "../include/GameOptions.h"
|
||||
#include <hge/hgedistort.h>
|
||||
|
||||
float GameStateShop::_x1[] = { 79, 19, 27,103,154,187,102,144,198,133,183};
|
||||
float GameStateShop::_y1[] = {150,194,222,167,164,156,195,190,175,220,220};
|
||||
|
||||
float GameStateShop::_x2[] = {103, 48, 74,135,183,215,138,181,231,171,225};
|
||||
float GameStateShop::_y2[] = {155,179,218,165,166,155,195,186,177,225,216};
|
||||
|
||||
float GameStateShop::_x3[] = { 48, 61, 9, 96,139,190, 81,146,187, 97,191};
|
||||
float GameStateShop::_y3[] = {164,205,257,184,180,170,219,212,195,251,252};
|
||||
|
||||
float GameStateShop::_x4[] = { 76, 90, 65,131,171,221,123,187,225,141,237};
|
||||
float GameStateShop::_y4[] = {169,188,250,182,182,168,220,208,198,259,245};
|
||||
|
||||
int GameStateShop::randomKey = 0;
|
||||
|
||||
GameStateShop::GameStateShop(GameApp* parent): GameState(parent) {
|
||||
shop = NULL;
|
||||
menu = NULL;
|
||||
for(int i=0;i<8;i++)
|
||||
altThumb[i] = NULL;
|
||||
mBack = NULL;
|
||||
boosterDisplay = NULL;
|
||||
mBg = NULL;
|
||||
mBgTex = NULL;
|
||||
taskList = NULL;
|
||||
menu = NULL;
|
||||
srcCards = NULL;
|
||||
shopMenu = NULL;
|
||||
bigDisplay = NULL;
|
||||
myCollection = NULL;
|
||||
pricelist = NULL;
|
||||
playerdata = NULL;
|
||||
booster = NULL;
|
||||
lightAlpha = 0;
|
||||
filterMenu = NULL;
|
||||
alphaChange = 0;
|
||||
for(int i=0;i<SHOP_ITEMS;i++){
|
||||
mPrices[i] = 0;
|
||||
mCounts[i] = 0;
|
||||
}
|
||||
mTouched = false;
|
||||
if(randomKey == 0)
|
||||
randomKey = rand();
|
||||
}
|
||||
|
||||
|
||||
GameStateShop::~GameStateShop() {
|
||||
End();
|
||||
End();
|
||||
}
|
||||
|
||||
void GameStateShop::Create(){
|
||||
|
||||
|
||||
}
|
||||
|
||||
|
||||
void GameStateShop::Start()
|
||||
{
|
||||
void GameStateShop::Start(){
|
||||
menu = NULL;
|
||||
bListCards = false;
|
||||
mTouched = false;
|
||||
mStage = STAGE_FADE_IN;
|
||||
mElapsed = 0;
|
||||
booster = NULL;
|
||||
srcCards = NEW WSrcUnlockedCards(.25);
|
||||
srcCards->setElapsed(15);
|
||||
WCFilterFactory * wff = WCFilterFactory::GetInstance();
|
||||
|
||||
//srcCards->addFilter(wff->Construct("c:red;&t:instant;"));
|
||||
//srcCards->bakeFilters();
|
||||
|
||||
bigSync = 0;
|
||||
shopMenu = NEW WGuiMenu(PSP_CTRL_DOWN,PSP_CTRL_UP,true,&bigSync);
|
||||
MTGAllCards * ac = GameApp::collection;
|
||||
playerdata = NEW PlayerData(ac);;
|
||||
myCollection = NEW DeckDataWrapper(NEW MTGDeck(options.profileFile(PLAYER_COLLECTION).c_str(), ac));
|
||||
pricelist = NEW PriceList(RESPATH"/settings/prices.dat",ac);
|
||||
for(int i=0;i<SHOP_SLOTS;i++){
|
||||
WGuiCardDistort * dist;
|
||||
if(i < BOOSTER_SLOTS)
|
||||
dist = NEW WGuiCardDistort(NULL,true);
|
||||
else{
|
||||
dist = NEW WGuiCardDistort(srcCards,true);
|
||||
dist->mOffset.setOffset(i-BOOSTER_SLOTS);
|
||||
}
|
||||
dist->xy = WDistort(_x1[i],_y1[i],_x2[i],_y2[i],_x3[i],_y3[i],_x4[i],_y4[i]);
|
||||
shopMenu->Add(NEW WGuiButton(dist,-102,i,this));
|
||||
}
|
||||
shopMenu->Entering(0);
|
||||
|
||||
if(!bigDisplay){
|
||||
bigDisplay = NEW WGuiCardImage(srcCards);
|
||||
bigDisplay->mOffset.Hook(&bigSync);
|
||||
bigDisplay->mOffset.setOffset(-BOOSTER_SLOTS);
|
||||
bigDisplay->setX(385);
|
||||
bigDisplay->setY(135);
|
||||
}
|
||||
|
||||
//alternateRender doesn't lock, so lock our thumbnails for hgeDistort.
|
||||
altThumb[0] = resources.RetrieveTexture("artifact_thumb.jpg", RETRIEVE_LOCK);
|
||||
altThumb[1] = resources.RetrieveTexture("green_thumb.jpg", RETRIEVE_LOCK);
|
||||
@@ -47,6 +112,7 @@ void GameStateShop::Start()
|
||||
altThumb[6] = resources.RetrieveTexture("land_thumb.jpg", RETRIEVE_LOCK);
|
||||
altThumb[7] = resources.RetrieveTexture("gold_thumb.jpg", RETRIEVE_LOCK);
|
||||
|
||||
|
||||
mBack = resources.GetQuad("back");
|
||||
resources.Unmiss("shop.jpg"); //Last resort.
|
||||
mBgTex = resources.RetrieveTexture("shop.jpg", RETRIEVE_LOCK, TEXTURE_SUB_5551);
|
||||
@@ -57,109 +123,294 @@ void GameStateShop::Start()
|
||||
|
||||
JRenderer::GetInstance()->EnableVSync(true);
|
||||
|
||||
shop = NULL;
|
||||
taskList = NULL;
|
||||
load();
|
||||
}
|
||||
|
||||
string GameStateShop::descPurchase(int controlId, bool tiny){
|
||||
char buffer[4096];
|
||||
string name;
|
||||
if(controlId < BOOSTER_SLOTS){
|
||||
if(mBooster[controlId].altSet == mBooster[controlId].mainSet)
|
||||
mBooster[controlId].altSet = 0;
|
||||
if(mBooster[controlId].altSet)
|
||||
sprintf(buffer,_("%s & %s Booster (15 Cards)").c_str(),mBooster[controlId].mainSet->id.c_str(),mBooster[controlId].altSet->id.c_str());
|
||||
else
|
||||
sprintf(buffer,_("%s Booster (15 Cards)").c_str(),mBooster[controlId].mainSet->id.c_str());
|
||||
name = buffer;
|
||||
}
|
||||
else{
|
||||
MTGCard * c = srcCards->getCard(controlId-BOOSTER_SLOTS);
|
||||
if(!c)
|
||||
return "";
|
||||
name = c->data->getName();
|
||||
}
|
||||
if(mInventory[controlId] <= 0){
|
||||
if(tiny)
|
||||
sprintf(buffer,_("SOLD OUT").c_str(),name.c_str());
|
||||
else
|
||||
sprintf(buffer,_("%s : SOLD OUT").c_str(),name.c_str());
|
||||
return buffer;
|
||||
}
|
||||
|
||||
if(tiny)
|
||||
return name;
|
||||
|
||||
if(mCounts[controlId] < 1)
|
||||
sprintf(buffer,_("%s : %i credits").c_str(),name.c_str(),mPrices[controlId]);
|
||||
else
|
||||
sprintf(buffer,_("%s (%i) : %i credits").c_str(),name.c_str(),mCounts[controlId],mPrices[controlId]);
|
||||
return buffer;
|
||||
}
|
||||
void GameStateShop::assembleBooster(int controlId){
|
||||
int mSet = -1;
|
||||
MTGSetInfo * si = setlist.randomSet(-1);
|
||||
mBooster[controlId].mainSet = si;
|
||||
mBooster[controlId].altSet = NULL;
|
||||
|
||||
int mSetCount = si->counts[MTGSetInfo::TOTAL_CARDS];
|
||||
if(mSetCount < 80){
|
||||
if(rand() % 100 < 50){ //50% Chance of picking a pure pack instead. Combo packs are more rare :)
|
||||
si = setlist.randomSet(-1,80);
|
||||
mSetCount = si->counts[MTGSetInfo::TOTAL_CARDS];
|
||||
mBooster[controlId].mainSet = si;
|
||||
}else
|
||||
mBooster[controlId].altSet = setlist.randomSet(si->block,mSetCount);
|
||||
}
|
||||
else {
|
||||
mBooster[controlId].altSet = NULL;
|
||||
if(rand() % 100 < 10) //10% chance of having a mixed booster anyways.
|
||||
mBooster[controlId].altSet = setlist.randomSet(si->block);
|
||||
}
|
||||
|
||||
for(int attempts=0;attempts<10;attempts++){
|
||||
if(mBooster[controlId].altSet != mBooster[controlId].mainSet)
|
||||
break;
|
||||
mBooster[controlId].altSet = setlist.randomSet(-1,mSetCount);
|
||||
}
|
||||
|
||||
int price = mBooster[controlId].mainSet->boosterCost();
|
||||
mInventory[controlId] = 2+rand()%4;
|
||||
if(mBooster[controlId].altSet != NULL){
|
||||
price += mBooster[controlId].altSet->boosterCost();
|
||||
price /= 2;
|
||||
price = price + .05 * price; //Mixed sets add a 5% premium.
|
||||
mInventory[controlId] = 1+rand()%2;
|
||||
}
|
||||
mPrices[controlId] = price;
|
||||
}
|
||||
void GameStateShop::beginPurchase(int controlId){
|
||||
JLBFont * mFont = resources.GetJLBFont(Constants::MENU_FONT);
|
||||
mFont->SetScale(DEFAULT_MENU_FONT_SCALE);
|
||||
SAFE_DELETE(menu);
|
||||
if(mInventory[controlId] <= 0){
|
||||
menu = NEW SimpleMenu(-145,this,Constants::MENU_FONT,SCREEN_WIDTH-300,SCREEN_HEIGHT/2,_("Sold Out").c_str());
|
||||
menu->Add(-1,"Ok");
|
||||
}
|
||||
else if(playerdata->credits - mPrices[controlId] < 0){
|
||||
menu = NEW SimpleMenu(-145,this,Constants::MENU_FONT,SCREEN_WIDTH-300,SCREEN_HEIGHT/2,_("Not enough credits").c_str());
|
||||
menu->Add(-1,"Ok");
|
||||
if(options[Options::CHEATMODE].number) {
|
||||
menu->Add(-2,"Steal it");
|
||||
}
|
||||
}
|
||||
else{
|
||||
string s;
|
||||
if(controlId < BOOSTER_SLOTS)
|
||||
s = _("Purchase Booster");
|
||||
else
|
||||
s = _("Purchase Card");
|
||||
menu = NEW SimpleMenu(-145,this,Constants::MENU_FONT,SCREEN_WIDTH-300,SCREEN_HEIGHT/2,s.c_str());
|
||||
menu->Add(controlId,"Yes");
|
||||
menu->Add(-1,"No");
|
||||
}
|
||||
}
|
||||
|
||||
void GameStateShop::purchaseCard(int controlId){
|
||||
MTGCard * c = srcCards->getCard(controlId-BOOSTER_SLOTS);
|
||||
if(!c || !c->data || playerdata->credits - mPrices[controlId] < 0)
|
||||
return;
|
||||
playerdata->collection->add(c);
|
||||
myCollection->Add(c);
|
||||
playerdata->credits -= mPrices[controlId];
|
||||
mCounts[controlId]++;
|
||||
mInventory[controlId]--;
|
||||
mTouched = true;
|
||||
menu->Close();
|
||||
}
|
||||
void GameStateShop::purchaseBooster(int controlId){
|
||||
if(playerdata->credits - mPrices[controlId] < 0)
|
||||
return;
|
||||
playerdata->credits -= mPrices[controlId];
|
||||
mInventory[controlId]--;
|
||||
WSrcCards * pool = NEW WSrcCards();
|
||||
WCFilterSet *main, *alt;
|
||||
|
||||
int num = setlist.getSetNum(mBooster[controlId].mainSet);
|
||||
main = NEW WCFilterSet(num);
|
||||
if(mBooster[controlId].altSet){
|
||||
num = setlist.getSetNum(mBooster[controlId].altSet);
|
||||
alt = NEW WCFilterSet(num);
|
||||
pool->addFilter(NEW WCFilterOR(main,alt));
|
||||
}else
|
||||
pool->addFilter(main);
|
||||
pool->loadMatches(srcCards,true);
|
||||
pool->Shuffle();
|
||||
|
||||
SAFE_DELETE(booster);
|
||||
booster = NEW MTGDeck(mParent->collection);
|
||||
|
||||
//Add cards to booster. Pool is shuffled, so just step through.
|
||||
int carryover = 1;
|
||||
if(!(rand() % 8)){
|
||||
pool->addFilter(NEW WCFilterRarity(Constants::RARITY_M));
|
||||
carryover = pool->addToDeck(booster,carryover);
|
||||
}
|
||||
pool->clearFilters();
|
||||
pool->addFilter(NEW WCFilterRarity(Constants::RARITY_R));
|
||||
carryover = pool->addToDeck(booster,carryover);
|
||||
pool->clearFilters();
|
||||
pool->addFilter(NEW WCFilterRarity(Constants::RARITY_U));
|
||||
carryover = pool->addToDeck(booster,carryover+3);
|
||||
pool->clearFilters();
|
||||
pool->addFilter(NEW WCFilterRarity(Constants::RARITY_C));
|
||||
carryover = pool->addToDeck(booster,carryover+11);
|
||||
|
||||
myCollection->Add(booster);
|
||||
makeDisplay(booster);
|
||||
|
||||
save(true);
|
||||
SAFE_DELETE(pool);
|
||||
menu->Close();
|
||||
}
|
||||
|
||||
int GameStateShop::purchasePrice(int offset){
|
||||
MTGCard * c = NULL;
|
||||
if(!pricelist || !srcCards || (c = srcCards->getCard(offset)) == NULL)
|
||||
return 0;
|
||||
int rnd = abs(c->getMTGId() + randomKey) % 20;
|
||||
float price = (float) pricelist->getPrice(c->getMTGId());
|
||||
price = price + price * (rnd -10)/100;
|
||||
return (int) (price + price * srcCards->filterFee());
|
||||
}
|
||||
|
||||
void GameStateShop::load(){
|
||||
if (shop) shop->saveAll();
|
||||
SAFE_DELETE(shop);
|
||||
int sets[500];
|
||||
int boosterSets[500];
|
||||
int unlocked[500];
|
||||
int nbsets = 0;
|
||||
int nbboostersets = 0;
|
||||
|
||||
//Figure out which sets are available.
|
||||
for (int i = 0; i < setlist.size(); i++){
|
||||
unlocked[i] = options[Options::optionSet(i)].number;
|
||||
}
|
||||
for (int i = 0; i < setlist.size(); i++){
|
||||
if (unlocked[i]){
|
||||
sets[nbsets] = i;
|
||||
nbsets++;
|
||||
if (mParent->collection->countBySet(i) > 80){ //Only sets with more than 80 cards can get boosters and starters
|
||||
boosterSets[nbboostersets] = i;
|
||||
nbboostersets++;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (nbboostersets){
|
||||
for (int i = 0; i < SHOP_BOOSTERS; i++){
|
||||
setIds[i] = boosterSets[(rand() % nbboostersets)];
|
||||
}
|
||||
}else{
|
||||
for (int i = 0; i < SHOP_BOOSTERS; i++){
|
||||
setIds[i] = (rand() % setlist.size());
|
||||
}
|
||||
}
|
||||
JQuad * mBackThumb = resources.GetQuad("back_thumb");
|
||||
|
||||
|
||||
|
||||
shop = NEW ShopItems(10, this, resources.GetJLBFont(Constants::MAIN_FONT), 10, 0, mParent->collection, setIds);
|
||||
MTGSetInfo * si = NULL;
|
||||
for (int i = 0; i < SHOP_BOOSTERS; i++){
|
||||
si = setlist.getInfo(setIds[i]);
|
||||
if(!si)
|
||||
for(int i=0;i<BOOSTER_SLOTS;i++)
|
||||
assembleBooster(i);
|
||||
for(int i=BOOSTER_SLOTS;i<SHOP_ITEMS;i++){
|
||||
MTGCard * c = NULL;
|
||||
if((c = srcCards->getCard(i-BOOSTER_SLOTS)) == NULL){
|
||||
mPrices[i] = 0;
|
||||
mCounts[i] = 0;
|
||||
mInventory[i] = 0;
|
||||
continue;
|
||||
|
||||
sprintf(setNames[i], "%s %s (%i %s)", si->id.c_str(), _("Booster").c_str(), si->boosterSize(), _("Cards").c_str());
|
||||
shop->Add(setNames[i],mBack,mBackThumb, si->boosterCost());
|
||||
}
|
||||
|
||||
MTGDeck * tempDeck = NEW MTGDeck(mParent->collection);
|
||||
tempDeck->addRandomCards(8,sets,nbsets);
|
||||
for (map<int,int>::iterator it = tempDeck->cards.begin(); it!=tempDeck->cards.end(); it++){
|
||||
for (int j = 0; j < it->second; j++){
|
||||
shop->Add(it->first);
|
||||
}
|
||||
}
|
||||
delete tempDeck;
|
||||
}
|
||||
mPrices[i] = purchasePrice(i);
|
||||
mCounts[i] = myCollection->countByName(c);
|
||||
switch(c->getRarity()){
|
||||
case Constants::RARITY_C:
|
||||
mInventory[i] = 2 + rand() % 8;
|
||||
break;
|
||||
case Constants::RARITY_L:
|
||||
mInventory[i] = 100;
|
||||
break;
|
||||
case Constants::RARITY_U:
|
||||
mInventory[i] = 1 + rand() % 5;
|
||||
break;
|
||||
case Constants::RARITY_R:
|
||||
mInventory[i] = 1 + rand() % 2;
|
||||
break;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
void GameStateShop::save(bool force)
|
||||
{
|
||||
if(mTouched || force){
|
||||
if(pricelist)
|
||||
pricelist->save();
|
||||
if(playerdata)
|
||||
playerdata->save();
|
||||
}
|
||||
mTouched = false;
|
||||
}
|
||||
void GameStateShop::End()
|
||||
{
|
||||
save();
|
||||
JRenderer::GetInstance()->EnableVSync(false);
|
||||
resources.Release(mBgTex);
|
||||
mBgTex = NULL;
|
||||
mBg = NULL;
|
||||
mElapsed = 0;
|
||||
SAFE_DELETE(shopMenu);
|
||||
SAFE_DELETE(bigDisplay);
|
||||
SAFE_DELETE(srcCards);
|
||||
SAFE_DELETE(playerdata);
|
||||
SAFE_DELETE(pricelist);
|
||||
SAFE_DELETE(myCollection);
|
||||
SAFE_DELETE(booster);
|
||||
SAFE_DELETE(filterMenu);
|
||||
deleteDisplay();
|
||||
|
||||
//Release alternate thumbnails.
|
||||
for(int i=0;i<8;i++){
|
||||
resources.Release(altThumb[i]);
|
||||
altThumb[i] = NULL;
|
||||
}
|
||||
|
||||
SAFE_DELETE(shop);
|
||||
SAFE_DELETE(menu);
|
||||
SAFE_DELETE(taskList);
|
||||
}
|
||||
|
||||
void GameStateShop::Destroy(){
|
||||
}
|
||||
|
||||
void GameStateShop::beginFilters(){
|
||||
if(!filterMenu){
|
||||
filterMenu = NEW WGuiFilters("Ask about...",srcCards);
|
||||
filterMenu->setY(2);
|
||||
filterMenu->setHeight(SCREEN_HEIGHT-2);
|
||||
}
|
||||
mStage = STAGE_ASK_ABOUT;
|
||||
filterMenu->Entering(0);
|
||||
}
|
||||
void GameStateShop::Update(float dt)
|
||||
{
|
||||
{
|
||||
if(menu && menu->closed)
|
||||
SAFE_DELETE(menu);
|
||||
srcCards->Update(dt);
|
||||
alphaChange = (500 - (rand() % 1000)) * dt;
|
||||
lightAlpha+= alphaChange;
|
||||
if (lightAlpha < 0) lightAlpha = 0;
|
||||
if (lightAlpha > 50) lightAlpha = 50;
|
||||
// mParent->effect->UpdateSmall(dt);
|
||||
// mParent->effect->UpdateBig(dt);
|
||||
if(mStage != STAGE_FADE_IN)
|
||||
mElapsed += dt;
|
||||
|
||||
u32 btn;
|
||||
if (menu){
|
||||
menu->Update(dt);
|
||||
if (menu->closed) SAFE_DELETE(menu);
|
||||
}
|
||||
switch(mStage){
|
||||
case STAGE_SHOP_MENU:
|
||||
if (!menu){
|
||||
if (menu){
|
||||
menu->Update(dt);
|
||||
}else{
|
||||
menu = NEW SimpleMenu(11,this,Constants::MENU_FONT,SCREEN_WIDTH/2-100,20);
|
||||
menu->Add(22,"Ask about...");
|
||||
menu->Add(14,"Check task board");
|
||||
if(options[Options::CHEATMODE].number)
|
||||
menu->Add(-2,"Steal 1,000 credits");
|
||||
menu->Add(12,"Save & Back to Main Menu");
|
||||
menu->Add(14,"See available tasks");
|
||||
menu->Add(13, "Cancel");
|
||||
}
|
||||
break;
|
||||
case STAGE_SHOP_TASKS:
|
||||
if(menu){
|
||||
menu->Update(dt);
|
||||
return;
|
||||
}
|
||||
if(taskList){
|
||||
@@ -173,7 +424,7 @@ void GameStateShop::Update(float dt)
|
||||
if(!menu){
|
||||
menu = NEW SimpleMenu(11,this,Constants::MENU_FONT,SCREEN_WIDTH/2-100,20);
|
||||
menu->Add(12,"Save & Back to Main Menu");
|
||||
menu->Add(15,"Close tasks");
|
||||
menu->Add(15,"Return to shop");
|
||||
menu->Add(13, "Cancel");
|
||||
}
|
||||
}
|
||||
@@ -193,18 +444,67 @@ void GameStateShop::Update(float dt)
|
||||
}
|
||||
#endif
|
||||
break;
|
||||
case STAGE_ASK_ABOUT:
|
||||
btn = mEngine->ReadButton();
|
||||
if(menu && !menu->closed){
|
||||
menu->CheckUserInput(btn);
|
||||
menu->Update(dt);
|
||||
return;
|
||||
}
|
||||
if(filterMenu){
|
||||
if(btn == PSP_CTRL_SELECT){
|
||||
filterMenu->Finish();
|
||||
filterMenu->Update(dt);
|
||||
return;
|
||||
}
|
||||
if(filterMenu->isFinished()){
|
||||
load();
|
||||
mStage = STAGE_SHOP_SHOP;
|
||||
}else{
|
||||
filterMenu->CheckUserInput(btn);
|
||||
filterMenu->Update(dt);
|
||||
}
|
||||
return;
|
||||
}
|
||||
break;
|
||||
case STAGE_SHOP_SHOP:
|
||||
btn = mEngine->ReadButton();
|
||||
if(menu && !menu->closed){
|
||||
menu->CheckUserInput(btn);
|
||||
menu->Update(dt);
|
||||
return;
|
||||
}
|
||||
if (btn == PSP_CTRL_START){
|
||||
if(boosterDisplay){
|
||||
deleteDisplay();
|
||||
return;
|
||||
}
|
||||
mStage = STAGE_SHOP_MENU;
|
||||
return;
|
||||
}else if(btn == PSP_CTRL_SELECT){
|
||||
beginFilters();
|
||||
}else if(btn == PSP_CTRL_SQUARE){
|
||||
load();
|
||||
}
|
||||
if (shop){
|
||||
shop->CheckUserInput(btn);
|
||||
shop->Update(dt);
|
||||
srcCards->Shuffle();
|
||||
load();
|
||||
}else if(btn == PSP_CTRL_TRIANGLE){
|
||||
options[Options::DISABLECARDS].number = !options[Options::DISABLECARDS].number;
|
||||
}else if (boosterDisplay){
|
||||
if(btn == PSP_CTRL_CROSS)
|
||||
deleteDisplay();
|
||||
else {
|
||||
boosterDisplay->CheckUserInput(btn);
|
||||
boosterDisplay->Update(dt);}
|
||||
return;
|
||||
}else if(btn == PSP_CTRL_CROSS){
|
||||
bListCards = !bListCards;
|
||||
}else if(shopMenu){
|
||||
if(shopMenu->CheckUserInput(btn))
|
||||
srcCards->Touch();
|
||||
}
|
||||
|
||||
if(shopMenu)
|
||||
shopMenu->Update(dt);
|
||||
|
||||
break;
|
||||
case STAGE_FADE_IN:
|
||||
mParent->DoAnimation(TRANSITION_FADE_IN);
|
||||
@@ -213,57 +513,156 @@ void GameStateShop::Update(float dt)
|
||||
}
|
||||
}
|
||||
|
||||
void GameStateShop::makeDisplay(MTGDeck * d){
|
||||
deleteDisplay();
|
||||
boosterDisplay = NEW CardDisplay(12,NULL, SCREEN_WIDTH - 200, SCREEN_HEIGHT/2,this,NULL,5);
|
||||
|
||||
map<int,int>::iterator it;
|
||||
|
||||
for (it = d->cards.begin(); it!=d->cards.end(); it++){
|
||||
MTGCard * c = d->getCardById(it->first);
|
||||
MTGCardInstance * ci = NEW MTGCardInstance(c, NULL);
|
||||
boosterDisplay->AddCard(ci);
|
||||
subBooster.push_back(ci);
|
||||
}
|
||||
}
|
||||
void GameStateShop::deleteDisplay(){
|
||||
vector<MTGCardInstance*>::iterator i;
|
||||
for(i=subBooster.begin();i!=subBooster.end();i++){
|
||||
if(!*i) continue;
|
||||
delete *i;
|
||||
}
|
||||
subBooster.clear();
|
||||
SAFE_DELETE(boosterDisplay);
|
||||
}
|
||||
void GameStateShop::Render()
|
||||
{
|
||||
//Erase
|
||||
JLBFont * mFont = resources.GetJLBFont(Constants::MAIN_FONT);
|
||||
JRenderer * r = JRenderer::GetInstance();
|
||||
r->ClearScreen(ARGB(0,0,0,0));
|
||||
if(mStage == STAGE_FADE_IN)
|
||||
return;
|
||||
|
||||
if (mBg) r->RenderQuad(mBg,0,0);
|
||||
if (mBg)
|
||||
r->RenderQuad(mBg,0,0);
|
||||
|
||||
JQuad * quad = resources.RetrieveTempQuad("shop_light.jpg",TEXTURE_SUB_5551);
|
||||
if (quad){
|
||||
r->EnableTextureFilter(false);
|
||||
r->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE);
|
||||
quad->SetColor(ARGB(lightAlpha,255,255,255));
|
||||
r->RenderQuad(quad,0,0);
|
||||
r->SetTexBlend(BLEND_SRC_ALPHA, BLEND_ONE_MINUS_SRC_ALPHA);
|
||||
r->EnableTextureFilter(true);
|
||||
}
|
||||
|
||||
if(shopMenu)
|
||||
shopMenu->Render();
|
||||
if(filterMenu && !filterMenu->isFinished())
|
||||
filterMenu->Render();
|
||||
else{
|
||||
if(boosterDisplay)
|
||||
boosterDisplay->Render();
|
||||
else if(bigDisplay){
|
||||
if(bigDisplay->mOffset.getPos() >= 0)
|
||||
bigDisplay->setSource(srcCards);
|
||||
else
|
||||
bigDisplay->setSource(NULL);
|
||||
bigDisplay->Render();
|
||||
float elp = srcCards->getElapsed();
|
||||
//Render the card list overlay.
|
||||
if( bListCards || elp > LIST_FADEIN){
|
||||
char alpha = 200;
|
||||
if(!bListCards && elp < LIST_FADEIN+.25){
|
||||
alpha = 800 *(elp-LIST_FADEIN);
|
||||
}
|
||||
r->FillRoundRect(300,10, 160, SHOP_SLOTS * 20 + 15,5,ARGB(alpha,0,0,0));
|
||||
alpha+=55;
|
||||
for(int i=0;i<SHOP_SLOTS;i++){
|
||||
if (i == shopMenu->getSelected())
|
||||
mFont->SetColor(ARGB(alpha,255,255,0));
|
||||
else
|
||||
mFont->SetColor(ARGB(alpha,255,255,255));
|
||||
char buffer[512];
|
||||
string s = descPurchase(i,true);
|
||||
sprintf(buffer, "%s", s.c_str());
|
||||
float x = 310;
|
||||
float y = 25 + 20*i;
|
||||
mFont->DrawString(buffer,x,y);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
//Render the info bar
|
||||
r->FillRect(0,SCREEN_HEIGHT-17,SCREEN_WIDTH,17,ARGB(128,0,0,0));
|
||||
char c[512];
|
||||
sprintf(c,_("credits: %i").c_str(), playerdata->credits);
|
||||
mFont->SetColor(ARGB(255,255,255,255));
|
||||
mFont->DrawString(c, 5, SCREEN_HEIGHT - 12);
|
||||
sprintf(c, "%s", _("[]:other cards").c_str());
|
||||
unsigned int len = 4 + mFont->GetStringWidth(c);
|
||||
mFont->DrawString(c,SCREEN_WIDTH-len,SCREEN_HEIGHT-14);
|
||||
|
||||
mFont->SetColor(ARGB(255,255,255,0));
|
||||
mFont->DrawString(descPurchase(bigSync.getPos()).c_str(), SCREEN_WIDTH/2, SCREEN_HEIGHT - 14,JGETEXT_CENTER);
|
||||
mFont->SetColor(ARGB(255,255,255,255));
|
||||
|
||||
if (shop)
|
||||
shop->Render();
|
||||
|
||||
if (mStage == STAGE_SHOP_TASKS && taskList) {
|
||||
taskList->Render();
|
||||
}
|
||||
|
||||
if (menu){
|
||||
if (menu)
|
||||
menu->Render();
|
||||
}
|
||||
}
|
||||
|
||||
void GameStateShop::ButtonPressed(int controllerId, int controlId)
|
||||
{
|
||||
if (controllerId == 10){
|
||||
if (shop)
|
||||
shop->pricedialog(controlId);
|
||||
int sel = bigSync.getOffset();
|
||||
|
||||
switch(controllerId){
|
||||
case -102: //Buying something...
|
||||
beginPurchase(controlId);
|
||||
return;
|
||||
case -145:
|
||||
if(controlId == -1){ //Nope, don't buy.
|
||||
menu->Close();
|
||||
return;
|
||||
}
|
||||
if(sel > -1 && sel < SHOP_ITEMS){
|
||||
if(controlId == -2)
|
||||
playerdata->credits += mPrices[sel];
|
||||
if(sel < BOOSTER_SLOTS) //Clicked a booster.
|
||||
purchaseBooster(sel);
|
||||
else
|
||||
purchaseCard(sel);
|
||||
}
|
||||
return;
|
||||
}
|
||||
else{
|
||||
switch(controlId){
|
||||
case 12:
|
||||
if (shop) shop->saveAll();
|
||||
if (taskList) taskList->save();
|
||||
mParent->DoTransition(TRANSITION_FADE,GAME_STATE_MENU);
|
||||
mStage = STAGE_SHOP_SHOP;
|
||||
break;
|
||||
case 14:
|
||||
mStage = STAGE_SHOP_TASKS;
|
||||
if (!taskList)
|
||||
taskList = NEW TaskList();
|
||||
taskList->Start();
|
||||
break;
|
||||
case 15:
|
||||
if(taskList)
|
||||
taskList->End();
|
||||
break;
|
||||
default:
|
||||
mStage = STAGE_SHOP_SHOP;
|
||||
}
|
||||
if (menu) menu->Close();
|
||||
//Basic Menu.
|
||||
switch(controlId){
|
||||
case 12:
|
||||
if (taskList) taskList->save();
|
||||
mParent->DoTransition(TRANSITION_FADE,GAME_STATE_MENU);
|
||||
mStage = STAGE_SHOP_SHOP;
|
||||
break;
|
||||
case 14:
|
||||
mStage = STAGE_SHOP_TASKS;
|
||||
if (!taskList)
|
||||
taskList = NEW TaskList();
|
||||
taskList->Start();
|
||||
break;
|
||||
case 15:
|
||||
if(taskList)
|
||||
taskList->End();
|
||||
break;
|
||||
case 22:
|
||||
beginFilters();
|
||||
break;
|
||||
case -2:
|
||||
playerdata->credits += 1000;
|
||||
default:
|
||||
mStage = STAGE_SHOP_SHOP;
|
||||
}
|
||||
SAFE_DELETE(menu);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user