P08-03: 配置の通常操作受入

This commit is contained in:
Agent Control Runner
2026-10-14 05:51:27 +09:00
parent 4a17d0e0f5
commit d01286360e
21 changed files with 7225 additions and 79 deletions
+34 -2
View File
@@ -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')