|
|
|
@ -1,3 +1,4 @@ |
|
|
|
#/usr/bin/python |
|
|
|
from json.decoder import JSONDecodeError |
|
|
|
import json |
|
|
|
import re |
|
|
|
@ -21,9 +22,8 @@ def from_dict(d): |
|
|
|
global ITEMS |
|
|
|
ITEMS[name] = instance |
|
|
|
|
|
|
|
def to_json(): |
|
|
|
global ITEMS |
|
|
|
if ITEMS: |
|
|
|
def to_json(init=False): |
|
|
|
if not init: |
|
|
|
ret = list(map(to_dict,ITEMS.values())) |
|
|
|
with open('__cache__','w') as file: |
|
|
|
json.dump(ret,file) |
|
|
|
@ -124,23 +124,23 @@ class complex_item(item): |
|
|
|
self.naive_complexity = False |
|
|
|
return len(self.all_sub) |
|
|
|
|
|
|
|
def get_raw_material_cost(self,ret = {}): |
|
|
|
def get_raw_material_cost(self,numb=1,ret = {}): |
|
|
|
for name,count in self.sub_components.items(): |
|
|
|
component = ITEMS[name] |
|
|
|
if isinstance(component,raw_material): |
|
|
|
prev = ret.get(name,0) |
|
|
|
ret[name] = prev + count |
|
|
|
ret[name] = prev + count*numb |
|
|
|
elif isinstance(component,complex_item): |
|
|
|
component.get_raw_material_cost(ret) |
|
|
|
component.get_raw_material_cost(count*numb,ret) |
|
|
|
return ret |
|
|
|
|
|
|
|
def get_component_cost(self,ret = {}): |
|
|
|
def get_component_cost(self,numb=1,ret = {}): |
|
|
|
for name,count in self.sub_components.items(): |
|
|
|
component = ITEMS[name] |
|
|
|
if isinstance(component,complex_item): |
|
|
|
prev = ret.get(name,0) |
|
|
|
ret[name] = prev + count |
|
|
|
component.get_component_cost(ret) |
|
|
|
ret[name] = prev + count*numb |
|
|
|
component.get_component_cost(count*numb,ret) |
|
|
|
return ret |
|
|
|
|
|
|
|
def get_build_info(self): |
|
|
|
@ -149,18 +149,22 @@ class complex_item(item): |
|
|
|
build_order = component_view.items() |
|
|
|
build_order = sorted(build_order,key = lambda item: ITEMS[item[0]].complexity) |
|
|
|
return material_view,build_order |
|
|
|
def main(): |
|
|
|
def main(args): |
|
|
|
print(args) |
|
|
|
import argparse |
|
|
|
import os |
|
|
|
parser = argparse.ArgumentParser() |
|
|
|
parser.add_argument('query') |
|
|
|
args = parser.parse_args(args) |
|
|
|
if not os.path.exists('__cache__'): |
|
|
|
to_json() |
|
|
|
to_json(init=True) |
|
|
|
try: |
|
|
|
from_json() |
|
|
|
except JSONDecodeError: |
|
|
|
to_json() |
|
|
|
to_json(init=True) |
|
|
|
from_json() |
|
|
|
name = sys.argv[1] |
|
|
|
recursive_fill_in(name) |
|
|
|
print(*ITEMS[name].get_build_info(),sep='\n') |
|
|
|
recursive_fill_in(args.query) |
|
|
|
print(*ITEMS[args.query].get_build_info(),sep='\n') |
|
|
|
to_json() |
|
|
|
if __name__ == "__main__": |
|
|
|
main() |
|
|
|
main(sys.argv[1:]) |