melon-lua 5.2.0__py3-none-any.whl → 5.2.3__py3-none-any.whl

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.
melon_lua/__init__.py CHANGED
@@ -29,14 +29,14 @@ from .melsave_writer import (
29
29
  resolve_gate_key,
30
30
  )
31
31
  from .session import MelsaveSession
32
- from .melsave_builder import MelsaveBuilder
32
+ from .melsave_builder import MelsaveBuilder, list_item_gates
33
33
  from .uicontrol_builder import (
34
34
  UIControllerBuilder, UIElement, ElementHandle, element_schema,
35
35
  BUTTON, PEDAL, SLIDER, INPUT_FIELD, STEERING_WHEEL,
36
36
  POINTER, TOGGLE, SCREEN, CUSTOM_ICON, JOYSTICK,
37
37
  )
38
38
 
39
- __version__ = "5.2.0"
39
+ __version__ = "5.2.3"
40
40
 
41
41
  __all__ = [
42
42
  "MelonScriptRunner",
@@ -53,6 +53,7 @@ __all__ = [
53
53
  "get_profile_by_object_id",
54
54
  "get_profile_by_name",
55
55
  "list_spawnables",
56
+ "list_item_gates",
56
57
  "object_id_for_name",
57
58
  "resolve_spawn_name",
58
59
  "load_melmod_pack",
@@ -88,13 +88,13 @@
88
88
  "humanData": [],
89
89
  "mechanicData": [
90
90
  {
91
- "activationInput": 0.0,
91
+ "activationInput": 1.0,
92
92
  "floatParameters": [
93
93
  0.0,
94
94
  1.0,
95
95
  0.0
96
96
  ],
97
- "mechanicSerializedInputs": "[{\"Key\":\"activation\",\"DataType\":2,\"DataName\":\"activation\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"maxDist\",\"DataType\":2,\"DataName\":\"max dist\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":1.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":1000.0,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"hide\",\"DataType\":2,\"DataName\":\"hide\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":1.0,\\\"IsCheckbox\\\":true}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null}]",
97
+ "mechanicSerializedInputs": "[{\"Key\":\"activation\",\"DataType\":2,\"DataName\":\"activation\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\": 1.0, \\\"Default\\\": 0.0, \\\"Min\\\": -3.40282347e+38, \\\"Max\\\": 3.40282347e+38, \\\"IsCheckbox\\\": false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"maxDist\",\"DataType\":2,\"DataName\":\"max dist\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":1.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":1000.0,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"hide\",\"DataType\":2,\"DataName\":\"hide\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":1.0,\\\"IsCheckbox\\\":true}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null}]",
98
98
  "mechanicSerializedOutputs": "[{\"Key\":\"entity\",\"DataType\":1,\"DataName\":\"entity\",\"CanBeEdit\":true,\"GateData\":null,\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"activation\",\"DataType\":2,\"DataName\":\"activation\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"dist\",\"DataType\":2,\"DataName\":\"dist\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":1000.0,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"trigger\",\"DataType\":2,\"DataName\":\"trigger\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"hit point\",\"DataType\":8,\"DataName\":\"hit point\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"Default\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"MinVector\\\":{\\\"x\\\":-3.40282347E+38,\\\"y\\\":-3.40282347E+38,\\\"z\\\":-3.40282347E+38,\\\"w\\\":-3.40282347E+38,\\\"normalized\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"magnitude\\\":\\\"Infinity\\\",\\\"sqrMagnitude\\\":\\\"Infinity\\\"},\\\"MaxVector\\\":{\\\"x\\\":3.40282347E+38,\\\"y\\\":3.40282347E+38,\\\"z\\\":3.40282347E+38,\\\"w\\\":3.40282347E+38,\\\"normalized\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"magnitude\\\":\\\"Infinity\\\",\\\"sqrMagnitude\\\":\\\"Infinity\\\"}}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"hit normal\",\"DataType\":8,\"DataName\":\"hit normal\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"Default\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"MinVector\\\":{\\\"x\\\":-3.40282347E+38,\\\"y\\\":-3.40282347E+38,\\\"z\\\":-3.40282347E+38,\\\"w\\\":-3.40282347E+38,\\\"normalized\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"magnitude\\\":\\\"Infinity\\\",\\\"sqrMagnitude\\\":\\\"Infinity\\\"},\\\"MaxVector\\\":{\\\"x\\\":3.40282347E+38,\\\"y\\\":3.40282347E+38,\\\"z\\\":3.40282347E+38,\\\"w\\\":3.40282347E+38,\\\"normalized\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"magnitude\\\":\\\"Infinity\\\",\\\"sqrMagnitude\\\":\\\"Infinity\\\"}}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"hit entity\",\"DataType\":1,\"DataName\":\"hit entity\",\"CanBeEdit\":true,\"GateData\":null,\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"physics-material\",\"DataType\":4,\"DataName\":\"physics-material\",\"CanBeEdit\":true,\"GateData\":\"{\\\"IsMultiline\\\":false,\\\"Value\\\":\\\"\\\",\\\"Default\\\":null,\\\"MaxLength\\\":2147483647}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null}]"
99
99
  }
100
100
  ],
@@ -119,4 +119,4 @@
119
119
  "a": 0.0
120
120
  },
121
121
  "isPixelTextureWasChanged": false
122
- }
122
+ }
@@ -88,11 +88,11 @@
88
88
  "humanData": [],
