@pix3/cli 1.6.3 → 2.0.0-alpha.0
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.
- package/LICENSE +201 -201
- package/README.md +722 -788
- package/dist/index.js +557 -421
- package/dist/runtime-types.json +1 -1
- package/dist/smoke/prebuilt/{build-7MIXIMSZ.mjs → build-7REMSA2S.mjs} +52 -52
- package/dist/smoke/prebuilt/chunk-4DGG2BKR.mjs +2 -0
- package/dist/smoke/prebuilt/chunk-YLBMUJ2H.mjs +238 -0
- package/dist/smoke/prebuilt/runtime.mjs +1 -1
- package/dist/smoke/prebuilt/smoke-worker.mjs +211 -2
- package/dist/smoke/prebuilt/tree-defaults.mjs +1 -1
- package/dist/validate/prebuilt/{build-AUGKXER3.js → build-ADF5EEE2.js} +52 -52
- package/dist/validate/prebuilt/bundle-main.js +223 -18
- package/dist/validate/prebuilt/chunk-VIHIF4G2.js +238 -0
- package/dist/validate/prebuilt/runtime.js +1 -1
- package/kit/files/.claude/skills/pix3-editor/SKILL.md +200 -0
- package/kit/files/.claude/skills/pix3-nodes/SKILL.md +13 -15
- package/kit/files/.claude/skills/pix3-nodes/reference.md +77 -71
- package/kit/files/.claude/skills/pix3-scene-format/SKILL.md +38 -41
- package/kit/files/.claude/skills/pix3-scene-format/pix3anim.md +185 -0
- package/kit/files/.claude/skills/pix3-scene-format/project-files.md +244 -0
- package/kit/files/.claude/skills/pix3-scene-format/reference.md +28 -16
- package/kit/files/.claude/skills/pix3-scripts/SKILL.md +34 -24
- package/kit/files/.claude/skills/pix3-scripts/reference.md +68 -141
- package/kit/files/.claude/skills/pix3-verify/SKILL.md +65 -326
- package/kit/files/.claude/skills/pix3-verify/reference.md +2 -14
- package/kit/files/AGENTS.md +76 -84
- package/kit/files/design/tests/bots/pix3-test-bot.d.ts +89 -0
- package/kit/kit.json +8 -5
- package/package.json +62 -54
- package/templates/2d/files/scenes/main.pix3scene +31 -0
- package/templates/2d/template.yaml +11 -0
- package/templates/3d/files/scenes/main.pix3scene +50 -0
- package/templates/3d/template.yaml +11 -0
- package/templates/base/files/README.md +39 -0
- package/templates/base/files/gitignore +11 -0
- package/templates/base/files/index.html +23 -0
- package/templates/base/files/package.json +28 -0
- package/templates/base/files/src/main.ts +3 -0
- package/templates/base/files/tsconfig.json +17 -0
- package/templates/base/files/vite.config.ts +10 -0
- package/dist/smoke/prebuilt/chunk-CBFYKDS7.mjs +0 -2
- package/dist/smoke/prebuilt/chunk-VJHJ5BCO.mjs +0 -239
- package/dist/validate/prebuilt/chunk-CFQFEI52.js +0 -239
- package/templates/empty-2d/files/README.md +0 -20
- package/templates/empty-2d/files/scenes/main.pix3scene +0 -68
- package/templates/empty-2d/files/sprites/pix3-logo.png +0 -0
- package/templates/empty-2d/template.yaml +0 -7
- package/templates/empty-3d/files/README.md +0 -20
- package/templates/empty-3d/files/scenes/main.pix3scene +0 -108
- package/templates/empty-3d/files/sprites/pix3-logo.png +0 -0
- package/templates/empty-3d/template.yaml +0 -7
- package/templates/idea-blank/files/README.md +0 -22
- package/templates/idea-blank/files/scenes/main.pix3scene +0 -37
- package/templates/idea-blank/template.yaml +0 -10
- package/templates/minigame-2d/files/README.md +0 -44
- package/templates/minigame-2d/files/design/tests/reachability.json +0 -1
- package/templates/minigame-2d/files/design/tests/routines/mute-music.json +0 -44
- package/templates/minigame-2d/files/scenes/main.pix3scene +0 -84
- package/templates/minigame-2d/files/scenes/menu.pix3scene +0 -118
- package/templates/minigame-2d/files/scenes/ui/settings-window.pix3scene +0 -138
- package/templates/minigame-2d/files/scripts/GameFlow.ts +0 -133
- package/templates/minigame-2d/files/scripts/MenuFlow.ts +0 -217
- package/templates/minigame-2d/files/scripts/SettingsWindow.ts +0 -198
- package/templates/minigame-2d/template.yaml +0 -10
- package/templates/playable-2d/files/README.md +0 -30
- package/templates/playable-2d/files/design/recipe.md +0 -83
- package/templates/playable-2d/files/design/tests/reachability.json +0 -4
- package/templates/playable-2d/files/design/tests/routines/intro-to-cta.json +0 -32
- package/templates/playable-2d/files/scenes/main.pix3scene +0 -111
- package/templates/playable-2d/files/scenes/ui/end-screen.pix3scene +0 -91
- package/templates/playable-2d/files/scenes/ui/intro.pix3scene +0 -65
- package/templates/playable-2d/files/scripts/CtaButton.ts +0 -55
- package/templates/playable-2d/files/scripts/GameFlow.ts +0 -256
- package/templates/playable-2d/files/sprites/pix3-logo.png +0 -0
- package/templates/playable-2d/template.yaml +0 -9
- package/templates/playable-3d/files/README.md +0 -32
- package/templates/playable-3d/files/design/recipe.md +0 -127
- package/templates/playable-3d/files/design/tests/reachability.json +0 -4
- package/templates/playable-3d/files/design/tests/routines/intro-to-cta.json +0 -32
- package/templates/playable-3d/files/scenes/main.pix3scene +0 -230
- package/templates/playable-3d/files/scenes/ui/end-screen.pix3scene +0 -91
- package/templates/playable-3d/files/scenes/ui/intro.pix3scene +0 -65
- package/templates/playable-3d/files/scripts/CtaButton.ts +0 -55
- package/templates/playable-3d/files/scripts/GameFlow.ts +0 -309
- package/templates/playable-3d/files/scripts/GameRules.ts +0 -290
- package/templates/playable-3d/files/scripts/ScoreHud.ts +0 -113
- package/templates/playable-3d/template.yaml +0 -9
- package/templates/recipe-arena-2d/files/README.md +0 -48
- package/templates/recipe-arena-2d/files/design/recipe.md +0 -127
- package/templates/recipe-arena-2d/files/design/tests/reachability.json +0 -4
- package/templates/recipe-arena-2d/files/design/tests/routines/terminal-retry.json +0 -23
- package/templates/recipe-arena-2d/files/scenes/main.pix3scene +0 -292
- package/templates/recipe-arena-2d/files/scenes/menu.pix3scene +0 -100
- package/templates/recipe-arena-2d/files/scenes/prefabs/hazard.pix3scene +0 -42
- package/templates/recipe-arena-2d/files/scenes/prefabs/pickup.pix3scene +0 -45
- package/templates/recipe-arena-2d/files/scenes/ui/result.pix3scene +0 -85
- package/templates/recipe-arena-2d/files/scripts/GameRules.ts +0 -368
- package/templates/recipe-arena-2d/files/scripts/MenuFlow.ts +0 -106
- package/templates/recipe-arena-2d/files/scripts/PlayerController.ts +0 -151
- package/templates/recipe-arena-2d/files/scripts/ScoreHud.ts +0 -94
- package/templates/recipe-arena-2d/files/scripts/Spawner.ts +0 -214
- package/templates/recipe-arena-2d/files/scripts/TouchRules.ts +0 -174
- package/templates/recipe-arena-2d/files/sprites/ph-avatar.png +0 -0
- package/templates/recipe-arena-2d/files/sprites/ph-hazard.png +0 -0
- package/templates/recipe-arena-2d/files/sprites/ph-pickup.png +0 -0
- package/templates/recipe-arena-2d/template.yaml +0 -10
- package/templates/recipe-blank-2d/files/README.md +0 -61
- package/templates/recipe-blank-2d/files/design/recipe.md +0 -148
- package/templates/recipe-blank-2d/files/design/tests/reachability.json +0 -4
- package/templates/recipe-blank-2d/files/design/tests/routines/restart.json +0 -27
- package/templates/recipe-blank-2d/files/design/tests/routines/terminal-retry.json +0 -23
- package/templates/recipe-blank-2d/files/scenes/main.pix3scene +0 -224
- package/templates/recipe-blank-2d/files/scenes/ui/result.pix3scene +0 -85
- package/templates/recipe-blank-2d/files/scripts/GameRules.ts +0 -350
- package/templates/recipe-blank-2d/files/scripts/ScoreHud.ts +0 -110
- package/templates/recipe-blank-2d/files/sprites/ph-bg.png +0 -0
- package/templates/recipe-blank-2d/files/sprites/ph-capsule.png +0 -0
- package/templates/recipe-blank-2d/files/sprites/ph-circle.png +0 -0
- package/templates/recipe-blank-2d/files/sprites/ph-orb.png +0 -0
- package/templates/recipe-blank-2d/files/sprites/ph-ring.png +0 -0
- package/templates/recipe-blank-2d/files/sprites/ph-star.png +0 -0
- package/templates/recipe-blank-2d/template.yaml +0 -10
- package/templates/recipe-bouncer-2d/files/README.md +0 -81
- package/templates/recipe-bouncer-2d/files/design/recipe.md +0 -146
- package/templates/recipe-bouncer-2d/files/design/tests/reachability.json +0 -4
- package/templates/recipe-bouncer-2d/files/design/tests/routines/terminal-retry.json +0 -23
- package/templates/recipe-bouncer-2d/files/scenes/main.pix3scene +0 -615
- package/templates/recipe-bouncer-2d/files/scenes/menu.pix3scene +0 -191
- package/templates/recipe-bouncer-2d/files/scenes/ui/result.pix3scene +0 -87
- package/templates/recipe-bouncer-2d/files/scripts/BallBody.ts +0 -298
- package/templates/recipe-bouncer-2d/files/scripts/GameRules.ts +0 -377
- package/templates/recipe-bouncer-2d/files/scripts/MenuFlow.ts +0 -109
- package/templates/recipe-bouncer-2d/files/scripts/PaddleController.ts +0 -112
- package/templates/recipe-bouncer-2d/files/scripts/ScoreHud.ts +0 -94
- package/templates/recipe-bouncer-2d/files/scripts/TouchRules.ts +0 -263
- package/templates/recipe-bouncer-2d/files/scripts/ball-collision.ts +0 -307
- package/templates/recipe-bouncer-2d/files/sprites/ph-ball.png +0 -0
- package/templates/recipe-bouncer-2d/files/sprites/ph-bg.png +0 -0
- package/templates/recipe-bouncer-2d/files/sprites/ph-bumper.png +0 -0
- package/templates/recipe-bouncer-2d/files/sprites/ph-paddle.png +0 -0
- package/templates/recipe-bouncer-2d/template.yaml +0 -10
- package/templates/recipe-grid-3d/files/README.md +0 -22
- package/templates/recipe-grid-3d/files/design/recipe.md +0 -110
- package/templates/recipe-grid-3d/files/scenes/main.pix3scene +0 -169
- package/templates/recipe-grid-3d/files/scenes/menu.pix3scene +0 -100
- package/templates/recipe-grid-3d/files/scenes/ui/result.pix3scene +0 -105
- package/templates/recipe-grid-3d/files/scripts/GridBoard.ts +0 -319
- package/templates/recipe-grid-3d/files/scripts/GridRules.ts +0 -278
- package/templates/recipe-grid-3d/files/scripts/MenuFlow.ts +0 -106
- package/templates/recipe-grid-3d/files/scripts/ScoreHud.ts +0 -94
- package/templates/recipe-grid-3d/template.yaml +0 -10
- package/templates/recipe-tapper-2d/files/README.md +0 -39
- package/templates/recipe-tapper-2d/files/design/recipe.md +0 -132
- package/templates/recipe-tapper-2d/files/design/tests/reachability.json +0 -4
- package/templates/recipe-tapper-2d/files/design/tests/routines/terminal-retry.json +0 -23
- package/templates/recipe-tapper-2d/files/scenes/main.pix3scene +0 -269
- package/templates/recipe-tapper-2d/files/scenes/menu.pix3scene +0 -100
- package/templates/recipe-tapper-2d/files/scenes/prefabs/hazard.pix3scene +0 -42
- package/templates/recipe-tapper-2d/files/scenes/prefabs/target.pix3scene +0 -45
- package/templates/recipe-tapper-2d/files/scenes/ui/result.pix3scene +0 -85
- package/templates/recipe-tapper-2d/files/scripts/GameRules.ts +0 -368
- package/templates/recipe-tapper-2d/files/scripts/MenuFlow.ts +0 -106
- package/templates/recipe-tapper-2d/files/scripts/ScoreHud.ts +0 -94
- package/templates/recipe-tapper-2d/files/scripts/Spawner.ts +0 -214
- package/templates/recipe-tapper-2d/files/scripts/TouchRules.ts +0 -192
- package/templates/recipe-tapper-2d/files/sprites/ph-hazard.png +0 -0
- package/templates/recipe-tapper-2d/files/sprites/ph-target.png +0 -0
- package/templates/recipe-tapper-2d/template.yaml +0 -10
|
@@ -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,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-CFQFEI52.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};
|
|
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,Uf as Vp,V as U,Va as Vo,Vb as Vr,Vc as Ve,Vd as Wf,Ve as Wm,Vf as Wp,W as V,Wa as Wo,Wb as Wr,Wc as We,Wd as Xf,We as Xm,Wf as Xp,X as W,Xa as Xo,Xb as Xr,Xc as Xe,Xd as Yf,Xe as Ym,Xf as Yp,Y as X,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 _f,Ze as _m,Zf as _p,_ 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-VIHIF4G2.js";import"./chunk-6ACT6FNV.js";export{Ne as AO_MODES,Bp as ATLAS_MANIFEST_PATH,oo as ATLAS_REGION_KEY,Cp as ATLAS_SHEET_DIR,$ as ATLAS_SHEET_SCHEME,ro as ATLAS_SIZE_KEY,ko as AUDIO_BUS_NAMES,Kr as AmbientLightNode,kr as AnimatedSprite2D,Tr as AnimatedSprite3D,tp as AnimationPlayerBehavior,jo as AssetLoader,Nm as AudioApi,ze as AudioPlayer,lo as AudioService,tr as BATCHABLE_2D_KEY,Lo as BLEND_MODES_2D,Mo as BLEND_MODE_2D_OPTIONS,Yo as BUILTIN_SHADER_EFFECTS,Cm as BURST_MAX_PARTICLES,de as Bar2D,xr as Batch2DSystem,Mp as BurstOnSignalBehavior,be as Button2D,Dr as CAMERA2D_DEFAULTS,Up as CHARACTER_STATE_FINISHED_SIGNAL,Xf as CONTACT_MARGIN,Ze as CURRENT_SCENE_FORMAT_VERSION,Er as Camera2D,He as Camera3D,xp as CameraBrainBehavior,Gr as CanvasLayer2D,Vp as CharacterVisual2DBehavior,ge as Checkbox2D,Rp as Collider2DBehavior,Wf as Collision2DService,qr as ColorRect2D,ap as CutsceneApi,_m as DEFAULT_CLIP_DURATION,lp as DEFAULT_FIXED_DELTA_SEC,Be as DEFAULT_GEOMETRY_MATERIAL_TYPE,qp as DEFAULT_RUNTIME_TIME_CONFIG,k as DIRECTION_AXES_ENABLED_KEY,Hr as DirectionalLightNode,Ie as EASING_NAMES,ip as ECSService,pf as EMOJI_GUARDED_TEXT_PROPERTIES,Ip as FadeBehavior,Em as FloatText2D,r as GAME_DEBUG_GLOBAL_KEY,Ce as GEOMETRY_KINDS,Ae as GEOMETRY_MATERIAL_TYPES,zm as GameCommandRegistry,ym as GameTime,De as GeometryMesh,Ar as Group2D,Rr as HemisphereLightNode,Pp as Hitbox2DBehavior,mf as INSTANCE_TRANSFORM_KEYS,wf as InputService,Ee as InstancedMesh3D,he as InventorySlot2D,Zr as Joystick2D,Hm as JuiceApi,Lr as KNOWN_SCENE_NODE_TYPES,le as LABEL_AUTO_SIZE_BLEED,ne as LABEL_GLOW_STRENGTH_LIMIT,ie as LABEL_H_ALIGN_VALUES,ke as LABEL_LINE_HEIGHT_FACTOR,je as LABEL_V_ALIGN_VALUES,ye as Label2D,bp as LocalizationService,em as MAX_NET_KIND,zf as MAX_POLYGON_VERTICES,np as MAX_TICKS_PER_FRAME,Zm as MIN_CLIP_DURATION,yf as MIN_POLYGON_VERTICES,L as MeshInstance,gm as NET_APP_FLAGS_SHIFT,dm as NET_OWNERSHIP_MASK,Qo as NODE2D_MARGIN_SIDES,fm as NetKindTable,qm as NetRoomVars,lm as NetworkConnectError,wm as NetworkNodeBinder,sm as NetworkService,km as NetworkSpawnError,Wp as NetworkedNodeBehavior,So as Node2D,G as Node3D,F as NodeBase,me as OVERLAY_2D_FLAG,h as PHYSICS_DEBUG_ENABLED_KEY,c as PHYSICS_DEBUG_GLOBAL_KEY,Re as POST_PROCESS_DEFAULTS,Oe as PROJECT_AO_MODES,bf as PROJECT_SCRIPT_DIRECTORIES,cf as PROJECT_SCRIPT_EXCLUDE_PATTERN,S as PROJECT_TEXTURE_FILTERING_MODES,Dm as ParticleBurst2D,Ur as Particles3D,om as Physics2DService,Qp as PhysicsBody2DBehavior,Sp as PhysicsWorld2DBehavior,Hp as PinToNodeBehavior,Kp as PlaySoundBehavior,Ir as PointLightNode,Bm as PopInBehavior,Se as PostProcess,gp as PostProcessingPipeline,Am as PunchScaleBehavior,x as RUNTIME_PROPERTY_SINK_GLOBAL_KEY,m as RUNTIME_SCENE_GLOBAL_KEY,Jp as RadialProgressBehavior,rm as RejectCode,Xp as ReplicatedTransformBehavior,o as ResourceManager,Tp as RevoluteJoint2DBehavior,Ep as RotateBehavior,zp as RuntimeRenderer,of as SCENE_COMPONENT_DEFINITION_KEYS,rf as SCENE_DISK_FORMAT_TYPES,_e as SCENE_DOCUMENT_KEYS,$e as SCENE_NODE_DEFINITION_KEYS,u as SCRIPT_ERROR_SINK_GLOBAL_KEY,xe as SEMANTIC_POINTER_ID,Jm as SFX_PRESETS,E as SHARED_UNIT_QUAD_GEOMETRY,y as SIGNAL_EMIT_SINK_GLOBAL_KEY,We as SceneLoader,vf as SceneManager,yp as SceneRunner,uf as SceneSaver,cp as SceneService,Ve as SceneValidationError,qo as Script,no as ScriptRegistry,te as ScrollContainer2D,Lp as SfxOnSignalBehavior,Mm as SfxSynth,fr as ShaderEffectStack,Br as ShakeBehavior,Fp as SimpleMoveBehavior,Gp as SineBehavior,ce as Slider2D,nr as SpineSkeleton2D,lr as SpineSkeletonView,Jr as SpotLightNode,dr as Sprite2D,Sr as Sprite3D,Fe as TARGET_DISTANCE,q as TEST_COMPONENT_TYPE_PREFIX,Fm as TRAIL_MAX_POINTS,zr as TiledSprite2D,Gm as Trail2D,Im as TweenApi,ae as UIControl2D,gf as USER_SCRIPT_ID_PREFIX,Le as VIRTUAL_CAMERA_DEFAULTS,Me as VirtualCamera3D,bm as WS_CLOSE_NORMAL,am as WS_CLOSE_PROTOCOL_VIOLATION,cm as WsTransport,ur as ZERO_SLICE_BORDER,Ro as Z_INDEX_LIMIT,Ge as aimCameraNodeAt,Te as aoModeUsesSSAO,Po as applyBlendMode2DToMaterial,Ym as applyClipAtTime,Ke as applyEasing,hp as applyLocaleToTree,ee as applyTextStyle,Y as applyTextureRegionToTexture,pe as assign2DRenderOrder,K as assignWithoutSchemaRefresh,fo as atlasSizeOf,Ao as attachComponentDefinitions,qf as autoloadComponentType,eo as baseRegionOf,Oo as blendingForMode2D,Jf as boxPolygon,yr as buildSkinGeometry,sr as buildTiledSpriteGeometry,Lf as capsulePolygon,Of as circleIntersectsPolygon,Kf as circlePolygon,Lm as clampSfxPitch,Ff as cleanPolygon,rp as coerceKeyframeValue,pr as coerceTextureResource,Uo as coerceToPropertyType,Rm as collectAudioKeysInRange,P as collectClipPointNames,Eo as collectComponentDefinitions,Sm as collectEventKeysInRange,Xe as collectRenderabilityIssues,Qm as collectTimedKeysInRange,Zf as collideCirclePolygon,Yf as collideCircles,_f as collidePolygons,or as composeEffectShaders,Z as composeTextureRegion,W as configure2DTexture,Gf as convexHull,Rf as convexPolygonsIntersect,po as copyAtlasMetadata,to as createAtlasResolver,Xm as createClipBindings,mp as createDefaultClip,fp as createEmptyAnimationSet,oe as cssFont,_r as cssFontFamily,$r as cssFontWeight,vm as decodeSignalPayload,Tf as decomposeConvex,Vo as defineGroup,To as defineProperty,af as describeEmojiAsArt,uo as describeFontFace,nm as describeRejectCode,D as describeThrown,Qr as describeUnknownNodeType,Nf as distanceToPolygonBoundary,re as drawStyledText,Xo as effectSupportsTarget,um as encodeSignalPayload,Ef as ensureCounterClockwise,Fr as findActiveCamera2D,R as findAnimationClip,O as findAnimationFramePoint,pp as findKeyframeClip,Tm as fireEventKey,Vm as fromSchemaValue,op as generateTrackId,br as getActiveLocalization,$o as getAllShaderEffectTypes,M as getAnimationFrameTexturePath,zo as getComponentSchemaProperties,f as getGameDebug,mm as getNetKindTable,Fo as getNodePropertySchema,g as getPhysicsDebugSource,Qe as getProjectAODefault,V as getProjectTextureFiltering,Go as getPropertiesByGroup,Ho as getPropertyDefinition,Io as getPropertyDisplayValue,b as getRuntimeLivePropertySink,t as getRuntimeSceneRoot,ef as getSceneNodeDiskFormat,w as getScriptErrorSink,_o as getShaderEffectType,A as getSignalEmitSink,Dp as installAtlasFromManifest,I as installReactiveSchemaProperties,Om as interpolateValue,n as isDirectionAxesEnabled,tf as isEmojiOnlyText,wo as isFontFaceRegistered,Ue as isHighEndDevice,Ye as isInertNode,Vr as isInteractive,Je as isKeyframeEasing,Or as isKnownSceneNodeType,jm as isNetTeleport,j as isPhysicsDebugEnabled,Df as isPolygonConvex,kf as isProjectScriptEntry,jf as isProjectScriptPath,_ as isSameTextureRegion,so as isScriptComponent,lf as isScriptComponentClass,N as isSequenceAnimationFrame,Km as isSfxPreset,er as isShaderEffectHost,wr as isSliceBorderEmpty,ao as isSpineModuleAvailable,Co as isStaleComponent,s as isTestHarnessComponentType,xf as isTextProperty,mr as isTextureResourceRef,$m as isTrackValueType,ue as labelDecorationPadding,qe as labelGlowBlurPx,se as labelGlowPasses,ve as layoutLabelText,yo as loadProjectFonts,io as loadSpineAsset,bo as loadSpineModule,H as makeSchemaPropertyReactive,Wo as mergeSchemas,im as netFlagsByte,hm as netOwnershipOf,Q as normalizeAnimationResource,sf as normalizeAutoloads,No as normalizeBlendMode2D,ep as normalizeKeyframeAnimationSet,Mr as normalizeNodeTypeName,Np as normalizePolygonConfig,T as normalizeProjectTextureFiltering,vr as normalizeSliceBorder,we as paintLabelCanvas,gr as parseEventArgs,ho as parseSpineAtlasPageNames,wp as playable,Mf as pointInPolygon,Bf as polygonArea,Hf as polygonBounds,Cf as polygonCentroid,Af as polygonSignedArea,df as projectScriptGlobPatterns,Zp as property,Vf as quaternionToRotationZ,J as reactiveSchemaPropertyNames,Xr as readBooleanArg,Wr as readNumberArg,Yr as readStringArg,Uf as readWorldTransform2D,Qf as rectIntersectsConvexPolygon,Pf as rectIntersectsPolygon,Yp as registerBuiltInScripts,e as registerGameDebug,tm as registerNetworkPrefab,d as registerPhysicsDebugSource,nf as registerProjectScriptExports,a as registerRuntimeLivePropertySink,p as registerRuntimeSceneRoot,v as registerScriptErrorSink,Zo as registerShaderEffect,z as registerSignalEmitSink,Do as replaceStaleComponents,C as reportScriptError,B as reportSignalEmit,xm as resetNetKindTable,vo as resetProjectFontRegistry,hr as resolveAnimatedSpriteFrameLayout,ir as resolveFramePointToLocal,jr as resolveFramePolygonToLocal,cr as resolveLocalizedText,Bo as resolvePendingComponents,sp as resolveRuntimeTimeConfig,ff as resolveSceneDiskKey,Nr as resolveSceneNodeType,go as resolveSpinePagePath,Wm as resolveTrackTarget,Pm as sampleTrack,X as sanitizeTextureRegion,Ap as scanScriptLocalizationKeys,Sf as segmentPolygonT,Op as serializePolygonConfig,ar as setActiveLocalization,vp as setDefaultStoreUrl,l as setDirectionAxesEnabled,pm as setNetworkPrefabTable,Ko as setNodePropertyValue,i as setPhysicsDebugEnabled,up as setPlayableAdapter,dp as setPostprocessingModuleLoader,Pe as setProjectAODefault,U as setProjectTextureFiltering,xo as setSpineModuleLoader,rr as shaderEffectsCacheKey,Cr as shakeNoise,co as spineAssetKey,mo as stampAtlasView,_p as state,fe as styledTextPadding,Pr as suggestSceneNodeType,$f as sweepCircleAgainstPolygon,Um as toSchemaValue,If as transformPolygon,hf as userScriptComponentId,Jo as validatePropertyValue,jp as worldToCanvasLogical,kp as worldToCanvasThroughCamera};
|
|
@@ -0,0 +1,200 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: pix3-editor
|
|
3
|
+
description: How to drive the open Pix3 editor tab through Chrome DevTools MCP (the `pix3-browser` server) — find the tab, list the page's `pix3_*` tools, the sync → read → edit → sync loop, what a not-ok `pix3_sync` means (`expect_mismatch`, `stale` with a play owner, `gesture_in_progress`), play ownership, `pix3_game_run`, screenshots, the inline `evaluate_script` fallback when `list_3p_developer_tools` is missing, and sync before a build. Use whenever you run, test or inspect the game in the editor, after every batch of file edits, and before `npm run build`.
|
|
4
|
+
---
|
|
5
|
+
|
|
6
|
+
<!-- Pix3 agent kit 2.0.0-alpha.0 -->
|
|
7
|
+
# Drive the editor
|
|
8
|
+
|
|
9
|
+
The human has this project open in the Pix3 editor: a tab at `<dev server>/__pix3/` in a Chrome
|
|
10
|
+
that `pix3 editor` started. That Chrome has no open debugging port: its DevTools protocol is
|
|
11
|
+
served by `pix3 editor`'s token proxy (`ws://127.0.0.1:9333/pix3`), and you reach the tab through
|
|
12
|
+
the `pix3-browser` MCP server (chrome-devtools-mcp), which `pix3 agent-setup` configured with the
|
|
13
|
+
proxy and its token. The tab registers its own tools on the page; you edit files, the editor
|
|
14
|
+
follows the disk, and `pix3_sync` is the barrier between the two.
|
|
15
|
+
|
|
16
|
+
## 1. Find the tab (once per thread, and again after any reload)
|
|
17
|
+
|
|
18
|
+
1. `.pix3/dev.json` in the project → `publicEditorUrl` when it is there (the address the
|
|
19
|
+
browser reached the server at, e.g. through a port forward), else `editorUrl` (e.g.
|
|
20
|
+
`http://localhost:5173/__pix3/` — but the port is whatever Vite got: 5174, 5175… when 5173 was
|
|
21
|
+
taken, so always read it from `dev.json` or from what `npm run dev` / `npm run editor` printed,
|
|
22
|
+
never assume 5173).
|
|
23
|
+
No file, or the server does not answer → `npm run editor` (= `npx pix3 editor`: starts the
|
|
24
|
+
dev server and Chrome). No `pix3-browser` server in
|
|
25
|
+
your MCP list → `npx pix3 agent-setup` once, then start a new thread. The server cannot
|
|
26
|
+
connect (`401`, connection refused) or `npm run editor` tells you to run
|
|
27
|
+
`pix3 agent-setup --repair` → `npm run editor`, then `npx pix3 agent-setup --repair`, then a
|
|
28
|
+
new thread (a running MCP server keeps the endpoint and token it started with). Never read,
|
|
29
|
+
print or copy the token (`~/.pix3/cdp-token`, `~/.pix3/remote-cdp-token`,
|
|
30
|
+
`~/.pix3/cdp-mcp.json`, `~/.pix3/remote-cdp.json`). An MCP config that still carries
|
|
31
|
+
`--wsHeaders` is an old launch: `npx pix3 agent-setup --repair`.
|
|
32
|
+
**Over SSH** (`npm run editor` answers «SSH session: Chrome is not launched here»): Chrome
|
|
33
|
+
runs on the human's machine. Give the human the lines it printed for their machine — they run
|
|
34
|
+
them, including the one ssh line that copies the token here — then `npx pix3 agent-setup
|
|
35
|
+
--remote` and a new thread. `npm run editor` says `CDP forward: live` once it works.
|
|
36
|
+
2. `list_pages` → the page whose URL starts with that address → `select_page` with its id.
|
|
37
|
+
**No such page** (the human closed it, or Chrome was started without it) → `npm run editor`
|
|
38
|
+
again: it checks the tab through the proxy and opens it when missing; or open it yourself with
|
|
39
|
+
chrome-devtools-mcp's `new_page` on that URL. Then `list_pages` again. Open one tab only: a
|
|
40
|
+
second editor tab on the same project competes for the writer.
|
|
41
|
+
3. `list_3p_developer_tools` → the `pix3` group with the seven `pix3_*` tools below. **Call it
|
|
42
|
+
again after every `select_page` and after any page reload** — the registration lives in the
|
|
43
|
+
page, and `execute_3p_developer_tool` answers `Tool … not found` until it is listed again in
|
|
44
|
+
the same MCP process.
|
|
45
|
+
|
|
46
|
+
Call a tool with `execute_3p_developer_tool {toolName: "pix3_sync", params: "{\"timeoutMs\": 15000}"}`
|
|
47
|
+
— `params` is a **JSON string** (escape the quotes). The answer is JSON text; every refusal is
|
|
48
|
+
`{ok:false, reason, detail}` and says what to do.
|
|
49
|
+
|
|
50
|
+
## 2. The tools
|
|
51
|
+
|
|
52
|
+
| Tool | Params | Does |
|
|
53
|
+
| --- | --- | --- |
|
|
54
|
+
| `pix3_status` | — | versions, `activeScene`, `scriptsStatus`, `writer` (`self` = this tab saves), `dirty` scenes, `pending` unsaved keys per scene, `gestureInProgress`, `pendingExternal`, `play` `{playing, playOwner, startedAt}`, `errorCount` |
|
|
55
|
+
| `pix3_sync` | `expect?` `{path: sha256}`, `timeoutMs?` | flush the editor's unsaved edits to disk, rescan, wait until the editor runs the files on disk; `{ok, rev, changed, expectMismatch}` |
|
|
56
|
+
| `pix3_scene` | `path?`, `maxDepth?`, `nodeId?`, `find?` | the scene tree as the editor holds it (each node's `properties` = what the file gets, unsaved inspector edits included); with `nodeId` the answer is `{ok, node, saved, screen}` — `node` (with `components`), and **beside it, not inside it**, `saved` (the node as the file gets it) and `screen` (origin on the page in CSS px — `click_at {x, y}` taps it); the inline short form `node(id)` returns the node with `saved` merged in; with `find` the nodes whose name/type contains it, `{ok, path, matches: [{nodeId, type, name}]}` (no properties: read one with `nodeId`). Read-only |
|
|
57
|
+
| `pix3_play` | `action` `start\|stop\|restart\|pause\|status`, `scenePath?`, `force?` | play mode; `start` records you as the owner |
|
|
58
|
+
| `pix3_game_run` | `until`, `fail?`, `watch?`, `maxFrames?`, `maxWallMs?`, `settleMs?`, `bot?` | step the running game until a predicate holds or fails; read `verdict` first |
|
|
59
|
+
| `pix3_screenshot` | `target` `game\|viewport` | brings that surface to the front; the picture itself is chrome-devtools-mcp's `take_screenshot` (the tool never returns image data) |
|
|
60
|
+
| `pix3_errors` | `since?` (epoch ms), `clear?` | captured console / runtime errors, newest last |
|
|
61
|
+
|
|
62
|
+
Scenes and scripts are changed as **files** (`pix3-scene-format`, `pix3-scripts`). There is no
|
|
63
|
+
tool that sets a property, creates a node or writes a file, and no input tool: tap or drag the
|
|
64
|
+
running game with chrome-devtools-mcp's own `click_at {x, y}` / `press_key` at the `screen`
|
|
65
|
+
coordinates `pix3_scene {nodeId}` gives (the game runs in the editor's Game tab —
|
|
66
|
+
`pix3_screenshot {target:"game"}` brings it to the front first).
|
|
67
|
+
|
|
68
|
+
## 3. The loop after you decide to change something
|
|
69
|
+
|
|
70
|
+
1. **`pix3_sync` first, then read.** A successful sync means the disk holds what the designer
|
|
71
|
+
sees: their unsaved drags and inspector edits are written. Read the scene or script you are
|
|
72
|
+
about to change after that sync, never from memory.
|
|
73
|
+
2. **Edit the lines you mean to change.** Search/replace in the `.pix3scene`; never regenerate a
|
|
74
|
+
whole scene from memory and never rewrite a file you did not just read — the designer may have
|
|
75
|
+
moved things a minute ago. Note the sha256 of every file you wrote (`pix3 check --json` prints
|
|
76
|
+
them under `files`; or compute it yourself).
|
|
77
|
+
3. **`pix3_sync` with `expect`** = `{ "<path>": "<sha256>", … }` of the files you wrote. `ok:true`
|
|
78
|
+
= the editor runs exactly those bytes; its open scenes are reloaded, your script edits are
|
|
79
|
+
executed (`changed` lists what the rescan found).
|
|
80
|
+
4. **Then verify**: `npm run check` (`pix3 check`), and in the editor `pix3_play {action:"restart"}`
|
|
81
|
+
or `start` → `pix3_game_run` with predicates → `pix3_errors` → `pix3_screenshot` +
|
|
82
|
+
`take_screenshot`.
|
|
83
|
+
|
|
84
|
+
## 4. A not-ok sync is not a barrier
|
|
85
|
+
|
|
86
|
+
Read `reason`; nothing happened on the editor side until a sync answers `ok:true`.
|
|
87
|
+
|
|
88
|
+
| `reason` | Meaning | Do |
|
|
89
|
+
| --- | --- | --- |
|
|
90
|
+
| `gesture_in_progress` | the designer is mid-drag; nothing is written during a gesture | call again (the flush waits up to `timeoutMs` for pointerup) |
|
|
91
|
+
| `stale_modules` | a changed script has not been re-executed by the tab yet (`paths`) | call again |
|
|
92
|
+
| `expect_mismatch` | `expectMismatch` lists files whose sha256 on disk is not the one you passed: the designer or another writer changed them after your write | re-read those files, redo your edit on top of what is there, sync with the new hashes |
|
|
93
|
+
| `stale`, `playing: "agent"` | play is running and external changes are deferred until it stops; **an agent** started it (any agent thread) | `pix3_play {action:"restart"}` (stop → apply the deferred changes → start), or `stop`, then sync again |
|
|
94
|
+
| `stale`, `playing: "designer"` | the designer pressed Play; their session is theirs | do **not** stop it — wait and poll, or ask the human; `stop` and `restart` answer `not_owner` even with `force:true` |
|
|
95
|
+
| `external_change`, `write_failed` | the flush itself could not write (`conflicts` / `failed`) | read the listed scenes, then sync again |
|
|
96
|
+
|
|
97
|
+
`expectMismatch` is also present on an `ok:true` answer when you passed `expect` for files that
|
|
98
|
+
match — an empty array. Never paste a `rev` or hash into a report.
|
|
99
|
+
|
|
100
|
+
## 5. Play ownership
|
|
101
|
+
|
|
102
|
+
`pix3_play start` records `playOwner: "agent"` in the page, not in your connection: a new thread,
|
|
103
|
+
a new MCP process, another agent — all may `stop` / `restart` it. A session started from the
|
|
104
|
+
editor's toolbar is `playOwner: "designer"`: `stop`, `restart` and `pause` refuse it with
|
|
105
|
+
`reason: "not_owner"`, `force` included. `pix3_play {action:"status"}` (or `pix3_status.play`)
|
|
106
|
+
tells you which it is before you act.
|
|
107
|
+
|
|
108
|
+
`pix3_game_run` needs a running session (`not_playing` otherwise). It steps the game far faster
|
|
109
|
+
than real time: a game whose `onStart` awaits something real (assets, a WASM module, a fetch)
|
|
110
|
+
needs `settleMs` (e.g. `2000`) first, and a readiness predicate before the one you care about.
|
|
111
|
+
The same holds for a `changeScene` the game starts **during** a run: the async load is starved
|
|
112
|
+
while the run steps frames, so the new scene never shows up within `maxFrames`. Run until the
|
|
113
|
+
change is requested, then a second run with `settleMs` and a readiness predicate on the next
|
|
114
|
+
scene (`{kind:"nodeAppeared", name}` of one of its nodes) before you assert anything in it.
|
|
115
|
+
Predicates (`until` / `fail` are lists, OR over each): `{kind:"nodeProperty", name, path, op, value}`
|
|
116
|
+
(a live node by name or id, dot path into its properties — `position.x`, `text`),
|
|
117
|
+
`{kind:"gameState", path, op, value}` and `{kind:"gameStateChanged", path, by?}` (the game's
|
|
118
|
+
`registerGameDebug` snapshot), `{kind:"nodeAppeared", name}`, `{kind:"nodeGone", name}`,
|
|
119
|
+
`{kind:"nodeMoved", name}`, `{kind:"newErrors", min?}`, `{kind:"frames", n}`,
|
|
120
|
+
`{kind:"command", name}`, `{kind:"signal", name}`; `op` is `eq`, `ne`, `gt`, `gte`, `lt`,
|
|
121
|
+
`lte` or `contains`.
|
|
122
|
+
|
|
123
|
+
`bot: {name}` lets a policy play while the predicates judge: `design/tests/bots/<name>.ts`
|
|
124
|
+
exports `{ name, tick(bot) { … } } satisfies BotPolicy`. The types are the kit's
|
|
125
|
+
`design/tests/bots/pix3-test-bot.d.ts` (global, no import); a starter's `pix3 check`
|
|
126
|
+
type-checks the policy. `tick` runs after the game's tick and what it presses lands on the next
|
|
127
|
+
one. A policy written or changed during play needs only `pix3_sync`, not a restart.
|
|
128
|
+
|
|
129
|
+
The answer — a `fail` or a `timeout` is still `ok: true`; `ok: false` means the run never started:
|
|
130
|
+
|
|
131
|
+
```json
|
|
132
|
+
{
|
|
133
|
+
"ok": true,
|
|
134
|
+
"verdict": "PASS until[0] … (frame 42, 0.70s game) — ….",
|
|
135
|
+
"outcome": { "kind": "until", "channel": "until", "index": 0, "frame": 42, "gameTimeMs": 700, "detail": "…" },
|
|
136
|
+
"metrics": { "frames": 42, "gameTimeMs": 700, "wallMs": 95, "newErrors": 0, "framesPerSecond": 442 },
|
|
137
|
+
"game": { "provider": "…", "snapshot": { "score": 1 }, "changed": { "score": [0, 1] } },
|
|
138
|
+
"notes": [],
|
|
139
|
+
"timeline": []
|
|
140
|
+
}
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
`outcome.kind` is `until`, `fail`, `timeout`, `error`, `precondition-already-met`,
|
|
144
|
+
`monkey-empty` or, in a bot run, `bot-pass`, `bot-fail`, `bot-error`, `bot-idle`. `game` is there
|
|
145
|
+
only when the game registers a snapshot (below): `game.snapshot` at the outcome frame,
|
|
146
|
+
`game.changed` = `{path: [atFrame0, atOutcome]}` for every scalar that moved.
|
|
147
|
+
|
|
148
|
+
**Judging a run** — a clean compile and a clean `pix3_errors` say nothing about whether the change
|
|
149
|
+
works; a run with a stated success condition does:
|
|
150
|
+
|
|
151
|
+
- **Read `verdict` first**: it is the one line that already decided the run.
|
|
152
|
+
- **Assert the change, not the value.** A predicate that is already true at frame 0 ends the run
|
|
153
|
+
with `PRECONDITION ALREADY MET` and proves nothing: assert `gameStateChanged` on `score`, not
|
|
154
|
+
`gameState score gte 0`; restart play to get a clean board.
|
|
155
|
+
- **Put a crash net in `fail`**: `{kind:"newErrors"}`. A `fail` beats an `until` on the same frame.
|
|
156
|
+
- **Count frames, not wall time** (`maxFrames`, `{kind:"frames", n}`): the same test then means the
|
|
157
|
+
same thing on a slow machine.
|
|
158
|
+
- **Make game state readable.** `gameState` / `gameStateChanged` read the snapshot the game
|
|
159
|
+
registers with `registerGameDebug({ name, snapshot })` (from `@pix3/runtime`); without one the
|
|
160
|
+
verdict says there is no provider. Keep it to the fields that decide a run (score, lives, phase,
|
|
161
|
+
wave) and add the field of every mechanic you add — state nothing reports is state nothing can
|
|
162
|
+
verify, and then only screenshots are left. `pix3 smoke` prints the same snapshot.
|
|
163
|
+
- **Transient effects** (a hover scale, a flash, a punch, a fade) are back at rest by the time a
|
|
164
|
+
separate `take_screenshot` runs — judge them by state: a `nodeProperty` predicate on `scale.x`
|
|
165
|
+
or `opacity` inside the run, not a picture after it. Screenshots are for layout, colour and
|
|
166
|
+
placement.
|
|
167
|
+
- **A black 3D screen** is usually a scene with no light or no camera, and the run's `notes` say
|
|
168
|
+
so (`SCENE NOT RENDERABLE — …`); when they do not, suspect a camera that looks away from the
|
|
169
|
+
content. The editor viewport lights the scene with fallback lights the running game does not
|
|
170
|
+
have, so the viewport is no evidence either way.
|
|
171
|
+
|
|
172
|
+
## 6. Before a build
|
|
173
|
+
|
|
174
|
+
`npm run build` flushes the editor itself (and fails with `E_EDITOR_UNSYNCED` when the editor
|
|
175
|
+
cannot write in time), so a successful `pix3_sync` right before it is the honest sequence: sync →
|
|
176
|
+
`npm run build` → check `dist/`. `pix3 check` and `pix3 smoke` flush the editor the same way
|
|
177
|
+
(`--no-sync` reads the disk as it is).
|
|
178
|
+
|
|
179
|
+
## 7. Inline fallback (no `list_3p_developer_tools`, or it answers an empty list)
|
|
180
|
+
|
|
181
|
+
The flag `--categoryExperimentalThirdParty=true` may be missing from the MCP config, or the
|
|
182
|
+
category may have moved in a chrome-devtools-mcp release. The same tools are on
|
|
183
|
+
`window.__PIX3_DEBUG__`; call them through `evaluate_script` with **`waitForStableDom: false`**
|
|
184
|
+
(otherwise every call waits up to 3 s for a DOM that never settles) and the page's `pageId`:
|
|
185
|
+
|
|
186
|
+
```js
|
|
187
|
+
async () => await window.__PIX3_DEBUG__.call('pix3_sync', { timeoutMs: 15000 })
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
Short forms exist for the common calls: `status()`, `sync({expect, timeoutMs})`, `scene(depth)`,
|
|
191
|
+
`node(id)`, `find(text)`, `screen(id)`, `play.start()` / `play.stop()` / `play.restart()` /
|
|
192
|
+
`play.status()`, `errors()`. One tool per `evaluate_script` call: a refusal of one must not take
|
|
193
|
+
the others with it. The answers are the same objects the 3p path returns.
|
|
194
|
+
|
|
195
|
+
## 8. Keepalive
|
|
196
|
+
|
|
197
|
+
The tab is in the background while you work, and Chrome would throttle it. `pix3 editor` starts
|
|
198
|
+
Chrome with throttling off, and every bridge call keeps the editor's own loops running for 60 s
|
|
199
|
+
(a play session you started, until it stops). Nothing to do on your side; a tab that was opened
|
|
200
|
+
by hand in another Chrome may still pause when hidden.
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: pix3-nodes
|
|
3
|
-
description: Compact property reference for the Pix3 2D node types
|
|
3
|
+
description: Compact property reference for the Pix3 2D node types games use most — 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
4
|
---
|
|
5
5
|
|
|
6
|
-
<!-- Pix3 agent kit
|
|
6
|
+
<!-- Pix3 agent kit 2.0.0-alpha.0 -->
|
|
7
7
|
# 2D nodes — compact reference
|
|
8
8
|
|
|
9
9
|
Property names below are the exact YAML keys under `properties:`. A misspelled key is kept
|
|
@@ -41,7 +41,7 @@ keys — read their section in `reference.md` first. `Layout2D` is removed and f
|
|
|
41
41
|
| `zIndex` | int | 0 | -4096..4096; higher draws on top; ties = tree order |
|
|
42
42
|
| `zAsRelative` | bool | true | Add to the parent's z instead of absolute |
|
|
43
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 }` |
|
|
44
|
+
| `layout` | block | — | `{ enabled, horizontalAlign: left/center/right/stretch, verticalAlign: top/center/bottom/stretch, left, right, top, bottom }` — the margins (px from the parent's edge) place an anchored axis; its `position` component is then `0`, and `stretch` derives the size (`pix3-scene-format`) |
|
|
45
45
|
| `flow` | block | — | `{ enabled, direction: vertical/horizontal, gap, paddingX, paddingY, align: start/center/end, autoSize }` |
|
|
46
46
|
|
|
47
47
|
Paint order = tree order (later sibling / deeper node on top) unless `zIndex` says otherwise.
|
|
@@ -50,7 +50,7 @@ Shader `effects` exist only on `Sprite2D`, `AnimatedSprite2D` and `Button2D`.
|
|
|
50
50
|
## Group2D
|
|
51
51
|
|
|
52
52
|
Sized container; draws nothing. Use it as the scene root (sized to `viewportBaseSize` from
|
|
53
|
-
`pix3project.yaml` — `width: 1080, height: 1920`
|
|
53
|
+
`pix3project.yaml` — e.g. `width: 1080, height: 1920` for a portrait game — `layout` stretch/stretch) and for any panel whose children anchor or flow against it.
|
|
54
54
|
|
|
55
55
|
| Key | Type | Default |
|
|
56
56
|
| --- | --- | --- |
|
|
@@ -78,7 +78,7 @@ The only untextured 2D fill. Build the game from these first, swap to sprites la
|
|
|
78
78
|
| `aspectRatioLocked` | bool | false | Keep the texture's aspect while resizing |
|
|
79
79
|
| `effects` | list | — | `[{ type: core:tint, params: { color: "#hex", amount: 1 } }]` — how a near-white placeholder gets its colour |
|
|
80
80
|
|
|
81
|
-
There is no tint property: colour a sprite with a `core:tint` effect.
|
|
81
|
+
There is no tint property: colour a sprite with a `core:tint` effect. Placeholders are
|
|
82
82
|
near-white `sprites/ph-*.png` + `effects: [{ type: core:tint, params: { color, amount: 1 } }]`.
|
|
83
83
|
|
|
84
84
|
### An SVG you write as a sprite
|
|
@@ -111,6 +111,7 @@ xmlns), `E_SVG_NO_SIZE`, `W_SVG_VIEWBOX_ONLY`, `W_SVG_EXTERNAL_REF`.
|
|
|
111
111
|
| Key | Type | Default | Notes |
|
|
112
112
|
| --- | --- | --- | --- |
|
|
113
113
|
| `label` | string | "" | The text; `\n` breaks lines. Never only emoji |
|
|
114
|
+
| `labelKey` | string | "" | A key of the locale tables (`locales/<id>.json` `strings`); when set it wins over `label`, and a key no table has shows as the key itself. Any UI control has it (`Button2D` too) — `project-files.md` → "Add or remove a locale" |
|
|
114
115
|
| `labelFontSize` | number | 16 | px |
|
|
115
116
|
| `labelColor` | colour | "#ffffff" | |
|
|
116
117
|
| `labelFontFamily` | string | Arial | A family the project ships in `fonts/`, else a system face |
|
|
@@ -139,10 +140,7 @@ Scripts: `label.setText('SCORE 5')`.
|
|
|
139
140
|
| `sliceBorderLeft/Right/Top/Bottom` | number | 0 | Nine-slice insets in source pixels |
|
|
140
141
|
| `effects` | list | — | Shader effects on the skin |
|
|
141
142
|
|
|
142
|
-
Signals
|
|
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)`.
|
|
143
|
+
Signals (`pressed` for game buttons, `click` for menus and purchases): `pix3-scripts` → "Signals".
|
|
146
144
|
|
|
147
145
|
## Bar2D
|
|
148
146
|
|
|
@@ -152,7 +150,7 @@ cancellable (menus, purchases). `button.connect('click', this, handler)`.
|
|
|
152
150
|
| `minValue` / `maxValue` / `value` | number | 0 / 100 / 100 | Fill = value within the range (clamped) |
|
|
153
151
|
| `barColor` | colour | "#ff4444" | Fill colour |
|
|
154
152
|
| `backBackgroundColor` | colour | "#333333" | Trough colour |
|
|
155
|
-
| `showBorder` / `borderColor` / `borderWidth` | bool / colour / px | true / "#000000" / 2 |
|
|
153
|
+
| `showBorder` / `borderColor` / `borderWidth` | bool / colour / px | true / "#000000" / 2 | Game skins set `showBorder: false` |
|
|
156
154
|
| `textureTrough` / `textureFill` | texture | — | Skin sprites |
|
|
157
155
|
| `sliceBorderLeft/Right/Top/Bottom` | number | 0 | Nine-slice insets of the skins |
|
|
158
156
|
|
|
@@ -192,19 +190,19 @@ screen blooms — **raise** `bloomThreshold` (0.85–0.95) so only the accents g
|
|
|
192
190
|
labelColor: "#f5ae39"
|
|
193
191
|
labelAlign: right
|
|
194
192
|
transform:
|
|
195
|
-
position: [
|
|
193
|
+
position: [0, 0] # both axes anchored: the margins place it
|
|
196
194
|
scale: [1, 1]
|
|
197
195
|
rotation: 0
|
|
198
196
|
layout:
|
|
199
197
|
enabled: true
|
|
200
198
|
horizontalAlign: right
|
|
201
199
|
verticalAlign: top
|
|
200
|
+
right: 40 # px from the parent's right edge to the label's right edge
|
|
201
|
+
top: 60
|
|
202
202
|
children: []
|
|
203
203
|
```
|
|
204
204
|
|
|
205
205
|
## Known gaps
|
|
206
206
|
|
|
207
|
-
-
|
|
208
|
-
|
|
209
|
-
`text/plain`, which no browser decodes as an image. Folder and `pix3 serve` projects are fine;
|
|
210
|
-
on cloud, use a PNG.
|
|
207
|
+
- An `.svg` sprite must be served as `image/svg+xml`: a host that hands it back as `text/plain`
|
|
208
|
+
draws nothing. The Vite dev server and the single-file build are fine.
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<!-- Pix3 agent kit
|
|
1
|
+
<!-- Pix3 agent kit 2.0.0-alpha.0 — generated from docs/node-types-reference.md. Do not edit: pix3 kit --update regenerates it. -->
|
|
2
2
|
# Pix3 node reference
|
|
3
3
|
|
|
4
4
|
Every node type the loader knows, with its properties. **Grep `### <NodeName>`** for one node
|
|
@@ -9,47 +9,47 @@ Source paths quoted here (`src/…`, `packages/…`) are files of the Pix3 engin
|
|
|
9
9
|
|
|
10
10
|
## Quick reference
|
|
11
11
|
|
|
12
|
-
| Node Type | Key Properties
|
|
13
|
-
| -------------------- |
|
|
14
|
-
| NodeBase | id, name, type, visible, locked
|
|
15
|
-
| Node2D | position (Vector2), rotation, scale (Vector2), opacity, blendMode, zIndex
|
|
16
|
-
| Node3D | position (Vector3), rotation (Euler), scale (Vector3)
|
|
17
|
-
| Sprite2D | texture, width, height, anchor, aspectRatioLocked
|
|
18
|
-
| ColorRect2D | width, height, color (the only untextured 2D fill)
|
|
19
|
-
| TiledSprite2D | texture, width, height, patchMode, sliceBorderLeft/Right/Top/Bottom, drawCenter (nine-slice)
|
|
20
|
-
| AnimatedSprite2D | animationResourcePath, currentClip, isPlaying, freeOnFinish, width, height, sizeMode
|
|
21
|
-
| Group2D | width, height (+ flow\* / anchor layout — the 2D container)
|
|
22
|
-
| ScrollContainer2D | width, height, scrollY, dragScrollEnabled, inertiaDamping, showScrollbar
|
|
23
|
-
| SpineSkeleton2D | skeletonPath, atlasPath, animation, loop, skin, timeScale, defaultMix (optional Spine runtime)
|
|
24
|
-
| Camera2D | priority, zoom, offset, followTargetId, limitsEnabled, shakeAmplitude
|
|
25
|
-
| CanvasLayer2D | width, height (fixed HUD overlay; renders after post)
|
|
26
|
-
| Camera3D | projection, fov, near, far
|
|
27
|
-
| VirtualCamera3D | priority, followTargetId, lookAtTargetId, blendDuration, fov
|
|
28
|
-
| GeometryMesh | geometry, size, material, castShadow, receiveShadow
|
|
29
|
-
| MeshInstance | src
|
|
30
|
-
| Sprite3D | texture, width, height (world units), billboard, billboardRoll, opacity
|
|
31
|
-
| AnimatedSprite3D | width, height, fps, playing, loop, freeOnFinish, billboard (default true)
|
|
32
|
-
| InstancedMesh3D | maxInstances, enablePerInstanceColor, material.type/color (bulk write\*/flush from scripts)
|
|
33
|
-
| DirectionalLightNode | color, intensity, castShadow
|
|
34
|
-
| AmbientLightNode | color, intensity (flat fill, no shadows)
|
|
35
|
-
| HemisphereLightNode | skyColor, groundColor, intensity
|
|
36
|
-
| PointLightNode | color, intensity, distance, decay
|
|
37
|
-
| SpotLightNode | color, intensity, distance, angle, penumbra
|
|
38
|
-
| Button2D | width, height, backgroundColor, buttonAction, textureNormal/Hover/Pressed/Disabled, sliceBorder\*
|
|
39
|
-
| Slider2D | width, minValue, maxValue, value, textureTrack/Fill/Thumb, sliceBorder\*
|
|
40
|
-
| Joystick2D | enabled, radius, floating, axisHorizontal, axisVertical
|
|
41
|
-
| Checkbox2D | size, checked, textureBox, textureBoxChecked, textureMark
|
|
42
|
-
| Bar2D | width, value, minValue, maxValue, barColor, backBackgroundColor, textureTrough/Fill, sliceBorder\*
|
|
43
|
-
| InventorySlot2D | width, height, quantity, showQuantity, backdropColor, selectionColor
|
|
44
|
-
| AudioPlayer | audioTrack, autoplay, loop, volume, bus, pitchVariation, volumeVariation
|
|
45
|
-
| PostProcess | affect2D, bloom*, vignette*, chromaticAberration*, aoMode, ssao*, lut\*
|
|
46
|
-
| Group | NodeBase only — an organisational container
|
|
12
|
+
| Node Type | Key Properties |
|
|
13
|
+
| -------------------- | -------------------------------------------------------------------------------------------------- |
|
|
14
|
+
| NodeBase | id, name, type, visible, locked |
|
|
15
|
+
| Node2D | position (Vector2), rotation, scale (Vector2), opacity, blendMode, zIndex |
|
|
16
|
+
| Node3D | position (Vector3), rotation (Euler), scale (Vector3) |
|
|
17
|
+
| Sprite2D | texture, width, height, anchor, aspectRatioLocked |
|
|
18
|
+
| ColorRect2D | width, height, color (the only untextured 2D fill) |
|
|
19
|
+
| TiledSprite2D | texture, width, height, patchMode, sliceBorderLeft/Right/Top/Bottom, drawCenter (nine-slice) |
|
|
20
|
+
| AnimatedSprite2D | animationResourcePath, currentClip, isPlaying, freeOnFinish, width, height, sizeMode |
|
|
21
|
+
| Group2D | width, height (+ flow\* / anchor layout — the 2D container) |
|
|
22
|
+
| ScrollContainer2D | width, height, scrollY, dragScrollEnabled, inertiaDamping, showScrollbar |
|
|
23
|
+
| SpineSkeleton2D | skeletonPath, atlasPath, animation, loop, skin, timeScale, defaultMix (optional Spine runtime) |
|
|
24
|
+
| Camera2D | priority, zoom, offset, followTargetId, limitsEnabled, shakeAmplitude |
|
|
25
|
+
| CanvasLayer2D | width, height (fixed HUD overlay; renders after post) |
|
|
26
|
+
| Camera3D | projection, fov, near, far |
|
|
27
|
+
| VirtualCamera3D | priority, followTargetId, lookAtTargetId, blendDuration, fov |
|
|
28
|
+
| GeometryMesh | geometry, size, material, castShadow, receiveShadow |
|
|
29
|
+
| MeshInstance | src |
|
|
30
|
+
| Sprite3D | texture, width, height (world units), billboard, billboardRoll, opacity |
|
|
31
|
+
| AnimatedSprite3D | width, height, fps, playing, loop, freeOnFinish, billboard (default true) |
|
|
32
|
+
| InstancedMesh3D | maxInstances, enablePerInstanceColor, material.type/color (bulk write\*/flush from scripts) |
|
|
33
|
+
| DirectionalLightNode | color, intensity, castShadow |
|
|
34
|
+
| AmbientLightNode | color, intensity (flat fill, no shadows) |
|
|
35
|
+
| HemisphereLightNode | skyColor, groundColor, intensity |
|
|
36
|
+
| PointLightNode | color, intensity, distance, decay |
|
|
37
|
+
| SpotLightNode | color, intensity, distance, angle, penumbra |
|
|
38
|
+
| Button2D | width, height, backgroundColor, buttonAction, textureNormal/Hover/Pressed/Disabled, sliceBorder\* |
|
|
39
|
+
| Slider2D | width, minValue, maxValue, value, textureTrack/Fill/Thumb, sliceBorder\* |
|
|
40
|
+
| Joystick2D | enabled, radius, floating, axisHorizontal, axisVertical |
|
|
41
|
+
| Checkbox2D | size, checked, textureBox, textureBoxChecked, textureMark |
|
|
42
|
+
| Bar2D | width, value, minValue, maxValue, barColor, backBackgroundColor, textureTrough/Fill, sliceBorder\* |
|
|
43
|
+
| InventorySlot2D | width, height, quantity, showQuantity, backdropColor, selectionColor |
|
|
44
|
+
| AudioPlayer | audioTrack, autoplay, loop, volume, bus, pitchVariation, volumeVariation |
|
|
45
|
+
| PostProcess | affect2D, bloom*, vignette*, chromaticAberration*, aoMode, ssao*, lut\* |
|
|
46
|
+
| Group | NodeBase only — an organisational container |
|
|
47
47
|
|
|
48
48
|
## Choosing the right node
|
|
49
49
|
|
|
50
50
|
#### For 2D Projects:
|
|
51
51
|
|
|
52
|
-
1. **Start with a Group2D** as your scene root (the game viewport size
|
|
52
|
+
1. **Start with a Group2D** as your scene root (the game viewport size is `viewportBaseSize` in `pix3project.yaml`; use anchor layout for responsiveness)
|
|
53
53
|
2. Add **Sprite2D** for images and graphics
|
|
54
54
|
3. Before the art exists, build with **ColorRect2D** — it is the only solid-colour 2D primitive, and
|
|
55
55
|
a game made of coloured rects is playable a day before a game waiting on sprites
|
|
@@ -81,21 +81,25 @@ The base class for all 2D scene nodes. Use this for simple grouping or as a cont
|
|
|
81
81
|
|
|
82
82
|
**Properties:**
|
|
83
83
|
|
|
84
|
-
| Property | Type | Default | Description
|
|
85
|
-
| --------------------------------- | ------- | -------- |
|
|
86
|
-
| `position` | Vector2 | (0, 0) | X and Y coordinates
|
|
87
|
-
| `rotation` | number | 0 | Rotation in degrees
|
|
88
|
-
| `scale` | Vector2 | (1, 1) | X and Y scale factors
|
|
89
|
-
| `opacity` | number | 1 | Local opacity multiplier, inherited by child 2D nodes
|
|
90
|
-
| `blendMode` | enum | normal | How the node's own visuals combine with the backdrop: `normal`, `additive`, `multiply`, `subtract`. NOT inherited by children
|
|
91
|
-
| `zIndex` | number | 0 | Draw-order override, `-4096..4096` (integer). Higher draws on top
|
|
92
|
-
| `zAsRelative` | boolean | true | Add `zIndex` to the parent's effective z instead of treating it as absolute
|
|
93
|
-
| `
|
|
94
|
-
| `
|
|
95
|
-
| `
|
|
96
|
-
| `
|
|
97
|
-
| `flow.
|
|
98
|
-
| `flow.
|
|
84
|
+
| Property | Type | Default | Description |
|
|
85
|
+
| --------------------------------- | ------- | -------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
|
|
86
|
+
| `position` | Vector2 | (0, 0) | X and Y coordinates |
|
|
87
|
+
| `rotation` | number | 0 | Rotation in degrees |
|
|
88
|
+
| `scale` | Vector2 | (1, 1) | X and Y scale factors |
|
|
89
|
+
| `opacity` | number | 1 | Local opacity multiplier, inherited by child 2D nodes |
|
|
90
|
+
| `blendMode` | enum | normal | How the node's own visuals combine with the backdrop: `normal`, `additive`, `multiply`, `subtract`. NOT inherited by children |
|
|
91
|
+
| `zIndex` | number | 0 | Draw-order override, `-4096..4096` (integer). Higher draws on top |
|
|
92
|
+
| `zAsRelative` | boolean | true | Add `zIndex` to the parent's effective z instead of treating it as absolute |
|
|
93
|
+
| `layout.enabled` | boolean | false | Anchor this node to its parent's edges (inspector: `layoutEnabled`, section Anchors) |
|
|
94
|
+
| `layout.horizontalAlign` | enum | center | `left`, `center`, `right`, `stretch` |
|
|
95
|
+
| `layout.verticalAlign` | enum | center | `top`, `center`, `bottom`, `stretch` |
|
|
96
|
+
| `layout.left/right/top/bottom` | number | — | Margins of the anchored sides, px from the parent's edge to the node's (inspector: `layoutLeft` …). They place the node on that axis; its `position` component there is written as `0`, and under `stretch` the size is derived (a square's `size`/`radius`: the side is the stretched span). Omitted in a file → derived once from the rect (spec §7.2.3) |
|
|
97
|
+
| `flow.enabled` | boolean | false | Stack this container's children in tree order instead of leaving them where they were authored |
|
|
98
|
+
| `flow.direction` | enum | vertical | `vertical` (a column) or `horizontal` (a row) |
|
|
99
|
+
| `flow.gap` | number | 0 | Space between two children, px |
|
|
100
|
+
| `flow.paddingX` / `flow.paddingY` | number | 0 | Inset from the container's edges |
|
|
101
|
+
| `flow.align` | enum | start | Cross-axis placement of each child: `start`, `center`, `end`. Inspector label: **Cross Axis** |
|
|
102
|
+
| `flow.autoSize` | boolean | false | Grow the container along the flow axis so the last child fits |
|
|
99
103
|
|
|
100
104
|
**Usage Notes:**
|
|
101
105
|
|
|
@@ -111,9 +115,9 @@ The base class for all 2D scene nodes. Use this for simple grouping or as a cont
|
|
|
111
115
|
perpendicular placement (`flow.align`), and **Align** / **Distribute** are the
|
|
112
116
|
one-shot operations on a selection (the viewport strip and `Node ▸ Align ▸`).
|
|
113
117
|
Because Anchors and Flow are orthogonal — a panel can stretch to its parent
|
|
114
|
-
|
|
118
|
+
_and_ stack its children — the inspector shows them as two sub-blocks of one
|
|
115
119
|
**Layout** section, each with its own switch, rather than as one mode selector.
|
|
116
|
-
A child of a flow container sees only its
|
|
120
|
+
A child of a flow container sees only its _driven_ Position axis disabled:
|
|
117
121
|
the main axis always, the cross axis only when its own Anchors are off.
|
|
118
122
|
- Cannot have children by default (set `isContainer = true` to enable)
|
|
119
123
|
- Transforms affect all children in local space
|
|
@@ -148,12 +152,12 @@ mistake it exists to prevent: build the whole game out of coloured rects, then s
|
|
|
148
152
|
|
|
149
153
|
**Properties** (plus everything on Node2D):
|
|
150
154
|
|
|
151
|
-
| Property
|
|
152
|
-
|
|
|
153
|
-
| `width`
|
|
154
|
-
| `height`
|
|
155
|
-
| `color`
|
|
156
|
-
| `blocksPointerInput` | boolean | false
|
|
155
|
+
| Property | Type | Default | Description |
|
|
156
|
+
| -------------------- | ------- | ------- | -------------------------------------------------------------------- |
|
|
157
|
+
| `width` | number | 100 | Width in design pixels |
|
|
158
|
+
| `height` | number | 100 | Height in design pixels |
|
|
159
|
+
| `color` | color | #ffffff | Fill colour (authored sRGB hex) |
|
|
160
|
+
| `blocksPointerInput` | boolean | false | Block hover and presses on UI controls behind this visible rectangle |
|
|
157
161
|
|
|
158
162
|
**Usage Notes:**
|
|
159
163
|
|
|
@@ -194,7 +198,7 @@ A 2D image display node. Renders a textured quad that always faces the camera.
|
|
|
194
198
|
|
|
195
199
|
A texture mapped onto a rectangle of arbitrary size by one of five fill algorithms — the node for
|
|
196
200
|
**UI panels, windows, bars and repeating backgrounds**, where `Sprite2D`'s plain stretch would smear
|
|
197
|
-
the corners. This is the engine's nine-slice
|
|
201
|
+
the corners. This is the engine's nine-slice.
|
|
198
202
|
|
|
199
203
|
**Type String:** `TiledSprite2D`
|
|
200
204
|
|
|
@@ -227,7 +231,8 @@ the corners. This is the engine's nine-slice; UI Kit Forge emits its slice borde
|
|
|
227
231
|
### AnimatedSprite2D
|
|
228
232
|
|
|
229
233
|
Flipbook sprite animation driven by a `.pix3anim` resource — a set of named clips over a
|
|
230
|
-
spritesheet or a list of frame images
|
|
234
|
+
spritesheet or a list of frame images, written as a file (the kit's `pix3-scene-format/pix3anim.md`;
|
|
235
|
+
`pix3 character-compile` for a character with variants). For **skeletal**
|
|
231
236
|
animation use SpineSkeleton2D instead; for a property/timeline animation over any
|
|
232
237
|
node, use the `core:AnimationPlayer` behaviour.
|
|
233
238
|
|
|
@@ -371,12 +376,12 @@ behaves.
|
|
|
371
376
|
| `animation-looped` | `(name, trackIndex)` | A looping animation completed a loop |
|
|
372
377
|
| `spine-event` | `(name, { int, float, string }, trackIndex)` | A keyed animation event fired |
|
|
373
378
|
|
|
374
|
-
**
|
|
375
|
-
|
|
376
|
-
dynamic import would become a chunk that a single-file
|
|
379
|
+
**Build:** `vite build` bundles the Spine runtime _statically_ (through
|
|
380
|
+
`virtual:pix3/spine`), but only when the project uses a `SpineSkeleton2D` — a
|
|
381
|
+
dynamic import would become a chunk that a single-file build can never fetch.
|
|
377
382
|
Skeleton, atlas and the atlas' page images ship with it; projects without a
|
|
378
|
-
skeleton are unaffected in size. The
|
|
379
|
-
|
|
383
|
+
skeleton are unaffected in size. The project lists `@esotericsoftware/spine-threejs`
|
|
384
|
+
in its own dependencies (the starters do not).
|
|
380
385
|
|
|
381
386
|
**Usage Notes:**
|
|
382
387
|
|
|
@@ -991,7 +996,7 @@ A `THREE.InstancedMesh` wrapper for rendering many copies of one geometry/materi
|
|
|
991
996
|
| `castShadow` | boolean | — | Forwarded to the underlying mesh |
|
|
992
997
|
| `receiveShadow` | boolean | — | Forwarded to the underlying mesh |
|
|
993
998
|
| `frustumCulled` | boolean | — | Forwarded to the underlying mesh |
|
|
994
|
-
| `visibleInstanceCount` | number | — | How many instances currently draw (read-only display; not saved)
|
|
999
|
+
| `visibleInstanceCount` | number | — | How many instances currently draw (read-only display; not saved) |
|
|
995
1000
|
| `material.type` | enum | `standard` | Material family — `standard` (PBR) / `lambert` (mobile default) / `basic` (unlit); inspector: **Material Type** |
|
|
996
1001
|
| `material.color` | color | `#ffffff` | Colour every instance shares; a per-instance colour multiplies it |
|
|
997
1002
|
| `material.roughness` / `material.metalness` | number | 0.35 / 0.25 | `standard` only; dropped from the file for the other families |
|
|
@@ -1009,7 +1014,7 @@ A `THREE.InstancedMesh` wrapper for rendering many copies of one geometry/materi
|
|
|
1009
1014
|
- **Instance buffers are NOT serialized** — only the node-level config above is saved. Repopulate buffers at runtime.
|
|
1010
1015
|
- The `material` block IS serialized, and is what makes an instanced mesh authorable: before it existed the loader built no material at all, so a scene-authored instanced mesh always rendered with a shared white PBR default — unreachable from the inspector and past the project's mobile material policy. A `material` handed to the constructor in code still wins over the authored block.
|
|
1011
1016
|
- Raycasts against an instanced mesh return the hit `instanceId`.
|
|
1012
|
-
- Backed by `ECSService` for project-managed ECS worlds; runtime lives in `packages/
|
|
1017
|
+
- Backed by `ECSService` for project-managed ECS worlds; runtime lives in `packages/runtime/src/nodes/3D/InstancedMesh3D.ts` + `core/ECSService.ts`.
|
|
1013
1018
|
|
|
1014
1019
|
---
|
|
1015
1020
|
|
|
@@ -1280,8 +1285,9 @@ and builds a composer from it; with no such node the plain two-pass path runs an
|
|
|
1280
1285
|
- It has no transform: the properties sit flat in `properties`, and position/rotation/scale do not
|
|
1281
1286
|
apply.
|
|
1282
1287
|
- The whole stack is one lazily-created composer. Every effect off = no composer at all.
|
|
1283
|
-
- In a single-file
|
|
1284
|
-
`virtual:
|
|
1288
|
+
- In a single-file build, `postprocessing` is pulled in through the generated
|
|
1289
|
+
`virtual:pix3/postprocessing` module (a stub when no scene has a `PostProcess`) — using this
|
|
1290
|
+
node is fine for a build, it just adds weight.
|
|
1285
1291
|
|
|
1286
1292
|
## Audio
|
|
1287
1293
|
|