melon-lua 5.2.1__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",
@@ -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,103 @@ 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
+
272
369
  # Sensors / displays that should power on when placed via SDK (game stock
273
370
  # templates often ship activation=0 so they do nothing until wired).
274
371
  _DEFAULT_ACTIVATION_ON_IDS = frozenset({
@@ -278,6 +375,34 @@ _DEFAULT_ACTIVATION_ON_IDS = frozenset({
278
375
  892993856, # Radar / 区域雷达
279
376
  })
280
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
+
281
406
 
282
407
  def _set_mechanic_activation(so: dict, value: float = 1.0) -> None:
283
408
  """Set mechanic activationInput + input-gate Value (in-place)."""
@@ -321,6 +446,44 @@ def _set_mechanic_activation(so: dict, value: float = 1.0) -> None:
321
446
  )
322
447
 
323
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
+
324
487
  def _build_item_save_objects(
325
488
  object_id: int,
326
489
  x: float,
@@ -364,6 +527,8 @@ def _build_item_save_objects(
364
527
  so["distJoints"] = []
365
528
  if object_id in _DEFAULT_ACTIVATION_ON_IDS:
366
529
  _set_mechanic_activation(so, 1.0)
530
+ if object_id == _RADAR_OBJECT_ID:
531
+ _set_radar_select_all(so)
367
532
  return so
368
533
 
369
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.1
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=sdPDRh9CpGgIFqGYJErY75g8-JCq3QeazpZhYkfTfIg,25190
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
@@ -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.1.dist-info/METADATA,sha256=f42T9z6x2qiq0_D5oq7t_-7x3MOcNFOUbr0tGrPN7wg,7322
985
- melon_lua-5.2.1.dist-info/WHEEL,sha256=K260EYznzXsJYBQGqmI8VTxEdiZYNvDZwW9cBh9-_MA,91
986
- melon_lua-5.2.1.dist-info/entry_points.txt,sha256=bSsoSi9ZuFCsdO6bl-MHZjEDxA4YDctO6p3Fp94D6gQ,54
987
- melon_lua-5.2.1.dist-info/top_level.txt,sha256=SoTuIKZvrae90K-TQ-HGu0fPe4GR8k7wdfZmlPlCz_Y,10
988
- melon_lua-5.2.1.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,,