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