1 #include "trade_route.h"
2
3 #define MAX_ROUTES 20
4
5 struct route_resource {
6 int limit;
7 int traded;
8 };
9
10 static struct route_resource data[MAX_ROUTES][RESOURCE_MAX];
11
trade_route_init(int route_id,resource_type resource,int limit)12 void trade_route_init(int route_id, resource_type resource, int limit)
13 {
14 data[route_id][resource].limit = limit;
15 data[route_id][resource].traded = 0;
16 }
17
trade_route_limit(int route_id,resource_type resource)18 int trade_route_limit(int route_id, resource_type resource)
19 {
20 return data[route_id][resource].limit;
21 }
22
trade_route_traded(int route_id,resource_type resource)23 int trade_route_traded(int route_id, resource_type resource)
24 {
25 return data[route_id][resource].traded;
26 }
27
trade_route_increase_limit(int route_id,resource_type resource)28 int trade_route_increase_limit(int route_id, resource_type resource)
29 {
30 switch (data[route_id][resource].limit) {
31 case 0: data[route_id][resource].limit = 15; break;
32 case 15: data[route_id][resource].limit = 25; break;
33 case 25: data[route_id][resource].limit = 40; break;
34 default: return 0;
35 }
36 return 1;
37 }
38
trade_route_decrease_limit(int route_id,resource_type resource)39 int trade_route_decrease_limit(int route_id, resource_type resource)
40 {
41 switch (data[route_id][resource].limit) {
42 case 40: data[route_id][resource].limit = 25; break;
43 case 25: data[route_id][resource].limit = 15; break;
44 case 15: data[route_id][resource].limit = 0; break;
45 default: return 0;
46 }
47 return 1;
48 }
49
trade_route_increase_traded(int route_id,resource_type resource)50 void trade_route_increase_traded(int route_id, resource_type resource)
51 {
52 data[route_id][resource].traded++;
53 }
54
trade_route_reset_traded(int route_id)55 void trade_route_reset_traded(int route_id)
56 {
57 for (int r = RESOURCE_MIN; r < RESOURCE_MAX; r++) {
58 data[route_id][r].traded = 0;
59 }
60 }
61
trade_route_limit_reached(int route_id,resource_type resource)62 int trade_route_limit_reached(int route_id, resource_type resource)
63 {
64 return data[route_id][resource].traded >= data[route_id][resource].limit;
65 }
66
trade_routes_save_state(buffer * limit,buffer * traded)67 void trade_routes_save_state(buffer *limit, buffer *traded)
68 {
69 for (int route_id = 0; route_id < MAX_ROUTES; route_id++) {
70 for (int r = 0; r < RESOURCE_MAX; r++) {
71 buffer_write_i32(limit, data[route_id][r].limit);
72 buffer_write_i32(traded, data[route_id][r].traded);
73 }
74 }
75 }
76
trade_routes_load_state(buffer * limit,buffer * traded)77 void trade_routes_load_state(buffer *limit, buffer *traded)
78 {
79 for (int route_id = 0; route_id < MAX_ROUTES; route_id++) {
80 for (int r = 0; r < RESOURCE_MAX; r++) {
81 data[route_id][r].limit = buffer_read_i32(limit);
82 data[route_id][r].traded = buffer_read_i32(traded);
83 }
84 }
85 }
86