[Add] Planets now have commodities. Nothing can be done with them yet ;)

This commit is contained in:
Allanis 2013-03-16 21:13:21 +00:00
parent 4f0420d82f
commit aa4112f2df
5 changed files with 47 additions and 5 deletions

View File

@ -14,7 +14,10 @@
<tech> <tech>
<main>3</main> <main>3</main>
</tech> </tech>
<commodities>1</commodities> <commodities>
<commodity>Food</commodity>
<commodity>Ore</commodity>
</commodities>
</general> </general>
<GFX> <GFX>
<space>konosphere.png</space> <space>konosphere.png</space>
@ -35,7 +38,10 @@
<tech> <tech>
<main>4</main> <main>4</main>
</tech> </tech>
<commodities>1</commodities> <commodities>
<commodity>Food</commodity>
<commodity>Ore</commodity>
</commodities>
</general> </general>
<GFX> <GFX>
<space>saracraft.png</space> <space>saracraft.png</space>
@ -56,7 +62,9 @@
<tech> <tech>
<main>5</main> <main>5</main>
</tech> </tech>
<commodities>1</commodities> <commodities>
<commodity>Food</commodity>
</commodities>
</general> </general>
<GFX> <GFX>
<space>station00.png</space> <space>station00.png</space>

View File

@ -33,6 +33,17 @@ void credits2str(char* str, unsigned int credits, int decimals) {
else snprintf(str, 16, "%d", credits); else snprintf(str, 16, "%d", credits);
} }
// Get a commodity.
Commodity* commodity_get(const char* name) {
int i;
for(i = 0; i < commodity_nstack; i++)
if(strcmp(commodity_stack[i].name, name)==0)
return &commodity_stack[i];
WARN("Commodity '%s' not found in stack", name);
return NULL;
}
// Free a commodity. // Free a commodity.
static void commodity_freeOne(Commodity* com) { static void commodity_freeOne(Commodity* com) {
if(com->name) free(com->name); if(com->name) free(com->name);

View File

@ -69,16 +69,22 @@ static void news_close(char* str);
// The local market. // The local market.
static void commodity_exchange(void) { static void commodity_exchange(void) {
int i;
char** goods;
secondary_wid = window_create("Commodity Exchange", -1, -1, secondary_wid = window_create("Commodity Exchange", -1, -1,
COMMODITY_WIDTH, COMMODITY_HEIGHT); COMMODITY_WIDTH, COMMODITY_HEIGHT);
window_addButton(secondary_wid, -20, 20, window_addButton(secondary_wid, -20, 20,
BUTTON_WIDTH, BUTTON_HEIGHT, "btnCommodityClose", BUTTON_WIDTH, BUTTON_HEIGHT, "btnCommodityClose",
"Close", commodity_exchange_close); "Close", commodity_exchange_close);
goods = malloc(sizeof(char*)*planet->ncommodities);
for(i = 0; i < planet->ncommodities; i++)
goods[i] = strdup(planet->commodities[i]->name);
window_addList(secondary_wid, 20, -40, window_addList(secondary_wid, 20, -40,
COMMODITY_WIDTH-30, COMMODITY_HEIGHT-80-BUTTON_HEIGHT, 100, COMMODITY_HEIGHT-80-BUTTON_HEIGHT,
"lstGoods", NULL, 0, 0, NULL); "lstGoods", goods, planet->ncommodities, 0, NULL);
} }
static void commodity_exchange_close(char* str) { static void commodity_exchange_close(char* str) {

View File

@ -391,6 +391,18 @@ static Planet* planet_get(const char* name) {
} }
} while((ccur = ccur->next)); } while((ccur = ccur->next));
} }
else if(xml_isNode(cur, "commodities")) {
ccur = cur->children;
do {
if(xml_isNode(ccur, "commodity")) {
tmp->commodities = realloc(tmp->commodities,
(tmp->ncommodities+1) * sizeof(Commodity*));
tmp->commodities[tmp->ncommodities] =
commodity_get(xml_get(ccur));
tmp->ncommodities++;
}
} while((ccur = ccur->next));
}
} while((cur = cur->next)); } while((cur = cur->next));
} }
} while((node = node->next)); } while((node = node->next));
@ -418,6 +430,8 @@ static Planet* planet_get(const char* name) {
MELEMENT((planet_hasService(tmp, PLANET_SERVICE_OUTFITS) || MELEMENT((planet_hasService(tmp, PLANET_SERVICE_OUTFITS) ||
planet_hasService(tmp, PLANET_SERVICE_SHIPYARD)) && planet_hasService(tmp, PLANET_SERVICE_SHIPYARD)) &&
(flags&FLAG_TECHSET)==0, "tech"); (flags&FLAG_TECHSET)==0, "tech");
MELEMENT(planet_hasService(tmp, PLANET_SERVICE_COMMODITY) &&
(tmp->ncommodities==0), "commodity");
#undef MELEMENT #undef MELEMENT
} else } else
WARN("No planet found matching name '%s'", name); WARN("No planet found matching name '%s'", name);

View File

@ -1,6 +1,7 @@
#pragma once #pragma once
#include "faction.h" #include "faction.h"
#include "opengl.h" #include "opengl.h"
#include "economy.h"
#include "pilot.h" #include "pilot.h"
#define MIN_HYPERSPACE_DIST 1500 #define MIN_HYPERSPACE_DIST 1500
@ -55,6 +56,8 @@ typedef struct Planet_ {
char* description; // Planet description. char* description; // Planet description.
char* bar_description; // Spaceport bar description. char* bar_description; // Spaceport bar description.
unsigned int services; // Offered services. unsigned int services; // Offered services.
Commodity** commodities; // Commodities sold.
int ncommodities; // Amount in stock.
// tech[0] stores global tech level (everything that and below) while // tech[0] stores global tech level (everything that and below) while
// tech[1-PLANET_TECH_MAX] stores the unique tech levels. // tech[1-PLANET_TECH_MAX] stores the unique tech levels.