Old revision #p2pn4keww | New revision #pempnuqzd | ||
---|---|---|---|
2 | { | 2 | { |
3 | /* Return if nothing to do. Also the rounding below fails for 0. */ | 3 | /* Return if nothing to do. Also the rounding below fails for 0. */ |
4 | if (amount == 0) return 0; | 4 | if (amount == 0) return 0; |
5 | |||
6 | Station *st1 = NULL; // Station with best rating | 5 | Station *st1 = NULL; // Station with best rating |
7 | Station *st2 = NULL; // Second best station | 6 | Station *st2 = NULL; // Second best station |
8 | Station *st3 = NULL; // Third best station | 7 | Station *st3 = NULL; // Third best station | … | … |
86 | * this calculation. In reality that will mean the bonus will be pretty low. | 85 | * this calculation. In reality that will mean the bonus will be pretty low. |
87 | * Nevertheless, the best station should always get the most cargo regardless | 86 | * Nevertheless, the best station should always get the most cargo regardless |
88 | * of rounding issues. */ | 87 | * of rounding issues. */ |
89 | uint worst_cargo = amount * best_rating2 / (best_rating1 + best_rating2); | 88 | uint cargo_st2 = amount * best_rating2 / (best_rating1 + best_rating2); |
90 | assert(worst_cargo <= (amount - worst_cargo)); | 89 | assert(cargo_st2 <= (amount - cargo_st2)); |
91 | 90 | ||
92 | /* And then send the cargo to the stations! */ | 91 | uint cargo_st1 = amount - cargo_st2; |
93 | uint moved = UpdateStationWaiting(st1, type, amount - worst_cargo, source_type, source_id); | 92 | assert(amount = cargo_st1 + cargo_st2); |
93 | |||
94 | /* And then send the cargo to the stations! */ | ||
95 | uint moved = UpdateStationWaiting(st1, type, cargo_st1, source_type, source_id); | ||
94 | /* These two UpdateStationWaiting's can't be in the statement as then the order | 96 | /* These two UpdateStationWaiting's can't be in the statement as then the order |
95 | * of execution would be undefined and that could cause desyncs with callbacks. */ | 97 | * of execution would be undefined and that could cause desyncs with callbacks. */ |
96 | return moved + UpdateStationWaiting(st2, type, | 96 | return moved + UpdateStationWaiting(st2, type, cargo_st2, source_type, source_id); |
97 | } | 99 | } |
98 | 100 | ||
99 | if (st4 == NULL) { | 101 | if (st4 == NULL) { | … | … |
159 | } | 161 | } |
160 | 162 | ||
161 | if (st6 == NULL) { | 163 | if (st6 == NULL) { |
162 | /* Five stations around, the best five (highest rating) are in st1, st2, st3, st4 and st5 | 162 | /* Five stations around, the best five (highest rating) are in st1, st2, st3, st4 and st5 */ |
163 | assert(st1 != NULL); | 165 | assert(st1 != NULL); |
164 | assert(st2 != NULL); | 166 | assert(st2 != NULL); |
165 | assert(st3 != NULL); | 167 | assert(st3 != NULL); |