@pix3/cli 1.6.0 → 1.6.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. package/LICENSE +201 -201
  2. package/README.md +788 -754
  3. package/dist/index.js +208 -203
  4. package/dist/runtime-types.json +1 -1
  5. package/dist/smoke/prebuilt/{chunk-J2SJVMDO.mjs → chunk-7MZGPAUK.mjs} +1 -1
  6. package/dist/smoke/prebuilt/chunk-7WOFGLW3.mjs +239 -0
  7. package/dist/smoke/prebuilt/runtime.mjs +1 -1
  8. package/dist/smoke/prebuilt/smoke-worker.mjs +1 -1
  9. package/dist/smoke/prebuilt/tree-defaults.mjs +1 -1
  10. package/dist/validate/prebuilt/bundle-main.js +13 -13
  11. package/dist/validate/prebuilt/chunk-HKG6YI6Y.js +239 -0
  12. package/dist/validate/prebuilt/runtime.js +1 -1
  13. package/kit/files/.claude/skills/pix3-nodes/SKILL.md +210 -210
  14. package/kit/files/.claude/skills/pix3-nodes/reference.md +32 -24
  15. package/kit/files/.claude/skills/pix3-scene-format/SKILL.md +238 -235
  16. package/kit/files/.claude/skills/pix3-scene-format/reference.md +28 -28
  17. package/kit/files/.claude/skills/pix3-scripts/SKILL.md +285 -281
  18. package/kit/files/.claude/skills/pix3-scripts/reference.md +69 -52
  19. package/kit/files/.claude/skills/pix3-verify/SKILL.md +298 -256
  20. package/kit/files/.claude/skills/pix3-verify/reference.md +21 -21
  21. package/kit/files/AGENTS.md +203 -203
  22. package/kit/files/CLAUDE.md +1 -1
  23. package/kit/kit.json +2 -2
  24. package/package.json +54 -54
  25. package/templates/empty-2d/files/README.md +20 -20
  26. package/templates/empty-2d/files/scenes/main.pix3scene +68 -68
  27. package/templates/empty-2d/template.yaml +7 -7
  28. package/templates/empty-3d/files/README.md +20 -20
  29. package/templates/empty-3d/files/scenes/main.pix3scene +108 -108
  30. package/templates/empty-3d/template.yaml +7 -7
  31. package/templates/idea-blank/files/README.md +22 -22
  32. package/templates/idea-blank/files/scenes/main.pix3scene +37 -37
  33. package/templates/idea-blank/template.yaml +10 -10
  34. package/templates/minigame-2d/files/README.md +44 -44
  35. package/templates/minigame-2d/files/design/tests/reachability.json +1 -1
  36. package/templates/minigame-2d/files/design/tests/routines/mute-music.json +44 -44
  37. package/templates/minigame-2d/files/scenes/main.pix3scene +84 -84
  38. package/templates/minigame-2d/files/scenes/menu.pix3scene +118 -118
  39. package/templates/minigame-2d/files/scenes/ui/settings-window.pix3scene +138 -138
  40. package/templates/minigame-2d/files/scripts/GameFlow.ts +133 -133
  41. package/templates/minigame-2d/files/scripts/MenuFlow.ts +217 -217
  42. package/templates/minigame-2d/files/scripts/SettingsWindow.ts +198 -198
  43. package/templates/minigame-2d/template.yaml +10 -10
  44. package/templates/playable-2d/files/README.md +30 -30
  45. package/templates/playable-2d/files/design/recipe.md +83 -83
  46. package/templates/playable-2d/files/design/tests/reachability.json +4 -4
  47. package/templates/playable-2d/files/design/tests/routines/intro-to-cta.json +32 -32
  48. package/templates/playable-2d/files/scenes/main.pix3scene +111 -111
  49. package/templates/playable-2d/files/scenes/ui/end-screen.pix3scene +91 -91
  50. package/templates/playable-2d/files/scenes/ui/intro.pix3scene +65 -65
  51. package/templates/playable-2d/files/scripts/GameFlow.ts +256 -256
  52. package/templates/playable-2d/template.yaml +9 -9
  53. package/templates/playable-3d/files/README.md +32 -32
  54. package/templates/playable-3d/files/design/recipe.md +127 -127
  55. package/templates/playable-3d/files/design/tests/reachability.json +4 -4
  56. package/templates/playable-3d/files/design/tests/routines/intro-to-cta.json +32 -32
  57. package/templates/playable-3d/files/scenes/main.pix3scene +230 -230
  58. package/templates/playable-3d/files/scenes/ui/end-screen.pix3scene +91 -91
  59. package/templates/playable-3d/files/scenes/ui/intro.pix3scene +65 -65
  60. package/templates/playable-3d/files/scripts/GameFlow.ts +309 -309
  61. package/templates/playable-3d/files/scripts/GameRules.ts +290 -290
  62. package/templates/playable-3d/files/scripts/ScoreHud.ts +113 -113
  63. package/templates/playable-3d/template.yaml +9 -9
  64. package/templates/recipe-arena-2d/files/README.md +48 -48
  65. package/templates/recipe-arena-2d/files/design/recipe.md +127 -127
  66. package/templates/recipe-arena-2d/files/scenes/main.pix3scene +292 -292
  67. package/templates/recipe-arena-2d/files/scenes/menu.pix3scene +100 -100
  68. package/templates/recipe-arena-2d/files/scenes/prefabs/hazard.pix3scene +42 -42
  69. package/templates/recipe-arena-2d/files/scenes/prefabs/pickup.pix3scene +45 -45
  70. package/templates/recipe-arena-2d/files/scenes/ui/result.pix3scene +85 -85
  71. package/templates/recipe-arena-2d/files/scripts/GameRules.ts +368 -368
  72. package/templates/recipe-arena-2d/files/scripts/MenuFlow.ts +106 -106
  73. package/templates/recipe-arena-2d/files/scripts/PlayerController.ts +151 -151
  74. package/templates/recipe-arena-2d/files/scripts/ScoreHud.ts +94 -94
  75. package/templates/recipe-arena-2d/files/scripts/Spawner.ts +214 -214
  76. package/templates/recipe-arena-2d/files/scripts/TouchRules.ts +174 -174
  77. package/templates/recipe-arena-2d/template.yaml +10 -10
  78. package/templates/recipe-blank-2d/files/README.md +61 -61
  79. package/templates/recipe-blank-2d/files/design/recipe.md +148 -148
  80. package/templates/recipe-blank-2d/files/design/tests/reachability.json +4 -4
  81. package/templates/recipe-blank-2d/files/design/tests/routines/restart.json +27 -27
  82. package/templates/recipe-blank-2d/files/scenes/main.pix3scene +224 -224
  83. package/templates/recipe-blank-2d/files/scenes/ui/result.pix3scene +85 -85
  84. package/templates/recipe-blank-2d/files/scripts/GameRules.ts +350 -350
  85. package/templates/recipe-blank-2d/files/scripts/ScoreHud.ts +110 -110
  86. package/templates/recipe-blank-2d/template.yaml +10 -10
  87. package/templates/recipe-bouncer-2d/files/README.md +81 -81
  88. package/templates/recipe-bouncer-2d/files/design/recipe.md +146 -146
  89. package/templates/recipe-bouncer-2d/files/scenes/main.pix3scene +615 -615
  90. package/templates/recipe-bouncer-2d/files/scenes/menu.pix3scene +191 -191
  91. package/templates/recipe-bouncer-2d/files/scenes/ui/result.pix3scene +87 -87
  92. package/templates/recipe-bouncer-2d/files/scripts/BallBody.ts +298 -298
  93. package/templates/recipe-bouncer-2d/files/scripts/GameRules.ts +377 -377
  94. package/templates/recipe-bouncer-2d/files/scripts/MenuFlow.ts +109 -109
  95. package/templates/recipe-bouncer-2d/files/scripts/PaddleController.ts +112 -112
  96. package/templates/recipe-bouncer-2d/files/scripts/ScoreHud.ts +94 -94
  97. package/templates/recipe-bouncer-2d/files/scripts/TouchRules.ts +263 -263
  98. package/templates/recipe-bouncer-2d/files/scripts/ball-collision.ts +307 -307
  99. package/templates/recipe-bouncer-2d/template.yaml +10 -10
  100. package/templates/recipe-grid-3d/files/README.md +22 -22
  101. package/templates/recipe-grid-3d/files/design/recipe.md +110 -110
  102. package/templates/recipe-grid-3d/files/scenes/main.pix3scene +169 -169
  103. package/templates/recipe-grid-3d/files/scenes/menu.pix3scene +100 -100
  104. package/templates/recipe-grid-3d/files/scenes/ui/result.pix3scene +105 -105
  105. package/templates/recipe-grid-3d/files/scripts/GridBoard.ts +319 -319
  106. package/templates/recipe-grid-3d/files/scripts/GridRules.ts +278 -278
  107. package/templates/recipe-grid-3d/files/scripts/MenuFlow.ts +106 -106
  108. package/templates/recipe-grid-3d/files/scripts/ScoreHud.ts +94 -94
  109. package/templates/recipe-grid-3d/template.yaml +10 -10
  110. package/templates/recipe-tapper-2d/files/README.md +39 -39
  111. package/templates/recipe-tapper-2d/files/design/recipe.md +132 -132
  112. package/templates/recipe-tapper-2d/files/design/tests/reachability.json +4 -4
  113. package/templates/recipe-tapper-2d/files/design/tests/routines/terminal-retry.json +23 -23
  114. package/templates/recipe-tapper-2d/files/scenes/main.pix3scene +269 -269
  115. package/templates/recipe-tapper-2d/files/scenes/menu.pix3scene +100 -100
  116. package/templates/recipe-tapper-2d/files/scenes/prefabs/hazard.pix3scene +42 -42
  117. package/templates/recipe-tapper-2d/files/scenes/prefabs/target.pix3scene +45 -45
  118. package/templates/recipe-tapper-2d/files/scenes/ui/result.pix3scene +85 -85
  119. package/templates/recipe-tapper-2d/files/scripts/GameRules.ts +368 -368
  120. package/templates/recipe-tapper-2d/files/scripts/MenuFlow.ts +106 -106
  121. package/templates/recipe-tapper-2d/files/scripts/ScoreHud.ts +94 -94
  122. package/templates/recipe-tapper-2d/files/scripts/Spawner.ts +214 -214
  123. package/templates/recipe-tapper-2d/files/scripts/TouchRules.ts +192 -192
  124. package/templates/recipe-tapper-2d/template.yaml +10 -10
  125. package/dist/smoke/prebuilt/chunk-OJXQXIIQ.mjs +0 -239
  126. package/dist/validate/prebuilt/chunk-BS2OZM7U.js +0 -239
