/**************************************************************************************
commercia.h è responsabile della gestione della finestra di commercio.
***************************************************************************************/
//Lista include //
//SDL Header// //
#include <SDL\SDL.h> //
#include <SDL\SDL_mixer.h> //
#include <SDL\SDL_ttf.h> //
//////////////////////////////////////////////////////
//CLASSI:
class merce
{
/*Variabili membro*/
public:
//(Incremento sistema è esterna)
//Valori standard compra/vendita per un elemento
int standard_compra, standard_vendi;
//Valori effettivi compra/vendita di un elemento
int val_compra, val_vendi;
//Quantità media di un elemento
int q_m;
/*Funzioni membro*/
public:
//Carica valori elemento
void Load(int sc, int sv, int quan_media)
{
q_m=quan_media;
standard_compra=sc;
standard_vendi=sv;
}
//In base alla quantità, al prezzo ideale, ed alla variazione tipica del sistema, ne ricava i valori di compa/vendita.
void Assegna_val(int var_sistema, int q)
{
val_compra=standard_compra+var_sistema+(q_m-q);
val_vendi=standard_vendi+var_sistema+(q_m-q)/1.5;
if (val_compra<=standard_compra/2)
{
val_compra=standard_compra/2;
}
if (val_vendi<=standard_vendi/2)
{
val_vendi=standard_vendi/2;
}
}
};
//NAMESPACE:
namespace commercio
{
//Sfondo
SDL_Surface *Sfondo;
//Pulsanti
Pulsante fatto;
Pulsante compra_d, compra_hg, compra_ti, compra_po, compra_p, compra_co, compra_br, compra_pd, compra_os, compra_ar;
Pulsante vendi_d, vendi_hg, vendi_ti, vendi_po, vendi_p, vendi_co, vendi_br, vendi_pd, vendi_os, vendi_ar;
//Merce
merce d, hg, ti, po, p, co, br, pd, os, ar;
}
//FUNZIONI:
void Load_Commercio (void)
{
//Sfondo
Load_Immagine(&commercio::Sfondo, "Risorse/Commercio/Sfondo.bmp");
//Pulsante 'fatto'
commercio::fatto.Load("Risorse/Commercio/Fatto.bmp", "Risorse/Commercio/FattoON.bmp", 412, 719, "", 0);
///////////////////////////////////Pulsanti merci
commercio::compra_d.Load("Risorse/Commercio/Compra.bmp", "Risorse/Commercio/CompraON.bmp", 440, 100, "Compra deuterio", 2);
commercio::vendi_d.Load("Risorse/Commercio/Vendi.bmp", "Risorse/Commercio/VendiON.bmp", 521, 100, "Vendi deuterio", 2);
commercio::compra_hg.Load("Risorse/Commercio/Compra.bmp", "Risorse/Commercio/CompraON.bmp", 440, 162, "Compra mercurio", 2);
commercio::vendi_hg.Load("Risorse/Commercio/Vendi.bmp", "Risorse/Commercio/VendiON.bmp", 521, 162, "Vendi mercurio", 2);
commercio::compra_ti.Load("Risorse/Commercio/Compra.bmp", "Risorse/Commercio/CompraON.bmp", 440, 224, "Compra titanio", 2);
commercio::vendi_ti.Load("Risorse/Commercio/Vendi.bmp", "Risorse/Commercio/VendiON.bmp", 521, 224, "Vendi titanio", 2);
commercio::compra_po.Load("Risorse/Commercio/Compra.bmp", "Risorse/Commercio/CompraON.bmp", 440, 285, "Compra polonio", 2);
commercio::vendi_po.Load("Risorse/Commercio/Vendi.bmp", "Risorse/Commercio/VendiON.bmp", 521, 285, "Vendi polonio", 2);
commercio::compra_p.Load("Risorse/Commercio/Compra.bmp", "Risorse/Commercio/CompraON.bmp", 440, 346, "Compra fosforo", 2);
commercio::vendi_p.Load("Risorse/Commercio/Vendi.bmp", "Risorse/Commercio/VendiON.bmp", 521, 346, "Vendi fosforo", 2);
commercio::compra_co.Load("Risorse/Commercio/Compra.bmp", "Risorse/Commercio/CompraON.bmp", 440, 408, "Compra cobalto", 2);
commercio::vendi_co.Load("Risorse/Commercio/Vendi.bmp", "Risorse/Commercio/VendiON.bmp", 521, 408, "Vendi cobalto", 2);
commercio::compra_br.Load("Risorse/Commercio/Compra.bmp", "Risorse/Commercio/CompraON.bmp", 440, 470, "Compra bromo", 2);
commercio::vendi_br.Load("Risorse/Commercio/Vendi.bmp", "Risorse/Commercio/VendiON.bmp", 521, 470, "Vendi bromo", 2);
commercio::compra_pd.Load("Risorse/Commercio/Compra.bmp", "Risorse/Commercio/CompraON.bmp", 440, 531, "Compra palladio", 2);
commercio::vendi_pd.Load("Risorse/Commercio/Vendi.bmp", "Risorse/Commercio/VendiON.bmp", 521, 531, "Vendi palladio", 2);
commercio::compra_os.Load("Risorse/Commercio/Compra.bmp", "Risorse/Commercio/CompraON.bmp", 440, 592, "Compra osmio", 2);
commercio::vendi_os.Load("Risorse/Commercio/Vendi.bmp", "Risorse/Commercio/VendiON.bmp", 521, 592, "Vendi osmio", 2);
commercio::compra_ar.Load("Risorse/Commercio/Compra.bmp", "Risorse/Commercio/CompraON.bmp", 440, 653, "Compra argon", 2);
commercio::vendi_ar.Load("Risorse/Commercio/Vendi.bmp", "Risorse/Commercio/VendiON.bmp", 521, 653, "Vendi argon", 2);
///////////////////////////////Elementi (valori compra/vendita e quantità ideali
commercio::d.Load(144,120,150);
commercio::hg.Load(120,100,200);
commercio::ti.Load(90,75,300);
commercio::po.Load(180,150,100);
commercio::p.Load(156,130,130);
commercio::co.Load(240,200,80);
commercio::br.Load(216,180,90);
commercio::pd.Load(300,250,40);
commercio::os.Load(168,140,125);
commercio::ar.Load(264,220,85);
}
void Free_Commercio (void)
{
SDL_FreeSurface(commercio::Sfondo);
commercio::fatto.Free();
commercio::compra_d.Free(); commercio::compra_hg.Free(); commercio::compra_ti.Free(); commercio::compra_po.Free(); commercio::compra_p.Free();
commercio::compra_co.Free(); commercio::compra_br.Free(); commercio::compra_pd.Free(); commercio::compra_os.Free(); commercio::compra_ar.Free();
commercio::vendi_d.Free(); commercio::vendi_hg.Free(); commercio::vendi_ti.Free(); commercio::vendi_po.Free(); commercio::vendi_p.Free();
commercio::vendi_co.Free(); commercio::vendi_br.Free(); commercio::vendi_pd.Free(); commercio::vendi_os.Free(); commercio::vendi_ar.Free();
}
int Commercia (SDL_Surface *screen, SDL_Event evento, int sistema)
{
//Valore di ritorno:
int valore_ritorno=0;
//Pos mouse
int mx=0, my=0;
//Musica di sottofondo->play_music_galassia()
stato::mus=2;
//Catturo mouse
SDL_GetMouseState(&mx,&my);
//Disegno sfondo
SDL_BlitSurface(commercio::Sfondo, NULL, screen, NULL);
//Assegno valore alle merci in base alla variazione dei costi del sistema attuale, e alla loro abbondanza:
commercio::d.Assegna_val(sis_at::variazione_sistema,sis_at::d);
commercio::hg.Assegna_val(sis_at::variazione_sistema,sis_at::hg);
commercio::ti.Assegna_val(sis_at::variazione_sistema,sis_at::ti);
commercio::po.Assegna_val(sis_at::variazione_sistema,sis_at::po);
commercio::p.Assegna_val(sis_at::variazione_sistema,sis_at::p);
commercio::co.Assegna_val(sis_at::variazione_sistema,sis_at::co);
commercio::br.Assegna_val(sis_at::variazione_sistema,sis_at::br);
commercio::pd.Assegna_val(sis_at::variazione_sistema,sis_at::pd);
commercio::os.Assegna_val(sis_at::variazione_sistema,sis_at::os);
commercio::ar.Assegna_val(sis_at::variazione_sistema,sis_at::ar);
/////Testi:
settext::dimensione=20;
Setcolor(0,132,223);
Scrivi(screen, "Inventario astronave:","Segoeui.ttf", 155,48);
Scrivi(screen, "Inventario stazione:","Segoeui.ttf", 670,48);
char soldi[8]="";
itoa(workshop::crediti, soldi, 10);
strcat(soldi, "§");
settext::dimensione=30; Setcolor(34,177,76);
Scrivi(screen, soldi, "segoeui.ttf", 630, 12);
///////////////////////////////////VALORI Quantità NAVE:
//Scrivo la quantità che la nave possiede di ogni merce:
char num_buf[8]="";
settext::dimensione=25;
Setcolor(150,150,150);
itoa(astronave::d, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 355, 100);
itoa(astronave::hg, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 355, 162);
itoa(astronave::ti, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 355, 224);
itoa(astronave::po, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 355, 285);
itoa(astronave::p, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 355, 346);
itoa(astronave::co, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 355, 408);
itoa(astronave::br, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 355, 470);
itoa(astronave::pd, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 355, 531);
itoa(astronave::os, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 355, 592);
itoa(astronave::ar, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 355, 653);
//////////////////////////////////VALORI quantità stazione:
//Scrivo la quantità che la stazione spaziale possiede di ogni merce
Setcolor(150, 150,150);
itoa(sis_at::d, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 640, 100);
itoa(sis_at::hg, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 640, 162);
itoa(sis_at::ti, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 640, 224);
itoa(sis_at::po, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 640, 285);
itoa(sis_at::p, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 640, 346);
itoa(sis_at::co, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 640, 408);
itoa(sis_at::br, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 640, 470);
itoa(sis_at::pd, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 640, 531);
itoa(sis_at::os, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 640, 592);
itoa(sis_at::ar, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 640, 653);
/////////////////////////////////////VALORI prezzi compra:
//Scrivo i costi di ogni merce
settext::dimensione=25;
Setcolor(155,121,121);
itoa(commercio::d.val_compra, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 100, 100);
itoa(commercio::hg.val_compra, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 100, 162);
itoa(commercio::ti.val_compra, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 100, 224);
itoa(commercio::po.val_compra, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 100, 285);
itoa(commercio::p.val_compra, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 100, 346);
itoa(commercio::co.val_compra, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 100, 408);
itoa(commercio::br.val_compra, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 100, 470);
itoa(commercio::pd.val_compra, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 100, 531);
itoa(commercio::os.val_compra, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 100, 592);
itoa(commercio::ar.val_compra, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 100, 653);
/////////////////////////////////////VALORI PREZZI VENDITA:
//Scrivo i valori (in vendita) di ogni merce
settext::dimensione=25;
Setcolor(125,156,126);
itoa(commercio::d.val_vendi, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 850, 100);
itoa(commercio::hg.val_vendi, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 850, 162);
itoa(commercio::ti.val_vendi, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 850, 224);
itoa(commercio::po.val_vendi, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 850, 285);
itoa(commercio::p.val_vendi, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 850, 346);
itoa(commercio::co.val_vendi, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 850, 408);
itoa(commercio::br.val_vendi, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 850, 470);
itoa(commercio::pd.val_vendi, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 850, 531);
itoa(commercio::os.val_vendi, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 850, 592);
itoa(commercio::ar.val_vendi, num_buf, 10);
Scrivi(screen, num_buf, "segoeui.ttf", 850, 653);
//////////////////////////////////////////////////////// PULSANTI
//Fatto
commercio::fatto.Crea(screen ,&evento);
if (commercio::fatto.Get_state()==2)
{
valore_ritorno=1;
}
//Vendi deuterio, solo se disponibile nell'inventario della nave:
commercio::vendi_d.Crea(screen ,&evento);
if (commercio::vendi_d.Get_state()==2)
{
if (astronave::d>0)
{
sis_at::d++;
astronave::d--;
workshop::crediti+=commercio::d.val_vendi;
}
}
//Compra deuterio, solo se disponibile nell'inventario della stazione e se si dispone di abbastanza crediti.
commercio::compra_d.Crea(screen ,&evento);
if (commercio::compra_d.Get_state()==2)
{
if ((sis_at::d>0)&&(workshop::crediti>commercio::d.val_compra))
{
sis_at::d--;
astronave::d++;
workshop::crediti-=commercio::d.val_compra;
}
}
////E così via per gli altri elementi......
commercio::vendi_hg.Crea(screen ,&evento);
if (commercio::vendi_hg.Get_state()==2)
{
if (astronave::hg>0)
{
sis_at::hg++;
astronave::hg--;
workshop::crediti+=commercio::hg.val_vendi;
}
}
commercio::compra_hg.Crea(screen ,&evento);
if (commercio::compra_hg.Get_state()==2)
{
if ((sis_at::hg>0)&&(workshop::crediti>commercio::hg.val_compra))
{
sis_at::hg--;
astronave::hg++;
workshop::crediti-=commercio::hg.val_compra;
}
}
commercio::vendi_ti.Crea(screen ,&evento);
if (commercio::vendi_ti.Get_state()==2)
{
if (astronave::ti>0)
{
sis_at::ti++;
astronave::ti--;
workshop::crediti+=commercio::ti.val_vendi;
}
}
commercio::compra_ti.Crea(screen ,&evento);
if (commercio::compra_ti.Get_state()==2)
{
if ((sis_at::ti>0)&&(workshop::crediti>commercio::ti.val_compra))
{
sis_at::ti--;
astronave::ti++;
workshop::crediti-=commercio::ti.val_compra;
}
}
commercio::vendi_po.Crea(screen ,&evento);
if (commercio::vendi_po.Get_state()==2)
{
if (astronave::po>0)
{
sis_at::po++;
astronave::po--;
workshop::crediti+=commercio::po.val_vendi;
}
}
commercio::compra_po.Crea(screen ,&evento);
if (commercio::compra_po.Get_state()==2)
{
if ((sis_at::po>0)&&(workshop::crediti>commercio::po.val_compra))
{
sis_at::po--;
astronave::po++;
workshop::crediti-=commercio::po.val_compra;
}
}
commercio::vendi_p.Crea(screen ,&evento);
if (commercio::vendi_p.Get_state()==2)
{
if (astronave::p>0)
{
sis_at::p++;
astronave::p--;
workshop::crediti+=commercio::p.val_vendi;
}
}
commercio::compra_p.Crea(screen ,&evento);
if (commercio::compra_p.Get_state()==2)
{
if ((sis_at::p>0)&&(workshop::crediti>commercio::p.val_compra))
{
sis_at::p--;
astronave::p++;
workshop::crediti-=commercio::p.val_compra;
}
}
commercio::vendi_co.Crea(screen ,&evento);
if (commercio::vendi_co.Get_state()==2)
{
if (astronave::co>0)
{
sis_at::co++;
astronave::co--;
workshop::crediti+=commercio::co.val_vendi;
}
}
commercio::compra_co.Crea(screen ,&evento);
if (commercio::compra_co.Get_state()==2)
{
if ((sis_at::co>0)&&(workshop::crediti>commercio::co.val_compra))
{
sis_at::co--;
astronave::co++;
workshop::crediti-=commercio::co.val_compra;
}
}
commercio::vendi_br.Crea(screen ,&evento);
if (commercio::vendi_br.Get_state()==2)
{
if (astronave::br>0)
{
sis_at::br++;
astronave::br--;
workshop::crediti+=commercio::br.val_vendi;
}
}
commercio::compra_br.Crea(screen ,&evento);
if (commercio::compra_br.Get_state()==2)
{
if ((sis_at::br>0)&&(workshop::crediti>commercio::br.val_compra))
{
sis_at::br--;
astronave::br++;
workshop::crediti-=commercio::br.val_compra;
}
}
commercio::vendi_pd.Crea(screen ,&evento);
if (commercio::vendi_pd.Get_state()==2)
{
if (astronave::pd>0)
{
sis_at::pd++;
astronave::pd--;
workshop::crediti+=commercio::pd.val_vendi;
}
}
commercio::compra_pd.Crea(screen ,&evento);
if (commercio::compra_pd.Get_state()==2)
{
if ((sis_at::pd>0)&&(workshop::crediti>commercio::pd.val_compra))
{
sis_at::pd--;
astronave::pd++;
workshop::crediti-=commercio::pd.val_compra;
}
}
commercio::vendi_os.Crea(screen ,&evento);
if (commercio::vendi_os.Get_state()==2)
{
if (astronave::os>0)
{
sis_at::os++;
astronave::os--;
workshop::crediti+=commercio::os.val_vendi;
}
}
commercio::compra_os.Crea(screen ,&evento);
if (commercio::compra_os.Get_state()==2)
{
if ((sis_at::os>0)&&(workshop::crediti>commercio::os.val_compra))
{
sis_at::os--;
astronave::os++;
workshop::crediti-=commercio::os.val_compra;
}
}
commercio::vendi_ar.Crea(screen ,&evento);
if (commercio::vendi_ar.Get_state()==2)
{
if (astronave::ar>0)
{
sis_at::ar++;
astronave::ar--;
workshop::crediti+=commercio::ar.val_vendi;
}
}
commercio::compra_ar.Crea(screen ,&evento);
if (commercio::compra_ar.Get_state()==2)
{
if ((sis_at::ar>0)&&(workshop::crediti>commercio::ar.val_compra))
{
sis_at::ar--;
astronave::ar++;
workshop::crediti-=commercio::ar.val_compra;
}
}
/////////Fine.
return valore_ritorno;
}