Add shared-scene 2D authoring, sprite animation and Rapier2D physics
CI / validate (push) Canceled after 0s

This commit is contained in:
emil28092005
2026-09-12 04:58:59 +03:00
parent 6f497d1977
commit 3afac743a4
32 changed files with 4999 additions and 270 deletions
+107 -3
View File
@@ -4,7 +4,8 @@
"commands": {
"project.rename": "{name}",
"project.settings": "{background:\"#dedbd2\",ambient:0.85,shadows:true,renderScale:1}",
"scene.create": "{id?,name}",
"scene.create": "{id?,name,mode?:2d|3d}",
"scene.configure": "{sceneId?,mode:2d|3d}; default editor view and fallback game camera",
"scene.activate": "{id}",
"scene.rename": "{sceneId,name}",
"node.create": "{name,id?,position?,parentId?,components?,sceneId?} OR {entity:{id,name,parentId:null,enabled:true,transform:{position:[0,0,0],rotation:[0,0,0],scale:[1,1,1]},components:{}}}",
@@ -14,13 +15,113 @@
"node.duplicate": "{id,sceneId?}; subtree and internal references",
"component.set": "{id,type,value,sceneId?}; replaces component",
"component.remove": "{id,type,sceneId?}",
"asset.upsert": "{asset:{id,name,kind:\"model\"|\"geometry\"|\"prefab\",uri?,geometry?,entities?,metadata?}}",
"asset.upsert": "{asset:{id,name,kind:\"model\"|\"geometry\"|\"prefab\"|\"image\",uri?,geometry?,entities?,metadata?,image?}}",
"asset.delete": "{id}; fails if referenced",
"script.upsert": "{script:{id,name,source,fields:{speed:{type:\"number\",default:5,label:\"Speed\",min:0,max:30}}}}",
"prefab.create": "{id,name?,sceneId?}",
"prefab.instantiate": "{assetId,position?,sceneId?}"
},
"components": {
"sprite": {
"assetId": "image asset or empty for white quad",
"frame": 0,
"size": "optional [width,height], otherwise frame pixels / PPU",
"color": "#ffffff",
"alpha": 1,
"layer": 0,
"order": 0,
"flipX": false,
"flipY": false,
"sortY": false,
"lit": false
},
"spriteAnimator": {
"autoplay": "idle",
"autoStates": false,
"clips": [
{
"name": "idle",
"frames": [
0,
1
],
"fps": 8,
"loop": true
}
]
},
"tilemap": {
"assetId": "image asset",
"tileSize": [
1,
1
],
"width": 32,
"height": 18,
"cells": [
{
"x": 0,
"y": 0,
"frame": 0,
"solid": true
}
],
"collisions": false,
"layer": 0,
"order": 0
},
"collider2d": {
"shape": "box | circle | capsule | polygon",
"size": [
1,
1
],
"radius": 0.5,
"height": 1.8,
"points": "convex polygon vertices [[x,y],...]",
"offset": [
0,
0
],
"sensor": false,
"oneWay": false,
"membership": 1,
"mask": 65535
},
"rigidbody2d": {
"type": "fixed | dynamic | kinematic",
"mass": 1,
"friction": 0.5,
"restitution": 0,
"gravityScale": 1,
"lockRotation": true,
"ccd": true,
"requires": "collider2d or colliding tilemap"
},
"character2d": {
"mode": "platformer | topDown",
"controls": true,
"speed": 5,
"jumpSpeed": 8,
"gravity": 20,
"autostep": 0.2,
"requires": "kinematic rigidbody2d + collider2d"
},
"joint2d": {
"type": "fixed | revolute | rope | spring",
"targetId": "another body2d",
"anchor": [
0,
0
],
"targetAnchor": [
0,
0
],
"length": 1,
"stiffness": 50,
"damping": 5
},
"mesh": {
"type": "box | sphere | cylinder | icosphere | torus | model | geometry | custom",
"size": [
@@ -61,7 +162,10 @@
"restitution": 0.1
},
"camera": {
"mode": "follow | firstPerson",
"mode": "follow | firstPerson | fixed | imported | 2d",
"orthoWidth": 20,
"pixelPerfect": false,
"pixelsPerUnit": 100,
"targetId": "subject",
"offset": [
0,