Vous ne pouvez pas sélectionner plus de 25 sujets Les noms de sujets doivent commencer par une lettre ou un nombre, peuvent contenir des tirets ('-') et peuvent comporter jusqu'à 35 caractères.
 
 
 
 

27 lignes
1.6 KiB

  1. import assert from 'node:assert/strict';
  2. import { expect } from '@playwright/test';
  3. export async function verifyVisualEffects(page, operation) {
  4. await expect.poll(async()=>page.evaluate(()=>globalThis.__trainingSceneDiagnostics().bridgeWorkshop.pending)).toBe(false);
  5. const d=await page.evaluate(()=>globalThis.__trainingSceneDiagnostics().bridgeWorkshop), targets=d.targets;
  6. for (const effect of operation.effects || []) {
  7. const t=targets.find(t=>t.id===effect.targetId); assert.ok(t,effect.targetId);
  8. if(d.modelBinding && t.id==='front-pump-hydraulic-pump'){assert.equal(t.visible,false);continue;}
  9. if(typeof effect.visible==='boolean')assert.equal(t.visible,effect.visible,t.id);
  10. const offset=effect.targetId==='bridge-gasket' && effect.offset?.[0] ? [2.3,0,1.31] : effect.offset;
  11. if(offset)assert.ok(t.position.every((v,i)=>Math.abs(v-t.home[i]-offset[i])<1e-5),t.id+' position');
  12. }
  13. if(operation.kind==='rotate'){
  14. const t=targets.find(t=>t.id===operation.targetId);
  15. if(t?.rotatingQuaternion){assert.deepEqual(t.quaternion,[0,0,0,1],'valve housing must stay fixed');assert.ok(Math.abs(t.rotatingQuaternion[3])<0.999,'handle must visibly turn');}
  16. }
  17. if(d.modelBinding){
  18. assert.equal(d.modelBinding.boltCount,4);assert.equal(d.modelBinding.mountedOnVehicle,true);
  19. const installed=targets.find(t=>t.id==='bridge-new-pump');
  20. if(operation.targetId==='bridge-new-pump'){
  21. const expected=d.modelBinding.sourceBounds;
  22. for(const key of ['min','max'])assert.ok(installed.worldBounds[key].every((v,i)=>Math.abs(v-expected[key][i])<0.001),'new pump must occupy original source bounds');
  23. }
  24. }
  25. }