/
economy.py
40 lines (36 loc) · 1.91 KB
/
economy.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
import utils
from economies import registered_economies
class Economy(object):
""" class to hold economies, this comment is pointless eh? """
def __init__(self, id, **kwargs):
self.id = id
self.numeric_id = kwargs.get('numeric_id')
self.cargo_ids = kwargs.get('cargos')
def register(self):
# guard, duplicate numeric IDs don't work :P
for economy in registered_economies:
if self.numeric_id == economy.numeric_id:
raise Exception("Economy " + self.id + " has same numeric ID as economy " + economy.id)
registered_economies.append(self)
def forcibly_space_cargo_price_factors(self, registered_cargos):
# check for overlapping price factors (and adjust if necessary) to ensure they're all unique per economy
# prevents cargos overlapping on the payment curves chart in-game
# designed to be called from template, easiest way to ensure registered_cargos is in scope and complete
cargos_by_price_factor = []
for cargo_id in self.cargo_ids:
for cargo in registered_cargos:
if cargo_id == cargo.id:
cargos_by_price_factor.append(cargo)
cargos_by_price_factor = sorted(cargos_by_price_factor, key=lambda cargo: cargo.price_factor)
result = {}
for counter, cargo in enumerate(cargos_by_price_factor):
if counter > 0:
previous_cargo = cargos_by_price_factor[counter - 1]
if result[previous_cargo.id] >= cargo.price_factor:
utils.echo_message('Cargo ' + cargo.id + ' has overlapping price_factor with ' + previous_cargo.id + ' in economy ' + self.id)
result[cargo.id] = result[previous_cargo.id] + 1
else:
result[cargo.id] = cargo.price_factor
else:
result[cargo.id] = cargo.price_factor
return result