207 lines
4.9 KiB
C++
207 lines
4.9 KiB
C++
/*
|
|
The shop is where the player can buy cards, decks...
|
|
*/
|
|
#include "../include/config.h"
|
|
#include <JRenderer.h>
|
|
#include "../include/GameStateShop.h"
|
|
#include "../include/GameApp.h"
|
|
#include "../include/MTGDeck.h"
|
|
#include "../include/Translate.h"
|
|
#include "../include/GameOptions.h"
|
|
|
|
|
|
GameStateShop::GameStateShop(GameApp* parent): GameState(parent) {}
|
|
|
|
|
|
GameStateShop::~GameStateShop() {
|
|
//End(); TODO FIX THAT
|
|
}
|
|
|
|
void GameStateShop::Create(){
|
|
|
|
|
|
}
|
|
|
|
|
|
void GameStateShop::Start()
|
|
{
|
|
menu = NULL;
|
|
|
|
|
|
mStage = STAGE_SHOP_SHOP;
|
|
|
|
//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);
|
|
altThumb[2] = resources.RetrieveTexture("blue_thumb.jpg", RETRIEVE_LOCK);
|
|
altThumb[3] = resources.RetrieveTexture("red_thumb.jpg", RETRIEVE_LOCK);
|
|
altThumb[4] = resources.RetrieveTexture("black_thumb.jpg", RETRIEVE_LOCK);
|
|
altThumb[5] = resources.RetrieveTexture("white_thumb.jpg", RETRIEVE_LOCK);
|
|
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);
|
|
if(mBgTex)
|
|
mBg = resources.RetrieveQuad("shop.jpg");
|
|
else
|
|
mBg = NULL;
|
|
|
|
menuFont = resources.GetJLBFont(Constants::MENU_FONT);
|
|
itemFont = resources.GetJLBFont(Constants::MAIN_FONT);
|
|
|
|
JRenderer::GetInstance()->EnableVSync(true);
|
|
|
|
shop = NULL;
|
|
load();
|
|
|
|
}
|
|
|
|
|
|
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;
|
|
|
|
//Unlock a default set if no set is unlocked
|
|
int ok = 0;
|
|
int defaultSet = 0;
|
|
for (int i = 0; i < MtgSets::SetsList->nb_items; i++){
|
|
string s = MtgSets::SetsList->values[i];
|
|
if (s.compare("10E") == 0) defaultSet = i;
|
|
|
|
unlocked[i] = options[Options::optionSet(i)].number;
|
|
if (unlocked[i])
|
|
ok = 1;
|
|
}
|
|
if (!ok){
|
|
unlocked[defaultSet] = 1;
|
|
options[Options::optionSet(defaultSet)] = GameOption(1);
|
|
options.save();
|
|
}
|
|
|
|
for (int i = 0; i < MtgSets::SetsList->nb_items; 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() % MtgSets::SetsList->nb_items);
|
|
}
|
|
}
|
|
JQuad * mBackThumb = resources.GetQuad("back_thumb");
|
|
|
|
|
|
|
|
shop = NEW ShopItems(10, this, itemFont, 10, 0, mParent->collection, setIds);
|
|
for (int i = 0; i < SHOP_BOOSTERS; i++){
|
|
sprintf(setNames[i], "%s Booster (15 %s)",MtgSets::SetsList->values[setIds[i]].c_str(), _("cards").c_str());
|
|
shop->Add(setNames[i],mBack,mBackThumb, 700);
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
void GameStateShop::End()
|
|
{
|
|
JRenderer::GetInstance()->EnableVSync(false);
|
|
resources.Release(mBgTex);
|
|
mBgTex = NULL;
|
|
mBg = NULL;
|
|
|
|
//Release alternate thumbnails.
|
|
for(int i=0;i<8;i++){
|
|
resources.Release(altThumb[i]);
|
|
}
|
|
|
|
SAFE_DELETE(shop);
|
|
SAFE_DELETE(menu);
|
|
}
|
|
|
|
void GameStateShop::Destroy(){
|
|
}
|
|
|
|
void GameStateShop::Update(float dt)
|
|
{
|
|
// mParent->effect->UpdateSmall(dt);
|
|
// mParent->effect->UpdateBig(dt);
|
|
if (mStage == STAGE_SHOP_MENU){
|
|
if (menu){
|
|
menu->Update(dt);
|
|
}else{
|
|
menu = NEW SimpleMenu(11,this,menuFont,SCREEN_WIDTH/2-100,20);
|
|
menu->Add(12,"Save & Back to Main Menu");
|
|
menu->Add(13, "Cancel");
|
|
}
|
|
}else{
|
|
if (mEngine->GetButtonClick(PSP_CTRL_START)){
|
|
mStage = STAGE_SHOP_MENU;
|
|
}
|
|
if (mEngine->GetButtonClick(PSP_CTRL_SQUARE)){
|
|
load();
|
|
}
|
|
if (shop)
|
|
shop->Update(dt);
|
|
}
|
|
|
|
}
|
|
|
|
|
|
void GameStateShop::Render()
|
|
{
|
|
//Erase
|
|
JRenderer * r = JRenderer::GetInstance();
|
|
r->ClearScreen(ARGB(0,0,0,0));
|
|
|
|
if (mBg) r->RenderQuad(mBg,0,0);
|
|
|
|
|
|
if (shop)
|
|
shop->Render();
|
|
|
|
if (mStage == STAGE_SHOP_MENU && menu){
|
|
menu->Render();
|
|
}
|
|
}
|
|
|
|
void GameStateShop::ButtonPressed(int controllerId, int controlId)
|
|
{
|
|
switch (controllerId){
|
|
case 10:
|
|
if (shop) shop->pricedialog(controlId);
|
|
break;
|
|
case 11:
|
|
if (controlId == 12){
|
|
if (shop) shop->saveAll();
|
|
mParent->SetNextState(GAME_STATE_MENU);
|
|
}else{
|
|
mStage = STAGE_SHOP_SHOP;
|
|
}
|
|
break;
|
|
}
|
|
}
|
|
|
|
|