[Add] Buy/Sell cargo.
This commit is contained in:
		
							parent
							
								
									8a375a58e1
								
							
						
					
					
						commit
						91e68ee828
					
				
							
								
								
									
										50
									
								
								src/land.c
									
									
									
									
									
								
							
							
						
						
									
										50
									
								
								src/land.c
									
									
									
									
									
								
							@ -46,6 +46,8 @@ static Planet* planet = NULL;
 | 
				
			|||||||
// Commodity excahnge.
 | 
					// Commodity excahnge.
 | 
				
			||||||
static void commodity_exchange(void);
 | 
					static void commodity_exchange(void);
 | 
				
			||||||
static void commodity_exchange_close(char* str);
 | 
					static void commodity_exchange_close(char* str);
 | 
				
			||||||
 | 
					static void commodity_buy(char* str);
 | 
				
			||||||
 | 
					static void commodity_sell(char* str);
 | 
				
			||||||
// Outfits.
 | 
					// Outfits.
 | 
				
			||||||
static void outfits(void);
 | 
					static void outfits(void);
 | 
				
			||||||
static void outfits_close(char* str);
 | 
					static void outfits_close(char* str);
 | 
				
			||||||
@ -78,12 +80,20 @@ static void commodity_exchange(void) {
 | 
				
			|||||||
        BUTTON_WIDTH, BUTTON_HEIGHT, "btnCommodityClose",
 | 
					        BUTTON_WIDTH, BUTTON_HEIGHT, "btnCommodityClose",
 | 
				
			||||||
        "Close", commodity_exchange_close);
 | 
					        "Close", commodity_exchange_close);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						window_addButton(secondary_wid, -40-((BUTTON_WIDTH-20)/2), 20*2+BUTTON_HEIGHT,
 | 
				
			||||||
 | 
										(BUTTON_WIDTH-20)/2, BUTTON_HEIGHT, "btnCommodityBuy",
 | 
				
			||||||
 | 
										"Buy", commodity_buy);
 | 
				
			||||||
 | 
						
 | 
				
			||||||
 | 
						window_addButton(secondary_wid, -20, 20*2+BUTTON_HEIGHT,
 | 
				
			||||||
 | 
										(BUTTON_WIDTH-20)/2, BUTTON_HEIGHT, "btnCommoditySell",
 | 
				
			||||||
 | 
										"Sell", commodity_buy);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	goods = malloc(sizeof(char*)*planet->ncommodities);
 | 
						goods = malloc(sizeof(char*)*planet->ncommodities);
 | 
				
			||||||
	for(i = 0; i < planet->ncommodities; i++)
 | 
						for(i = 0; i < planet->ncommodities; i++)
 | 
				
			||||||
		goods[i] = strdup(planet->commodities[i]->name);
 | 
							goods[i] = strdup(planet->commodities[i]->name);
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	window_addList(secondary_wid, 20, -40,
 | 
						window_addList(secondary_wid, 20, -40,
 | 
				
			||||||
				100, COMMODITY_HEIGHT-80-BUTTON_HEIGHT,
 | 
									COMMODITY_WIDTH-BUTTON_WIDTH-60, COMMODITY_HEIGHT-80-BUTTON_HEIGHT,
 | 
				
			||||||
				"lstGoods", goods, planet->ncommodities, 0, NULL);
 | 
									"lstGoods", goods, planet->ncommodities, 0, NULL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -92,6 +102,44 @@ static void commodity_exchange_close(char* str) {
 | 
				
			|||||||
    window_destroy(secondary_wid);
 | 
					    window_destroy(secondary_wid);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void commodity_buy(char* str) {
 | 
				
			||||||
 | 
						(void)str;
 | 
				
			||||||
 | 
						char* comname;
 | 
				
			||||||
 | 
						Commodity* com;
 | 
				
			||||||
 | 
						int q;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						q = 10;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						comname = toolkit_getList(secondary_wid, "lstGoods");
 | 
				
			||||||
 | 
						com = commodity_get(comname);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if(player_credits <= q * com->medium) {
 | 
				
			||||||
 | 
							toolkit_alert("Not enough Scred!");
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if(player->cargo_free <= 0) {
 | 
				
			||||||
 | 
							toolkit_alert("not enough free space!");
 | 
				
			||||||
 | 
							return;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						q = pilot_addCargo(player, com, q);
 | 
				
			||||||
 | 
						player_credits -= q * com->medium;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void commodity_sell(char* str) {
 | 
				
			||||||
 | 
						(void)str;
 | 
				
			||||||
 | 
						char* comname;
 | 
				
			||||||
 | 
						Commodity* com;
 | 
				
			||||||
 | 
						int q;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						q = 10;
 | 
				
			||||||
 | 
						comname = toolkit_getList(secondary_wid, "lstGoods");
 | 
				
			||||||
 | 
						com = commodity_get(comname);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						q = pilot_rmCargo(player, com, q);
 | 
				
			||||||
 | 
						player_credits += q * com->medium;
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static void outfits(void) {
 | 
					static void outfits(void) {
 | 
				
			||||||
	char** outfits;
 | 
						char** outfits;
 | 
				
			||||||
	int noutfits;
 | 
						int noutfits;
 | 
				
			||||||
 | 
				
			|||||||
@ -500,7 +500,7 @@ int pilot_addCargo(Pilot* pilot, Commodity* cargo, int quantity) {
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Must add another one.
 | 
						// Must add another one.
 | 
				
			||||||
	pilot->commodities = realloc(pilot->commodities,
 | 
						pilot->commodities = realloc(pilot->commodities,
 | 
				
			||||||
				sizeof(PilotCommodity) * pilot->ncommodities);
 | 
									sizeof(PilotCommodity) * (pilot->ncommodities+1));
 | 
				
			||||||
	pilot->commodities[pilot->ncommodities].commodity = cargo;
 | 
						pilot->commodities[pilot->ncommodities].commodity = cargo;
 | 
				
			||||||
	if(pilot->cargo_free < quantity)
 | 
						if(pilot->cargo_free < quantity)
 | 
				
			||||||
		q = pilot->cargo_free;
 | 
							q = pilot->cargo_free;
 | 
				
			||||||
@ -519,7 +519,7 @@ int pilot_rmCargo(Pilot* pilot, Commodity* cargo, int quantity) {
 | 
				
			|||||||
	q = quantity;
 | 
						q = quantity;
 | 
				
			||||||
	for(i = 0; i < pilot->ncommodities; i++)
 | 
						for(i = 0; i < pilot->ncommodities; i++)
 | 
				
			||||||
		if(pilot->commodities[i].commodity == cargo) {
 | 
							if(pilot->commodities[i].commodity == cargo) {
 | 
				
			||||||
			if(quantity > pilot->commodities[i].quantity) {
 | 
								if(quantity >= pilot->commodities[i].quantity) {
 | 
				
			||||||
				q = pilot->commodities[i].quantity;
 | 
									q = pilot->commodities[i].quantity;
 | 
				
			||||||
				
 | 
									
 | 
				
			||||||
				// Remove cargo.
 | 
									// Remove cargo.
 | 
				
			||||||
@ -535,10 +535,7 @@ int pilot_rmCargo(Pilot* pilot, Commodity* cargo, int quantity) {
 | 
				
			|||||||
			return q;
 | 
								return q;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	
 | 
						
 | 
				
			||||||
	WARN("Trying to remove %d cargo '%s' from pilot '%s' when it doesn't exist",
 | 
						return 0;
 | 
				
			||||||
				quantity, cargo->name, pilot->name);
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
	return -1;
 | 
					 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
// ==Init pilot.===========================================
 | 
					// ==Init pilot.===========================================
 | 
				
			||||||
 | 
				
			|||||||
@ -493,7 +493,7 @@ void player_render(void) {
 | 
				
			|||||||
	
 | 
						
 | 
				
			||||||
	// Cargo and co.
 | 
						// Cargo and co.
 | 
				
			||||||
	if(player->ncommodities > 0) {
 | 
						if(player->ncommodities > 0) {
 | 
				
			||||||
		j -= gl_smallFont.h - 5;
 | 
							j -= gl_smallFont.h + 5;
 | 
				
			||||||
		gl_print(&gl_smallFont,
 | 
							gl_print(&gl_smallFont,
 | 
				
			||||||
					gui.misc.x + 8, j, &cConsole, "Cargo");
 | 
										gui.misc.x + 8, j, &cConsole, "Cargo");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user