[Add] Use shift/control modifiers to purchase more outfits at a time.
This commit is contained in:
parent
eeb09fdf05
commit
37862dbf3c
47
src/land.c
47
src/land.c
@ -50,6 +50,8 @@ static void outfits_close(char* str);
|
|||||||
static void outfits_update(char* str);
|
static void outfits_update(char* str);
|
||||||
static void outfits_buy(char* str);
|
static void outfits_buy(char* str);
|
||||||
static void outfits_sell(char* str);
|
static void outfits_sell(char* str);
|
||||||
|
static int outfits_getMod(void);
|
||||||
|
static void outfits_renderMod(double bx, double by, double w, double h);
|
||||||
// Shipyard.
|
// Shipyard.
|
||||||
static void shipyard(void);
|
static void shipyard(void);
|
||||||
static void shipyard_close(char* str);
|
static void shipyard_close(char* str);
|
||||||
@ -108,6 +110,9 @@ static void outfits(void) {
|
|||||||
BUTTON_WIDTH, BUTTON_HEIGHT, "btnSellOutfit",
|
BUTTON_WIDTH, BUTTON_HEIGHT, "btnSellOutfit",
|
||||||
"Sell", outfits_sell);
|
"Sell", outfits_sell);
|
||||||
|
|
||||||
|
window_addCust(secondary_wid, -40-BUTTON_WIDTH, 60+2*BUTTON_HEIGHT,
|
||||||
|
BUTTON_WIDTH, BUTTON_HEIGHT, "cstMod", outfits_renderMod);
|
||||||
|
|
||||||
window_addText(secondary_wid, 40+200+20, -60,
|
window_addText(secondary_wid, 40+200+20, -60,
|
||||||
80, 96, 0, "txtSDesc", &gl_smallFont, &cDConsole,
|
80, 96, 0, "txtSDesc", &gl_smallFont, &cDConsole,
|
||||||
"Name:\n"
|
"Name:\n"
|
||||||
@ -178,11 +183,12 @@ static void outfits_buy(char* str) {
|
|||||||
char* outfitname;
|
char* outfitname;
|
||||||
Outfit* outfit;
|
Outfit* outfit;
|
||||||
int q;
|
int q;
|
||||||
|
char buf[16];
|
||||||
|
|
||||||
outfitname = toolkit_getList(secondary_wid, "lstOutfits");
|
outfitname = toolkit_getList(secondary_wid, "lstOutfits");
|
||||||
outfit = outfit_get(outfitname);
|
outfit = outfit_get(outfitname);
|
||||||
|
|
||||||
q = 1; // Q should be dependant on MOD keys. TODO
|
q = outfits_getMod();
|
||||||
|
|
||||||
if((player_freeSpace() - outfit->mass) < 0) {
|
if((player_freeSpace() - outfit->mass) < 0) {
|
||||||
toolkit_alert("No enough free space (you need %d more slots).",
|
toolkit_alert("No enough free space (you need %d more slots).",
|
||||||
@ -195,7 +201,13 @@ static void outfits_buy(char* str) {
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
pilot_addOutfit(player, outfit, q);
|
else if(1*(int)outfit->price >= player_credits) {
|
||||||
|
credits2str(buf, q*outfit->price - player_credits, 2);
|
||||||
|
toolkit_alert("You need %s more SCred.", buf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
player_credits -= outfit->price * pilot_addOutfit(player, outfit, q);
|
||||||
outfits_update(NULL);
|
outfits_update(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -207,7 +219,8 @@ static void outfits_sell(char* str) {
|
|||||||
|
|
||||||
outfitname = toolkit_getList(secondary_wid, "lstOutfits");
|
outfitname = toolkit_getList(secondary_wid, "lstOutfits");
|
||||||
outfit = outfit_get(outfitname);
|
outfit = outfit_get(outfitname);
|
||||||
q = 1;
|
|
||||||
|
q = outfits_getMod();
|
||||||
|
|
||||||
if(player_outfitOwned(outfitname) <= 0) {
|
if(player_outfitOwned(outfitname) <= 0) {
|
||||||
// No outfits to sell.
|
// No outfits to sell.
|
||||||
@ -219,6 +232,34 @@ static void outfits_sell(char* str) {
|
|||||||
outfits_update(NULL);
|
outfits_update(NULL);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Return the current modifier status.
|
||||||
|
static int outfits_getMod(void) {
|
||||||
|
SDLMod mods;
|
||||||
|
int q;
|
||||||
|
|
||||||
|
mods = SDL_GetModState();
|
||||||
|
q = 1;
|
||||||
|
if(mods & (KMOD_LCTRL | KMOD_RCTRL)) q *= 5;
|
||||||
|
if(mods & (KMOD_LSHIFT | KMOD_RSHIFT)) q *= 10;
|
||||||
|
|
||||||
|
return q;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void outfits_renderMod(double bx, double by, double w, double h) {
|
||||||
|
(void) h;
|
||||||
|
int q;
|
||||||
|
char buf[8];
|
||||||
|
|
||||||
|
q = outfits_getMod();
|
||||||
|
if(q == 1) return;
|
||||||
|
|
||||||
|
snprintf(buf, 8, "%dx", q);
|
||||||
|
gl_printMid(&gl_smallFont, w,
|
||||||
|
bx + (double)gl_screen.w/2.,
|
||||||
|
by + (double)gl_screen.h/2.,
|
||||||
|
&cBlack, buf);
|
||||||
|
}
|
||||||
|
|
||||||
static void shipyard(void) {
|
static void shipyard(void) {
|
||||||
char** ships;
|
char** ships;
|
||||||
int nships;
|
int nships;
|
||||||
|
@ -64,7 +64,7 @@ typedef struct Widget_ {
|
|||||||
} rct;
|
} rct;
|
||||||
// Widget cust.
|
// Widget cust.
|
||||||
struct {
|
struct {
|
||||||
void(*render) (double bx, double by);
|
void(*render) (double bx, double by, double bw, double bh);
|
||||||
} cst;
|
} cst;
|
||||||
} dat;
|
} dat;
|
||||||
} Widget;
|
} Widget;
|
||||||
@ -240,7 +240,8 @@ void window_addRect(const unsigned int wid, const int x, const int y, const int
|
|||||||
}
|
}
|
||||||
|
|
||||||
void window_addCust(const unsigned int wid, const int x, const int y,
|
void window_addCust(const unsigned int wid, const int x, const int y,
|
||||||
const int w, const int h, char* name, void(*render) (double x, double y)) {
|
const int w, const int h, char* name,
|
||||||
|
void(*render) (double x, double y, double w, double h)) {
|
||||||
|
|
||||||
Window* wdw = window_wget(wid);
|
Window* wdw = window_wget(wid);
|
||||||
Widget* wgt = window_newWidget(wdw);
|
Widget* wgt = window_newWidget(wdw);
|
||||||
@ -658,7 +659,9 @@ static void window_render(Window* w) {
|
|||||||
toolkit_renderRect(&w->widgets[i], x, y);
|
toolkit_renderRect(&w->widgets[i], x, y);
|
||||||
break;
|
break;
|
||||||
case WIDGET_CUST:
|
case WIDGET_CUST:
|
||||||
(*w->widgets[i].dat.cst.render)(x, y);
|
(*w->widgets[i].dat.cst.render)
|
||||||
|
(x+w->widgets[i].x, y+w->widgets[i].y,
|
||||||
|
w->widgets[i].w, w->widgets[i].h);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -33,7 +33,8 @@ void window_addRect(const unsigned int wid,
|
|||||||
void window_addCust(const unsigned int wid,
|
void window_addCust(const unsigned int wid,
|
||||||
const int x, const int y, // Position.
|
const int x, const int y, // Position.
|
||||||
const int w, const int h, // Size.
|
const int w, const int h, // Size.
|
||||||
char* name, void(*render) (double x, double y));
|
char* name,
|
||||||
|
void(*render) (double x, double y, double w, double h));
|
||||||
|
|
||||||
// Popups and alerts.
|
// Popups and alerts.
|
||||||
void toolkit_alert(const char* fmt, ...);
|
void toolkit_alert(const char* fmt, ...);
|
||||||
|
Loading…
Reference in New Issue
Block a user