89
89
  "mechanicData": [
90
90
  {
91
- "activationInput": 0.0,
91
+ "activationInput": 1.0,
92
92
  "floatParameters": [
93
93
  0.0
94
94
  ],
95
- "mechanicSerializedInputs": "[{\"Key\":\"activation\",\"DataType\":2,\"DataName\":\"activation\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"string\",\"DataType\":4,\"DataName\":\"text\",\"CanBeEdit\":true,\"GateData\":\"{\\\"IsMultiline\\\":false,\\\"Value\\\":\\\"no connection\\\",\\\"Default\\\":\\\"no connection\\\",\\\"MaxLength\\\":256}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"color\",\"DataType\":24,\"DataName\":\"color\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":{\\\"x\\\":1.0,\\\"y\\\":1.0,\\\"z\\\":1.0,\\\"w\\\":1.0,\\\"normalized\\\":{\\\"x\\\":0.5,\\\"y\\\":0.5,\\\"z\\\":0.5,\\\"w\\\":0.5,\\\"magnitude\\\":1.0,\\\"sqrMagnitude\\\":1.0},\\\"magnitude\\\":2.0,\\\"sqrMagnitude\\\":4.0},\\\"Default\\\":{\\\"x\\\":1.0,\\\"y\\\":1.0,\\\"z\\\":1.0,\\\"w\\\":1.0,\\\"normalized\\\":{\\\"x\\\":0.5,\\\"y\\\":0.5,\\\"z\\\":0.5,\\\"w\\\":0.5,\\\"magnitude\\\":1.0,\\\"sqrMagnitude\\\":1.0},\\\"magnitude\\\":2.0,\\\"sqrMagnitude\\\":4.0},\\\"MinVector\\\":{\\\"x\\\":-3.40282347E+38,\\\"y\\\":-3.40282347E+38,\\\"z\\\":-3.40282347E+38,\\\"w\\\":-3.40282347E+38,\\\"normalized\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"magnitude\\\":\\\"Infinity\\\",\\\"sqrMagnitude\\\":\\\"Infinity\\\"},\\\"MaxVector\\\":{\\\"x\\\":3.40282347E+38,\\\"y\\\":3.40282347E+38,\\\"z\\\":3.40282347E+38,\\\"w\\\":3.40282347E+38,\\\"normalized\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"magnitude\\\":\\\"Infinity\\\",\\\"sqrMagnitude\\\":\\\"Infinity\\\"}}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null}]",
95
+ "mechanicSerializedInputs": "[{\"Key\":\"activation\",\"DataType\":2,\"DataName\":\"activation\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\": 1.0, \\\"Default\\\": 0.0, \\\"Min\\\": -3.40282347e+38, \\\"Max\\\": 3.40282347e+38, \\\"IsCheckbox\\\": false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"string\",\"DataType\":4,\"DataName\":\"text\",\"CanBeEdit\":true,\"GateData\":\"{\\\"IsMultiline\\\":false,\\\"Value\\\":\\\"no connection\\\",\\\"Default\\\":\\\"no connection\\\",\\\"MaxLength\\\":256}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"color\",\"DataType\":24,\"DataName\":\"color\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":{\\\"x\\\":1.0,\\\"y\\\":1.0,\\\"z\\\":1.0,\\\"w\\\":1.0,\\\"normalized\\\":{\\\"x\\\":0.5,\\\"y\\\":0.5,\\\"z\\\":0.5,\\\"w\\\":0.5,\\\"magnitude\\\":1.0,\\\"sqrMagnitude\\\":1.0},\\\"magnitude\\\":2.0,\\\"sqrMagnitude\\\":4.0},\\\"Default\\\":{\\\"x\\\":1.0,\\\"y\\\":1.0,\\\"z\\\":1.0,\\\"w\\\":1.0,\\\"normalized\\\":{\\\"x\\\":0.5,\\\"y\\\":0.5,\\\"z\\\":0.5,\\\"w\\\":0.5,\\\"magnitude\\\":1.0,\\\"sqrMagnitude\\\":1.0},\\\"magnitude\\\":2.0,\\\"sqrMagnitude\\\":4.0},\\\"MinVector\\\":{\\\"x\\\":-3.40282347E+38,\\\"y\\\":-3.40282347E+38,\\\"z\\\":-3.40282347E+38,\\\"w\\\":-3.40282347E+38,\\\"normalized\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"magnitude\\\":\\\"Infinity\\\",\\\"sqrMagnitude\\\":\\\"Infinity\\\"},\\\"MaxVector\\\":{\\\"x\\\":3.40282347E+38,\\\"y\\\":3.40282347E+38,\\\"z\\\":3.40282347E+38,\\\"w\\\":3.40282347E+38,\\\"normalized\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"magnitude\\\":\\\"Infinity\\\",\\\"sqrMagnitude\\\":\\\"Infinity\\\"}}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null}]",
96
96
  "mechanicSerializedOutputs": "[{\"Key\":\"entity\",\"DataType\":1,\"DataName\":\"entity\",\"CanBeEdit\":true,\"GateData\":null,\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"activation\",\"DataType\":2,\"DataName\":\"activation\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"string\",\"DataType\":4,\"DataName\":\"text\",\"CanBeEdit\":true,\"GateData\":\"{\\\"IsMultiline\\\":false,\\\"Value\\\":\\\"no connection\\\",\\\"Default\\\":\\\"no connection\\\",\\\"MaxLength\\\":256}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"color\",\"DataType\":24,\"DataName\":\"color\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":{\\\"x\\\":1.0,\\\"y\\\":1.0,\\\"z\\\":1.0,\\\"w\\\":1.0,\\\"normalized\\\":{\\\"x\\\":0.5,\\\"y\\\":0.5,\\\"z\\\":0.5,\\\"w\\\":0.5,\\\"magnitude\\\":1.0,\\\"sqrMagnitude\\\":1.0},\\\"magnitude\\\":2.0,\\\"sqrMagnitude\\\":4.0},\\\"Default\\\":{\\\"x\\\":1.0,\\\"y\\\":1.0,\\\"z\\\":1.0,\\\"w\\\":1.0,\\\"normalized\\\":{\\\"x\\\":0.5,\\\"y\\\":0.5,\\\"z\\\":0.5,\\\"w\\\":0.5,\\\"magnitude\\\":1.0,\\\"sqrMagnitude\\\":1.0},\\\"magnitude\\\":2.0,\\\"sqrMagnitude\\\":4.0},\\\"MinVector\\\":{\\\"x\\\":-3.40282347E+38,\\\"y\\\":-3.40282347E+38,\\\"z\\\":-3.40282347E+38,\\\"w\\\":-3.40282347E+38,\\\"normalized\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"magnitude\\\":\\\"Infinity\\\",\\\"sqrMagnitude\\\":\\\"Infinity\\\"},\\\"MaxVector\\\":{\\\"x\\\":3.40282347E+38,\\\"y\\\":3.40282347E+38,\\\"z\\\":3.40282347E+38,\\\"w\\\":3.40282347E+38,\\\"normalized\\\":{\\\"x\\\":0.0,\\\"y\\\":0.0,\\\"z\\\":0.0,\\\"w\\\":0.0,\\\"magnitude\\\":0.0,\\\"sqrMagnitude\\\":0.0},\\\"magnitude\\\":\\\"Infinity\\\",\\\"sqrMagnitude\\\":\\\"Infinity\\\"}}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null}]"
97
97
  }
98
98
  ],
@@ -111,4 +111,4 @@
111
111
  "a": 0.0
112
112
  },
113
113
  "isPixelTextureWasChanged": false
114
- }
114
+ }
@@ -1 +1 @@
1
- {"objectId":892993856,"instanceId":0,"modedObjectId":"","localId":0,"originLocalId":0,"parentId":-1,"position":{"x":0.0,"y":0.0,"z":0.0},"rotation":{"x":0.0,"y":0.0,"z":0.0},"scale":{"x":1.0,"y":1.0,"z":1.0},"color":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"intensity":0.0,"bottomColor":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"isGradientActive":false,"layer":0,"sortingLayer":"Default","orderLayer":0,"gravity":true,"freezed":false,"ballooned":false,"glued":false,"rotationFrozen":false,"notBreakable":false,"isVisible":false,"isMeltable":false,"isHuman":false,"isMutationPart":false,"isActivationForced":true,"prohibitDrag":false,"prohibitBrokeByWater":false,"interactionType":"Physic","hasInvisible":false,"fluorescentIntensity":0.0,"fluorescentColor":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"TreeBranch":null,"LightSaveData":{"IsActive":false,"ColorIsChanged":true,"Color":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"IsBrokenByWater":false,"ChildrenSaveData":null,"<IsActive>k__BackingField":false,"<ColorIsChanged>k__BackingField":true,"<Color>k__BackingField":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"<IsBrokenByWater>k__BackingField":false,"<ChildrenSaveData>k__BackingField":null},"BreakableSaveData":null,"SpikeComponentData":null,"TakenObjectData":null,"humanData":[],"mechanicData":[{"activationInput":0.0,"floatParameters":[1.0,0.0,0.0,1.0,1.0,1.0],"mechanicSerializedInputs":"[{\"Key\":\"activation\",\"DataType\":2,\"DataName\":\"activation\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":1.0,\\\"Default\\\":1.0,\\\"Min\\\":-3.40282347e+38,\\\"Max\\\":3.40282347e+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"shiftX\",\"DataType\":2,\"DataName\":\"shift x\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"shiftY\",\"DataType\":2,\"DataName\":\"shift y\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"hide\",\"DataType\":2,\"DataName\":\"hide\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":1.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":1.0,\\\"IsCheckbox\\\":true}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"sizeX\",\"DataType\":2,\"DataName\":\"width\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":1.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":2.14748365E+09,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"sizeY\",\"DataType\":2,\"DataName\":\"height\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":1.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":2.14748365E+09,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null}]","mechanicSerializedOutputs":"[{\"Key\":\"entity\",\"DataType\":1,\"DataName\":\"entity\",\"CanBeEdit\":true,\"GateData\":null,\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"activation\",\"DataType\":2,\"DataName\":\"activation\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"trigger\",\"DataType\":2,\"DataName\":\"trigger\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"entity array\",\"DataType\":1024,\"DataName\":\"entity array\",\"CanBeEdit\":true,\"GateData\":null,\"GroupId\":null,\"Group\":0,\"GroupName\":null}]"}],"brokenJoints":[],"hingeJoints":[],"distJoints":[],"constraints":[],"collisionIgnores":[],"addData":[],"saveMetaDatas":[{"key":"Radar_selected_entities","boolValue":false,"stringValue":"[]","intValue":0,"floatValue":0.0,"vector2Value":{"x":0.0,"y":0.0},"vector3Value":{"x":0.0,"y":0.0,"z":0.0},"vector4Value":{"x":0.0,"y":0.0,"z":0.0,"w":0.0,"magnitude":0.0,"sqrMagnitude":0.0},"texture2DValue":null}],"ContextMenuActionsRestrictionSaveData":null,"pixelTargetColor":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"isPixelTextureWasChanged":false,"activationInput":1.0}
1
+ {"objectId":892993856,"instanceId":0,"modedObjectId":"","localId":0,"originLocalId":0,"parentId":-1,"position":{"x":0.0,"y":0.0,"z":0.0},"rotation":{"x":0.0,"y":0.0,"z":0.0},"scale":{"x":1.0,"y":1.0,"z":1.0},"color":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"intensity":0.0,"bottomColor":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"isGradientActive":false,"layer":0,"sortingLayer":"Default","orderLayer":0,"gravity":true,"freezed":false,"ballooned":false,"glued":false,"rotationFrozen":false,"notBreakable":false,"isVisible":false,"isMeltable":false,"isHuman":false,"isMutationPart":false,"isActivationForced":true,"prohibitDrag":false,"prohibitBrokeByWater":false,"interactionType":"Physic","hasInvisible":false,"fluorescentIntensity":0.0,"fluorescentColor":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"TreeBranch":null,"LightSaveData":{"IsActive":false,"ColorIsChanged":true,"Color":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"IsBrokenByWater":false,"ChildrenSaveData":null,"<IsActive>k__BackingField":false,"<ColorIsChanged>k__BackingField":true,"<Color>k__BackingField":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"<IsBrokenByWater>k__BackingField":false,"<ChildrenSaveData>k__BackingField":null},"BreakableSaveData":null,"SpikeComponentData":null,"TakenObjectData":null,"humanData":[],"mechanicData":[{"activationInput":1.0,"floatParameters":[1.0,0.0,0.0,1.0,1.0,1.0],"mechanicSerializedInputs":"[{\"Key\":\"activation\",\"DataType\":2,\"DataName\":\"activation\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":1.0,\\\"Default\\\":1.0,\\\"Min\\\":-3.40282347e+38,\\\"Max\\\":3.40282347e+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"shiftX\",\"DataType\":2,\"DataName\":\"shift x\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"shiftY\",\"DataType\":2,\"DataName\":\"shift y\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"hide\",\"DataType\":2,\"DataName\":\"hide\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":1.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":1.0,\\\"IsCheckbox\\\":true}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"sizeX\",\"DataType\":2,\"DataName\":\"width\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":1.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":2.14748365E+09,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"sizeY\",\"DataType\":2,\"DataName\":\"height\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":1.0,\\\"Default\\\":0.0,\\\"Min\\\":0.0,\\\"Max\\\":2.14748365E+09,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null}]","mechanicSerializedOutputs":"[{\"Key\":\"entity\",\"DataType\":1,\"DataName\":\"entity\",\"CanBeEdit\":true,\"GateData\":null,\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"activation\",\"DataType\":2,\"DataName\":\"activation\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"trigger\",\"DataType\":2,\"DataName\":\"trigger\",\"CanBeEdit\":true,\"GateData\":\"{\\\"Value\\\":0.0,\\\"Default\\\":0.0,\\\"Min\\\":-3.40282347E+38,\\\"Max\\\":3.40282347E+38,\\\"IsCheckbox\\\":false}\",\"GroupId\":null,\"Group\":0,\"GroupName\":null},{\"Key\":\"entity array\",\"DataType\":1024,\"DataName\":\"entity array\",\"CanBeEdit\":true,\"GateData\":null,\"GroupId\":null,\"Group\":0,\"GroupName\":null}]"}],"brokenJoints":[],"hingeJoints":[],"distJoints":[],"constraints":[],"collisionIgnores":[],"addData":[],"saveMetaDatas":[{"key":"Radar_selected_entities","boolValue":false,"stringValue":"[\"62\",\"66\",\"64\",\"63\",\"186\",\"214\",\"245\",\"268\",\"782893376\",\"sliced pumpkin20253215052763\",\"69\",\"105\",\"101\",\"72\",\"171\",\"266\",\"771882688\",\"54\",\"27\",\"18\",\"37\",\"166\",\"255\",\"12\",\"11\",\"9\",\"85\",\"45\",\"168\",\"516882112\",\"1083703616\",\"103\",\"221\",\"240\",\"578486592\",\"864551232\",\"1243939136\",\"855703232\",\"691011904\",\"1795555008\",\"109772480\",\"256507584\",\"578683200\",\"86\",\"7\",\"44\",\"95\",\"100\",\"8\",\"116\",\"98\",\"83\",\"79\",\"119\",\"169\",\"170\",\"39\",\"47\",\"46\",\"52\",\"135\",\"51\",\"175\",\"2029059776\",\"782762304\",\"1921777984\",\"1118961344\",\"1124925760\",\"42\",\"93\",\"89\",\"65\",\"142\",\"173\",\"259\",\"271\",\"1054473920\",\"2046361280\",\"692650304\",\"141426368\",\"717356736\",\"100598080\",\"1649148224\",\"1462698304\",\"1275330240\",\"2010382016\",\"49\",\"104\",\"48\",\"32\",\"70\",\"92\",\"80\",\"182\",\"26\",\"41\",\"227\",\"228\",\"243\",\"491388608\",\"117\",\"136\",\"1705378112\",\"1516633792\",\"1841692992\",\"1091894976\",\"402784576\",\"238\",\"241\",\"242\",\"277\",\"315\",\"1499070784\",\"1061749056\",\"1263993152\",\"396754624\",\"316735168\",\"108\",\"110\",\"106\",\"109\",\"112\",\"107\",\"111\",\"231\",\"237\",\"236\",\"239\",\"263\",\"2098987328\",\"294\",\"297\",\"289\",\"295\",\"300\",\"293\",\"299\",\"291\",\"290\",\"292\",\"296\",\"298\",\"1307115200\",\"29\",\"77\",\"78\",\"30\",\"28\",\"61\",\"84\",\"4\",\"58\",\"59\",\"60\",\"55\",\"128\",\"73\",\"144\",\"143\",\"56\",\"31\",\"118\",\"97\",\"34\",\"113\",\"68\",\"20\",\"43\",\"127\",\"126\",\"19\",\"160\",\"187\",\"188\",\"190\",\"191\",\"189\",\"196\",\"194\",\"195\",\"317\",\"318\",\"508100928\",\"1075642688\",\"2137784000\",\"243007168\",\"848888128\",\"1283587776\",\"139787968\",\"983360\",\"592117440\",\"1016725824\",\"37945024\",\"1571488064\",\"2047672000\",\"665190720\",\"918879936\",\"347341120\",\"153\",\"157\",\"156\",\"264\",\"287\",\"288\",\"312\",\"311\",\"313\",\"1882193600\",\"2086732096\",\"1902116544\",\"635109056\",\"1056375104\",\"612958528\",\"1925710144\",\"27262656\",\"36\",\"197\",\"198\",\"199\",\"200\",\"203\",\"204\",\"206\",\"207\",\"208\",\"209\",\"210\",\"212\",\"211\",\"2043937088\",\"403964224\",\"1612054208\",\"1008599360\",\"743833920\",\"410255680\",\"215089472\",\"167903552\",\"1769996608\",\"248\",\"249\",\"250\",\"251\",\"2046689600\",\"1464992064\",\"507707712\",\"130\",\"131\",\"272\",\"132\",\"237371712\",\"133\",\"134\",\"1\",\"10\",\"33\",\"53\",\"184\",\"185\",\"247\",\"897581376\",\"246\",\"274\",\"275\",\"310\",\"278\",\"1131085504\",\"1321336512\",\"1428160192\",\"783810240\",\"436732224\",\"687931072\",\"892600640\",\"257\",\"256\",\"13\",\"252\",\"258\",\"253\",\"254\",\"261\",\"262\",\"276\",\"1353580864\",\"1971846848\",\"1978203840\",\"892993856\",\"1202192704\",\"596836672\",\"1441136320\",\"824246592\",\"176\",\"177\",\"178\",\"179\",\"180\",\"181\",\"235\",\"232\",\"234\",\"233\",\"303\",\"302\",\"229\",\"230\",\"555482816\",\"812646720\",\"1294925504\",\"1795489472\",\"651755840\",\"167117120\",\"1658847552\",\"543686336\",\"1296564544\",\"1683226304\",\"159\",\"172\",\"174\",\"192\",\"213\",\"260\",\"1223557440\",\"1988100416\",\"1978663232\",\"1046479168\",\"109642048\",\"1993933120\",\"379453120\",\"154\",\"17\",\"102\",\"57\",\"408355136\",\"758447808\",\"984350400\",\"85130944\",\"1220804928\",\"498597568\",\"1729888576\",\"2098855616\",\"1141964480\",\"357105984\",\"1853423296\",\"1014890176\",\"1189151040\",\"1860173504\",\"1374748352\",\"1214251328\",\"35454656\",\"1096548672\",\"23\",\"123\",\"183\",\"115\",\"76\",\"125\",\"121\",\"120\",\"94\",\"35\",\"3\",\"114\",\"88\",\"270\",\"81\",\"269\",\"319\",\"267\",\"316\",\"2059338048\",\"Untitled2026417234856744\",\"2044067520\",\"162005312\",\"820510400\",\"1097400000\",\"1616970048\",\"162070848\",\"491913536\",\"657718976\",\"232783552\",\"1163656896\",\"1665007296\",\"1422786880\",\"335151424\",\"137\",\"138\",\"139\",\"155\",\"140\",\"141\",\"201\",\"202\",\"205\",\"223\",\"40\",\"129\",\"87\",\"22\",\"21\",\"25\",\"24\",\"15\",\"14\",\"122\",\"50\",\"222\",\"226\",\"225\",\"224\",\"161\",\"162\",\"163\",\"164\",\"165\",\"279\",\"301\",\"307\",\"309\",\"308\",\"304\",\"305\",\"306\",\"314\",\"193\",\"220\",\"158\",\"74\",\"90\",\"38\",\"2\",\"216\",\"217\",\"218\",\"219\",\"265\",\"834993856\",\"648412864\",\"582877504\",\"1007812928\",\"993919296\",\"1121583424\",\"683278016\",\"1532362432\",\"328072896\",\"193724096\",\"1127612736\",\"6\",\"67\",\"1946157376\",\"0\",\"5\",\"16\",\"71\",\"75\",\"82\",\"91\",\"96\",\"99\",\"124\",\"145\",\"146\",\"147\",\"148\",\"149\",\"150\",\"151\",\"152\",\"167\",\"215\",\"244\",\"273\",\"280\",\"281\",\"282\",\"283\",\"284\",\"285\",\"286\",\"320\",\"321\",\"322\",\"323\",\"324\",\"325\",\"326\",\"327\",\"328\",\"329\",\"330\",\"331\",\"332\",\"333\",\"334\",\"335\",\"336\",\"337\",\"338\",\"339\",\"340\",\"341\",\"342\",\"343\",\"344\",\"345\",\"346\",\"347\",\"348\",\"349\",\"350\",\"351\",\"352\",\"353\",\"354\",\"355\",\"356\",\"357\",\"358\",\"359\",\"360\",\"361\",\"362\",\"363\",\"364\",\"365\",\"366\",\"367\",\"368\",\"369\",\"370\",\"371\",\"372\",\"373\",\"374\",\"375\",\"376\",\"377\",\"378\",\"379\",\"380\",\"381\",\"382\",\"383\",\"384\",\"385\",\"386\",\"387\",\"388\",\"389\",\"390\",\"391\",\"392\",\"393\",\"394\",\"395\",\"396\",\"397\",\"398\",\"399\",\"400\",\"401\",\"402\",\"403\",\"404\",\"405\",\"406\",\"407\",\"408\",\"409\",\"410\",\"411\",\"412\",\"413\",\"414\",\"415\",\"416\",\"417\",\"418\",\"419\",\"420\",\"421\",\"422\",\"423\",\"424\",\"425\",\"426\",\"427\",\"428\",\"429\",\"430\",\"431\",\"432\",\"433\",\"434\",\"435\",\"436\",\"437\",\"438\",\"439\",\"440\",\"441\",\"442\",\"443\",\"444\",\"445\",\"446\",\"447\",\"448\",\"449\",\"450\",\"451\",\"452\",\"453\",\"454\",\"455\"]","intValue":0,"floatValue":0.0,"vector2Value":{"x":0.0,"y":0.0},"vector3Value":{"x":0.0,"y":0.0,"z":0.0},"vector4Value":{"x":0.0,"y":0.0,"z":0.0,"w":0.0,"magnitude":0.0,"sqrMagnitude":0.0},"texture2DValue":null}],"ContextMenuActionsRestrictionSaveData":null,"pixelTargetColor":{"r":0.0,"g":0.0,"b":0.0,"a":0.0},"isPixelTextureWasChanged":false,"activationInput":1.0}
@@ -0,0 +1 @@
1
+ ["62","66","64","63","186","214","245","268","782893376","sliced pumpkin20253215052763","69","105","101","72","171","266","771882688","54","27","18","37","166","255","12","11","9","85","45","168","516882112","1083703616","103","221","240","578486592","864551232","1243939136","855703232","691011904","1795555008","109772480","256507584","578683200","86","7","44","95","100","8","116","98","83","79","119","169","170","39","47","46","52","135","51","175","2029059776","782762304","1921777984","1118961344","1124925760","42","93","89","65","142","173","259","271","1054473920","2046361280","692650304","141426368","717356736","100598080","1649148224","1462698304","1275330240","2010382016","49","104","48","32","70","92","80","182","26","41","227","228","243","491388608","117","136","1705378112","1516633792","1841692992","1091894976","402784576","238","241","242","277","315","1499070784","1061749056","1263993152","396754624","316735168","108","110","106","109","112","107","111","231","237","236","239","263","2098987328","294","297","289","295","300","293","299","291","290","292","296","298","1307115200","29","77","78","30","28","61","84","4","58","59","60","55","128","73","144","143","56","31","118","97","34","113","68","20","43","127","126","19","160","187","188","190","191","189","196","194","195","317","318","508100928","1075642688","2137784000","243007168","848888128","1283587776","139787968","983360","592117440","1016725824","37945024","1571488064","2047672000","665190720","918879936","347341120","153","157","156","264","287","288","312","311","313","1882193600","2086732096","1902116544","635109056","1056375104","612958528","1925710144","27262656","36","197","198","199","200","203","204","206","207","208","209","210","212","211","2043937088","403964224","1612054208","1008599360","743833920","410255680","215089472","167903552","1769996608","248","249","250","251","2046689600","1464992064","507707712","130","131","272","132","237371712","133","134","1","10","33","53","184","185","247","897581376","246","274","275","310","278","1131085504","1321336512","1428160192","783810240","436732224","687931072","892600640","257","256","13","252","258","253","254","261","262","276","1353580864","1971846848","1978203840","892993856","1202192704","596836672","1441136320","824246592","176","177","178","179","180","181","235","232","234","233","303","302","229","230","555482816","812646720","1294925504","1795489472","651755840","167117120","1658847552","543686336","1296564544","1683226304","159","172","174","192","213","260","1223557440","1988100416","1978663232","1046479168","109642048","1993933120","379453120","154","17","102","57","408355136","758447808","984350400","85130944","1220804928","498597568","1729888576","2098855616","1141964480","357105984","1853423296","1014890176","1189151040","1860173504","1374748352","1214251328","35454656","1096548672","23","123","183","115","76","125","121","120","94","35","3","114","88","270","81","269","319","267","316","2059338048","Untitled2026417234856744","2044067520","162005312","820510400","1097400000","1616970048","162070848","491913536","657718976","232783552","1163656896","1665007296","1422786880","335151424","137","138","139","155","140","141","201","202","205","223","40","129","87","22","21","25","24","15","14","122","50","222","226","225","224","161","162","163","164","165","279","301","307","309","308","304","305","306","314","193","220","158","74","90","38","2","216","217","218","219","265","834993856","648412864","582877504","1007812928","993919296","1121583424","683278016","1532362432","328072896","193724096","1127612736","6","67","1946157376","0","5","16","71","75","82","91","96","99","124","145","146","147","148","149","150","151","152","167","215","244","273","280","281","282","283","284","285","286","320","321","322","323","324","325","326","327","328","329","330","331","332","333","334","335","336","337","338","339","340","341","342","343","344","345","346","347","348","349","350","351","352","353","354","355","356","357","358","359","360","361","362","363","364","365","366","367","368","369","370","371","372","373","374","375","376","377","378","379","380","381","382","383","384","385","386","387","388","389","390","391","392","393","394","395","396","397","398","399","400","401","402","403","404","405","406","407","408","409","410","411","412","413","414","415","416","417","418","419","420","421","422","423","424","425","426","427","428","429","430","431","432","433","434","435","436","437","438","439","440","441","442","443","444","445","446","447","448","449","450","451","452","453","454","455"]
melon_lua/entity.py CHANGED
@@ -1,12 +1,22 @@
1
1
  """Mock Entity — matches every field the real Entity API touches.
2
2
 
3
3
  Fields are populated based on the 60+ methods in EntityApiModule.cs (IL2CPP dump)
4
- and the signatures in Example_ApiReference_en.lua. This is NOT a physics body:
5
- state is set directly by setters. A future IPhysicsWorld hook can drive motion.
4
+ and the signatures in Example_ApiReference_en.lua.
5
+
6
+ Python-side field writes for transform/velocity sync into the owning
7
+ WorldContext Box2D body (via ``_world`` set by ``spawn_entity``), so that
8
+ Lua ``Entity(id):getVelocity()`` sees the same values.
6
9
  """
