import json class SegmentWriter: segment_length = 6 item_template = """ {{ "resourceName": "{}", "levelName": "", "pathName": "", "position": 1}}""" def __init__(self, name, path, save_json): self.name = name self.path = path self.element = None for actor in save_json["actors"]: if actor["pathName"] == self.path: self.element = actor break def write(self, item, times=1): item_templates = [json.loads(self.item_template.format(item)) for i in range(self.segment_length * times)] self.element["entity"]["extra"]["items"].extend(item_templates) class NumberWriter: segment_names = ["a","b","c","d","e","f","g"] # the number 0 is the 0th element and so on # each element is a bitstring of len(segment_names) # 1 means lit and 0 means off # most -> least significant is g -> a segment_lighting = [0x3F, 0x06, 0x5B, 0x4F, 0x66, 0x6D, 0x7D, 0x07, 0x7F, 0x6F] """ conveyor_names is a mapping of segment names (a,b,c,d,e,f, g) to conveyor path names """ def __init__(self, conveyor_names, save_json, on_item="", off_item=""): self.on_item = on_item self.off_item = off_item self.segments_by_name = {} for segment_name in self.segment_names: self.segments_by_name[segment_name] = SegmentWriter(segment_name, conveyor_names[segment_name], save_json) def write_number(self, number, times=1): for i, segment_name in enumerate(self.segment_names): segment = self.segments_by_name[segment_name] is_segment_lit = bool((0x01 << i) & self.segment_lighting[number]) if is_segment_lit: segment.write(self.on_item, times) else: segment.write(self.off_item, times) def write_off(self, times=1): for segment_name in self.segment_names: self.segments_by_name[segment_name].write(self.off_item, times) h_tens_conveyor_names = { "a" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_444", "b" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_431", "c" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_437", "d" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_448", "e" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_435", "f" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_427", "g" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_441" } h_ones_conveyor_names = { "a" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_508", "b" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_495", "c" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_501", "d" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_512", "e" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_499", "f" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_491", "g" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_505" } m_tens_conveyor_names = { "a" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_572", "b" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_559", "c" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_565", "d" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_576", "e" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_563", "f" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_555", "g" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_569" } m_ones_conveyor_names = { "a" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_636", "b" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_623", "c" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_629", "d" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_640", "e" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_627", "f" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_619", "g" : "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_633" } lower_dot = "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_404" upper_dot = "Persistent_Level:PersistentLevel.Build_ConveyorBeltMk1_C_420" display_numbers = [h_tens_conveyor_names, h_ones_conveyor_names, m_tens_conveyor_names, m_ones_conveyor_names] turbo_fuel = "/Game/FactoryGame/Resource/Parts/Turbofuel/Desc_TurboFuel.Desc_TurboFuel_C" coal = "/Game/FactoryGame/Resource/RawResources/Coal/Desc_Coal.Desc_Coal_C" json_save_path = "dclock.json" def clock_numbers(): for i in range(12): if i == 0: i = 12 for j in range(60): s = format(i, "02d") + format(j,"02d") yield tuple(int(i) for i in s) with open(json_save_path, 'rb') as f: save_json = json.load(f) # write the dots SegmentWriter("upper_dot", upper_dot, save_json).write(turbo_fuel) SegmentWriter("lower_dot", lower_dot, save_json).write(turbo_fuel) nws = [NumberWriter(digit, save_json, turbo_fuel, coal) for digit in display_numbers] # write some black for padding for nw in nws: nw.write_off(5) # write the clock numbers for nums in clock_numbers(): for nw, num in zip(nws, nums): nw.write_number(num, 2) # write some black for padding for nw in nws: nw.write_off(5) # write boob just for fun for nw, num in zip(nws, (8,0,0,8)): nw.write_number(num, 10) json_save_out_path = "dclock-loaded.json" with open(json_save_out_path, 'w') as f: json.dump(obj=save_json, fp=f, indent=" ")
Run
Reset
Share
Import
Link
Embed
Language▼
English
中文
Python Fiddle
Python Cloud IDE
Follow @python_fiddle
Browser Version Not Supported
Due to Python Fiddle's reliance on advanced JavaScript techniques, older browsers might have problems running it correctly. Please download the latest version of your favourite browser.
Chrome 10+
Firefox 4+
Safari 5+
IE 10+
Let me try anyway!
url:
Go
Python Snippet
Stackoverflow Question