@@ -1,2 +1,2 @@
1
1
  import { createRequire as __pix3CreateRequire } from 'node:module'; const require = __pix3CreateRequire(import.meta.url);
2
- import{$ as _,$a as $o,$b as $r,$c as $e,$d as om,$e as op,A as z,Aa as Ao,Ab as Ar,Ac as Ae,Ad as Bf,Ae as Bm,Af as Bp,B as A,Ba as Bo,Bb as Br,Bc as Be,Bd as Cf,Be as Cm,Bf as Cp,C as B,Ca as Co,Cb as Cr,Cc as Ce,Cd as Df,Ce as Dm,Cf as Dp,D as C,Da as Do,Db as Dr,Dc as De,Dd as Ef,De as Em,Df as Ep,E as D,Ea as Eo,Eb as Er,Ec as Ee,Ed as Ff,Ee as Fm,Ef as Fp,F as E,Fa as Fo,Fb as Fr,Fc as Fe,Fd as Gf,Fe as Gm,Ff as Gp,G as F,Ga as Go,Gb as Gr,Gc as Ge,Gd as Hf,Ge as Hm,Gf as Hp,H as G,Ha as Ho,Hb as Hr,Hc as He,Hd as If,He as Im,Hf as Ip,I as H,Ia as Io,Ib as Ir,Ic as Ie,Id as Jf,Ie as Jm,If as Jp,J as I,Ja as Jo,Jb as Jr,Jc as Je,Jd as Kf,Je as Km,Jf as Kp,K as J,Ka as Ko,Kb as Kr,Kc as Ke,Kd as Lf,Ke as Lm,Kf as Lp,L as K,La as Lo,Lb as Lr,Lc as Le,Ld as Mf,Le as Mm,Lf as Mp,M as L,Ma as Mo,Mb as Mr,Mc as Me,Md as Nf,Me as Nm,Mf as Np,N as M,Na as No,Nb as Nr,Nc as Ne,Nd as Of,Ne as Om,Nf as Op,O as N,Oa as Oo,Ob as Or,Oc as Oe,Od as Pf,Oe as Pm,Of as Pp,P as O,Pa as Po,Pb as Pr,Pc as Pe,Pd as Qf,Pe as Qm,Pf as Qp,Q as P,Qa as Qo,Qb as Qr,Qc as Qe,Qd as Rf,Qe as Rm,Qf as Rp,R as Q,Ra as Ro,Rb as Rr,Rc as Re,Rd as Sf,Re as Sm,Rf as Sp,S as R,Sa as So,Sb as Sr,Sc as Se,Sd as Tf,Se as Tm,T as S,Ta as To,Tb as Tr,Tc as Te,Td as Uf,Te as Um,U as T,Ua as Uo,Ub as Ur,Uc as Ue,Ud as Vf,Ue as Vm,V as U,Va as Vo,Vb as Vr,Vc as Ve,Vd as Wf,Ve as Wm,W as V,Wa as Wo,Wb as Wr,Wc as We,Wd as Xf,We as Xm,X as W,Xa as Xo,Xb as Xr,Xc as Xe,Xd as Yf,Xe as Ym,Y as X,Ya as Yo,Yb as Yr,Yc as Ye,Yd as Zf,Ye as Zm,Z as Y,Za as Zo,Zb as Zr,Zc as Ze,Zd as _f,Ze as _m,_ as Z,_a as _o,_b as _r,_c as _e,_d as $f,_e as $m,aa as $,ab as or,ac as oe,ad as of,ae as rm,af as rp,b as o,ba as oo,bb as rr,bc as re,bd as rf,be as em,bf as ep,c as r,ca as ro,cb as er,cc as ee,cd as ef,ce as fm,cf as fp,d as e,da as eo,db as fr,dc as fe,dd as ff,de as mm,df as mp,e as f,ea as fo,eb as mr,ec as me,ed as mf,ee as pm,ef as pp,f as m,fa as mo,fb as pr,fc as pe,fd as pf,fe as tm,ff as tp,g as p,ga as po,gb as tr,gc as te,gd as tf,ge as xm,gf as xp,h as t,ha as to,hb as xr,hc as xe,hd as xf,he as am,hf as ap,i as x,ia as xo,ib as ar,ic as ae,id as af,ie as bm,if as bp,j as a,ja as ao,jb as br,jc as be,jd as bf,je as cm,jf as cp,k as b,ka as bo,kb as cr,kc as ce,kd as cf,ke as dm,kf as dp,l as c,la as co,lb as dr,lc as de,ld as df,le as gm,lf as gp,m as d,ma as go,mb as gr,mc as ge,md as gf,me as hm,mf as hp,n as g,na as ho,nb as hr,nc as he,nd as hf,ne as im,nf as ip,o as h,oa as io,ob as ir,oc as ie,od as jf,oe as jm,of as jp,p as i,pa as jo,pb as jr,pc as je,pd as kf,pe as km,pf as kp,q as j,qa as ko,qb as kr,qc as ke,qd as lf,qe as lm,qf as lp,r as k,ra as lo,rb as lr,rc as le,rd as nf,re as nm,rf as np,s as l,sa as no,sb as nr,sc as ne,sd as qf,se as qm,sf as qp,t as n,ta as qo,tb as qr,tc as qe,td as sf,te as sm,tf as sp,u as q,ua as so,ub as sr,uc as se,ud as uf,ue as um,uf as up,v as s,va as uo,vb as ur,vc as ue,vd as vf,ve as vm,vf as vp,w as u,wa as vo,wb as vr,wc as ve,wd as wf,we as wm,wf as wp,x as v,xa as wo,xb as wr,xc as we,xd as yf,xe as ym,xf as yp,y as w,ya as yo,yb as yr,yc as ye,yd as zf,ye as zm,yf as zp,z as y,za as zo,zb as zr,zc as ze,zd as Af,ze as Am,zf as Ap}from"./chunk-BS2OZM7U.js";import"./chunk-6ACT6FNV.js";export{Ke as AO_MODES,up as ATLAS_MANIFEST_PATH,oo as ATLAS_REGION_KEY,vp as ATLAS_SHEET_DIR,$ as ATLAS_SHEET_SCHEME,ro as ATLAS_SIZE_KEY,ko as AUDIO_BUS_NAMES,Hr as AmbientLightNode,hr as AnimatedSprite2D,Qr as AnimatedSprite3D,rp as AnimationPlayerBehavior,jo as AssetLoader,Im as AudioApi,ve as AudioPlayer,lo as AudioService,fr as BATCHABLE_2D_KEY,Jo as BLEND_MODES_2D,Ko as BLEND_MODE_2D_OPTIONS,Vo as BUILTIN_SHADER_EFFECTS,wm as BURST_MAX_PARTICLES,ae as Bar2D,mr as Batch2DSystem,Gp as BurstOnSignalBehavior,te as Button2D,Ar as CAMERA2D_DEFAULTS,Sf as CONTACT_MARGIN,Xe as CURRENT_SCENE_FORMAT_VERSION,Br as Camera2D,Ee as Camera3D,ep as CameraBrainBehavior,Dr as CanvasLayer2D,be as Checkbox2D,Lp as Collider2DBehavior,Rf as Collision2DService,kr as ColorRect2D,fp as CutsceneApi,Vm as DEFAULT_CLIP_DURATION,gp as DEFAULT_FIXED_DELTA_SEC,ye as DEFAULT_GEOMETRY_MATERIAL_TYPE,ip as DEFAULT_RUNTIME_TIME_CONFIG,k as DIRECTION_AXES_ENABLED_KEY,Er as DirectionalLightNode,Fe as EASING_NAMES,bp as ECSService,ff as EMOJI_GUARDED_TEXT_PROPERTIES,Cp as FadeBehavior,zm as FloatText2D,r as GAME_DEBUG_GLOBAL_KEY,ze as GEOMETRY_KINDS,we as GEOMETRY_MATERIAL_TYPES,sm as GameCommandRegistry,qm as GameTime,Ae as GeometryMesh,wr as Group2D,Or as HemisphereLightNode,Jp as Hitbox2DBehavior,ef as INSTANCE_TRANSFORM_KEYS,nf as InputService,Be as InstancedMesh3D,ce as InventorySlot2D,Wr as Joystick2D,Cm as JuiceApi,Ir as KNOWN_SCENE_NODE_TYPES,ie as LABEL_AUTO_SIZE_BLEED,je as LABEL_GLOW_STRENGTH_LIMIT,de as LABEL_H_ALIGN_VALUES,he as LABEL_LINE_HEIGHT_FACTOR,ge as LABEL_V_ALIGN_VALUES,ue as Label2D,mp as LocalizationService,Zf as MAX_NET_KIND,sf as MAX_POLYGON_VERTICES,hp as MAX_TICKS_PER_FRAME,Um as MIN_CLIP_DURATION,qf as MIN_POLYGON_VERTICES,L as MeshInstance,xm as NET_APP_FLAGS_SHIFT,tm as NET_OWNERSHIP_MASK,_f as NetKindTable,im as NetRoomVars,gm as NetworkConnectError,nm as NetworkNodeBinder,jm as NetworkService,dm as NetworkSpawnError,Op as NetworkedNodeBehavior,Po as Node2D,G as Node3D,F as NodeBase,re as OVERLAY_2D_FLAG,h as PHYSICS_DEBUG_ENABLED_KEY,c as PHYSICS_DEBUG_GLOBAL_KEY,Oe as POST_PROCESS_DEFAULTS,Le as PROJECT_AO_MODES,xf as PROJECT_SCRIPT_DIRECTORIES,af as PROJECT_SCRIPT_ENTRY_PATTERN,S as PROJECT_TEXTURE_FILTERING_MODES,ym as ParticleBurst2D,Rr as Particles3D,Xf as Physics2DService,Kp as PhysicsBody2DBehavior,Mp as PhysicsWorld2DBehavior,Bp as PinToNodeBehavior,Ep as PlaySoundBehavior,Fr as PointLightNode,vm as PopInBehavior,Pe as PostProcess,xp as PostProcessingPipeline,um as PunchScaleBehavior,x as RUNTIME_PROPERTY_SINK_GLOBAL_KEY,m as RUNTIME_SCENE_GLOBAL_KEY,Dp as RadialProgressBehavior,Yf as RejectCode,Pp as ReplicatedTransformBehavior,o as ResourceManager,Np as RevoluteJoint2DBehavior,yp as RotateBehavior,sp as RuntimeRenderer,_e as SCENE_COMPONENT_DEFINITION_KEYS,$e as SCENE_DISK_FORMAT_TYPES,Ye as SCENE_DOCUMENT_KEYS,Ze as SCENE_NODE_DEFINITION_KEYS,u as SCRIPT_ERROR_SINK_GLOBAL_KEY,me as SEMANTIC_POINTER_ID,Em as SFX_PRESETS,E as SHARED_UNIT_QUAD_GEOMETRY,y as SIGNAL_EMIT_SINK_GLOBAL_KEY,Te as SceneLoader,lf as SceneManager,qp as SceneRunner,kf as SceneSaver,pp as SceneService,Se as SceneValidationError,qo as Script,no as ScriptRegistry,fe as ScrollContainer2D,Fp as SfxOnSignalBehavior,Hm as SfxSynth,or as ShaderEffectStack,yr as ShakeBehavior,zp as SimpleMoveBehavior,Ap as SineBehavior,xe as Slider2D,jr as SpineSkeleton2D,ir as SpineSkeletonView,Gr as SpotLightNode,ar as Sprite2D,Pr as Sprite3D,Ce as TARGET_DISTANCE,q as TEST_COMPONENT_TYPE_PREFIX,Am as TRAIL_MAX_POINTS,vr as TiledSprite2D,Bm as Trail2D,Dm as TweenApi,pe as UIControl2D,bf as USER_SCRIPT_ID_PREFIX,Ie as VIRTUAL_CAMERA_DEFAULTS,Je as VirtualCamera3D,mm as WS_CLOSE_NORMAL,fm as WS_CLOSE_PROTOCOL_VIOLATION,pm as WsTransport,nr as ZERO_SLICE_BORDER,Oo as Z_INDEX_LIMIT,De as aimCameraNodeAt,Qe as aoModeUsesSSAO,No as applyBlendMode2DToMaterial,Tm as applyClipAtTime,He as applyEasing,ap as applyLocaleToTree,$r as applyTextStyle,Y as applyTextureRegionToTexture,ee as assign2DRenderOrder,K as assignWithoutSchemaRefresh,fo as atlasSizeOf,Ao as attachComponentDefinitions,eo as baseRegionOf,Mo as blendingForMode2D,Ef as boxPolygon,ur as buildSkinGeometry,lr as buildTiledSpriteGeometry,Gf as capsulePolygon,Jf as circleIntersectsPolygon,Ff as circlePolygon,Gm as clampSfxPitch,Af as cleanPolygon,Ym as coerceKeyframeValue,er as coerceTextureResource,Ro as coerceToPropertyType,Mm as collectAudioKeysInRange,P as collectClipPointNames,Co as collectComponentDefinitions,Nm as collectEventKeysInRange,Ue as collectRenderabilityIssues,Lm as collectTimedKeysInRange,Uf as collideCirclePolygon,Tf as collideCircles,Vf as collidePolygons,Zo as composeEffectShaders,Z as composeTextureRegion,W as configure2DTexture,Bf as convexHull,Mf as convexPolygonsIntersect,po as copyAtlasMetadata,to as createAtlasResolver,Sm as createClipBindings,$m as createDefaultClip,_m as createEmptyAnimationSet,Zr as cssFont,Xr as cssFontFamily,Yr as cssFontWeight,lm as decodeSignalPayload,Of as decomposeConvex,So as defineGroup,Qo as defineProperty,uo as describeFontFace,hm as describeRejectCode,D as describeThrown,Nr as describeUnknownNodeType,If as distanceToPolygonBoundary,_r as drawStyledText,Uo as effectSupportsTarget,km as encodeSignalPayload,zf as ensureCounterClockwise,Cr as findActiveCamera2D,R as findAnimationClip,O as findAnimationFramePoint,tf as findEmojiArtInSceneYaml,op as findKeyframeClip,Om as fireEventKey,Qm as fromSchemaValue,Xm as generateTrackId,tr as getActiveLocalization,Yo as getAllShaderEffectTypes,M as getAnimationFrameTexturePath,zo as getComponentSchemaProperties,f as getGameDebug,$f as getNetKindTable,Do as getNodePropertySchema,g as getPhysicsDebugSource,Ne as getProjectAODefault,V as getProjectTextureFiltering,Eo as getPropertiesByGroup,Fo as getPropertyDefinition,Go as getPropertyDisplayValue,b as getRuntimeLivePropertySink,t as getRuntimeSceneRoot,of as getSceneNodeDiskFormat,w as getScriptErrorSink,Xo as getShaderEffectType,A as getSignalEmitSink,wp as installAtlasFromManifest,I as installReactiveSchemaProperties,Jm as interpolateValue,n as isDirectionAxesEnabled,mf as isEmojiOnlyText,wo as isFontFaceRegistered,Re as isHighEndDevice,We as isInertNode,Sr as isInteractive,Ge as isKeyframeEasing,Lr as isKnownSceneNodeType,cm as isNetTeleport,j as isPhysicsDebugEnabled,yf as isPolygonConvex,gf as isProjectScriptEntry,df as isProjectScriptPath,_ as isSameTextureRegion,so as isScriptComponent,hf as isScriptComponentClass,N as isSequenceAnimationFrame,Fm as isSfxPreset,$o as isShaderEffectHost,sr as isSliceBorderEmpty,ao as isSpineModuleAvailable,s as isTestHarnessComponentType,pf as isTextProperty,rr as isTextureResourceRef,Wm as isTrackValueType,ne as labelDecorationPadding,ke as labelGlowBlurPx,le as labelGlowPasses,qe as layoutLabelText,yo as loadProjectFonts,io as loadSpineAsset,bo as loadSpineModule,H as makeSchemaPropertyReactive,To as mergeSchemas,bm as netFlagsByte,am as netOwnershipOf,Q as normalizeAnimationResource,Lo as normalizeBlendMode2D,Zm as normalizeKeyframeAnimationSet,Jr as normalizeNodeTypeName,Hp as normalizePolygonConfig,T as normalizeProjectTextureFiltering,qr as normalizeSliceBorder,se as paintLabelCanvas,br as parseEventArgs,ho as parseSpineAtlasPageNames,np as playable,Hf as pointInPolygon,vf as polygonArea,Cf as polygonBounds,wf as polygonCentroid,uf as polygonSignedArea,Rp as property,Qf as quaternionToRotationZ,J as reactiveSchemaPropertyNames,Ur as readBooleanArg,Tr as readNumberArg,Vr as readStringArg,Pf as readWorldTransform2D,Lf as rectIntersectsConvexPolygon,Kf as rectIntersectsPolygon,Qp as registerBuiltInScripts,e as registerGameDebug,rm as registerNetworkPrefab,d as registerPhysicsDebugSource,jf as registerProjectScriptExports,a as registerRuntimeLivePropertySink,p as registerRuntimeSceneRoot,v as registerScriptErrorSink,Wo as registerShaderEffect,z as registerSignalEmitSink,C as reportScriptError,B as reportSignalEmit,em as resetNetKindTable,vo as resetProjectFontRegistry,cr as resolveAnimatedSpriteFrameLayout,dr as resolveFramePointToLocal,gr as resolveFramePolygonToLocal,xr as resolveLocalizedText,Bo as resolvePendingComponents,jp as resolveRuntimeTimeConfig,rf as resolveSceneDiskKey,Kr as resolveSceneNodeType,go as resolveSpinePagePath,Rm as resolveTrackTarget,Km as sampleTrack,X as sanitizeTextureRegion,Nf as segmentPolygonT,Ip as serializePolygonConfig,pr as setActiveLocalization,lp as setDefaultStoreUrl,l as setDirectionAxesEnabled,om as setNetworkPrefabTable,Io as setNodePropertyValue,i as setPhysicsDebugEnabled,kp as setPlayableAdapter,tp as setPostprocessingModuleLoader,Me as setProjectAODefault,U as setProjectTextureFiltering,xo as setSpineModuleLoader,_o as shaderEffectsCacheKey,zr as shakeNoise,co as spineAssetKey,mo as stampAtlasView,Sp as state,oe as styledTextPadding,Mr as suggestSceneNodeType,Ve as summarizeRenderabilityIssues,Wf as sweepCircleAgainstPolygon,Pm as toSchemaValue,Df as transformPolygon,cf as userScriptComponentId,Ho as validatePropertyValue,cp as worldToCanvasLogical,dp as worldToCanvasThroughCamera};
2
+ import{$ as _,$a as $o,$b as $r,$c as $e,$d as om,$e as op,A as z,Aa as Ao,Ab as Ar,Ac as Ae,Ad as Bf,Ae as Bm,Af as Bp,B as A,Ba as Bo,Bb as Br,Bc as Be,Bd as Cf,Be as Cm,Bf as Cp,C as B,Ca as Co,Cb as Cr,Cc as Ce,Cd as Df,Ce as Dm,Cf as Dp,D as C,Da as Do,Db as Dr,Dc as De,Dd as Ef,De as Em,Df as Ep,E as D,Ea as Eo,Eb as Er,Ec as Ee,Ed as Ff,Ee as Fm,Ef as Fp,F as E,Fa as Fo,Fb as Fr,Fc as Fe,Fd as Gf,Fe as Gm,Ff as Gp,G as F,Ga as Go,Gb as Gr,Gc as Ge,Gd as Hf,Ge as Hm,Gf as Hp,H as G,Ha as Ho,Hb as Hr,Hc as He,Hd as If,He as Im,Hf as Ip,I as H,Ia as Io,Ib as Ir,Ic as Ie,Id as Jf,Ie as Jm,If as Jp,J as I,Ja as Jo,Jb as Jr,Jc as Je,Jd as Kf,Je as Km,Jf as Kp,K as J,Ka as Ko,Kb as Kr,Kc as Ke,Kd as Lf,Ke as Lm,Kf as Lp,L as K,La as Lo,Lb as Lr,Lc as Le,Ld as Mf,Le as Mm,Lf as Mp,M as L,Ma as Mo,Mb as Mr,Mc as Me,Md as Nf,Me as Nm,Mf as Np,N as M,Na as No,Nb as Nr,Nc as Ne,Nd as Of,Ne as Om,Nf as Op,O as N,Oa as Oo,Ob as Or,Oc as Oe,Od as Pf,Oe as Pm,Of as Pp,P as O,Pa as Po,Pb as Pr,Pc as Pe,Pd as Qf,Pe as Qm,Pf as Qp,Q as P,Qa as Qo,Qb as Qr,Qc as Qe,Qd as Rf,Qe as Rm,Qf as Rp,R as Q,Ra as Ro,Rb as Rr,Rc as Re,Rd as Sf,Re as Sm,Rf as Sp,S as R,Sa as So,Sb as Sr,Sc as Se,Sd as Tf,Se as Tm,Sf as Tp,T as S,Ta as To,Tb as Tr,Tc as Te,Td as Uf,Te as Um,Tf as Up,U as T,Ua as Uo,Ub as Ur,Uc as Ue,Ud as Vf,Ue as Vm,V as U,Va as Vo,Vb as Vr,Vc as Ve,Vd as Wf,Ve as Wm,W as V,Wa as Wo,Wb as Wr,Wc as We,Wd as Xf,We as Xm,X as W,Xa as Xo,Xb as Xr,Xc as Xe,Xd as Yf,Xe as Ym,Y as X,Ya as Yo,Yb as Yr,Yc as Ye,Yd as Zf,Ye as Zm,Z as Y,Za as Zo,Zb as Zr,Zc as Ze,Zd as _f,Ze as _m,_ as Z,_a as _o,_b as _r,_c as _e,_d as $f,_e as $m,aa as $,ab as or,ac as oe,ad as of,ae as rm,af as rp,b as o,ba as oo,bb as rr,bc as re,bd as rf,be as em,bf as ep,c as r,ca as ro,cb as er,cc as ee,cd as ef,ce as fm,cf as fp,d as e,da as eo,db as fr,dc as fe,dd as ff,de as mm,df as mp,e as f,ea as fo,eb as mr,ec as me,ed as mf,ee as pm,ef as pp,f as m,fa as mo,fb as pr,fc as pe,fd as pf,fe as tm,ff as tp,g as p,ga as po,gb as tr,gc as te,gd as tf,ge as xm,gf as xp,h as t,ha as to,hb as xr,hc as xe,hd as xf,he as am,hf as ap,i as x,ia as xo,ib as ar,ic as ae,id as af,ie as bm,if as bp,j as a,ja as ao,jb as br,jc as be,jd as bf,je as cm,jf as cp,k as b,ka as bo,kb as cr,kc as ce,kd as cf,ke as dm,kf as dp,l as c,la as co,lb as dr,lc as de,ld as df,le as gm,lf as gp,m as d,ma as go,mb as gr,mc as ge,md as gf,me as hm,mf as hp,n as g,na as ho,nb as hr,nc as he,nd as hf,ne as im,nf as ip,o as h,oa as io,ob as ir,oc as ie,od as jf,oe as jm,of as jp,p as i,pa as jo,pb as jr,pc as je,pd as kf,pe as km,pf as kp,q as j,qa as ko,qb as kr,qc as ke,qd as lf,qe as lm,qf as lp,r as k,ra as lo,rb as lr,rc as le,rd as nf,re as nm,rf as np,s as l,sa as no,sb as nr,sc as ne,sd as qf,se as qm,sf as qp,t as n,ta as qo,tb as qr,tc as qe,td as sf,te as sm,tf as sp,u as q,ua as so,ub as sr,uc as se,ud as uf,ue as um,uf as up,v as s,va as uo,vb as ur,vc as ue,vd as vf,ve as vm,vf as vp,w as u,wa as vo,wb as vr,wc as ve,wd as wf,we as wm,wf as wp,x as v,xa as wo,xb as wr,xc as we,xd as yf,xe as ym,xf as yp,y as w,ya as yo,yb as yr,yc as ye,yd as zf,ye as zm,yf as zp,z as y,za as zo,zb as zr,zc as ze,zd as Af,ze as Am,zf as Ap}from"./chunk-HKG6YI6Y.js";import"./chunk-6ACT6FNV.js";export{Ke as AO_MODES,up as ATLAS_MANIFEST_PATH,oo as ATLAS_REGION_KEY,vp as ATLAS_SHEET_DIR,$ as ATLAS_SHEET_SCHEME,ro as ATLAS_SIZE_KEY,ko as AUDIO_BUS_NAMES,Hr as AmbientLightNode,hr as AnimatedSprite2D,Qr as AnimatedSprite3D,rp as AnimationPlayerBehavior,jo as AssetLoader,Im as AudioApi,ve as AudioPlayer,lo as AudioService,fr as BATCHABLE_2D_KEY,Jo as BLEND_MODES_2D,Ko as BLEND_MODE_2D_OPTIONS,Vo as BUILTIN_SHADER_EFFECTS,wm as BURST_MAX_PARTICLES,ae as Bar2D,mr as Batch2DSystem,Gp as BurstOnSignalBehavior,te as Button2D,Ar as CAMERA2D_DEFAULTS,Op as CHARACTER_STATE_FINISHED_SIGNAL,Sf as CONTACT_MARGIN,Xe as CURRENT_SCENE_FORMAT_VERSION,Br as Camera2D,Ee as Camera3D,ep as CameraBrainBehavior,Dr as CanvasLayer2D,Pp as CharacterVisual2DBehavior,be as Checkbox2D,Lp as Collider2DBehavior,Rf as Collision2DService,kr as ColorRect2D,fp as CutsceneApi,Vm as DEFAULT_CLIP_DURATION,gp as DEFAULT_FIXED_DELTA_SEC,ye as DEFAULT_GEOMETRY_MATERIAL_TYPE,ip as DEFAULT_RUNTIME_TIME_CONFIG,k as DIRECTION_AXES_ENABLED_KEY,Er as DirectionalLightNode,Fe as EASING_NAMES,bp as ECSService,ff as EMOJI_GUARDED_TEXT_PROPERTIES,Cp as FadeBehavior,zm as FloatText2D,r as GAME_DEBUG_GLOBAL_KEY,ze as GEOMETRY_KINDS,we as GEOMETRY_MATERIAL_TYPES,sm as GameCommandRegistry,qm as GameTime,Ae as GeometryMesh,wr as Group2D,Or as HemisphereLightNode,Jp as Hitbox2DBehavior,ef as INSTANCE_TRANSFORM_KEYS,nf as InputService,Be as InstancedMesh3D,ce as InventorySlot2D,Wr as Joystick2D,Cm as JuiceApi,Ir as KNOWN_SCENE_NODE_TYPES,ie as LABEL_AUTO_SIZE_BLEED,je as LABEL_GLOW_STRENGTH_LIMIT,de as LABEL_H_ALIGN_VALUES,he as LABEL_LINE_HEIGHT_FACTOR,ge as LABEL_V_ALIGN_VALUES,ue as Label2D,mp as LocalizationService,Zf as MAX_NET_KIND,sf as MAX_POLYGON_VERTICES,hp as MAX_TICKS_PER_FRAME,Um as MIN_CLIP_DURATION,qf as MIN_POLYGON_VERTICES,L as MeshInstance,xm as NET_APP_FLAGS_SHIFT,tm as NET_OWNERSHIP_MASK,_f as NetKindTable,im as NetRoomVars,gm as NetworkConnectError,nm as NetworkNodeBinder,jm as NetworkService,dm as NetworkSpawnError,Qp as NetworkedNodeBehavior,Po as Node2D,G as Node3D,F as NodeBase,re as OVERLAY_2D_FLAG,h as PHYSICS_DEBUG_ENABLED_KEY,c as PHYSICS_DEBUG_GLOBAL_KEY,Oe as POST_PROCESS_DEFAULTS,Le as PROJECT_AO_MODES,xf as PROJECT_SCRIPT_DIRECTORIES,af as PROJECT_SCRIPT_ENTRY_PATTERN,S as PROJECT_TEXTURE_FILTERING_MODES,ym as ParticleBurst2D,Rr as Particles3D,Xf as Physics2DService,Kp as PhysicsBody2DBehavior,Mp as PhysicsWorld2DBehavior,Bp as PinToNodeBehavior,Ep as PlaySoundBehavior,Fr as PointLightNode,vm as PopInBehavior,Pe as PostProcess,xp as PostProcessingPipeline,um as PunchScaleBehavior,x as RUNTIME_PROPERTY_SINK_GLOBAL_KEY,m as RUNTIME_SCENE_GLOBAL_KEY,Dp as RadialProgressBehavior,Yf as RejectCode,Rp as ReplicatedTransformBehavior,o as ResourceManager,Np as RevoluteJoint2DBehavior,yp as RotateBehavior,sp as RuntimeRenderer,_e as SCENE_COMPONENT_DEFINITION_KEYS,$e as SCENE_DISK_FORMAT_TYPES,Ye as SCENE_DOCUMENT_KEYS,Ze as SCENE_NODE_DEFINITION_KEYS,u as SCRIPT_ERROR_SINK_GLOBAL_KEY,me as SEMANTIC_POINTER_ID,Em as SFX_PRESETS,E as SHARED_UNIT_QUAD_GEOMETRY,y as SIGNAL_EMIT_SINK_GLOBAL_KEY,Te as SceneLoader,lf as SceneManager,qp as SceneRunner,kf as SceneSaver,pp as SceneService,Se as SceneValidationError,qo as Script,no as ScriptRegistry,fe as ScrollContainer2D,Fp as SfxOnSignalBehavior,Hm as SfxSynth,or as ShaderEffectStack,yr as ShakeBehavior,zp as SimpleMoveBehavior,Ap as SineBehavior,xe as Slider2D,jr as SpineSkeleton2D,ir as SpineSkeletonView,Gr as SpotLightNode,ar as Sprite2D,Pr as Sprite3D,Ce as TARGET_DISTANCE,q as TEST_COMPONENT_TYPE_PREFIX,Am as TRAIL_MAX_POINTS,vr as TiledSprite2D,Bm as Trail2D,Dm as TweenApi,pe as UIControl2D,bf as USER_SCRIPT_ID_PREFIX,Ie as VIRTUAL_CAMERA_DEFAULTS,Je as VirtualCamera3D,mm as WS_CLOSE_NORMAL,fm as WS_CLOSE_PROTOCOL_VIOLATION,pm as WsTransport,nr as ZERO_SLICE_BORDER,Oo as Z_INDEX_LIMIT,De as aimCameraNodeAt,Qe as aoModeUsesSSAO,No as applyBlendMode2DToMaterial,Tm as applyClipAtTime,He as applyEasing,ap as applyLocaleToTree,$r as applyTextStyle,Y as applyTextureRegionToTexture,ee as assign2DRenderOrder,K as assignWithoutSchemaRefresh,fo as atlasSizeOf,Ao as attachComponentDefinitions,eo as baseRegionOf,Mo as blendingForMode2D,Ef as boxPolygon,ur as buildSkinGeometry,lr as buildTiledSpriteGeometry,Gf as capsulePolygon,Jf as circleIntersectsPolygon,Ff as circlePolygon,Gm as clampSfxPitch,Af as cleanPolygon,Ym as coerceKeyframeValue,er as coerceTextureResource,Ro as coerceToPropertyType,Mm as collectAudioKeysInRange,P as collectClipPointNames,Co as collectComponentDefinitions,Nm as collectEventKeysInRange,Ue as collectRenderabilityIssues,Lm as collectTimedKeysInRange,Uf as collideCirclePolygon,Tf as collideCircles,Vf as collidePolygons,Zo as composeEffectShaders,Z as composeTextureRegion,W as configure2DTexture,Bf as convexHull,Mf as convexPolygonsIntersect,po as copyAtlasMetadata,to as createAtlasResolver,Sm as createClipBindings,$m as createDefaultClip,_m as createEmptyAnimationSet,Zr as cssFont,Xr as cssFontFamily,Yr as cssFontWeight,lm as decodeSignalPayload,Of as decomposeConvex,So as defineGroup,Qo as defineProperty,uo as describeFontFace,hm as describeRejectCode,D as describeThrown,Nr as describeUnknownNodeType,If as distanceToPolygonBoundary,_r as drawStyledText,Uo as effectSupportsTarget,km as encodeSignalPayload,zf as ensureCounterClockwise,Cr as findActiveCamera2D,R as findAnimationClip,O as findAnimationFramePoint,tf as findEmojiArtInSceneYaml,op as findKeyframeClip,Om as fireEventKey,Qm as fromSchemaValue,Xm as generateTrackId,tr as getActiveLocalization,Yo as getAllShaderEffectTypes,M as getAnimationFrameTexturePath,zo as getComponentSchemaProperties,f as getGameDebug,$f as getNetKindTable,Do as getNodePropertySchema,g as getPhysicsDebugSource,Ne as getProjectAODefault,V as getProjectTextureFiltering,Eo as getPropertiesByGroup,Fo as getPropertyDefinition,Go as getPropertyDisplayValue,b as getRuntimeLivePropertySink,t as getRuntimeSceneRoot,of as getSceneNodeDiskFormat,w as getScriptErrorSink,Xo as getShaderEffectType,A as getSignalEmitSink,wp as installAtlasFromManifest,I as installReactiveSchemaProperties,Jm as interpolateValue,n as isDirectionAxesEnabled,mf as isEmojiOnlyText,wo as isFontFaceRegistered,Re as isHighEndDevice,We as isInertNode,Sr as isInteractive,Ge as isKeyframeEasing,Lr as isKnownSceneNodeType,cm as isNetTeleport,j as isPhysicsDebugEnabled,yf as isPolygonConvex,gf as isProjectScriptEntry,df as isProjectScriptPath,_ as isSameTextureRegion,so as isScriptComponent,hf as isScriptComponentClass,N as isSequenceAnimationFrame,Fm as isSfxPreset,$o as isShaderEffectHost,sr as isSliceBorderEmpty,ao as isSpineModuleAvailable,s as isTestHarnessComponentType,pf as isTextProperty,rr as isTextureResourceRef,Wm as isTrackValueType,ne as labelDecorationPadding,ke as labelGlowBlurPx,le as labelGlowPasses,qe as layoutLabelText,yo as loadProjectFonts,io as loadSpineAsset,bo as loadSpineModule,H as makeSchemaPropertyReactive,To as mergeSchemas,bm as netFlagsByte,am as netOwnershipOf,Q as normalizeAnimationResource,Lo as normalizeBlendMode2D,Zm as normalizeKeyframeAnimationSet,Jr as normalizeNodeTypeName,Hp as normalizePolygonConfig,T as normalizeProjectTextureFiltering,qr as normalizeSliceBorder,se as paintLabelCanvas,br as parseEventArgs,ho as parseSpineAtlasPageNames,np as playable,Hf as pointInPolygon,vf as polygonArea,Cf as polygonBounds,wf as polygonCentroid,uf as polygonSignedArea,Tp as property,Qf as quaternionToRotationZ,J as reactiveSchemaPropertyNames,Ur as readBooleanArg,Tr as readNumberArg,Vr as readStringArg,Pf as readWorldTransform2D,Lf as rectIntersectsConvexPolygon,Kf as rectIntersectsPolygon,Sp as registerBuiltInScripts,e as registerGameDebug,rm as registerNetworkPrefab,d as registerPhysicsDebugSource,jf as registerProjectScriptExports,a as registerRuntimeLivePropertySink,p as registerRuntimeSceneRoot,v as registerScriptErrorSink,Wo as registerShaderEffect,z as registerSignalEmitSink,C as reportScriptError,B as reportSignalEmit,em as resetNetKindTable,vo as resetProjectFontRegistry,cr as resolveAnimatedSpriteFrameLayout,dr as resolveFramePointToLocal,gr as resolveFramePolygonToLocal,xr as resolveLocalizedText,Bo as resolvePendingComponents,jp as resolveRuntimeTimeConfig,rf as resolveSceneDiskKey,Kr as resolveSceneNodeType,go as resolveSpinePagePath,Rm as resolveTrackTarget,Km as sampleTrack,X as sanitizeTextureRegion,Nf as segmentPolygonT,Ip as serializePolygonConfig,pr as setActiveLocalization,lp as setDefaultStoreUrl,l as setDirectionAxesEnabled,om as setNetworkPrefabTable,Io as setNodePropertyValue,i as setPhysicsDebugEnabled,kp as setPlayableAdapter,tp as setPostprocessingModuleLoader,Me as setProjectAODefault,U as setProjectTextureFiltering,xo as setSpineModuleLoader,_o as shaderEffectsCacheKey,zr as shakeNoise,co as spineAssetKey,mo as stampAtlasView,Up as state,oe as styledTextPadding,Mr as suggestSceneNodeType,Ve as summarizeRenderabilityIssues,Wf as sweepCircleAgainstPolygon,Pm as toSchemaValue,Df as transformPolygon,cf as userScriptComponentId,Ho as validatePropertyValue,cp as worldToCanvasLogical,dp as worldToCanvasThroughCamera};
@@ -1,210 +1,210 @@
1
- ---
2
- name: pix3-nodes
3
- description: Compact property reference for the Pix3 2D node types used by the recipes — Group2D, ColorRect2D, Sprite2D, Label2D, Button2D, Bar2D, CanvasLayer2D, PostProcess — plus the Node2D base properties, anchor layout and paint order; the full per-node reference (every 2D and 3D node) is reference.md beside it. Use when adding a node to a .pix3scene, choosing which node type to use, or checking a property name/type before writing it.
4
- ---
5
-
6
- <!-- Pix3 agent kit 1.6.0 -->
7
- # 2D nodes — compact reference
8
-
9
- Property names below are the exact YAML keys under `properties:`. A misspelled key is kept
10
- silently and does nothing, so copy them from here or from an existing node in the project
11
- (`pix3 check` flags unknown keys). Every node type, 2D and 3D, is in `reference.md` beside
12
- this file — grep `### <NodeName>` there instead of reading it whole.
13
-
14
- ## Which node
15
-
16
- | Need | Node |
17
- | --- | --- |
18
- | Scene root, a panel, a spawn band, any sized container | `Group2D` |
19
- | Solid rectangle; the honest placeholder | `ColorRect2D` |
20
- | An image (PNG/JPG/WebP) | `Sprite2D` |
21
- | A nine-slice panel / tiled background | `TiledSprite2D` |
22
- | Text | `Label2D` |
23
- | Tappable button | `Button2D` |
24
- | Health / progress bar | `Bar2D` |
25
- | Fixed HUD layer that ignores the 2D camera and is never post-processed | `CanvasLayer2D` |
26
- | Bloom / vignette | `PostProcess` (no transform; set `affect2D: true` in a 2D scene) |
27
- | Bare transform, no size | `Node2D` |
28
-
29
- Other 2D types exist (`AnimatedSprite2D`, `Slider2D`, `Checkbox2D`, `Joystick2D`,
30
- `ScrollContainer2D`, `InventorySlot2D`, `Camera2D`, `SpineSkeleton2D`); do not guess their
31
- keys — read their section in `reference.md` first. `Layout2D` is removed and fails the load.
32
-
33
- ## Node2D — every 2D node has these
34
-
35
- | Key | Type | Default | Notes |
36
- | --- | --- | --- | --- |
37
- | `transform` | block | — | `{ position: [x, y], scale: [sx, sy], rotation: degrees }` — centre of the node, Y up, positive rotation = counter-clockwise |
38
- | `visible` | bool | true | On an overlay **instance**: editor-only hide (see pix3-scene-format) |
39
- | `initiallyVisible` | bool | — | Applied when play mode starts; authored on an overlay file's root |
40
- | `opacity` | number | 1 | 0..1, multiplies into children |
41
- | `zIndex` | int | 0 | -4096..4096; higher draws on top; ties = tree order |
42
- | `zAsRelative` | bool | true | Add to the parent's z instead of absolute |
43
- | `blendMode` | enum | normal | `normal`, `additive` (glow/VFX), `multiply`, `subtract`; not inherited |
44
- | `layout` | block | — | `{ enabled, horizontalAlign: left/center/right/stretch, verticalAlign: top/center/bottom/stretch }` |
45
- | `flow` | block | — | `{ enabled, direction: vertical/horizontal, gap, paddingX, paddingY, align: start/center/end, autoSize }` |
46
-
47
- Paint order = tree order (later sibling / deeper node on top) unless `zIndex` says otherwise.
48
- Shader `effects` exist only on `Sprite2D`, `AnimatedSprite2D` and `Button2D`.
49
-
50
- ## Group2D
51
-
52
- Sized container; draws nothing. Use it as the scene root (sized to `viewportBaseSize` from
53
- `pix3project.yaml` — `width: 1080, height: 1920` in the recipes — `layout` stretch/stretch) and for any panel whose children anchor or flow against it.
54
-
55
- | Key | Type | Default |
56
- | --- | --- | --- |
57
- | `width` | number | 100 |
58
- | `height` | number | 100 |
59
-
60
- ## ColorRect2D
61
-
62
- The only untextured 2D fill. Build the game from these first, swap to sprites later.
63
-
64
- | Key | Type | Default | Notes |
65
- | --- | --- | --- | --- |
66
- | `width` | number | 100 | |
67
- | `height` | number | 100 | |
68
- | `color` | colour | "#ffffff" | Quoted hex. Alpha via `opacity`, not the colour |
69
-
70
- ## Sprite2D
71
-
72
- | Key | Type | Default | Notes |
73
- | --- | --- | --- | --- |
74
- | `texture` | texture | — | `{ type: 'texture', url: 'res://sprites/x.png' }` (a bare `texturePath` string is only read for compatibility) |
75
- | `width` | number | texture width | Display size; the image is scaled to it (64 until the texture loads) |
76
- | `height` | number | texture height | |
77
- | `anchor` | vector2 | [0.5, 0.5] | Pivot the image is positioned around |
78
- | `aspectRatioLocked` | bool | false | Keep the texture's aspect while resizing |
79
- | `effects` | list | — | `[{ type: core:tint, params: { color: "#hex", amount: 1 } }]` — how a near-white placeholder gets its colour |
80
-
81
- There is no tint property: colour a sprite with a `core:tint` effect. Recipe placeholders are
82
- near-white `sprites/ph-*.png` + `effects: [{ type: core:tint, params: { color, amount: 1 } }]`.
83
-
84
- ### An SVG you write as a sprite
85
-
86
- A `.svg` in `sprites/` works as a `Sprite2D` / `Button2D` texture in the editor, in play mode and
87
- in the single-file export — **when a browser `<img>` would decode it**, because that is how every
88
- texture loads. The browser rasterises it once, at its own `width`/`height`, and the GPU scales that
89
- bitmap. So:
90
-
91
- ```xml
92
- <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
93
- <circle cx="64" cy="64" r="56" fill="#ffcf33" stroke="#8a5a00" stroke-width="8"/>
94
- </svg>
95
- ```
96
-
97
- - `xmlns="http://www.w3.org/2000/svg"` on the root — without it nothing renders.
98
- - `width` and `height` in px **and** a matching `viewBox`. Without a size the browser invents a
99
- 300x150 box (art letterboxed or cropped, the sprite auto-sizes to 300x150).
100
- - Make `width`/`height` the size the node draws it at (the node's `width`/`height`), or larger —
101
- a 32px SVG drawn at 256px is a blurry bitmap, not crisp vectors.
102
- - Self-contained: no `<image href="http…">`, no `<use href="other.svg#…">`, no CSS `url(file)`,
103
- no `@import`, no webfonts — none of them load when an SVG is an image (only `#id` and `data:`
104
- do). Text only with generic families (`font-family="sans-serif"`); better, draw shapes.
105
-
106
- `pix3 validate` checks every `.svg` a scene references: `E_SVG_INVALID` (no `<svg>` root or no
107
- xmlns), `E_SVG_NO_SIZE`, `W_SVG_VIEWBOX_ONLY`, `W_SVG_EXTERNAL_REF`.
108
-
109
- ## Label2D
110
-
111
- | Key | Type | Default | Notes |
112
- | --- | --- | --- | --- |
113
- | `label` | string | "" | The text; `\n` breaks lines. Never only emoji |
114
- | `labelFontSize` | number | 16 | px |
115
- | `labelColor` | colour | "#ffffff" | |
116
- | `labelFontFamily` | string | Arial | A family the project ships in `fonts/`, else a system face |
117
- | `labelFontWeight` | number | 400 | 400 / 700 / 900 … |
118
- | `labelAlign` | enum | center | `left`, `center`, `right` |
119
- | `labelVAlign` | enum | middle | `top`, `middle`, `bottom` |
120
- | `width` / `height` | number | 0 | 0 = auto-size, no wrap. Set `width` to word-wrap |
121
- | `glowColor` / `glowStrength` | colour / 0–4 | "#ffffff" / 0 | Canvas-drawn neon glow; 2–3 reads as neon |
122
- | `outlineColor` / `outlineWidth` | colour / px | "#000000" / 0 | Contrast outline |
123
- | `labelShadowColor`, `labelShadowOffsetX/Y`, `labelLetterSpacing`, `typewriterSpeed` | | | see `reference.md` |
124
-
125
- Scripts: `label.setText('SCORE 5')`.
126
-
127
- ## Button2D
128
-
129
- | Key | Type | Default | Notes |
130
- | --- | --- | --- | --- |
131
- | `width` / `height` | number | 100 / 40 | |
132
- | `label` | string | "" | Caption; `labelFontSize` (16), `labelColor` ("#ffffff"), `labelAlign` as on Label2D |
133
- | `backgroundColor` | colour | "#4a4a4a" | Flat idle colour |
134
- | `hoverColor` | colour | "#5a5a5a" | |
135
- | `pressedColor` | colour | "#3a3a3a" | |
136
- | `buttonAction` | string | "Submit" | Free identifier for scripts |
137
- | `enabled` | bool | true | A disabled button takes no input |
138
- | `textureNormal` / `textureHover` / `texturePressed` / `textureDisabled` | texture | — | Skin sprites; a set slot replaces the flat colour |
139
- | `sliceBorderLeft/Right/Top/Bottom` | number | 0 | Nine-slice insets in source pixels |
140
- | `effects` | list | — | Shader effects on the skin |
141
-
142
- Signals: `pressed` (finger/button went down inside it), `released`, `click` (down **and** up
143
- inside it — a completed tap; sliding off cancels it), `pointerdown`, `pointerup`. The recipes
144
- wire `pressed` for an instant response; use `click` where an accidental touch must be
145
- cancellable (menus, purchases). `button.connect('click', this, handler)`.
146
-
147
- ## Bar2D
148
-
149
- | Key | Type | Default | Notes |
150
- | --- | --- | --- | --- |
151
- | `width` / `height` | number | 150 / 20 | |
152
- | `minValue` / `maxValue` / `value` | number | 0 / 100 / 100 | Fill = value within the range (clamped) |
153
- | `barColor` | colour | "#ff4444" | Fill colour |
154
- | `backBackgroundColor` | colour | "#333333" | Trough colour |
155
- | `showBorder` / `borderColor` / `borderWidth` | bool / colour / px | true / "#000000" / 2 | The recipes set `showBorder: false` |
156
- | `textureTrough` / `textureFill` | texture | — | Skin sprites |
157
- | `sliceBorderLeft/Right/Top/Bottom` | number | 0 | Nine-slice insets of the skins |
158
-
159
- Scripts: `bar.maxValue = n; bar.setValue(v)`.
160
-
161
- ## CanvasLayer2D
162
-
163
- A HUD band: rendered after post-processing (never blooms) with a fixed camera. Same keys as
164
- `Group2D` (`width`, `height`, transform, layout). Put score/time/lives/buttons under it.
165
- Its ancestors' transform, opacity and visibility still apply.
166
-
167
- ## PostProcess
168
-
169
- No transform — keys sit flat in `properties`. The first active one in the tree wins.
170
-
171
- | Key | Type | Default | Notes |
172
- | --- | --- | --- | --- |
173
- | `affect2D` | bool | true | Apply to the 2D layer too |
174
- | `bloomEnabled` / `bloomIntensity` / `bloomThreshold` | bool / number / number | true / 1 / 0.9 | Bloom lifts only what is already bright |
175
- | `bloomSmoothing` / `bloomRadius` | number | | |
176
- | `vignetteEnabled` / `vignetteOffset` / `vignetteDarkness` | bool / number / number | | |
177
- | `chromaticAberrationEnabled` / `chromaticAberrationOffset` | bool / number | | |
178
-
179
- Brighten the colour or lower `bloomThreshold` rather than raising `bloomIntensity`. The
180
- opposite for a pastel or light look: a pale ground sits above a low threshold and the whole
181
- screen blooms — **raise** `bloomThreshold` (0.85–0.95) so only the accents glow.
182
-
183
- ## Example — a new HUD label anchored top-right
184
-
185
- ```yaml
186
- - id: combo-label
187
- type: Label2D
188
- name: Combo Label
189
- properties:
190
- label: ""
191
- labelFontSize: 40
192
- labelColor: "#f5ae39"
193
- labelAlign: right
194
- transform:
195
- position: [340, 790]
196
- scale: [1, 1]
197
- rotation: 0
198
- layout:
199
- enabled: true
200
- horizontalAlign: right
201
- verticalAlign: top
202
- children: []
203
- ```
204
-
205
- ## Known gaps
206
-
207
- - On a **cloud** project (opened from the Pix3 server, not a folder or `pix3 serve`) an `.svg`
208
- sprite renders on first load and then goes blank: the local cache hands SVGs back as
209
- `text/plain`, which no browser decodes as an image. Folder and `pix3 serve` projects are fine;
210
- on cloud, use a PNG.
1
+ ---
2
+ name: pix3-nodes
3
+ description: Compact property reference for the Pix3 2D node types used by the recipes — Group2D, ColorRect2D, Sprite2D, Label2D, Button2D, Bar2D, CanvasLayer2D, PostProcess — plus the Node2D base properties, anchor layout and paint order; the full per-node reference (every 2D and 3D node) is reference.md beside it. Use when adding a node to a .pix3scene, choosing which node type to use, or checking a property name/type before writing it.
4
+ ---
5
+
6
+ <!-- Pix3 agent kit 1.6.2 -->
7
+ # 2D nodes — compact reference
8
+
9
+ Property names below are the exact YAML keys under `properties:`. A misspelled key is kept
10
+ silently and does nothing, so copy them from here or from an existing node in the project
11
+ (`pix3 check` flags unknown keys). Every node type, 2D and 3D, is in `reference.md` beside
12
+ this file — grep `### <NodeName>` there instead of reading it whole.
13
+
14
+ ## Which node
15
+
16
+ | Need | Node |
17
+ | --- | --- |
18
+ | Scene root, a panel, a spawn band, any sized container | `Group2D` |
19
+ | Solid rectangle; the honest placeholder | `ColorRect2D` |
20
+ | An image (PNG/JPG/WebP) | `Sprite2D` |
21
+ | A nine-slice panel / tiled background | `TiledSprite2D` |
22
+ | Text | `Label2D` |
23
+ | Tappable button | `Button2D` |
24
+ | Health / progress bar | `Bar2D` |
25
+ | Fixed HUD layer that ignores the 2D camera and is never post-processed | `CanvasLayer2D` |
26
+ | Bloom / vignette | `PostProcess` (no transform; set `affect2D: true` in a 2D scene) |
27
+ | Bare transform, no size | `Node2D` |
28
+
29
+ Other 2D types exist (`AnimatedSprite2D`, `Slider2D`, `Checkbox2D`, `Joystick2D`,
30
+ `ScrollContainer2D`, `InventorySlot2D`, `Camera2D`, `SpineSkeleton2D`); do not guess their
31
+ keys — read their section in `reference.md` first. `Layout2D` is removed and fails the load.
32
+
33
+ ## Node2D — every 2D node has these
34
+
35
+ | Key | Type | Default | Notes |
36
+ | --- | --- | --- | --- |
37
+ | `transform` | block | — | `{ position: [x, y], scale: [sx, sy], rotation: degrees }` — centre of the node, Y up, positive rotation = counter-clockwise |
38
+ | `visible` | bool | true | On an overlay **instance**: editor-only hide (see pix3-scene-format) |
39
+ | `initiallyVisible` | bool | — | Applied when play mode starts; authored on an overlay file's root |
40
+ | `opacity` | number | 1 | 0..1, multiplies into children |
41
+ | `zIndex` | int | 0 | -4096..4096; higher draws on top; ties = tree order |
42
+ | `zAsRelative` | bool | true | Add to the parent's z instead of absolute |
43
+ | `blendMode` | enum | normal | `normal`, `additive` (glow/VFX), `multiply`, `subtract`; not inherited |
44
+ | `layout` | block | — | `{ enabled, horizontalAlign: left/center/right/stretch, verticalAlign: top/center/bottom/stretch }` |
45
+ | `flow` | block | — | `{ enabled, direction: vertical/horizontal, gap, paddingX, paddingY, align: start/center/end, autoSize }` |
46
+
47
+ Paint order = tree order (later sibling / deeper node on top) unless `zIndex` says otherwise.
48
+ Shader `effects` exist only on `Sprite2D`, `AnimatedSprite2D` and `Button2D`.
49
+
50
+ ## Group2D
51
+
52
+ Sized container; draws nothing. Use it as the scene root (sized to `viewportBaseSize` from
53
+ `pix3project.yaml` — `width: 1080, height: 1920` in the recipes — `layout` stretch/stretch) and for any panel whose children anchor or flow against it.
54
+
55
+ | Key | Type | Default |
56
+ | --- | --- | --- |
57
+ | `width` | number | 100 |
58
+ | `height` | number | 100 |
59
+
60
+ ## ColorRect2D
61
+
62
+ The only untextured 2D fill. Build the game from these first, swap to sprites later.
63
+
64
+ | Key | Type | Default | Notes |
65
+ | --- | --- | --- | --- |
66
+ | `width` | number | 100 | |
67
+ | `height` | number | 100 | |
68
+ | `color` | colour | "#ffffff" | Quoted hex. Alpha via `opacity`, not the colour |
69
+
70
+ ## Sprite2D
71
+
72
+ | Key | Type | Default | Notes |
73
+ | --- | --- | --- | --- |
74
+ | `texture` | texture | — | `{ type: 'texture', url: 'res://sprites/x.png' }` (a bare `texturePath` string is only read for compatibility) |
75
+ | `width` | number | texture width | Display size; the image is scaled to it (64 until the texture loads) |
76
+ | `height` | number | texture height | |
77
+ | `anchor` | vector2 | [0.5, 0.5] | Pivot the image is positioned around |
78
+ | `aspectRatioLocked` | bool | false | Keep the texture's aspect while resizing |
79
+ | `effects` | list | — | `[{ type: core:tint, params: { color: "#hex", amount: 1 } }]` — how a near-white placeholder gets its colour |
80
+
81
+ There is no tint property: colour a sprite with a `core:tint` effect. Recipe placeholders are
82
+ near-white `sprites/ph-*.png` + `effects: [{ type: core:tint, params: { color, amount: 1 } }]`.
83
+
84
+ ### An SVG you write as a sprite
85
+
86
+ A `.svg` in `sprites/` works as a `Sprite2D` / `Button2D` texture in the editor, in play mode and
87
+ in the single-file export — **when a browser `<img>` would decode it**, because that is how every
88
+ texture loads. The browser rasterises it once, at its own `width`/`height`, and the GPU scales that
89
+ bitmap. So:
90
+
91
+ ```xml
92
+ <svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128">
93
+ <circle cx="64" cy="64" r="56" fill="#ffcf33" stroke="#8a5a00" stroke-width="8"/>
94
+ </svg>
95
+ ```
96
+
97
+ - `xmlns="http://www.w3.org/2000/svg"` on the root — without it nothing renders.
98
+ - `width` and `height` in px **and** a matching `viewBox`. Without a size the browser invents a
99
+ 300x150 box (art letterboxed or cropped, the sprite auto-sizes to 300x150).
100
+ - Make `width`/`height` the size the node draws it at (the node's `width`/`height`), or larger —
101
+ a 32px SVG drawn at 256px is a blurry bitmap, not crisp vectors.
102
+ - Self-contained: no `<image href="http…">`, no `<use href="other.svg#…">`, no CSS `url(file)`,
103
+ no `@import`, no webfonts — none of them load when an SVG is an image (only `#id` and `data:`
104
+ do). Text only with generic families (`font-family="sans-serif"`); better, draw shapes.
105
+
106
+ `pix3 validate` checks every `.svg` a scene references: `E_SVG_INVALID` (no `<svg>` root or no
107
+ xmlns), `E_SVG_NO_SIZE`, `W_SVG_VIEWBOX_ONLY`, `W_SVG_EXTERNAL_REF`.
108
+
109
+ ## Label2D
110
+
111
+ | Key | Type | Default | Notes |
112
+ | --- | --- | --- | --- |
113
+ | `label` | string | "" | The text; `\n` breaks lines. Never only emoji |
114
+ | `labelFontSize` | number | 16 | px |
115
+ | `labelColor` | colour | "#ffffff" | |
116
+ | `labelFontFamily` | string | Arial | A family the project ships in `fonts/`, else a system face |
117
+ | `labelFontWeight` | number | 400 | 400 / 700 / 900 … |
118
+ | `labelAlign` | enum | center | `left`, `center`, `right` |
119
+ | `labelVAlign` | enum | middle | `top`, `middle`, `bottom` |
120
+ | `width` / `height` | number | 0 | 0 = auto-size, no wrap. Set `width` to word-wrap |
121
+ | `glowColor` / `glowStrength` | colour / 0–4 | "#ffffff" / 0 | Canvas-drawn neon glow; 2–3 reads as neon |
122
+ | `outlineColor` / `outlineWidth` | colour / px | "#000000" / 0 | Contrast outline |
123
+ | `labelShadowColor`, `labelShadowOffsetX/Y`, `labelLetterSpacing`, `typewriterSpeed` | | | see `reference.md` |
124
+
125
+ Scripts: `label.setText('SCORE 5')`.
126
+
127
+ ## Button2D
128
+
129
+ | Key | Type | Default | Notes |
130
+ | --- | --- | --- | --- |
131
+ | `width` / `height` | number | 100 / 40 | |
132
+ | `label` | string | "" | Caption; `labelFontSize` (16), `labelColor` ("#ffffff"), `labelAlign` as on Label2D |
133
+ | `backgroundColor` | colour | "#4a4a4a" | Flat idle colour |
134
+ | `hoverColor` | colour | "#5a5a5a" | |
135
+ | `pressedColor` | colour | "#3a3a3a" | |
136
+ | `buttonAction` | string | "Submit" | Free identifier for scripts |
137
+ | `enabled` | bool | true | A disabled button takes no input |
138
+ | `textureNormal` / `textureHover` / `texturePressed` / `textureDisabled` | texture | — | Skin sprites; a set slot replaces the flat colour |
139
+ | `sliceBorderLeft/Right/Top/Bottom` | number | 0 | Nine-slice insets in source pixels |
140
+ | `effects` | list | — | Shader effects on the skin |
141
+
142
+ Signals: `pressed` (finger/button went down inside it), `released`, `click` (down **and** up
143
+ inside it — a completed tap; sliding off cancels it), `pointerdown`, `pointerup`. The recipes
144
+ wire `pressed` for an instant response; use `click` where an accidental touch must be
145
+ cancellable (menus, purchases). `button.connect('click', this, handler)`.
146
+
147
+ ## Bar2D
148
+
149
+ | Key | Type | Default | Notes |
150
+ | --- | --- | --- | --- |
151
+ | `width` / `height` | number | 150 / 20 | |
152
+ | `minValue` / `maxValue` / `value` | number | 0 / 100 / 100 | Fill = value within the range (clamped) |
153
+ | `barColor` | colour | "#ff4444" | Fill colour |
154
+ | `backBackgroundColor` | colour | "#333333" | Trough colour |
155
+ | `showBorder` / `borderColor` / `borderWidth` | bool / colour / px | true / "#000000" / 2 | The recipes set `showBorder: false` |
156
+ | `textureTrough` / `textureFill` | texture | — | Skin sprites |
157
+ | `sliceBorderLeft/Right/Top/Bottom` | number | 0 | Nine-slice insets of the skins |
158
+
159
+ Scripts: `bar.maxValue = n; bar.setValue(v)`.
160
+
161
+ ## CanvasLayer2D
162
+
163
+ A HUD band: rendered after post-processing (never blooms) with a fixed camera. Same keys as
164
+ `Group2D` (`width`, `height`, transform, layout). Put score/time/lives/buttons under it.
165
+ Its ancestors' transform, opacity and visibility still apply.
166
+
167
+ ## PostProcess
168
+
169
+ No transform — keys sit flat in `properties`. The first active one in the tree wins.
170
+
171
+ | Key | Type | Default | Notes |
172
+ | --- | --- | --- | --- |
173
+ | `affect2D` | bool | true | Apply to the 2D layer too |
174
+ | `bloomEnabled` / `bloomIntensity` / `bloomThreshold` | bool / number / number | true / 1 / 0.9 | Bloom lifts only what is already bright |
175
+ | `bloomSmoothing` / `bloomRadius` | number | | |
176
+ | `vignetteEnabled` / `vignetteOffset` / `vignetteDarkness` | bool / number / number | | |
177
+ | `chromaticAberrationEnabled` / `chromaticAberrationOffset` | bool / number | | |
178
+
179
+ Brighten the colour or lower `bloomThreshold` rather than raising `bloomIntensity`. The
180
+ opposite for a pastel or light look: a pale ground sits above a low threshold and the whole
181
+ screen blooms — **raise** `bloomThreshold` (0.85–0.95) so only the accents glow.
182
+
183
+ ## Example — a new HUD label anchored top-right
184
+
185
+ ```yaml
186
+ - id: combo-label
187
+ type: Label2D
188
+ name: Combo Label
189
+ properties:
190
+ label: ""
191
+ labelFontSize: 40
192
+ labelColor: "#f5ae39"
193
+ labelAlign: right
194
+ transform:
195
+ position: [340, 790]
196
+ scale: [1, 1]
197
+ rotation: 0
198
+ layout:
199
+ enabled: true
200
+ horizontalAlign: right
201
+ verticalAlign: top
202
+ children: []
203
+ ```
204
+
205
+ ## Known gaps
206
+
207
+ - On a **cloud** project (opened from the Pix3 server, not a folder or `pix3 serve`) an `.svg`
208
+ sprite renders on first load and then goes blank: the local cache hands SVGs back as
209
+ `text/plain`, which no browser decodes as an image. Folder and `pix3 serve` projects are fine;
210
+ on cloud, use a PNG.
@@ -1,14 +1,14 @@
1
- <!-- Pix3 agent kit 1.6.0 — generated from docs/node-types-reference.md. Do not edit: pix3 kit --update regenerates it. -->
2
- # Pix3 node reference
3
-
4
- Every node type the loader knows, with its properties. **Grep `### <NodeName>`** for one node
5
- instead of reading this file. Keys are YAML keys under `properties:`; `position` / `rotation` /
6
- `scale` go in the `transform:` block, `flow.*` in the `flow:` block, and the anchor keys in
7
- `layout:` (see `pix3-scene-format`). Where a row says "not saved", the key does nothing in a file.
8
- Source paths quoted here (`src/…`, `packages/…`) are files of the Pix3 engine repository, not of this project.
9
-
10
- ## Quick reference
11
-
1
+ <!-- Pix3 agent kit 1.6.2 — generated from docs/node-types-reference.md. Do not edit: pix3 kit --update regenerates it. -->
2
+ # Pix3 node reference
3
+
4
+ Every node type the loader knows, with its properties. **Grep `### <NodeName>`** for one node
5
+ instead of reading this file. Keys are YAML keys under `properties:`; `position` / `rotation` /
6
+ `scale` go in the `transform:` block, `flow.*` in the `flow:` block, and the anchor keys in
7
+ `layout:` (see `pix3-scene-format`). Where a row says "not saved", the key does nothing in a file.
8
+ Source paths quoted here (`src/…`, `packages/…`) are files of the Pix3 engine repository, not of this project.
9
+
10
+ ## Quick reference
11
+
12
12
  | Node Type | Key Properties |
13
13
  | -------------------- | ---------------------------------------------------------------------------------------------------- |
14
14
  | NodeBase | id, name, type, visible, locked |
@@ -43,10 +43,10 @@ Source paths quoted here (`src/…`, `packages/…`) are files of the Pix3 engin
43
43
  | InventorySlot2D | width, height, quantity, showQuantity, backdropColor, selectionColor |
44
44
  | AudioPlayer | audioTrack, autoplay, loop, volume, bus, pitchVariation, volumeVariation |
45
45
  | PostProcess | affect2D, bloom*, vignette*, chromaticAberration*, aoMode, ssao*, lut\* |
46
- | Group | NodeBase only — an organisational container |
47
-
48
- ## Choosing the right node
49
-
46
+ | Group | NodeBase only — an organisational container |
47
+
48
+ ## Choosing the right node
49
+
50
50
  #### For 2D Projects:
51
51
 
52
52
  1. **Start with a Group2D** as your scene root (the game viewport size comes from project settings; use anchor layout for responsiveness)
@@ -67,8 +67,8 @@ Source paths quoted here (`src/…`, `packages/…`) are files of the Pix3 engin
67
67
  5. Add **PointLightNode** or **SpotLightNode** for localized lighting
68
68
  6. Add **AmbientLightNode** or **HemisphereLightNode** as fill so unlit faces are not black
69
69
  7. For cinematics / dynamic framing, add **VirtualCamera3D** nodes and a **Camera Brain** (`core:CameraBrain`) on the Camera3D to blend between them by priority
70
- 8. For bloom / vignette / colour grading, add one **PostProcess** node anywhere in the tree
71
-
70
+ 8. For bloom / vignette / colour grading, add one **PostProcess** node anywhere in the tree
71
+
72
72
  ## 2D Nodes
73
73
 
74
74
  All 2D nodes operate in screen space and are rendered using an orthographic camera. They use a left-handed coordinate system where X increases to the right and Y increases upward.
@@ -252,6 +252,14 @@ node, use the `core:AnimationPlayer` behaviour.
252
252
  `fps` property here, unlike AnimatedSprite3D.
253
253
  - `freeOnFinish` + a one-shot clip is the whole "spawn an explosion" pattern: no script needed.
254
254
  - `sizeMode: native` is what you want for a trimmed spritesheet whose frames differ in size.
255
+ - **Scripts switch clips with `play(name?, { restart? })`**, not by writing `currentClip`. It
256
+ returns `false` (and changes nothing) for a clip the loaded resource does not have — no silent
257
+ fallback to the first clip. A different clip starts at frame 0; the current clip keeps its
258
+ position unless `restart: true`, which is also how a finished one-shot (`isPlaying` went false on
259
+ its last frame) is played again — a repeated `attack` must begin at frame 0. `getClipNames()`
260
+ lists the resource's clips once it has loaded.
261
+ - Sequence frames are keyed by their `texturePath`, so clips are independent: `attack[0]` and
262
+ `idle[0]` are different files and never share a texture slot.
255
263
 
256
264
  ---
257
265
 
@@ -758,8 +766,8 @@ A Godot-style `CanvasLayer` — a clean UI overlay band. Its subtree renders on
758
766
  - Content under a CanvasLayer2D is pinned in design-space coordinates regardless of the active Camera2D, and its pointer hit-tests stay correct while the world camera pans.
759
767
  - Multiple CanvasLayer2D nodes stack by scene-tree order (like ordinary 2D draw order).
760
768
  - Unlike Godot, inheritance is **not** broken: an ancestor's transform, opacity, and visibility still flow into the overlay subtree — only the render camera differs. Author at the scene root for a fully independent layer.
761
- - Runtime overlay behavior is play-mode only; in the editor it renders as a normal Group2D container.
762
-
769
+ - Runtime overlay behavior is play-mode only; in the editor it renders as a normal Group2D container.
770
+
763
771
  ## 3D Nodes
764
772
 
765
773
  All 3D nodes operate in world space using a perspective camera by default. They use a right-handed coordinate system where X is right, Y is up, and Z is toward the viewer.
@@ -1226,8 +1234,8 @@ world-space; there is no migration — the field finally does what its label say
1226
1234
  `emissionRate: 0` so it only fires from bursts. Bursts are deferred to after the
1227
1235
  simulation loop, so self-reference and any tick order are safe (≤1 frame latency).
1228
1236
  - Trail material is additive and untextured in v1.
1229
- - All new fields are flat scalars, so they are keyframe-animatable from the timeline.
1230
-
1237
+ - All new fields are flat scalars, so they are keyframe-animatable from the timeline.
1238
+
1231
1239
  ## Post-processing
1232
1240
 
1233
1241
  ### PostProcess
@@ -1266,8 +1274,8 @@ and builds a composer from it; with no such node the plain two-pass path runs an
1266
1274
  apply.
1267
1275
  - The whole stack is one lazily-created composer. Every effect off = no composer at all.
1268
1276
  - In a single-file playable export, `postprocessing` is pulled in through a generated
1269
- `virtual:runtime-*` module — using this node is fine for an export, it just adds weight.
1270
-
1277
+ `virtual:runtime-*` module — using this node is fine for an export, it just adds weight.
1278
+
1271
1279
  ## Audio
1272
1280
 
1273
1281
  ### AudioPlayer
@@ -1328,4 +1336,4 @@ authored mix.
1328
1336
  automatically blends to `'muffled'` and back on return to normal speed. This is
1329
1337
  driven by the slow-mo base scale, **not** the frozen scale — a `hitstop(…)`
1330
1338
  freeze does **not** muffle audio (otherwise every micro-freeze would pump the
1331
- filter).
1339
+ filter).