7
10
  from dataclasses import dataclass, field
8
11
  from typing import Any, Optional
9
12
 
13
+ # Fields that must push into Box2D when assigned from Python.
14
+ _BODY_SYNC_FIELDS = frozenset({
15
+ "position_x", "position_y", "angle",
16
+ "velocity_x", "velocity_y", "angular_velocity",
17
+ "gravity_scale", "is_frozen", "is_rotation_frozen",
18
+ })
19
+
10
20
 
11
21
  @dataclass
12
22
  class Entity:
@@ -72,6 +82,41 @@ class Entity:
72
82
  alive: bool = True
73
83
  custom_data: dict[str, Any] = field(default_factory=dict)
74
84
 
85
+ # Owning world (not a dataclass field — set by WorldContext.spawn_entity)
86
+ # so field assignment can sync Box2D.
87
+ def __post_init__(self) -> None:
88
+ object.__setattr__(self, "_world", None)
89
+ object.__setattr__(self, "_syncing_from_body", False)
90
+
91
+ def __setattr__(self, name: str, value) -> None:
92
+ object.__setattr__(self, name, value)
93
+ if name in _BODY_SYNC_FIELDS and not self.__dict__.get("_syncing_from_body"):
94
+ w = self.__dict__.get("_world")
95
+ if w is not None:
96
+ w.sync_body_from_entity(self.entity_id)
97
+
98
+ def bind_world(self, world) -> None:
99
+ """Attach owning WorldContext (called by spawn_entity)."""
100
+ object.__setattr__(self, "_world", world)
101
+
102
+ def set_velocity(self, vx: float, vy: float) -> None:
103
+ """Python alias matching Lua Entity:setVelocity — writes + syncs body."""
104
+ self.velocity_x = float(vx)
105
+ self.velocity_y = float(vy)
106
+
107
+ def set_linear_velocity(self, vx: float, vy: float) -> None:
108
+ """Alias of set_velocity."""
109
+ self.set_velocity(vx, vy)
110
+
111
+ def get_velocity(self) -> tuple[float, float]:
112
+ """Python-side velocity; prefers Box2D body when present."""
113
+ w = self.__dict__.get("_world")
114
+ if w is not None:
115
+ b = w.get_body(self.entity_id)
116
+ if b is not None:
117
+ return float(b.linearVelocity.x), float(b.linearVelocity.y)
118
+ return float(self.velocity_x), float(self.velocity_y)
119
+
75
120
  @property
