P08-03: 配置の通常操作受入
This commit is contained in:
+34
-2
@@ -134,6 +134,36 @@ def make(base, source, checker):
|
||||
rooms = 0
|
||||
|
||||
def snap(name):
|
||||
# Synthetic controls follow the same split as Runtime: stairs are
|
||||
# construction instances with infrastructure, never operational rooms.
|
||||
projections = []
|
||||
entities = []; connectors = []
|
||||
for f in runtime['construction']['facilities']:
|
||||
if f['definition_id'] != 'guest_stairs': continue
|
||||
f.update(rotation=0, layer=0, completed_at=360)
|
||||
fid = f['instance_id']; origin = f['origin']
|
||||
p = {k:copy.deepcopy(f[k]) for k in ('instance_id','definition_id','origin','source_job_id','rotation','layer','completed_at')}
|
||||
p.update(kind='guest_stairs', route_entity_id='infra.route:'+fid,
|
||||
connector_id='infra.connector:'+fid, cells=f['occupied_cells'], staff_only=False,
|
||||
pass_through=True, footprint=[1,1], definition_tags=['guest_access','movement','route_subslot','schema_facility_proxy','stairs','vertical_connector'])
|
||||
canonical = 'projection|'+''.join('%d:%s|' % (len(p[k]),p[k]) for k in ('instance_id','definition_id','kind','route_entity_id','connector_id','source_job_id'))
|
||||
canonical += 'layer=0|staff=0|pass=1|footprint=1,1|rotation=0|completed=360|'
|
||||
canonical += 'origin=%d,%d,%d|tags=' % tuple(origin)
|
||||
canonical += ''.join('%d:%s;' % (len(t),t) for t in p['definition_tags'])+'|cells='
|
||||
canonical += ''.join('%d,%d,%d;' % tuple(c) for c in p['cells'])
|
||||
p['record_fingerprint'] = hashlib.sha256(canonical.encode()).hexdigest()
|
||||
projections.append(p)
|
||||
entities.append({'entity_id':p['route_entity_id'],'category':'ROUTE','cells':p['cells']})
|
||||
connectors.append({'id':p['connector_id'],'from':origin,'to':[origin[0],origin[1]-1,origin[2]],
|
||||
'cost':150,'bidirectional':True,'access_id':'','enabled':True,'movement_type':'CONNECTOR',
|
||||
'dynamic_cost':0,'operational_state':'OPERATIONAL','cabin_capacity':8,'queue_capacity':256,
|
||||
'cabin_state':'IDLE','current_floor':origin[1],'travel_minutes_per_floor':1,'request_queue':[]})
|
||||
runtime['facility_infrastructure'] = {'projections':projections}
|
||||
runtime['spatial_subslots'] = {'entities':entities}
|
||||
route_cells = [c for p in projections for c in p['cells']]
|
||||
walkable = [[4,0,0]]+route_cells
|
||||
runtime['route_projection'] = {'base_walkable_cells':[[4,0,0]],'projected_route_cells':route_cells,'projected_walkable_cells':walkable}
|
||||
runtime['path'] = {'connectors':connectors,'vertical_walk_blockers':[], 'cell_traffic':[{'cell':c} for c in walkable]}
|
||||
put(folder/(name+'.json'), typed(model))
|
||||
(folder/(name+'.var')).write_bytes(json.dumps(model, sort_keys=True).encode())
|
||||
return name
|
||||
@@ -157,7 +187,8 @@ def make(base, source, checker):
|
||||
row['input_method'] = method
|
||||
if method != 'native_os': return
|
||||
requests = [{'action':'cell', 'world_cell':row['position']['world_cell'],
|
||||
'viewport':row['position']['viewport'], 'screen':row['position']['screen']}]
|
||||
'viewport':row['position']['viewport'], 'screen':row['position']['screen'],
|
||||
'viewport_to_screen':[1,0,0,1,0,0], 'guide_visible':False, 'guide_rect':[0,0,0,0]}]
|
||||
if row['id'] in ('unsupported','resume_overlap'):
|
||||
requests.append({'action':'load_menu'})
|
||||
if row['id'] == 'pan_zoom':
|
||||
@@ -235,7 +266,8 @@ def make(base, source, checker):
|
||||
job.update(state='COMPLETED', facility_instance_id=fid)
|
||||
facility = {'instance_id': fid, 'definition_id': definition, 'occupied_cells': cells, 'origin': cell[:], 'source_job_id': jid}
|
||||
runtime['construction']['facilities'].append(facility)
|
||||
runtime['facilities']['instances'].append(copy.deepcopy(facility))
|
||||
if definition != 'guest_stairs':
|
||||
runtime['facilities']['instances'].append(copy.deepcopy(facility))
|
||||
runtime['world']['occupancies'][-1]['entity_id'] = fid
|
||||
row['completed'] = snap('writer-'+label+'-completed')
|
||||
if 'after' not in row: row['after'] = snap('writer-'+label+'-after')
|
||||
|
||||
Reference in New Issue
Block a user