1 #include "trade_prices.h"
2 
3 struct trade_price {
4     int32_t buy;
5     int32_t sell;
6 };
7 
8 static const struct trade_price DEFAULT_PRICES[RESOURCE_MAX] = {
9     {0, 0}, {28, 22}, {38, 30}, {38, 30}, // wheat, vegetables, fruit
10     {42, 34}, {44, 36}, {44, 36}, {215, 160}, // olives, vines, meat, wine
11     {180, 140}, {60, 40}, {50, 35}, {40, 30}, // oil, iron, timber, clay
12     {200, 140}, {250, 180}, {200, 150}, {180, 140} // marble, weapons, furniture, pottery
13 };
14 
15 static struct trade_price prices[RESOURCE_MAX];
16 
trade_prices_reset(void)17 void trade_prices_reset(void)
18 {
19     for (int i = 0; i < RESOURCE_MAX; i++) {
20         prices[i] = DEFAULT_PRICES[i];
21     }
22 }
23 
trade_price_buy(resource_type resource)24 int trade_price_buy(resource_type resource)
25 {
26     return prices[resource].buy;
27 }
28 
trade_price_sell(resource_type resource)29 int trade_price_sell(resource_type resource)
30 {
31     return prices[resource].sell;
32 }
33 
trade_price_change(resource_type resource,int amount)34 int trade_price_change(resource_type resource, int amount)
35 {
36     if (amount < 0 && prices[resource].sell <= 0) {
37         // cannot lower the price to negative
38         return 0;
39     }
40     if (amount < 0 && prices[resource].sell <= -amount) {
41         prices[resource].buy = 2;
42         prices[resource].sell = 0;
43     } else {
44         prices[resource].buy += amount;
45         prices[resource].sell += amount;
46     }
47     return 1;
48 }
49 
trade_prices_save_state(buffer * buf)50 void trade_prices_save_state(buffer *buf)
51 {
52     for (int i = 0; i < RESOURCE_MAX; i++) {
53         buffer_write_i32(buf, prices[i].buy);
54         buffer_write_i32(buf, prices[i].sell);
55     }
56 }
57 
trade_prices_load_state(buffer * buf)58 void trade_prices_load_state(buffer *buf)
59 {
60     for (int i = 0; i < RESOURCE_MAX; i++) {
61         prices[i].buy = buffer_read_i32(buf);
62         prices[i].sell = buffer_read_i32(buf);
63     }
64 }
65