76
121
  def normal_x(self) -> float:
77
122
  import math
@@ -269,6 +269,221 @@ def _load_item_template(object_id: int) -> dict | None:
269
269
  return None
270
270
 
271
271
 
272
+ def _summarize_mech_gate(g: dict) -> dict:
273
+ """Compact gate entry for list_item_gates."""
274
+ key = g.get("Key")
275
+ dn = g.get("DataName")
276
+ return {
277
+ "key": key,
278
+ "data_name": dn,
279
+ "name": dn if dn not in (None, "") else key,
280
+ "data_type": g.get("DataType"),
281
+ "can_edit": g.get("CanBeEdit", g.get("CanBeEdited")),
282
+ "group_id": g.get("GroupId"),
283
+ "group": g.get("Group"),
284
+ "group_name": g.get("GroupName"),
285
+ }
286
+
287
+
288
+ def list_item_gates(object_id_or_name) -> dict:
289
+ """Return mechanic input/output gates for a spawnable item template.
290
+
291
+ Prefer this over dumping a full saveObjects JSON when an agent only needs
292
+ gate names for ``connect()``.
293
+
294
+ Args:
295
+ object_id_or_name: int objectId, or catalog name / Chinese alias
296
+ (resolved via ``object_id_for_name``).
297
+
298
+ Returns:
299
+ {
300
+ "object_id": int,
301
+ "name": str | None,
302
+ "inputs": [{"key","data_name","name","data_type",...}, ...],
303
+ "outputs": [...],
304
+ "error": str | None,
305
+ }
306
+ """
307
+ from .catalog import object_id_for_name, get_profile_by_object_id
308
+
309
+ oid: int | None
310
+ if isinstance(object_id_or_name, int):
311
+ oid = object_id_or_name
312
+ else:
313
+ s = str(object_id_or_name).strip()
314
+ if s.isdigit() or (s.startswith("-") and s[1:].isdigit()):
315
+ oid = int(s)
316
+ else:
317
+ oid = object_id_for_name(s)
318
+
319
+ if oid is None:
320
+ return {
321
+ "object_id": None,
322
+ "name": str(object_id_or_name),
323
+ "inputs": [],
324
+ "outputs": [],
325
+ "error": f"unknown object: {object_id_or_name!r}",
326
+ }
327
+
328
+ so = _load_item_template(oid)
329
+ if not so:
330
+ return {
331
+ "object_id": oid,
332
+ "name": None,
333
+ "inputs": [],
334
+ "outputs": [],
335
+ "error": f"no item template for objectId={oid}",
336
+ }
337
+
338
+ profile = get_profile_by_object_id(oid) or {}
339
+ name = profile.get("name") if isinstance(profile, dict) else None
340
+
341
+ md = so.get("mechanicData")
342
+ inputs: list[dict] = []
343
+ outputs: list[dict] = []
344
+ if isinstance(md, list) and md:
345
+ m0 = md[0] if isinstance(md[0], dict) else {}
346
+ for side, bucket in (
347
+ ("mechanicSerializedInputs", inputs),
348
+ ("mechanicSerializedOutputs", outputs),
349
+ ):
350
+ raw = m0.get(side, "")
351
+ try:
352
+ gates = json.loads(raw) if isinstance(raw, str) and raw else (raw or [])
353
+ except (TypeError, json.JSONDecodeError):
354
+ gates = []
355
+ if isinstance(gates, list):
356
+ for g in gates:
357
+ if isinstance(g, dict):
358
+ bucket.append(_summarize_mech_gate(g))
359
+
360
+ return {
361
+ "object_id": oid,
362
+ "name": name or so.get("objectId"),
363
+ "inputs": inputs,
364
+ "outputs": outputs,
365
+ "error": None,
366
+ }
367
+
368
+
369
+ # Sensors / displays that should power on when placed via SDK (game stock
370
+ # templates often ship activation=0 so they do nothing until wired).
371
+ _DEFAULT_ACTIVATION_ON_IDS = frozenset({
372
+ 13, # Ranger / 激光雷达
373
+ 261, # ScreenTextDevice / 文字屏
374
+ 596836672, # LEDMatrixDisplay
375
+ 892993856, # Radar / 区域雷达
376
+ })
377
+
378
+ _RADAR_OBJECT_ID = 892993856
379
+ _RADAR_SELECTED_META_KEY = "Radar_selected_entities"
380
+ _RADAR_SELECT_ALL_IDS: list[str] | None = None
381
+
382
+
383
+ def _radar_select_all_ids() -> list[str]:
384
+ """ObjectId strings for Radar filter Select-All (game save format)."""
385
+ global _RADAR_SELECT_ALL_IDS
386
+ if _RADAR_SELECT_ALL_IDS is not None:
387
+ return _RADAR_SELECT_ALL_IDS
388
+ path = Path(__file__).parent / "data" / "radar_select_all_ids.json"
389
+ if path.exists():
390
+ with open(path, "r", encoding="utf-8") as f:
391
+ raw = json.load(f)
392
+ if isinstance(raw, list) and raw:
393
+ _RADAR_SELECT_ALL_IDS = [str(x) for x in raw]
394
+ return _RADAR_SELECT_ALL_IDS
395
+ # Fallback: physics catalog keys only (still better than empty []).
396
+ phys = Path(__file__).parent / "data" / "object_physics_by_id.json"
397
+ ids: list[str] = []
398
+ if phys.exists():
399
+ with open(phys, "r", encoding="utf-8") as f:
400
+ data = json.load(f)
401
+ by = data.get("byObjectId") or {}
402
+ ids = [str(k) for k in by.keys()]
403
+ _RADAR_SELECT_ALL_IDS = ids
404
+ return _RADAR_SELECT_ALL_IDS
405
+
406
+
407
+ def _set_mechanic_activation(so: dict, value: float = 1.0) -> None:
408
+ """Set mechanic activationInput + input-gate Value (in-place)."""
409
+ if "activationInput" in so:
410
+ so["activationInput"] = float(value)
411
+ md = so.get("mechanicData")
412
+ if not isinstance(md, list):
413
+ return
414
+ for m in md:
415
+ if not isinstance(m, dict):
416
+ continue
417
+ m["activationInput"] = float(value)
418
+ raw = m.get("mechanicSerializedInputs")
419
+ if not raw:
420
+ continue
421
+ try:
422
+ gates = json.loads(raw) if isinstance(raw, str) else list(raw)
423
+ except (TypeError, json.JSONDecodeError):
424
+ continue
425
+ changed = False
426
+ for g in gates:
427
+ if not isinstance(g, dict):
428
+ continue
429
+ if g.get("Key") != "activation" and (g.get("DataName") or "") != "activation":
430
+ continue
431
+ gd = g.get("GateData")
432
+ if not isinstance(gd, str) or not gd:
433
+ continue
434
+ try:
435
+ data = json.loads(gd)
436
+ except json.JSONDecodeError:
437
+ continue
438
+ data["Value"] = float(value)
439
+ g["GateData"] = json.dumps(data)
440
+ changed = True
441
+ if changed:
442
+ m["mechanicSerializedInputs"] = (
443
+ json.dumps(gates, separators=(",", ":"))
444
+ if isinstance(raw, str)
445
+ else gates
446
+ )
447
+
448
+
449
+ def _set_radar_select_all(so: dict) -> None:
450
+ """Write Radar_selected_entities as full Select-All objectId list.
451
+
452
+ Real device: empty stringValue \"[]\" filters out every object. UI Select All
453
+ fills stringValue with a JSON array of objectId strings (boolValue stays
454
+ false). Without this, entity array is always empty on device.
455
+ """
456
+ ids = _radar_select_all_ids()
457
+ payload = json.dumps(ids, ensure_ascii=False, separators=(",", ":"))
458
+ entry = {
459
+ "key": _RADAR_SELECTED_META_KEY,
460
+ "boolValue": False,
461
+ "stringValue": payload,
462
+ "intValue": 0,
463
+ "floatValue": 0.0,
464
+ "vector2Value": {"x": 0.0, "y": 0.0},
465
+ "vector3Value": {"x": 0.0, "y": 0.0, "z": 0.0},
466
+ "vector4Value": {
467
+ "x": 0.0,
468
+ "y": 0.0,
469
+ "z": 0.0,
470
+ "w": 0.0,
471
+ "magnitude": 0.0,
472
+ "sqrMagnitude": 0.0,
473
+ },
474
+ "texture2DValue": None,
475
+ }
476
+ metas = so.get("saveMetaDatas")
477
+ if not isinstance(metas, list):
478
+ so["saveMetaDatas"] = [entry]
479
+ return
480
+ for i, md in enumerate(metas):
481
+ if isinstance(md, dict) and md.get("key") == _RADAR_SELECTED_META_KEY:
482
+ metas[i] = entry
483
+ return
484
+ metas.append(entry)
485
+
486
+
272
487
  def _build_item_save_objects(
273
488
  object_id: int,
274
489
  x: float,
@@ -310,6 +525,10 @@ def _build_item_save_objects(
310
525
  so["constraints"] = []
311
526
  so["hingeJoints"] = []
312
527
  so["distJoints"] = []
528
+ if object_id in _DEFAULT_ACTIVATION_ON_IDS:
529
+ _set_mechanic_activation(so, 1.0)
530
+ if object_id == _RADAR_OBJECT_ID:
531
+ _set_radar_select_all(so)
313
532
  return so
314
533
 
315
534
 
melon_lua/world.py CHANGED
@@ -245,6 +245,7 @@ class WorldContext:
245
245
  **kw,
246
246
  )
247
247
  self.entities[e.entity_id] = e
248
+ e.bind_world(self)
248
249
  # Apply real prefab physics if we have it.
249
250
  self.apply_physics_profile(e)
250
251
  from .visuals import resolve_sprite
@@ -353,12 +354,33 @@ class WorldContext:
353
354
  e = self.entities.get(eid)
354
355
  if not e or not e.alive:
355
356
  continue
356
- e.position_x = float(body.position.x)
357
- e.position_y = float(body.position.y)
358
- e.angle = _degrees(float(body.angle))
359
- e.velocity_x = float(body.linearVelocity.x)
360
- e.velocity_y = float(body.linearVelocity.y)
361
- e.angular_velocity = _degrees(float(body.angularVelocity))
357
+ # Avoid Entity.__setattr__ re-pushing into body mid-readback
358
+ object.__setattr__(e, "_syncing_from_body", True)
359
+ try:
360
+ e.position_x = float(body.position.x)
361
+ e.position_y = float(body.position.y)
362
+ e.angle = _degrees(float(body.angle))
363
+ e.velocity_x = float(body.linearVelocity.x)
364
+ e.velocity_y = float(body.linearVelocity.y)
365
+ e.angular_velocity = _degrees(float(body.angularVelocity))
366
+ finally:
367
+ object.__setattr__(e, "_syncing_from_body", False)
368
+
369
+ def step_physics(self, dt: float):
370
+ """Alias of ``tick(dt)`` — common agent name for advancing Box2D."""
371
+ return self.tick(dt)
372
+
373
+ def step(self, dt: float):
374
+ """Alias of ``tick(dt)``."""
375
+ return self.tick(dt)
376
+
377
+ def set_entity_velocity(self, entity_id: int, vx: float, vy: float) -> bool:
378
+ """Set linear velocity on entity + Box2D body. Returns False if missing."""
379
+ e = self.get_entity(entity_id)
380
+ if e is None:
381
+ return False
382
+ e.set_velocity(vx, vy)
383
+ return True
362
384
 
363
385
  # ——— Ropes / constraints ———
364
386
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: melon-lua
3
- Version: 5.2.0
3
+ Version: 5.2.3
4
4
  Summary: 甜瓜游乐场 Lua 芯片执行器模拟 - Melon Playground Lua chip sandbox
5
5
  Author: melonapk
6
6
  License: MIT
@@ -1,11 +1,11 @@
1
- melon_lua/__init__.py,sha256=Hb_kOQ99ScXFl6_FligHS3XidvNnL4f2iYDVqDeeIe4,2285
1
+ melon_lua/__init__.py,sha256=sNb7xNeTmo5jkiz9D3znSK2QmpXNv9Tp6TpFXmEKyOo,2325
2
2
  melon_lua/__main__.py,sha256=yOMoCGDLN0efZ6ztdMQNhy_-kBJYJuQXjJ8e8WKs78Q,9824
3
3
  melon_lua/catalog.py,sha256=-82mbiYLyujsSjc6JdzhhmqUgSZjUMRTg1Ebqizt88k,2872
4
4
  melon_lua/constraints.py,sha256=t7ItKu3zKKMfVPkDcTpP6U3-pbBK2FFcViPZ0vbjgic,19017
5
- melon_lua/entity.py,sha256=c5kJHZJkeGvoGZs68OIqlyz3DSuFwI7TgDPeWXO5Ezg,2346
5
+ melon_lua/entity.py,sha256=xowbPMYN8ESy_nfAPdmID9ku84f-33mqRvJGiA5yNGY,4180
6
6
  melon_lua/melmod.py,sha256=9ECyQnyoh5N0bufiVaRzxfbqPiVhTH73KAsnojKjZ7o,5242
7
7
  melon_lua/melsave.py,sha256=bfK-VA987kkx_rWugR8oXFl_sUJQKfdTbxoW70aPFpc,9843
8
- melon_lua/melsave_builder.py,sha256=HqrG-j0qNOQtjMhKkg7QurLMyuv6w8Bv5XVlXtar00s,23306
8
+ melon_lua/melsave_builder.py,sha256=XSVDeOb6tVpUrIl9bGVKjDgNQN2tlthRms5Z1phA8WQ,30570
9
9
  melon_lua/melsave_writer.py,sha256=shClNAPjT3qsnsjar6zM8fVVw9YZY1Ohk2QSBD6zqvo,33998
10
10
  melon_lua/preamble.lua,sha256=UNaIuy8cENH4GAwrjRBV5lO-2QdmoC_uFuSdT_2lIHA,14493
11
11
  melon_lua/preview.py,sha256=YYmIZz0DZdobufFQXo7-v70lGp3egF4yjK-Nas-x0yg,13178
@@ -16,7 +16,7 @@ melon_lua/stdlib_bit32_shim.lua,sha256=Z5JLs8_ckyuhpraaP9R_h03sdJPy_Gya2gZgsVzzm
16
16
  melon_lua/stdlib_melon.py,sha256=YJFbiQ96gMDyDPGdJPWpcNGDm0EsqBgLVX5lQ9ZNJPw,2969
17
17
  melon_lua/uicontrol_builder.py,sha256=cyyfVPm_bP2ZP1ZzoxrJJsAyh-qb9bSpktLxHoCD3qk,39900
18
18
  melon_lua/visuals.py,sha256=s1jeXWJujLYxTMkTW10bfOc1pMZym3PTk8pDBWXK3ag,3915
19
- melon_lua/world.py,sha256=ZulXBsE1ecsrHMyDg3m-j4nEISKNooWXSJmNvK1rBw8,21213
19
+ melon_lua/world.py,sha256=AuxmNubazmPIY4StppurtoHGKyTnVvJtuegruz6GEF0,22073
20
20
  melon_lua/backend/__init__.py,sha256=L8qFBV5AU8W69KbOHodGysT3oM6hip3kOBYpzvHO2ek,1965
21
21
  melon_lua/backend/camera_backend.py,sha256=0932z7zCXhSjBrTQGC2bMRsSh77lHhRWnJjF3SCSx34,1019
22
22
  melon_lua/backend/chip_backend.py,sha256=TKeEB7KLMeGiYB0RjeAzKZGn_NkQDT3X1RwLey9skqc,2811
@@ -33,6 +33,7 @@ melon_lua/data/chip_template_1132.json,sha256=fK9pwzhTG4gavW1cVkAWqBrwgax4ghLMfE
33
33
  melon_lua/data/melon_objects.json,sha256=PP2pVEj54a4VxCR_3Mh4OlsLQhioQsGxrpC2pd8tw6E,278086
34
34
  melon_lua/data/object_physics.json,sha256=atq3bqYG_XuaHOJb1OZEUlSugcJl6EkWCaYzH98AyPc,366270
35
35
  melon_lua/data/object_physics_by_id.json,sha256=1EFoHi-kbNy0DHP3bBauHMFoWlo4TWTszkWV996l0HU,853231
36
+ melon_lua/data/radar_select_all_ids.json,sha256=uAQGAiFEfQiEwseFSHjzUsbiHAN9soIkTrD0XdDvuic,4618
36
37
  melon_lua/data/sprites_by_object_id.json,sha256=gmidJaPM4ZQCsW5ol_QFxWoQh4ltTDS0tTMnN6rhGMQ,77926
37
38
  melon_lua/data/ui_controller_template.json,sha256=pZxpHnr38Y7a5EXBAKutO4zR444BOuu1rpkIkkFA9tE,542941
38
39
  melon_lua/data/ui_element_prototypes.json,sha256=5ySj9CFCzJDtfp9x1uhpSa5rk5BrhWkYjtQBbimvYA0,234516
@@ -48,7 +49,7 @@ melon_lua/data/item_templates/122.json,sha256=zA0W3JAYn1699v-m_bXY_h8_WxjoxAGwWh
48
49
  melon_lua/data/item_templates/123.json,sha256=weaZC0kQit5j9QQboUO27N3F9w8OgsGAUYNguFC7FY8,1772
49
50
  melon_lua/data/item_templates/125.json,sha256=hKNOJE9VF5lz1IR4Wm7kBiSxLKCAoqJVAunFGUi6urg,1756
50
51
  melon_lua/data/item_templates/1294925504.json,sha256=t48d2dwt2u0L80Mz-NAg9PeYbUDjUrYbKCdUp3xGVMY,7399
51
- melon_lua/data/item_templates/13.json,sha256=XjsHYXAdYAVYsjIhZ6pYVlZo34p2XtxmXNDxWgLVSzQ,6521
52
+ melon_lua/data/item_templates/13.json,sha256=h_L6jpxJqeu6rSP_SxQtRAb2xgqOj3F5i2_lnBKkL4U,6531
52
53
  melon_lua/data/item_templates/130.json,sha256=MNX8RYlOQZq_8yElPIlUefn9aqiJmU50i2jFL7_GSmw,4727
53
54
  melon_lua/data/item_templates/131.json,sha256=nVALQFcJr0J5Ox05N3h5V7KKn7-znoK85wCvofAWbfA,5036
54
55
  melon_lua/data/item_templates/133.json,sha256=uAB3-knLmrg9dVIoS3ha4HPIpMvIT9nuUv0Vk4ybi80,6791
@@ -85,7 +86,7 @@ melon_lua/data/item_templates/253.json,sha256=Ou1K9puSS002DgPEeTm7qWwsmLIUngW1Cy
85
86
  melon_lua/data/item_templates/256.json,sha256=Tks462oBKgWK2icBywkTFcqYPr_bw1ets5WprpWXWEg,6961
86
87
  melon_lua/data/item_templates/257.json,sha256=T88-vkLvnH7pruPQaiWSkjq4iCoEVQ_58_KQNS-wa-A,5094
87
88
  melon_lua/data/item_templates/258.json,sha256=Ky8j6JdXiAW_bpyLJlxh2PXYapGJqfN2Q5hO-uN13XU,5892
88
- melon_lua/data/item_templates/261.json,sha256=nDSf0DGKru1zWnfQaaKTFvsSe693bAgahGtQv1u04yo,5985
89
+ melon_lua/data/item_templates/261.json,sha256=fKtw_m04fLYhnXfX48xyNJGKF4u4mmRRWESA6hVAYKk,5995
89
90
  melon_lua/data/item_templates/262.json,sha256=TKJtUSzd2KW-ldkl4FTSDVBMdd3oH-5B3ArLU8mtO1g,5905
90
91
  melon_lua/data/item_templates/271.json,sha256=cqrQ3V09Kk6T899DJjpreAtnDlmlPMJhNYQ0sc1MFcs,4402
91
92
  melon_lua/data/item_templates/272.json,sha256=infFNb_Ct_8zWXdXlYaC2yDsu15biAQB7qYXtxAvixQ,4463
@@ -108,7 +109,7 @@ melon_lua/data/item_templates/687931072.json,sha256=zU1ottrHw7WWRmOPrH6sQ1Gf2E8F
108
109
  melon_lua/data/item_templates/758447808.json,sha256=_h-MmwcB2stXzots0B1cAY7bdF9B9-SFNLB0_8l5-2c,4302
109
110
  melon_lua/data/item_templates/76.json,sha256=we0isBnuW_d8-j7VaYYCQSO_Jc_fu3jih3oCBWmi8tw,2070
110
111
  melon_lua/data/item_templates/87.json,sha256=kRnhl3u6qLSHruhOryHGmCGDziSs3Qoek20qniY7VcI,3965
111
- melon_lua/data/item_templates/892993856.json,sha256=VX6s4xnMBIIfkFDdlvOh5jJb1J6twjmjN6VYeqI-mFo,4329
112
+ melon_lua/data/item_templates/892993856.json,sha256=REhz_UnnuxBxOWOCe4z-UXVNXtiHNkwHCRpTB1qDrPM,10171
112
113
  melon_lua/data/item_templates/897581376.json,sha256=ZH7FZJ40rGMqud35jmrTx5cPx5bz2771edHxDseuuXc,4786
113
114
  melon_lua/data/sprites_pack/images.zip,sha256=xb3cNxucPOSP7DFkJrJwJ8VkXBCVKn24vbaQ1PWK08k,1136267
114
115
  melon_lua/data/sprites_pack/sprites_by_object_id.json,sha256=su21qvRm7eL0YFgqJTVVkVCUIEDpRvIs0G4PZS2AOgw,71998
@@ -981,8 +982,8 @@ melon_lua/vpcompile/nodes/logic.py,sha256=yghkDa4UphYM3nBptdIp6-dYdIsL2mstjd0LaW
981
982
  melon_lua/vpcompile/nodes/math_basic.py,sha256=BRPl9QN84x-W7SrkLNzrNLJxMEjVC2OoWhjygfWCdJc,8150
982
983
  melon_lua/vpcompile/nodes/math_trig.py,sha256=LCDnkRP-ivSFJbH4l_ZrOmSZzzEKshb7tKX7u550l9k,2192
983
984
  melon_lua/vpcompile/nodes/vector.py,sha256=a2HmAAB-1yjSWPbJJYNcjsgNWMt-jlh0cgy2OL2CAJs,3890
984
- melon_lua-5.2.0.dist-info/METADATA,sha256=XU6AjdU9GHz0jfCryCciftaZbK8w8KobtF822ulNy_s,7322
985
- melon_lua-5.2.0.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
986
- melon_lua-5.2.0.dist-info/entry_points.txt,sha256=bSsoSi9ZuFCsdO6bl-MHZjEDxA4YDctO6p3Fp94D6gQ,54
987
- melon_lua-5.2.0.dist-info/top_level.txt,sha256=SoTuIKZvrae90K-TQ-HGu0fPe4GR8k7wdfZmlPlCz_Y,10
988
- melon_lua-5.2.0.dist-info/RECORD,,
985
+ melon_lua-5.2.3.dist-info/METADATA,sha256=UHcmQ-QZZ-X2eAa-eMaZcrjN4b5mV275gqHtMScZ1hA,7322
986
+ melon_lua-5.2.3.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
987
+ melon_lua-5.2.3.dist-info/entry_points.txt,sha256=bSsoSi9ZuFCsdO6bl-MHZjEDxA4YDctO6p3Fp94D6gQ,54
988
+ melon_lua-5.2.3.dist-info/top_level.txt,sha256=SoTuIKZvrae90K-TQ-HGu0fPe4GR8k7wdfZmlPlCz_Y,10
989
+ melon_lua-5.2.3.dist-info/RECORD,,