Files
GDevelop/GDJS/tests/games/SaveLoadExample/Save & load example.json

19962 lines
684 KiB
JSON

{
"firstLayout": "",
"gdVersion": {
"build": 242,
"major": 5,
"minor": 5,
"revision": 0
},
"properties": {
"adaptGameResolutionAtRuntime": true,
"antialiasingMode": "MSAA",
"antialisingEnabledOnMobile": false,
"folderProject": false,
"orientation": "landscape",
"packageName": "com.example.gamename",
"pixelsRounding": false,
"projectUuid": "51b32edd-2db2-459c-ae66-bca135668818",
"scaleMode": "linear",
"sizeOnStartupMode": "",
"templateSlug": "starting-platformer",
"version": "1.0.0",
"name": "Save & load example",
"description": "A simple example of the single action save & load system, here it creates a basic checkpoint system with flags.\nIf you touch a flag, the game is saved, and if you drown into lava, your last save is reloaded. \n\nIt also manipulates tweens & async tasks.",
"author": "",
"windowWidth": 1280,
"windowHeight": 720,
"latestCompilationDirectory": "",
"maxFPS": 60,
"minFPS": 20,
"verticalSync": false,
"platformSpecificAssets": {
"android-icon-144": "",
"android-icon-192": "",
"android-icon-36": "",
"android-icon-48": "",
"android-icon-72": "",
"android-icon-96": "",
"android-windowSplashScreenAnimatedIcon": "",
"desktop-icon-512": "",
"ios-icon-100": "",
"ios-icon-1024": "",
"ios-icon-114": "",
"ios-icon-120": "",
"ios-icon-144": "",
"ios-icon-152": "",
"ios-icon-167": "",
"ios-icon-180": "",
"ios-icon-20": "",
"ios-icon-29": "",
"ios-icon-40": "",
"ios-icon-50": "",
"ios-icon-57": "",
"ios-icon-58": "",
"ios-icon-60": "",
"ios-icon-72": "",
"ios-icon-76": "",
"ios-icon-80": "",
"ios-icon-87": ""
},
"loadingScreen": {
"backgroundColor": 0,
"backgroundFadeInDuration": 0.2,
"backgroundImageResourceName": "",
"gdevelopLogoStyle": "light",
"logoAndProgressFadeInDuration": 0.2,
"logoAndProgressLogoFadeInDelay": 0,
"minDuration": 1.5,
"progressBarColor": 16777215,
"progressBarHeight": 20,
"progressBarMaxWidth": 200,
"progressBarMinWidth": 40,
"progressBarWidthPercent": 30,
"showGDevelopSplash": true,
"showProgressBar": true
},
"watermark": {
"placement": "bottom-left",
"showWatermark": true
},
"authorIds": [],
"authorUsernames": [],
"categories": [],
"playableDevices": [],
"extensionProperties": [],
"platforms": [
{
"name": "GDevelop JS platform"
}
],
"currentPlatform": "GDevelop JS platform"
},
"resources": {
"resources": [
{
"file": "assets/StartingPlayer.png",
"kind": "image",
"metadata": "",
"name": "assets\\StartingPlayer.png",
"smoothed": true,
"userAdded": false
},
{
"file": "assets/StartingGround.png",
"kind": "image",
"metadata": "",
"name": "assets\\StartingGround.png",
"smoothed": true,
"userAdded": false
},
{
"file": "assets/Background.png",
"kind": "image",
"metadata": "",
"name": "assets\\Background.png",
"smoothed": true,
"userAdded": false
},
{
"file": "assets/StartingCoin.png",
"kind": "image",
"metadata": "",
"name": "assets\\StartingCoin.png",
"smoothed": true,
"userAdded": false
},
{
"file": "assets/Top arrow button.png",
"kind": "image",
"metadata": "",
"name": "Top arrow button.png",
"smoothed": true,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/On-Screen Controls/Sprites/Flat Dark/e3943e1b23ceb90f00fc5e7c0481c5147b983fdc5397fb3690e102e53ce72d4f_Top arrow button.png",
"name": "Top arrow button.png"
}
},
{
"file": "assets/Flat dark joystick border.png",
"kind": "image",
"metadata": "",
"name": "Flat dark joystick border.png",
"smoothed": true,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/1db606cabd7372d1494ba5934bc25bcdd72f5a213c4a27509be57c3f4d5aecca_Flat dark joystick border.png",
"name": "Flat dark joystick border.png"
}
},
{
"file": "assets/Flat dark joystick thumb.png",
"kind": "image",
"metadata": "",
"name": "Flat dark joystick thumb.png",
"smoothed": true,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/Multitouch joysticks/10167ade22c4a6b48324e6c1d1bd6dc74179d7bed0775890903f418b4a05c8a1_Flat dark joystick thumb.png",
"name": "Flat dark joystick thumb.png"
}
},
{
"file": "assets/PickupCoin.wav",
"kind": "audio",
"metadata": "{\"extension\":\".wav\",\"jfxr\":{\"data\":\"{\\\"_version\\\":1,\\\"_name\\\":\\\"Jump 1\\\",\\\"_locked\\\":[],\\\"sampleRate\\\":44100,\\\"attack\\\":0,\\\"sustain\\\":0.05,\\\"sustainPunch\\\":20,\\\"decay\\\":0.3,\\\"tremoloDepth\\\":0,\\\"tremoloFrequency\\\":10,\\\"frequency\\\":400,\\\"frequencySweep\\\":0,\\\"frequencyDeltaSweep\\\":0,\\\"repeatFrequency\\\":0,\\\"frequencyJump1Onset\\\":15,\\\"frequencyJump1Amount\\\":25,\\\"frequencyJump2Onset\\\":66,\\\"frequencyJump2Amount\\\":0,\\\"harmonics\\\":0,\\\"harmonicsFalloff\\\":0.5,\\\"waveform\\\":\\\"whistle\\\",\\\"interpolateNoise\\\":true,\\\"vibratoDepth\\\":0,\\\"vibratoFrequency\\\":10,\\\"squareDuty\\\":85,\\\"squareDutySweep\\\":35,\\\"flangerOffset\\\":0,\\\"flangerOffsetSweep\\\":0,\\\"bitCrush\\\":16,\\\"bitCrushSweep\\\":0,\\\"lowPassCutoff\\\":22050,\\\"lowPassCutoffSweep\\\":0,\\\"highPassCutoff\\\":0,\\\"highPassCutoffSweep\\\":0,\\\"compression\\\":1,\\\"normalization\\\":true,\\\"amplification\\\":100}\",\"name\":\"PickupCoin\"},\"localFilePath\":\"assets/PickupCoin.wav\"}",
"name": "PickupCoin",
"preloadAsMusic": false,
"preloadAsSound": true,
"preloadInCache": false,
"userAdded": false
},
{
"file": "assets/Flag Blue.png",
"kind": "image",
"metadata": "",
"name": "Flag Blue.png",
"smoothed": true,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/Breakable Physics/Flag/0aa9551296f8ec80d9b1267e686f7b7a49cfd578e87b24e3bab71664098f582c_Flag Blue.png",
"name": "Flag Blue.png"
}
},
{
"file": "assets/LightGlow.png",
"kind": "image",
"metadata": "",
"name": "LightGlow.png",
"smoothed": true,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/Particles/GDevelop/c17e2d500015e598624b763f4942b26e3aac96efca094cd20257a61e15b27fcb_LightGlow.png",
"name": "LightGlow.png"
}
},
{
"file": "assets/Coins 8.aac",
"kind": "audio",
"metadata": "",
"name": "c52f1dacc263a2a6dc94e712a2a148f909b73372fa8e0622cb237fdc6a72fd6c_Coins 8.aac",
"preloadAsMusic": false,
"preloadAsSound": false,
"preloadInCache": false,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/Arcade/Sound effects/Coins/c52f1dacc263a2a6dc94e712a2a148f909b73372fa8e0622cb237fdc6a72fd6c_Coins 8.aac",
"name": "gdevelop-asset-store"
}
},
{
"file": "assets/NewTiledSprite.png",
"kind": "image",
"metadata": "{\"extension\":\".png\",\"pskl\":{}}",
"name": "NewTiledSprite",
"smoothed": true,
"userAdded": false
},
{
"file": "assets/Large sign.png",
"kind": "image",
"metadata": "",
"name": "Large sign.png",
"smoothed": true,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/Abstract Platformer Pack (370 assets)/PNG/Other/184caf8844c91aff060202e8af13f21e6a7e2a70f4222518836b3015ce3cfa5b_Large sign.png",
"name": "Large sign.png"
}
},
{
"file": "assets/04 - Castle Nosferatu (Sega-style FM Synth Remix).aac",
"kind": "audio",
"metadata": "",
"name": "dfcdb6ef0ded864b301b5cc57940b190e803b1ea53d057338043f3b8bcd2a138_04 - Castle Nosferatu (Sega-style FM Synth Remix).aac",
"preloadAsMusic": false,
"preloadAsSound": false,
"preloadInCache": false,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/Ragnar Random/Fakebit Chiptune Music/dfcdb6ef0ded864b301b5cc57940b190e803b1ea53d057338043f3b8bcd2a138_04 - Castle Nosferatu (Sega-style FM Synth Remix).aac",
"name": "gdevelop-asset-store"
}
},
{
"file": "assets/Chi Chi the Bird_Aerial Attack.png",
"kind": "image",
"metadata": "",
"name": "Chi Chi the Bird_Aerial Attack.png",
"smoothed": false,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/GrafxKid Pack/Character Pack 1/Chi Chi the Bird/1f9088295b372e57cc2217444a5bb5247eb8806100ab49169be5eedfb0b5a43c_Chi Chi the Bird_Aerial Attack.png",
"name": "Chi Chi the Bird_Aerial Attack.png"
}
},
{
"file": "assets/Chi Chi the Bird_Falling.png",
"kind": "image",
"metadata": "",
"name": "Chi Chi the Bird_Falling.png",
"smoothed": false,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/GrafxKid Pack/Character Pack 1/Chi Chi the Bird/9dc7356e0994b87b58e91451c48ba58ed2c5a02e2e20991714760cdff61db268_Chi Chi the Bird_Falling.png",
"name": "Chi Chi the Bird_Falling.png"
}
},
{
"file": "assets/Chi Chi the Bird_Flapping Wings_1.png",
"kind": "image",
"metadata": "",
"name": "Chi Chi the Bird_Flapping Wings_1.png",
"smoothed": false,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/GrafxKid Pack/Character Pack 1/Chi Chi the Bird/0695fb9e00620c3e49978a912115b8ec5e4c63bfc2950b7b7ea3bb540cef0b70_Chi Chi the Bird_Flapping Wings_1.png",
"name": "Chi Chi the Bird_Flapping Wings_1.png"
}
},
{
"file": "assets/Chi Chi the Bird_Flapping Wings_2.png",
"kind": "image",
"metadata": "",
"name": "Chi Chi the Bird_Flapping Wings_2.png",
"smoothed": false,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/GrafxKid Pack/Character Pack 1/Chi Chi the Bird/aabf824203cc1da9650615de5a5302affe154a7d8f254fec183e8fdee2ce709c_Chi Chi the Bird_Flapping Wings_2.png",
"name": "Chi Chi the Bird_Flapping Wings_2.png"
}
},
{
"file": "assets/Chi Chi the Bird_Flapping Wings_3.png",
"kind": "image",
"metadata": "",
"name": "Chi Chi the Bird_Flapping Wings_3.png",
"smoothed": false,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/GrafxKid Pack/Character Pack 1/Chi Chi the Bird/d4f211f8211c81ffbaae748150b236c67a07206f1d9536e3ba86d291e2570c8b_Chi Chi the Bird_Flapping Wings_3.png",
"name": "Chi Chi the Bird_Flapping Wings_3.png"
}
},
{
"file": "assets/Chi Chi the Bird_Hurt.png",
"kind": "image",
"metadata": "",
"name": "Chi Chi the Bird_Hurt.png",
"smoothed": false,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/GrafxKid Pack/Character Pack 1/Chi Chi the Bird/f3a2cfe7ffc611d674d316e4797b4f973de5c018d79629d825bc89681e788f24_Chi Chi the Bird_Hurt.png",
"name": "Chi Chi the Bird_Hurt.png"
}
},
{
"file": "assets/Chi Chi the Bird_Standing.png",
"kind": "image",
"metadata": "",
"name": "Chi Chi the Bird_Standing.png",
"smoothed": false,
"userAdded": false,
"origin": {
"identifier": "https://asset-resources.gdevelop.io/public-resources/GrafxKid Pack/Character Pack 1/Chi Chi the Bird/db7b414f5e1e6c385b901b1394fa14ee3892cd006a2c05ab96c9acd7c0790963_Chi Chi the Bird_Standing.png",
"name": "Chi Chi the Bird_Standing.png"
}
}
],
"resourceFolders": []
},
"objects": [],
"objectsFolderStructure": {
"folderName": "__ROOT"
},
"objectsGroups": [],
"variables": [
{
"name": "Test",
"type": "structure",
"children": []
}
],
"layouts": [
{
"b": 255,
"disableInputWhenNotFocused": true,
"mangledName": "Game_32Scene",
"name": "Game Scene",
"r": 255,
"standardSortMethod": true,
"stopSoundsOnStartup": true,
"title": "",
"v": 255,
"uiSettings": {
"grid": false,
"gridType": "rectangular",
"gridWidth": 32,
"gridHeight": 32,
"gridOffsetX": 0,
"gridOffsetY": 0,
"gridColor": 10401023,
"gridAlpha": 0.8,
"snap": false,
"zoomFactor": 0.4633111824514028,
"windowMask": false,
"selectedLayer": ""
},
"objectsGroups": [],
"variables": [
{
"name": "Saves",
"type": "structure",
"children": [
{
"name": "Save",
"type": "number",
"value": 0
}
]
},
{
"name": "Time",
"type": "number",
"value": 0
},
{
"name": "TimeStruct",
"type": "structure",
"children": [
{
"name": "something.lol",
"type": "structure",
"children": [
{
"name": "time",
"type": "number",
"value": 0
}
]
}
]
},
{
"name": "Variable",
"type": "number",
"value": 0
},
{
"name": "VariableExcludedFromSave",
"type": "number",
"value": 10
}
],
"instances": [
{
"angle": 0,
"customSize": false,
"height": 78.99999999999999,
"keepRatio": true,
"layer": "",
"name": "Platformer_Character",
"persistentUuid": "4ded1d81-e820-41d3-868a-3f314e5850bd",
"width": 79,
"x": 500,
"y": 466,
"zOrder": 31,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 720,
"layer": "Background",
"locked": true,
"name": "Background",
"persistentUuid": "9d4a2623-239c-44d1-95a4-076307aa3170",
"width": 1280,
"x": 0,
"y": 0,
"zOrder": -10,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "MobileControls",
"name": "Joystick",
"persistentUuid": "855d809a-f954-4072-86d5-1d6f0b24a066",
"width": 0,
"x": 131,
"y": 604,
"zOrder": 2,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 0,
"height": 120,
"keepRatio": true,
"layer": "MobileControls",
"name": "JumpButton",
"persistentUuid": "b1d437ce-f3b4-4799-875e-bb51f731cef0",
"width": 120,
"x": 1104,
"y": 576,
"zOrder": 3,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 64,
"keepRatio": true,
"layer": "",
"name": "Platform_Ground",
"persistentUuid": "1c4f7ab9-04d4-4cee-8572-96199ce1245c",
"width": 864,
"x": 64,
"y": 544,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 64,
"keepRatio": true,
"layer": "",
"name": "Platform_Ground",
"persistentUuid": "672ee5c6-d2bb-4ae4-bc77-78d15064dd68",
"width": 288,
"x": 1588,
"y": 529,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 64,
"keepRatio": true,
"layer": "",
"name": "Platform_Ground",
"persistentUuid": "e595746c-dfaa-4c91-a246-d36934b5a906",
"width": 288,
"x": 1080,
"y": 534,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 720,
"layer": "Background",
"locked": true,
"name": "Background",
"persistentUuid": "18b633b4-68e0-4420-85e8-766c67f4ad90",
"width": 1280,
"x": 10,
"y": 10,
"zOrder": -10,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 64,
"keepRatio": true,
"layer": "",
"name": "Platform_Ground",
"persistentUuid": "78286b2c-58ac-46ee-8324-67e5949d9cc3",
"width": 288,
"x": 2737,
"y": 517,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "FlagBlue",
"persistentUuid": "6c44e219-ac42-4abd-89fa-519914861a99",
"width": 0,
"x": 1196,
"y": 462,
"zOrder": 7,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 64,
"keepRatio": true,
"layer": "",
"name": "Platform_Ground",
"persistentUuid": "4267c4c2-2115-4233-9322-dff352e0ef53",
"width": 74,
"x": 1441,
"y": 535,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 870,
"keepRatio": true,
"layer": "",
"name": "NewTiledSprite",
"persistentUuid": "12bea79e-0a5c-41fd-94cb-ef541f916d8b",
"width": 4767,
"x": -819,
"y": 637,
"zOrder": 17,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "FlagBlue",
"persistentUuid": "14ba131e-f137-4724-b82d-3c4e9d8ae0ca",
"width": 0,
"x": 1717,
"y": 457,
"zOrder": 19,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 64,
"keepRatio": true,
"layer": "",
"name": "Platform_Ground",
"persistentUuid": "d04ed369-cb9d-4836-a26a-80ca84dd2147",
"width": 74,
"x": 2074,
"y": 525,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 64,
"keepRatio": true,
"layer": "",
"name": "Platform_Ground",
"persistentUuid": "50fed9ae-f21b-402d-a28f-10ded8bddc0f",
"width": 74,
"x": 2383,
"y": 528,
"zOrder": 5,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 115,
"keepRatio": true,
"layer": "",
"name": "LargeSign",
"persistentUuid": "2b1658c7-c224-4bf1-b8a1-7b9f98b195e2",
"width": 153,
"x": 285,
"y": 429,
"zOrder": 20,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 23,
"keepRatio": true,
"layer": "",
"name": "NewText",
"persistentUuid": "2032a6b6-85c4-4a1b-915b-ed28743d3efd",
"width": 191,
"x": 261,
"y": 457,
"zOrder": 21,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 186,
"keepRatio": true,
"layer": "",
"name": "LargeSign",
"persistentUuid": "9ccd79c9-45ba-4c2b-82bb-bd12bfeebfe7",
"width": 282,
"x": 2739,
"y": 334,
"zOrder": 0,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 1,
"height": 25,
"keepRatio": true,
"layer": "",
"name": "NewText2",
"persistentUuid": "d8cc938a-22ad-48b0-b30e-9ddc2758936c",
"width": 132,
"x": 2819,
"y": 362,
"zOrder": 1,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 6,
"height": 94,
"keepRatio": true,
"layer": "",
"name": "ChiChiTheBird",
"persistentUuid": "5a2186ac-508e-4905-a4ab-6068772db57b",
"width": 94,
"x": 881,
"y": 375,
"zOrder": 32,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": true,
"depth": 2,
"height": 79,
"keepRatio": true,
"layer": "Background",
"name": "NewText3",
"persistentUuid": "68f06239-204d-4618-8730-a61ed8a54d8f",
"width": 205,
"x": 46,
"y": 38,
"zOrder": 33,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "Background",
"name": "NewText4",
"persistentUuid": "b47283df-582d-4c9a-915a-22ae8e090456",
"width": 0,
"x": 1209,
"y": 25,
"zOrder": 34,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "Coins",
"persistentUuid": "9800c3ed-b269-4cbe-bd66-ae8c30b8871f",
"width": 0,
"x": 738,
"y": 476,
"zOrder": 35,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "Background",
"name": "NewText5",
"persistentUuid": "54d8cf4c-d2ee-4a98-90da-da31d0d29388",
"width": 0,
"x": 21,
"y": 101,
"zOrder": 36,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "Background",
"name": "NewText6",
"persistentUuid": "5aec5eda-d63d-409f-bc14-0394320dfb33",
"width": 0,
"x": 19,
"y": 135,
"zOrder": 37,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "Background",
"name": "SaveStatus",
"persistentUuid": "60936079-e7b6-4680-8399-dc06bb742fe4",
"width": 0,
"x": 557,
"y": 42,
"zOrder": 38,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "Background",
"name": "NewText7",
"persistentUuid": "02ff696e-6d03-466c-9e4a-f993c4c45958",
"width": 0,
"x": 159,
"y": 35,
"zOrder": 39,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "Coins",
"persistentUuid": "749601b7-c699-47a6-81b8-d19b7cd5bca9",
"width": 0,
"x": 704,
"y": 403,
"zOrder": 40,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "Coins",
"persistentUuid": "502f29fe-fca1-4625-b194-49a701bda9cd",
"width": 0,
"x": 723,
"y": 323,
"zOrder": 41,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "Coins",
"persistentUuid": "65d4f46c-339a-4a2b-9870-799566c2456b",
"width": 0,
"x": 846,
"y": 205,
"zOrder": 42,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "Coins",
"persistentUuid": "3e848abb-3ab3-48ce-9176-23cd9be84fde",
"width": 0,
"x": 1094,
"y": 185,
"zOrder": 43,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "Coins",
"persistentUuid": "47351cf9-0485-4388-958c-94024dd13e9f",
"width": 0,
"x": 1219,
"y": 263,
"zOrder": 44,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
},
{
"angle": 0,
"customSize": false,
"height": 0,
"keepRatio": true,
"layer": "",
"name": "Coins",
"persistentUuid": "8b305063-3f81-4ef4-accc-1f36ad1bed2d",
"width": 0,
"x": 1228,
"y": 362,
"zOrder": 45,
"numberProperties": [],
"stringProperties": [],
"initialVariables": []
}
],
"objects": [
{
"adaptCollisionMaskAutomatically": false,
"assetStoreId": "",
"name": "Platformer_Character",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [
{
"name": "PlatformerMultitouchMapper",
"type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper",
"Property": "PlatformerObject",
"ControllerIdentifier": 1,
"JoystickIdentifier": "Primary",
"JumpButton": "A"
},
{
"name": "PlatformerObject",
"type": "PlatformBehavior::PlatformerObjectBehavior",
"acceleration": 1000,
"canGoDownFromJumpthru": true,
"canGrabPlatforms": false,
"canGrabWithoutMoving": false,
"deceleration": 1500,
"gravity": 1050,
"ignoreDefaultControls": false,
"jumpSpeed": 717,
"jumpSustainTime": 0.3,
"ladderClimbingSpeed": 200,
"maxFallingSpeed": 800,
"maxSpeed": 400,
"slopeMaxAngle": 60,
"useLegacyTrajectory": false,
"xGrabTolerance": 10,
"yGrabOffset": 0
},
{
"name": "SmoothCamera",
"type": "SmoothCamera::SmoothCamera",
"LeftwardSpeed": 0.9,
"RightwardSpeed": 0.9,
"UpwardSpeed": 0.95,
"DownwardSpeed": 0.95,
"FollowOnX": true,
"FollowOnY": true,
"FollowFreeAreaLeft": 0,
"FollowFreeAreaRight": 0,
"FollowFreeAreaTop": 0,
"FollowFreeAreaBottom": 0,
"CameraOffsetX": 0,
"CameraOffsetY": 0,
"CameraDelay": 0,
"ForecastTime": 0,
"ForecastHistoryDuration": 0,
"LogLeftwardSpeed": 2.0247e-320,
"LogRightwardSpeed": 2.0247e-320,
"LogDownwardSpeed": 2.0247e-320,
"LogUpwardSpeed": 2.0247e-320,
"DelayedCenterX": 2.0247e-320,
"DelayedCenterY": 2.0247e-320,
"ForecastHistoryMeanX": 2.0247e-320,
"ForecastHistoryMeanY": 2.0247e-320,
"ForecastHistoryVarianceX": 2.0247e-320,
"ForecastHistoryCovariance": 2.0247e-320,
"ForecastHistoryLinearA": 2.0247e-320,
"ForecastHistoryLinearB": 2.0247e-320,
"ForecastedX": 2.0247e-320,
"ForecastedY": 2.0247e-320,
"ProjectedNewestX": 2.0247e-320,
"ProjectedNewestY": 2.0247e-320,
"ProjectedOldestX": 2.0247e-320,
"ProjectedOldestY": 2.0247e-320,
"ForecastHistoryVarianceY": 2.0247e-320,
"Index": 2.0247e-320,
"CameraDelayCatchUpSpeed": 0,
"CameraExtraDelay": 2.0247e-320,
"WaitingSpeedXMax": 2.0247e-320,
"WaitingSpeedYMax": 2.0247e-320,
"WaitingEnd": 2.0247e-320,
"CameraDelayCatchUpDuration": 2.0247e-320,
"LeftwardSpeedMax": 9000,
"RightwardSpeedMax": 9000,
"UpwardSpeedMax": 9000,
"DownwardSpeedMax": 9000,
"OldX": 9000.000000007454,
"OldY": 9000.000000007454,
"IsCalledManually": false
}
],
"animations": [
{
"name": "",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "assets\\StartingPlayer.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 2
},
{
"x": 64,
"y": 2
},
{
"x": 64,
"y": 64
},
{
"x": 0,
"y": 64
}
]
]
}
]
}
]
}
]
},
{
"assetStoreId": "",
"height": 64,
"name": "Background",
"texture": "assets\\Background.png",
"type": "TiledSpriteObject::TiledSprite",
"width": 64,
"variables": [],
"effects": [],
"behaviors": []
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "",
"name": "Coins",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [
{
"name": "SaveConfiguration",
"type": "SaveState::SaveConfiguration",
"defaultProfilePersistence": "Persisted",
"persistedInProfiles": "coins"
}
],
"animations": [
{
"name": "",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "assets\\StartingCoin.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 19,
"y": 0
},
{
"x": 19,
"y": 18
},
{
"x": 0,
"y": 18
}
]
]
}
]
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "9c727020616afdd6ba786b8af206a90481f07db0ca175ed6a4cc5b7e01c66d06",
"name": "JumpButton",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [
{
"name": "ButtonFSM",
"type": "ButtonStates::ButtonFSM",
"ShouldCheckHovering": true,
"State": "Idle",
"TouchId": 0,
"TouchIsInside": false,
"MouseIsInside": false,
"Index": 2.0247e-320
},
{
"name": "ButtonScaleTween",
"type": "ButtonStates::ButtonScaleTween",
"Scale": "Scale",
"ButtonFSM": "ButtonFSM",
"Tween": "Tween",
"IdleScale": 1.5,
"FocusedScale": 1.45,
"FadeInDuration": 0.05,
"FadeOutDuration": 0.1,
"PressedScale": 1.45,
"FadeInEasing": "easeInOutQuad",
"FadeOutEasing": "easeInOutQuad",
"PreviousState": "Idle"
},
{
"name": "MultitouchButton",
"type": "SpriteMultitouchJoystick::MultitouchButton",
"ControllerIdentifier": 1,
"ButtonIdentifier": "A",
"TouchId": 0,
"TouchIndex": 2.0247e-320,
"IsReleased": false
},
{
"name": "Tween",
"type": "Tween::TweenBehavior"
}
],
"animations": [
{
"name": "",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"timeBetweenFrames": 0.025,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "Top arrow button.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 40,
"y": 40
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 80,
"y": 0
},
{
"x": 80,
"y": 80
},
{
"x": 0,
"y": 80
}
]
]
}
]
}
]
}
]
},
{
"assetStoreId": "e71bd69f896d6c7531b48c65ceb5da25071d4fbdeb518aeceecba8d21f34ed8d",
"name": "Joystick",
"type": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"variant": "",
"variables": [],
"effects": [],
"behaviors": [
{
"name": "SaveConfiguration",
"type": "SaveState::SaveConfiguration",
"defaultProfilePersistence": "DoNotSave",
"persistedInProfiles": ""
}
],
"content": {},
"childrenContent": {
"Border": {
"adaptCollisionMaskAutomatically": false,
"updateIfNotVisible": false,
"animations": [
{
"name": "Idle",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": false,
"image": "Flat dark joystick border.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": []
}
]
}
]
}
]
},
"Thumb": {
"adaptCollisionMaskAutomatically": false,
"updateIfNotVisible": false,
"animations": [
{
"name": "Idle",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"timeBetweenFrames": 0.08,
"sprites": [
{
"hasCustomCollisionMask": false,
"image": "Flat dark joystick thumb.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": []
}
]
}
]
}
]
}
}
},
{
"assetStoreId": "",
"height": 64,
"name": "Platform_Ground",
"texture": "assets\\StartingGround.png",
"type": "TiledSpriteObject::TiledSprite",
"width": 64,
"variables": [],
"effects": [],
"behaviors": [
{
"name": "Platform",
"type": "PlatformBehavior::PlatformBehavior",
"canBeGrabbed": false,
"platformType": "NormalPlatform",
"yGrabOffset": 0
}
]
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "8be3cdbd79d1bc3af6940fb98cdf48510c9e8bc62ba404020dd92f67b61fc79d",
"name": "FlagBlue",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"timeBetweenFrames": 0.025,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "Flag Blue.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 70,
"y": 0
},
{
"x": 70,
"y": 70
},
{
"x": 0,
"y": 70
}
]
]
}
]
}
]
}
]
},
{
"assetStoreId": "",
"height": 32,
"name": "NewTiledSprite",
"texture": "NewTiledSprite",
"type": "TiledSpriteObject::TiledSprite",
"width": 32,
"variables": [],
"effects": [],
"behaviors": []
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "39d02c8d833898dd906c948e8403596aba1fdcfa223f374b260aa5b0ae70b776",
"name": "LargeSign",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"timeBetweenFrames": 0.025,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "Large sign.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 0
},
{
"x": 64,
"y": 0
},
{
"x": 64,
"y": 55
},
{
"x": 0,
"y": 55
}
]
]
}
]
}
]
}
]
},
{
"assetStoreId": "",
"bold": true,
"italic": false,
"name": "NewText",
"smoothed": true,
"type": "TextObject::Text",
"underlined": false,
"variables": [],
"effects": [],
"behaviors": [],
"string": "Flags are checkpoints !",
"font": "",
"textAlignment": "center",
"characterSize": 20,
"color": {
"b": 255,
"g": 255,
"r": 255
},
"content": {
"bold": true,
"isOutlineEnabled": false,
"isShadowEnabled": false,
"italic": false,
"outlineColor": "255;255;255",
"outlineThickness": 2,
"shadowAngle": 90,
"shadowBlurRadius": 2,
"shadowColor": "0;0;0",
"shadowDistance": 4,
"shadowOpacity": 127,
"smoothed": true,
"underlined": false,
"text": "Flags are checkpoints !",
"font": "",
"textAlignment": "center",
"verticalTextAlignment": "top",
"characterSize": 20,
"lineHeight": 0,
"color": "255;255;255"
}
},
{
"assetStoreId": "",
"bold": true,
"italic": false,
"name": "NewText2",
"smoothed": true,
"type": "TextObject::Text",
"underlined": false,
"variables": [],
"effects": [],
"behaviors": [],
"string": "You won !",
"font": "",
"textAlignment": "center",
"characterSize": 50,
"color": {
"b": 255,
"g": 255,
"r": 255
},
"content": {
"bold": true,
"isOutlineEnabled": false,
"isShadowEnabled": false,
"italic": false,
"outlineColor": "255;255;255",
"outlineThickness": 2,
"shadowAngle": 90,
"shadowBlurRadius": 2,
"shadowColor": "0;0;0",
"shadowDistance": 4,
"shadowOpacity": 127,
"smoothed": true,
"underlined": false,
"text": "You won !",
"font": "",
"textAlignment": "center",
"verticalTextAlignment": "top",
"characterSize": 50,
"lineHeight": 0,
"color": "255;255;255"
}
},
{
"adaptCollisionMaskAutomatically": true,
"assetStoreId": "445c46c6f04f1551e12d8ccea31a4e75ca6dda1aea141a0d7b8aa0ba337df4bc",
"name": "ChiChiTheBird",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [
{
"name": "Tween",
"type": "Tween::TweenBehavior"
}
],
"animations": [
{
"name": "Hurt",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"timeBetweenFrames": 0.025,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "Chi Chi the Bird_Hurt.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 1
},
{
"x": 16,
"y": 1
},
{
"x": 16,
"y": 15
},
{
"x": 0,
"y": 15
}
]
]
}
]
}
]
},
{
"name": "Aerial Attack",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"timeBetweenFrames": 0.025,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "Chi Chi the Bird_Aerial Attack.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 1
},
{
"x": 16,
"y": 1
},
{
"x": 16,
"y": 15
},
{
"x": 0,
"y": 15
}
]
]
}
]
}
]
},
{
"name": "Falling",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"timeBetweenFrames": 0.025,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "Chi Chi the Bird_Falling.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 1
},
{
"x": 16,
"y": 1
},
{
"x": 16,
"y": 15
},
{
"x": 0,
"y": 15
}
]
]
}
]
}
]
},
{
"name": "Flapping Wings",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"timeBetweenFrames": 0.3333,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "Chi Chi the Bird_Flapping Wings_1.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 1
},
{
"x": 16,
"y": 1
},
{
"x": 16,
"y": 15
},
{
"x": 0,
"y": 15
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "Chi Chi the Bird_Flapping Wings_2.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 1
},
{
"x": 16,
"y": 1
},
{
"x": 16,
"y": 15
},
{
"x": 0,
"y": 15
}
]
]
},
{
"hasCustomCollisionMask": true,
"image": "Chi Chi the Bird_Flapping Wings_3.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 1
},
{
"x": 16,
"y": 1
},
{
"x": 16,
"y": 15
},
{
"x": 0,
"y": 15
}
]
]
}
]
}
]
},
{
"name": "Standing",
"useMultipleDirections": false,
"directions": [
{
"looping": true,
"timeBetweenFrames": 0.025,
"sprites": [
{
"hasCustomCollisionMask": true,
"image": "Chi Chi the Bird_Standing.png",
"points": [],
"originPoint": {
"name": "origine",
"x": 0,
"y": 0
},
"centerPoint": {
"automatic": true,
"name": "centre",
"x": 0,
"y": 0
},
"customCollisionMask": [
[
{
"x": 0,
"y": 1
},
{
"x": 16,
"y": 1
},
{
"x": 16,
"y": 15
},
{
"x": 0,
"y": 15
}
]
]
}
]
}
]
}
]
},
{
"assetStoreId": "",
"bold": false,
"italic": false,
"name": "NewText3",
"smoothed": true,
"type": "TextObject::Text",
"underlined": false,
"variables": [],
"effects": [],
"behaviors": [],
"string": "0",
"font": "",
"textAlignment": "left",
"characterSize": 40,
"color": {
"b": 0,
"g": 0,
"r": 0
},
"content": {
"bold": false,
"isOutlineEnabled": false,
"isShadowEnabled": false,
"italic": false,
"outlineColor": "255;255;255",
"outlineThickness": 2,
"shadowAngle": 90,
"shadowBlurRadius": 2,
"shadowColor": "0;0;0",
"shadowDistance": 4,
"shadowOpacity": 127,
"smoothed": true,
"underlined": false,
"text": "0",
"font": "",
"textAlignment": "left",
"verticalTextAlignment": "top",
"characterSize": 40,
"lineHeight": 0,
"color": "0;0;0"
}
},
{
"assetStoreId": "",
"bold": false,
"italic": false,
"name": "NewText4",
"smoothed": true,
"type": "TextObject::Text",
"underlined": false,
"variables": [],
"effects": [],
"behaviors": [],
"string": "0",
"font": "",
"textAlignment": "left",
"characterSize": 40,
"color": {
"b": 0,
"g": 0,
"r": 0
},
"content": {
"bold": false,
"isOutlineEnabled": false,
"isShadowEnabled": false,
"italic": false,
"outlineColor": "255;255;255",
"outlineThickness": 2,
"shadowAngle": 90,
"shadowBlurRadius": 2,
"shadowColor": "0;0;0",
"shadowDistance": 4,
"shadowOpacity": 127,
"smoothed": true,
"underlined": false,
"text": "0",
"font": "",
"textAlignment": "left",
"verticalTextAlignment": "top",
"characterSize": 40,
"lineHeight": 0,
"color": "0;0;0"
}
},
{
"assetStoreId": "",
"bold": false,
"italic": false,
"name": "NewText5",
"smoothed": true,
"type": "TextObject::Text",
"underlined": false,
"variables": [],
"effects": [],
"behaviors": [],
"string": "Last save",
"font": "",
"textAlignment": "left",
"characterSize": 20,
"color": {
"b": 0,
"g": 0,
"r": 0
},
"content": {
"bold": false,
"isOutlineEnabled": false,
"isShadowEnabled": false,
"italic": false,
"outlineColor": "255;255;255",
"outlineThickness": 2,
"shadowAngle": 90,
"shadowBlurRadius": 2,
"shadowColor": "0;0;0",
"shadowDistance": 4,
"shadowOpacity": 127,
"smoothed": true,
"underlined": false,
"text": "Last save",
"font": "",
"textAlignment": "left",
"verticalTextAlignment": "top",
"characterSize": 20,
"lineHeight": 0,
"color": "0;0;0"
}
},
{
"assetStoreId": "",
"bold": false,
"italic": false,
"name": "NewText6",
"smoothed": true,
"type": "TextObject::Text",
"underlined": false,
"variables": [],
"effects": [],
"behaviors": [],
"string": "Last load",
"font": "",
"textAlignment": "left",
"characterSize": 20,
"color": {
"b": 0,
"g": 0,
"r": 0
},
"content": {
"bold": false,
"isOutlineEnabled": false,
"isShadowEnabled": false,
"italic": false,
"outlineColor": "255;255;255",
"outlineThickness": 2,
"shadowAngle": 90,
"shadowBlurRadius": 2,
"shadowColor": "0;0;0",
"shadowDistance": 4,
"shadowOpacity": 127,
"smoothed": true,
"underlined": false,
"text": "Last load",
"font": "",
"textAlignment": "left",
"verticalTextAlignment": "top",
"characterSize": 20,
"lineHeight": 0,
"color": "0;0;0"
}
},
{
"assetStoreId": "",
"bold": false,
"italic": false,
"name": "SaveStatus",
"smoothed": true,
"type": "TextObject::Text",
"underlined": false,
"variables": [],
"effects": [],
"behaviors": [],
"string": "SaveStatus",
"font": "",
"textAlignment": "left",
"characterSize": 30,
"color": {
"b": 0,
"g": 0,
"r": 0
},
"content": {
"bold": false,
"isOutlineEnabled": false,
"isShadowEnabled": false,
"italic": false,
"outlineColor": "255;255;255",
"outlineThickness": 2,
"shadowAngle": 90,
"shadowBlurRadius": 2,
"shadowColor": "0;0;0",
"shadowDistance": 4,
"shadowOpacity": 127,
"smoothed": true,
"underlined": false,
"text": "SaveStatus",
"font": "",
"textAlignment": "left",
"verticalTextAlignment": "top",
"characterSize": 30,
"lineHeight": 0,
"color": "0;0;0"
}
},
{
"assetStoreId": "",
"bold": false,
"italic": false,
"name": "NewText7",
"smoothed": true,
"type": "TextObject::Text",
"underlined": false,
"variables": [],
"effects": [],
"behaviors": [],
"string": "Excluded Variable",
"font": "",
"textAlignment": "left",
"characterSize": 20,
"color": {
"b": 0,
"g": 0,
"r": 0
},
"content": {
"bold": false,
"isOutlineEnabled": false,
"isShadowEnabled": false,
"italic": false,
"outlineColor": "255;255;255",
"outlineThickness": 2,
"shadowAngle": 90,
"shadowBlurRadius": 2,
"shadowColor": "0;0;0",
"shadowDistance": 4,
"shadowOpacity": 127,
"smoothed": true,
"underlined": false,
"text": "Excluded Variable",
"font": "",
"textAlignment": "left",
"verticalTextAlignment": "top",
"characterSize": 20,
"lineHeight": 0,
"color": "0;0;0"
}
}
],
"objectsFolderStructure": {
"folderName": "__ROOT",
"children": [
{
"objectName": "Platformer_Character"
},
{
"objectName": "Platform_Ground"
},
{
"objectName": "LargeSign"
},
{
"objectName": "NewText"
},
{
"objectName": "NewText2"
},
{
"objectName": "NewText3"
},
{
"objectName": "NewText4"
},
{
"objectName": "NewText5"
},
{
"objectName": "NewText6"
},
{
"objectName": "NewText7"
},
{
"objectName": "FlagBlue"
},
{
"objectName": "Background"
},
{
"objectName": "Coins"
},
{
"folderName": "Mobile Controls",
"children": [
{
"objectName": "Joystick"
},
{
"objectName": "JumpButton"
}
]
},
{
"objectName": "NewTiledSprite"
},
{
"objectName": "ChiChiTheBird"
},
{
"objectName": "SaveStatus"
}
]
},
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"Platformer_Character",
"Coins",
"",
"",
""
]
}
],
"actions": [
{
"type": {
"value": "Delete"
},
"parameters": [
"Coins",
""
]
},
{
"type": {
"value": "PlaySound"
},
"parameters": [
"",
"PickupCoin",
"",
"80",
"RandomFloatInRange(1,1.1)"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SaveState::SetVariableSaveConfiguration"
},
"parameters": [
"",
"VariableExcludedFromSave",
"no",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "Distance"
},
"parameters": [
"Platformer_Character",
"FlagBlue",
"10",
""
]
},
{
"type": {
"value": "BuiltinCommonInstructions::Once"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "PlaySound"
},
"parameters": [
"",
"c52f1dacc263a2a6dc94e712a2a148f909b73372fa8e0622cb237fdc6a72fd6c_Coins 8.aac",
"",
"",
""
]
},
{
"type": {
"value": "SaveState::CreateGameSaveStateInStorage"
},
"parameters": [
"",
"\"test\"",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionNP"
},
"parameters": [
"Platformer_Character",
"NewTiledSprite",
"",
"",
""
]
},
{
"type": {
"value": "BuiltinCommonInstructions::Once"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "SaveState::RestoreGameSaveStateFromStorage"
},
"parameters": [
"",
"\"test\"",
"",
"no"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Press s to save and l to load manually. Check how the \"VariableExcludedFromSave\" won't be impacted."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "KeyFromTextJustPressed"
},
"parameters": [
"",
"\"s\""
]
}
],
"actions": [
{
"type": {
"value": "SaveState::CreateGameSaveStateInStorage"
},
"parameters": [
"",
"\"manual-save\"",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "KeyFromTextJustPressed"
},
"parameters": [
"",
"\"l\""
]
}
],
"actions": [
{
"type": {
"value": "SaveState::RestoreGameSaveStateFromStorage"
},
"parameters": [
"",
"\"manual-save\"",
"",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Press c to just save the coins and press x to load only the coins. Check how the rest won't be impacted."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "KeyFromTextJustPressed"
},
"parameters": [
"",
"\"c\""
]
}
],
"actions": [
{
"type": {
"value": "SaveState::CreateGameSaveStateInStorage"
},
"parameters": [
"",
"\"coins-save\"",
"\"coins\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "KeyFromTextJustPressed"
},
"parameters": [
"",
"\"x\""
]
}
],
"actions": [
{
"type": {
"value": "SaveState::RestoreGameSaveStateFromStorage"
},
"parameters": [
"",
"\"coins-save\"",
"\"coins\"",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"NewText3",
"Text",
"=",
"ToString(round(Time))"
]
},
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"NewText4",
"Text",
"=",
"ToString(round(TimeStruct[\"something.lol\"].time))"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SaveState::TimeSinceLastSave"
},
"parameters": [
">=",
">",
"0"
]
}
],
"actions": [
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"NewText5",
"Text",
"=",
"\"Last save: \" + ToString(SaveState::TimeSinceLastSave()) + \" s\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SaveState::TimeSinceLastSave"
},
"parameters": [
"<",
"<",
"0"
]
}
],
"actions": [
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"NewText5",
"Text",
"=",
"\"No save done\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SaveState::TimeSinceLastLoad"
},
"parameters": [
">=",
">",
"0"
]
}
],
"actions": [
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"NewText6",
"Text",
"=",
"\"Last load: \" + ToString(SaveState::TimeSinceLastLoad()) + \" s\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SaveState::TimeSinceLastLoad"
},
"parameters": [
"<",
"<",
"0"
]
}
],
"actions": [
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"NewText6",
"Text",
"=",
"\"No load done\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "DepartScene"
},
"parameters": [
""
]
}
],
"actions": [
{
"type": {
"value": "Tween::TweenBehavior::AddObjectPositionTween2"
},
"parameters": [
"ChiChiTheBird",
"Tween",
"\"position\"",
"2000",
"ChiChiTheBird.Y()",
"\"linear\"",
"30",
""
]
},
{
"type": {
"value": "Cache"
},
"parameters": [
"SaveStatus"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "PlayMusic"
},
"parameters": [
"",
"dfcdb6ef0ded864b301b5cc57940b190e803b1ea53d057338043f3b8bcd2a138_04 - Castle Nosferatu (Sega-style FM Synth Remix).aac",
"yes",
"40",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ActivateBehavior"
},
"parameters": [
"Platformer_Character",
"SmoothCamera",
"no"
]
},
{
"type": {
"value": "Tween::TweenCameraPosition2"
},
"parameters": [
"",
"\"cameraPosition\"",
"2000",
"CameraCenterY()",
"",
"\"linear\"",
"30"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Tween::TweenSceneVariableNumber3"
},
"parameters": [
"",
"\"time\"",
"Time",
"100",
"\"easeInQuad\"",
"10"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Tween::TweenSceneVariableNumber3"
},
"parameters": [
"",
"\"timechild\"",
"TimeStruct[\"something.lol\"].time",
"200",
"\"easeInQuint\"",
"10"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Wait"
},
"parameters": [
"5"
]
},
{
"type": {
"value": "SceneBackground"
},
"parameters": [
"",
"\"21;231;21\""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "KeyFromTextPressed"
},
"parameters": [
"",
"\"d\""
]
}
],
"actions": [
{
"type": {
"value": "Wait"
},
"parameters": [
"2"
]
},
{
"type": {
"value": "Delete"
},
"parameters": [
"Coins",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SaveState::SaveJustSucceeded"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "Montre"
},
"parameters": [
"SaveStatus",
""
]
},
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"SaveStatus",
"Text",
"=",
"\"Save succeeded\""
]
},
{
"type": {
"value": "Wait"
},
"parameters": [
"2"
]
},
{
"type": {
"value": "Cache"
},
"parameters": [
"SaveStatus"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SaveState::SaveJustFailed"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "Montre"
},
"parameters": [
"SaveStatus",
""
]
},
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"SaveStatus",
"Text",
"=",
"\"Save failed\""
]
},
{
"type": {
"value": "Wait"
},
"parameters": [
"2"
]
},
{
"type": {
"value": "Cache"
},
"parameters": [
"SaveStatus"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SaveState::LoadJustFailed"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "Montre"
},
"parameters": [
"SaveStatus",
""
]
},
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"SaveStatus",
"Text",
"=",
"\"Load failed\""
]
},
{
"type": {
"value": "Wait"
},
"parameters": [
"2"
]
},
{
"type": {
"value": "Cache"
},
"parameters": [
"SaveStatus"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SaveState::LoadJustSucceeded"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "Montre"
},
"parameters": [
"SaveStatus",
""
]
},
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"SaveStatus",
"Text",
"=",
"\"Load successful\""
]
},
{
"type": {
"value": "Wait"
},
"parameters": [
"2"
]
},
{
"type": {
"value": "Cache"
},
"parameters": [
"SaveStatus"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "TextContainerCapability::TextContainerBehavior::SetValue"
},
"parameters": [
"NewText7",
"Text",
"=",
"\"Excluded variable: \" + VariableExcludedFromSave"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "DepartScene"
},
"parameters": [
""
]
}
],
"actions": [
{
"type": {
"value": "ResetTimer"
},
"parameters": [
"",
"\"ExcludedVariableIncreaseTimer\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CompareTimer"
},
"parameters": [
"",
"\"ExcludedVariableIncreaseTimer\"",
">=",
"0.5"
]
}
],
"actions": [
{
"type": {
"value": "ResetTimer"
},
"parameters": [
"",
"\"ExcludedVariableIncreaseTimer\""
]
},
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"VariableExcludedFromSave",
"+",
"1"
]
}
]
}
],
"layers": [
{
"ambientLightColorB": 200,
"ambientLightColorG": 200,
"ambientLightColorR": 200,
"camera3DFarPlaneDistance": 10000,
"camera3DFieldOfView": 45,
"camera3DNearPlaneDistance": 3,
"cameraType": "",
"followBaseLayerCamera": false,
"isLightingLayer": false,
"isLocked": false,
"name": "Background",
"renderingType": "",
"visibility": true,
"cameras": [],
"effects": []
},
{
"ambientLightColorB": 200,
"ambientLightColorG": 200,
"ambientLightColorR": 200,
"camera3DFarPlaneDistance": 10000,
"camera3DFieldOfView": 45,
"camera3DNearPlaneDistance": 3,
"cameraType": "",
"followBaseLayerCamera": false,
"isLightingLayer": false,
"isLocked": false,
"name": "",
"renderingType": "",
"visibility": true,
"cameras": [
{
"defaultSize": true,
"defaultViewport": true,
"height": 0,
"viewportBottom": 1,
"viewportLeft": 0,
"viewportRight": 1,
"viewportTop": 0,
"width": 0
}
],
"effects": []
},
{
"ambientLightColorB": 200,
"ambientLightColorG": 200,
"ambientLightColorR": 200,
"camera3DFarPlaneDistance": 10000,
"camera3DFieldOfView": 45,
"camera3DNearPlaneDistance": 3,
"cameraType": "",
"followBaseLayerCamera": false,
"isLightingLayer": false,
"isLocked": false,
"name": "MobileControls",
"renderingType": "",
"visibility": true,
"cameras": [],
"effects": []
}
],
"behaviorsSharedData": [
{
"name": "Animation",
"type": "AnimatableCapability::AnimatableBehavior"
},
{
"name": "ButtonFSM",
"type": "ButtonStates::ButtonFSM"
},
{
"name": "ButtonScaleTween",
"type": "ButtonStates::ButtonScaleTween"
},
{
"name": "Effect",
"type": "EffectCapability::EffectBehavior"
},
{
"name": "Flippable",
"type": "FlippableCapability::FlippableBehavior"
},
{
"name": "MultitouchButton",
"type": "SpriteMultitouchJoystick::MultitouchButton"
},
{
"name": "Opacity",
"type": "OpacityCapability::OpacityBehavior"
},
{
"name": "Platform",
"type": "PlatformBehavior::PlatformBehavior"
},
{
"name": "PlatformerMultitouchMapper",
"type": "SpriteMultitouchJoystick::PlatformerMultitouchMapper"
},
{
"name": "PlatformerObject",
"type": "PlatformBehavior::PlatformerObjectBehavior"
},
{
"name": "Resizable",
"type": "ResizableCapability::ResizableBehavior"
},
{
"name": "SaveConfiguration",
"type": "SaveState::SaveConfiguration"
},
{
"name": "Scale",
"type": "ScalableCapability::ScalableBehavior"
},
{
"name": "SmoothCamera",
"type": "SmoothCamera::SmoothCamera"
},
{
"name": "Text",
"type": "TextContainerCapability::TextContainerBehavior"
},
{
"name": "Tween",
"type": "Tween::TweenBehavior"
}
]
}
],
"externalEvents": [],
"eventsFunctionsExtensions": [
{
"author": "",
"category": "User interface",
"extensionNamespace": "",
"fullName": "Button states and effects",
"gdevelopVersion": "",
"helpPath": "/objects/button",
"iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWdlc3R1cmUtdGFwLWJ1dHRvbiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMyA1QzE1LjIxIDUgMTcgNi43OSAxNyA5QzE3IDEwLjUgMTYuMiAxMS43NyAxNSAxMi40NlYxMS4yNEMxNS42MSAxMC42OSAxNiA5Ljg5IDE2IDlDMTYgNy4zNCAxNC42NiA2IDEzIDZTMTAgNy4zNCAxMCA5QzEwIDkuODkgMTAuMzkgMTAuNjkgMTEgMTEuMjRWMTIuNDZDOS44IDExLjc3IDkgMTAuNSA5IDlDOSA2Ljc5IDEwLjc5IDUgMTMgNU0yMCAyMC41QzE5Ljk3IDIxLjMyIDE5LjMyIDIxLjk3IDE4LjUgMjJIMTNDMTIuNjIgMjIgMTIuMjYgMjEuODUgMTIgMjEuNTdMOCAxNy4zN0w4Ljc0IDE2LjZDOC45MyAxNi4zOSA5LjIgMTYuMjggOS41IDE2LjI4SDkuN0wxMiAxOFY5QzEyIDguNDUgMTIuNDUgOCAxMyA4UzE0IDguNDUgMTQgOVYxMy40N0wxNS4yMSAxMy42TDE5LjE1IDE1Ljc5QzE5LjY4IDE2LjAzIDIwIDE2LjU2IDIwIDE3LjE0VjIwLjVNMjAgMkg0QzIuOSAyIDIgMi45IDIgNFYxMkMyIDEzLjExIDIuOSAxNCA0IDE0SDhWMTJMNCAxMkw0IDRIMjBMMjAgMTJIMThWMTRIMjBWMTMuOTZMMjAuMDQgMTRDMjEuMTMgMTQgMjIgMTMuMDkgMjIgMTJWNEMyMiAyLjkgMjEuMTEgMiAyMCAyWiIgLz48L3N2Zz4=",
"name": "ButtonStates",
"previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/753a9a794bd885058159b7509f06f5a8f67f72decfccb9a1b0efee26f41c3c4c_gesture-tap-button.svg",
"shortDescription": "Use any object as a button and change appearance according to user interactions.",
"version": "1.1.1",
"description": [
"Use the \"Button states\" behavior to track user interactions with an object, including:",
"",
"- Hovered",
"- Pressed",
"- Clicked",
"- Idle",
"",
"Add additional behaviors to make juicy buttons with animated responses to user input:",
"",
"- Size",
"- Color",
"- Animation",
"- Object effects"
],
"origin": {
"identifier": "ButtonStates",
"name": "gdevelop-extension-store"
},
"tags": [
"ui",
"button"
],
"authorIds": [
"IWykYNRvhCZBN3vEgKEbBPOR3Oc2",
"gqDaZjCfevOOxBYkK6zlhtZnXCg1"
],
"dependencies": [],
"globalVariables": [],
"sceneVariables": [],
"eventsFunctions": [],
"eventsBasedBehaviors": [
{
"description": "Use objects as buttons.",
"fullName": "Button states",
"name": "ButtonFSM",
"objectType": "",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "doStepPostEvents",
"sentence": "",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Finite state machine",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "The \"Validated\" state only last one frame."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Validated\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Check position",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Make sure the cursor position is only checked once per frame."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyMouseIsInside"
},
"parameters": [
"Object",
"Behavior",
"no"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyShouldCheckHovering"
},
"parameters": [
"Object",
"Behavior"
]
},
{
"type": {
"value": "CollisionPoint"
},
"parameters": [
"Object",
"MouseOnlyCursorX(Object.Layer(), 0)",
"MouseOnlyCursorY(Object.Layer(), 0)"
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyMouseIsInside"
},
"parameters": [
"Object",
"Behavior",
"yes"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Touches are always pressed, so ShouldCheckHovering doesn't matter."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyTouchIsInside"
},
"parameters": [
"Object",
"Behavior",
"no"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"!=",
"0"
]
},
{
"type": {
"value": "CollisionPoint"
},
"parameters": [
"Object",
"TouchX(TouchId, Object.Layer(), 0)",
"TouchY(TouchId, Object.Layer(), 0)"
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyTouchIsInside"
},
"parameters": [
"Object",
"Behavior",
"yes"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Handle touch start",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "HasAnyTouchOrMouseStarted"
},
"parameters": [
""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "StartedTouchOrMouseCount()",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionPoint"
},
"parameters": [
"Object",
"TouchX(StartedTouchOrMouseId(Index), Object.Layer(), 0)",
"TouchY(StartedTouchOrMouseId(Index), Object.Layer(), 0)"
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"=",
"StartedTouchOrMouseId(Index)"
]
},
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyTouchIsInside"
},
"parameters": [
"Object",
"Behavior",
"yes"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Hovered\""
]
},
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
}
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"PressedInside\""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"+",
"1"
]
}
]
}
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Apply position changes",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "ButtonStates::ButtonFSM::PropertyMouseIsInside"
},
"parameters": [
"Object",
"Behavior"
]
},
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Hovered\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyMouseIsInside"
},
"parameters": [
"Object",
"Behavior"
]
},
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Hovered\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "ButtonStates::ButtonFSM::PropertyTouchIsInside"
},
"parameters": [
"Object",
"Behavior"
]
},
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"PressedInside\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"PressedOutside\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyTouchIsInside"
},
"parameters": [
"Object",
"Behavior"
]
},
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"PressedOutside\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"PressedInside\""
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Handle touch end",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "HasTouchEnded"
},
"parameters": [
"",
"TouchId"
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"PressedInside\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Validated\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"PressedInside\""
]
},
{
"type": {
"inverted": true,
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Validated\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
}
]
}
]
}
],
"parameters": []
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonFSM",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "onDeActivate",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::ResetState"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonFSM",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Reset the state of the button.",
"fullName": "Reset state",
"functionType": "Action",
"name": "ResetState",
"private": true,
"sentence": "Reset the button state of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
},
{
"type": {
"value": "ButtonStates::ButtonFSM::SetPropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonFSM",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if the button is not used.",
"fullName": "Is idle",
"functionType": "Condition",
"name": "IsIdle",
"sentence": "_PARAM0_ is idle",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonFSM",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if the button was just clicked.",
"fullName": "Is clicked",
"functionType": "Condition",
"name": "IsClicked",
"sentence": "_PARAM0_ is clicked",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Validated\""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonFSM",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if the cursor is hovered over the button.",
"fullName": "Is hovered",
"functionType": "Condition",
"name": "IsHovered",
"sentence": "_PARAM0_ is hovered",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Hovered\""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonFSM",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if the button is either hovered or pressed but not hovered.",
"fullName": "Is focused",
"functionType": "Condition",
"name": "IsFocused",
"sentence": "_PARAM0_ is focused",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Hovered\""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"PressedOutside\""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonFSM",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if the button is currently being pressed with mouse or touch.",
"fullName": "Is pressed",
"functionType": "Condition",
"name": "IsPressed",
"sentence": "_PARAM0_ is pressed",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"PressedInside\""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonFSM",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if the button is currently being pressed outside with mouse or touch.",
"fullName": "Is held outside",
"functionType": "Condition",
"name": "IsPressedOutside",
"sentence": "_PARAM0_ is held outside",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::PropertyState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"PressedOutside\""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonFSM",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the touch id that is using the button or 0 if none.",
"fullName": "Touch id",
"functionType": "ExpressionAndCondition",
"name": "TouchId",
"sentence": "the touch id",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"TouchId"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonFSM",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "true",
"type": "Boolean",
"label": "",
"description": "Should check hovering",
"hidden": true,
"name": "ShouldCheckHovering"
},
{
"value": "Idle",
"type": "Choice",
"label": "State",
"choices": [
{
"label": "Idle",
"value": "Idle"
},
{
"label": "Hovered",
"value": "Hovered"
},
{
"label": "PressedInside",
"value": "PressedInside"
},
{
"label": "PressedOutside",
"value": "PressedOutside"
},
{
"label": "Validated",
"value": "Validated"
}
],
"hidden": true,
"name": "State"
},
{
"value": "0",
"type": "Number",
"label": "Touch id",
"hidden": true,
"name": "TouchId"
},
{
"value": "",
"type": "Boolean",
"label": "Touch is inside",
"hidden": true,
"name": "TouchIsInside"
},
{
"value": "",
"type": "Boolean",
"label": "Mouse is inside",
"hidden": true,
"name": "MouseIsInside"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "Index"
}
],
"sharedPropertyDescriptors": []
},
{
"description": "Enable effects on buttons based on their state.",
"fullName": "Button object effects",
"name": "ButtonObjectEffects",
"objectType": "",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "onCreated",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "EffectCapability::EffectBehavior::EnableEffect"
},
"parameters": [
"Object",
"Effect",
"IdleEffect",
"yes"
]
},
{
"type": {
"value": "EffectCapability::EffectBehavior::EnableEffect"
},
"parameters": [
"Object",
"Effect",
"FocusedEffect",
"no"
]
},
{
"type": {
"value": "EffectCapability::EffectBehavior::EnableEffect"
},
"parameters": [
"Object",
"Effect",
"PressedEffect",
"no"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffects",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "States",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "EffectCapability::EffectBehavior::EnableEffect"
},
"parameters": [
"Object",
"Effect",
"IdleEffect",
"no"
]
},
{
"type": {
"value": "EffectCapability::EffectBehavior::EnableEffect"
},
"parameters": [
"Object",
"Effect",
"FocusedEffect",
"no"
]
},
{
"type": {
"value": "EffectCapability::EffectBehavior::EnableEffect"
},
"parameters": [
"Object",
"Effect",
"PressedEffect",
"no"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffects::PropertyIdleEffect"
},
"parameters": [
"Object",
"Behavior",
"!=",
"\"\""
]
},
{
"type": {
"value": "ButtonStates::ButtonFSM::IsIdle"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
}
],
"actions": [
{
"type": {
"value": "EffectCapability::EffectBehavior::EnableEffect"
},
"parameters": [
"Object",
"Effect",
"IdleEffect",
"yes"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffects::PropertyFocusedEffect"
},
"parameters": [
"Object",
"Behavior",
"!=",
"\"\""
]
},
{
"type": {
"value": "ButtonStates::ButtonFSM::IsFocused"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
}
],
"actions": [
{
"type": {
"value": "EffectCapability::EffectBehavior::EnableEffect"
},
"parameters": [
"Object",
"Effect",
"FocusedEffect",
"yes"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffects::PropertyPressedEffect"
},
"parameters": [
"Object",
"Behavior",
"!=",
"\"\""
]
},
{
"type": {
"value": "ButtonStates::ButtonFSM::IsPressed"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
}
],
"actions": [
{
"type": {
"value": "EffectCapability::EffectBehavior::EnableEffect"
},
"parameters": [
"Object",
"Effect",
"PressedEffect",
"yes"
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffects",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the idle state effect of the object.",
"fullName": "Idle state effect",
"functionType": "ExpressionAndCondition",
"group": "Button object effects configuration",
"name": "IdleEffect",
"sentence": "the idle state effect",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"IdleEffect"
]
}
]
}
],
"expressionType": {
"type": "string"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffects",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "IdleEffect",
"name": "SetIdleEffect",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffects::SetPropertyIdleEffect"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffects",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the focused state effect of the object. The state is Focused when the button is hovered or held outside.",
"fullName": "Focused state effect",
"functionType": "ExpressionAndCondition",
"group": "Button object effects configuration",
"name": "FocusedEffect",
"sentence": "the focused state effect",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"FocusedEffect"
]
}
]
}
],
"expressionType": {
"type": "string"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffects",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FocusedEffect",
"name": "SetFocusedEffect",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffects::SetPropertyFocusedEffect"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffects",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the pressed state effect of the object.",
"fullName": "Pressed state effect",
"functionType": "ExpressionAndCondition",
"group": "Button object effects configuration",
"name": "PressedEffect",
"sentence": "the pressed state effect",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"PressedEffect"
]
}
]
}
],
"expressionType": {
"type": "string"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffects",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "PressedEffect",
"name": "SetPressedEffect",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffects::SetPropertyPressedEffect"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffects",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "",
"type": "Behavior",
"label": "Button states",
"extraInformation": [
"ButtonStates::ButtonFSM"
],
"choices": [],
"name": "ButtonFSM"
},
{
"value": "",
"type": "Behavior",
"label": "Effect capability",
"extraInformation": [
"EffectCapability::EffectBehavior"
],
"choices": [],
"name": "Effect"
},
{
"value": "",
"type": "String",
"label": "Idle state effect",
"group": "Effects",
"name": "IdleEffect"
},
{
"value": "",
"type": "String",
"label": "Focused state effect",
"description": "The state is Focused when the button is hovered or held outside.",
"group": "Effects",
"name": "FocusedEffect"
},
{
"value": "",
"type": "String",
"label": "Pressed state effect",
"group": "Effects",
"name": "PressedEffect"
}
],
"sharedPropertyDescriptors": []
},
{
"description": "Change the animation of buttons according to their state.",
"fullName": "Button animation",
"name": "ButtonAnimationName",
"objectType": "",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "onCreated",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "AnimatableCapability::AnimatableBehavior::SetName"
},
"parameters": [
"Object",
"Animation",
"=",
"IdleAnimationName"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonAnimationName",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Change based on state",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsIdle"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
}
],
"actions": [
{
"type": {
"value": "AnimatableCapability::AnimatableBehavior::SetName"
},
"parameters": [
"Object",
"Animation",
"=",
"IdleAnimationName"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsFocused"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
}
],
"actions": [
{
"type": {
"value": "AnimatableCapability::AnimatableBehavior::SetName"
},
"parameters": [
"Object",
"Animation",
"=",
"FocusedAnimationName"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsPressed"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
}
],
"actions": [
{
"type": {
"value": "AnimatableCapability::AnimatableBehavior::SetName"
},
"parameters": [
"Object",
"Animation",
"=",
"PressedAnimationName"
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonAnimationName",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the idle state animation name of the object.",
"fullName": "Idle state animation name",
"functionType": "ExpressionAndCondition",
"group": "Button animation configuration",
"name": "IdleAnimationName",
"sentence": "the idle state animation name",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"IdleAnimationName"
]
}
]
}
],
"expressionType": {
"type": "string"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonAnimationName",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "IdleAnimationName",
"name": "SetIdleAnimationName",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonAnimationName::SetPropertyIdleAnimationName"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonAnimationName",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the focused state animation name of the object. The state is Focused when the button is hovered or held outside.",
"fullName": "Focused state animation name",
"functionType": "ExpressionAndCondition",
"group": "Button animation configuration",
"name": "FocusedAnimationName",
"sentence": "the focused state animation name",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"FocusedAnimationName"
]
}
]
}
],
"expressionType": {
"type": "string"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonAnimationName",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FocusedAnimationName",
"name": "SetFocusedAnimationName",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonAnimationName::SetPropertyFocusedAnimationName"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonAnimationName",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the pressed state animation name of the object.",
"fullName": "Pressed state animation name",
"functionType": "ExpressionAndCondition",
"group": "Button animation configuration",
"name": "PressedAnimationName",
"sentence": "the pressed state animation name",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"PressedAnimationName"
]
}
]
}
],
"expressionType": {
"type": "string"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonAnimationName",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "PressedAnimationName",
"name": "SetPressedAnimationName",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonAnimationName::SetPropertyPressedAnimationName"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonAnimationName",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "",
"type": "Behavior",
"label": "Animatable capability",
"extraInformation": [
"AnimatableCapability::AnimatableBehavior"
],
"choices": [],
"name": "Animation"
},
{
"value": "",
"type": "Behavior",
"label": "Button states",
"extraInformation": [
"ButtonStates::ButtonFSM"
],
"choices": [],
"name": "ButtonFSM"
},
{
"value": "Idle",
"type": "String",
"label": "Idle state animation name",
"group": "Animation",
"name": "IdleAnimationName"
},
{
"value": "Focused",
"type": "String",
"label": "Focused state animation name",
"description": "The state is Focused when the button is hovered or held outside.",
"group": "Animation",
"name": "FocusedAnimationName"
},
{
"value": "Pressed",
"type": "String",
"label": "Pressed state animation name",
"group": "Animation",
"name": "PressedAnimationName"
}
],
"sharedPropertyDescriptors": []
},
{
"description": "Smoothly change an effect on buttons according to their state.",
"fullName": "Button object effect tween",
"name": "ButtonObjectEffectTween",
"objectType": "",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "onCreated",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectValue"
},
"parameters": [
"Object",
"Behavior",
"=",
"IdleValue"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "States",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsIdle"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"!=",
"\"Idle\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::FadeOut"
},
"parameters": [
"Object",
"Behavior",
"IdleValue",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsFocused"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Focused\""
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::FadeIn"
},
"parameters": [
"Object",
"Behavior",
"FocusedValue",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Pressed\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Focused\""
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::FadeOut"
},
"parameters": [
"Object",
"Behavior",
"FocusedValue",
""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsPressed"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"!=",
"\"Pressed\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Pressed\""
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::FadeIn"
},
"parameters": [
"Object",
"Behavior",
"PressedValue",
""
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Tween",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"FadeIn\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::PlayTween"
},
"parameters": [
"Object",
"Behavior",
"FadeInDuration",
"FadeInEasing",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"FadeOut\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::PlayTween"
},
"parameters": [
"Object",
"Behavior",
"FadeOutDuration",
"FadeOutEasing",
""
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "Time delta",
"functionType": "Expression",
"name": "TimeDelta",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"TimeDelta() * LayerTimeScale(Object.Layer())"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "Fade in",
"functionType": "Action",
"name": "FadeIn",
"private": true,
"sentence": "_PARAM0_ fade in to _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTime"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"FadeIn\""
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenInitialValue"
},
"parameters": [
"Object",
"Behavior",
"=",
"EffectValue"
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTargetedValue"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
},
{
"description": "Value",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"fullName": "Fade out",
"functionType": "Action",
"name": "FadeOut",
"private": true,
"sentence": "_PARAM0_ fade out to _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTime"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"FadeOut\""
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenInitialValue"
},
"parameters": [
"Object",
"Behavior",
"=",
"EffectValue"
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTargetedValue"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
},
{
"description": "Value",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"fullName": "Play tween",
"functionType": "Action",
"name": "PlayTween",
"private": true,
"sentence": "Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenTime"
},
"parameters": [
"Object",
"Behavior",
"<",
"Duration"
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTime"
},
"parameters": [
"Object",
"Behavior",
"+",
"Object.Behavior::TimeDelta()"
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectValue"
},
"parameters": [
"Object",
"Behavior",
"=",
"Tween::Ease(Easing, TweenInitialValue, TweenTargetedValue, TweenTime / Duration)"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenTime"
},
"parameters": [
"Object",
"Behavior",
">=",
"Duration"
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"NoTween\""
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectValue"
},
"parameters": [
"Object",
"Behavior",
"=",
"TweenTargetedValue"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "EffectCapability::EffectBehavior::SetEffectDoubleParameter"
},
"parameters": [
"Object",
"Effect",
"EffectName",
"EffectProperty",
"EffectValue"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
},
{
"description": "Duration (in seconds)",
"name": "Duration",
"type": "expression"
},
{
"description": "Easing",
"name": "Easing",
"supplementaryInformation": "[]",
"type": "string"
}
],
"objectGroups": []
},
{
"description": "the effect name of the object.",
"fullName": "Effect name",
"functionType": "ExpressionAndCondition",
"group": "Button effect tween configuration",
"name": "EffectName",
"sentence": "the effect name",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"EffectName"
]
}
]
}
],
"expressionType": {
"type": "string"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.",
"fullName": "Effect parameter",
"functionType": "ExpressionAndCondition",
"group": "Button effect tween configuration",
"name": "EffectProperty",
"sentence": "the effect parameter",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"EffectProperty"
]
}
]
}
],
"expressionType": {
"type": "string"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.",
"fullName": "Effect parameter",
"functionType": "Action",
"getterName": "EffectName",
"group": "Button effect tween configuration",
"name": "SetEffectProperty",
"sentence": "Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectName"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
},
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectProperty"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
},
{
"description": "Effect name",
"name": "EffectName",
"type": "string"
},
{
"description": "Parameter name",
"name": "PropertyName",
"type": "string"
}
],
"objectGroups": []
},
{
"description": "the idle effect parameter value of the object.",
"fullName": "Idle effect parameter value",
"functionType": "ExpressionAndCondition",
"group": "Button effect tween configuration",
"name": "IdleValue",
"sentence": "the idle effect parameter value",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"IdleValue"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "IdleValue",
"name": "SetIdleValue",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyIdleValue"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.",
"fullName": "Focused effect parameter value",
"functionType": "ExpressionAndCondition",
"group": "Button effect tween configuration",
"name": "FocusedValue",
"sentence": "the focused effect parameter value",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"FocusedValue"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FocusedValue",
"name": "SetFocusedValue",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFocusedValue"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the pressed effect parameter value of the object.",
"fullName": "Pressed effect parameter value",
"functionType": "ExpressionAndCondition",
"group": "Button effect tween configuration",
"name": "PressedValue",
"sentence": "the pressed effect parameter value",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"PressedValue"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "PressedValue",
"name": "SetPressedValue",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPressedValue"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-in easing of the object.",
"fullName": "Fade-in easing",
"functionType": "ExpressionAndCondition",
"group": "Button effect tween configuration",
"name": "FadeInEasing",
"sentence": "the fade-in easing",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"FadeInEasing"
]
}
]
}
],
"expressionType": {
"supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
"type": "stringWithSelector"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeInEasing",
"name": "SetFadeInEasing",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeInEasing"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-out easing of the object.",
"fullName": "Fade-out easing",
"functionType": "ExpressionAndCondition",
"group": "Button effect tween configuration",
"name": "FadeOutEasing",
"sentence": "the fade-out easing",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"FadeOutEasing"
]
}
]
}
],
"expressionType": {
"supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
"type": "stringWithSelector"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeOutEasing",
"name": "SetFadeOutEasing",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeOutEasing"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-in duration of the object.",
"fullName": "Fade-in duration",
"functionType": "ExpressionAndCondition",
"group": "Button effect tween configuration",
"name": "FadeInDuration",
"sentence": "the fade-in duration",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"FadeInDuration"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeInDuration",
"name": "SetFadeInDuration",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeInDuration"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-out duration of the object.",
"fullName": "Fade-out duration",
"functionType": "ExpressionAndCondition",
"group": "Button effect tween configuration",
"name": "FadeOutDuration",
"sentence": "the fade-out duration",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"FadeOutDuration"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeOutDuration",
"name": "SetFadeOutDuration",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeOutDuration"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonObjectEffectTween",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "",
"type": "Behavior",
"label": "Button states",
"extraInformation": [
"ButtonStates::ButtonFSM"
],
"choices": [],
"name": "ButtonFSM"
},
{
"value": "",
"type": "Behavior",
"label": "Effect capability",
"extraInformation": [
"EffectCapability::EffectBehavior"
],
"choices": [],
"name": "Effect"
},
{
"value": "Effect",
"type": "String",
"label": "Effect name",
"group": "Effect",
"name": "EffectName"
},
{
"value": "",
"type": "String",
"label": "Effect parameter",
"description": "The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.",
"group": "Effect",
"name": "EffectProperty"
},
{
"value": "0",
"type": "Number",
"label": "Idle effect parameter value",
"group": "Value",
"name": "IdleValue"
},
{
"value": "0",
"type": "Number",
"label": "Focused effect parameter value",
"description": "The state is Focused when the button is hovered or held outside.",
"group": "Value",
"name": "FocusedValue"
},
{
"value": "0",
"type": "Number",
"label": "Pressed effect parameter value",
"group": "Value",
"name": "PressedValue"
},
{
"value": "easeInOutQuad",
"type": "Choice",
"label": "Fade-in easing",
"group": "Speed",
"choices": [
{
"label": "linear",
"value": "linear"
},
{
"label": "easeInQuad",
"value": "easeInQuad"
},
{
"label": "easeOutQuad",
"value": "easeOutQuad"
},
{
"label": "easeInOutQuad",
"value": "easeInOutQuad"
},
{
"label": "easeInCubic",
"value": "easeInCubic"
},
{
"label": "easeOutCubic",
"value": "easeOutCubic"
},
{
"label": "easeInOutCubic",
"value": "easeInOutCubic"
},
{
"label": "easeInQuart",
"value": "easeInQuart"
},
{
"label": "easeOutQuart",
"value": "easeOutQuart"
},
{
"label": "easeInOutQuart",
"value": "easeInOutQuart"
},
{
"label": "easeInQuint",
"value": "easeInQuint"
},
{
"label": "easeOutQuint",
"value": "easeOutQuint"
},
{
"label": "easeInOutQuint",
"value": "easeInOutQuint"
},
{
"label": "easeInOutSine",
"value": "easeInOutSine"
},
{
"label": "easeInExpo",
"value": "easeInExpo"
},
{
"label": "easeOutExpo",
"value": "easeOutExpo"
},
{
"label": "easeInOutExpo",
"value": "easeInOutExpo"
},
{
"label": "easeInCirc",
"value": "easeInCirc"
},
{
"label": "easeOutCirc",
"value": "easeOutCirc"
},
{
"label": "easeInOutCirc",
"value": "easeInOutCirc"
},
{
"label": "easeOutBounce",
"value": "easeOutBounce"
},
{
"label": "easeInBack",
"value": "easeInBack"
},
{
"label": "easeOutBack",
"value": "easeOutBack"
},
{
"label": "easeInOutBack",
"value": "easeInOutBack"
},
{
"label": "elastic",
"value": "elastic"
},
{
"label": "swingFromTo",
"value": "swingFromTo"
},
{
"label": "swingFrom",
"value": "swingFrom"
},
{
"label": "swingTo",
"value": "swingTo"
},
{
"label": "bounce",
"value": "bounce"
},
{
"label": "bouncePast",
"value": "bouncePast"
},
{
"label": "easeFromTo",
"value": "easeFromTo"
},
{
"label": "easeFrom",
"value": "easeFrom"
},
{
"label": "easeTo",
"value": "easeTo"
}
],
"name": "FadeInEasing"
},
{
"value": "easeInOutQuad",
"type": "Choice",
"label": "Fade-out easing",
"group": "Speed",
"choices": [
{
"label": "linear",
"value": "linear"
},
{
"label": "easeInQuad",
"value": "easeInQuad"
},
{
"label": "easeOutQuad",
"value": "easeOutQuad"
},
{
"label": "easeInOutQuad",
"value": "easeInOutQuad"
},
{
"label": "easeInCubic",
"value": "easeInCubic"
},
{
"label": "easeOutCubic",
"value": "easeOutCubic"
},
{
"label": "easeInOutCubic",
"value": "easeInOutCubic"
},
{
"label": "easeInQuart",
"value": "easeInQuart"
},
{
"label": "easeOutQuart",
"value": "easeOutQuart"
},
{
"label": "easeInOutQuart",
"value": "easeInOutQuart"
},
{
"label": "easeInQuint",
"value": "easeInQuint"
},
{
"label": "easeOutQuint",
"value": "easeOutQuint"
},
{
"label": "easeInOutQuint",
"value": "easeInOutQuint"
},
{
"label": "easeInOutSine",
"value": "easeInOutSine"
},
{
"label": "easeInExpo",
"value": "easeInExpo"
},
{
"label": "easeOutExpo",
"value": "easeOutExpo"
},
{
"label": "easeInOutExpo",
"value": "easeInOutExpo"
},
{
"label": "easeInCirc",
"value": "easeInCirc"
},
{
"label": "easeOutCirc",
"value": "easeOutCirc"
},
{
"label": "easeInOutCirc",
"value": "easeInOutCirc"
},
{
"label": "easeOutBounce",
"value": "easeOutBounce"
},
{
"label": "easeInBack",
"value": "easeInBack"
},
{
"label": "easeOutBack",
"value": "easeOutBack"
},
{
"label": "easeInOutBack",
"value": "easeInOutBack"
},
{
"label": "elastic",
"value": "elastic"
},
{
"label": "swingFromTo",
"value": "swingFromTo"
},
{
"label": "swingFrom",
"value": "swingFrom"
},
{
"label": "swingTo",
"value": "swingTo"
},
{
"label": "bounce",
"value": "bounce"
},
{
"label": "bouncePast",
"value": "bouncePast"
},
{
"label": "easeFromTo",
"value": "easeFromTo"
},
{
"label": "easeFrom",
"value": "easeFrom"
},
{
"label": "easeTo",
"value": "easeTo"
}
],
"name": "FadeOutEasing"
},
{
"value": "0.125",
"type": "Number",
"unit": "Second",
"label": "Fade-in duration",
"group": "Speed",
"name": "FadeInDuration"
},
{
"value": "0.5",
"type": "Number",
"unit": "Second",
"label": "Fade-out duration",
"group": "Speed",
"name": "FadeOutDuration"
},
{
"value": "Idle",
"type": "Choice",
"label": "",
"choices": [
{
"label": "Idle",
"value": "Idle"
},
{
"label": "Focused",
"value": "Focused"
},
{
"label": "Pressed",
"value": "Pressed"
}
],
"hidden": true,
"name": "PreviousState"
},
{
"value": "0",
"type": "Number",
"label": "",
"hidden": true,
"name": "TweenInitialValue"
},
{
"value": "0",
"type": "Number",
"label": "",
"hidden": true,
"name": "TweenTargetedValue"
},
{
"value": "0",
"type": "Number",
"label": "",
"hidden": true,
"name": "TweenTime"
},
{
"value": "NoTween",
"type": "Choice",
"label": "",
"choices": [
{
"label": "NoTween",
"value": "NoTween"
},
{
"label": "FadeIn",
"value": "FadeIn"
},
{
"label": "FadeOut",
"value": "FadeOut"
}
],
"hidden": true,
"name": "TweenState"
},
{
"value": "0",
"type": "Number",
"label": "",
"hidden": true,
"name": "EffectValue"
}
],
"sharedPropertyDescriptors": []
},
{
"description": "Smoothly resize buttons according to their state.",
"fullName": "Button scale tween",
"name": "ButtonScaleTween",
"objectType": "",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "onCreated",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ScalableCapability::ScalableBehavior::SetValue"
},
"parameters": [
"Object",
"Scale",
"=",
"IdleScale"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Change based on state",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsIdle"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
},
{
"type": {
"value": "ButtonStates::ButtonScaleTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"!=",
"\"Idle\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
},
{
"type": {
"value": "ButtonStates::ButtonScaleTween::FadeOut"
},
"parameters": [
"Object",
"Behavior",
"IdleScale",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsFocused"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Focused\""
]
},
{
"type": {
"value": "ButtonStates::ButtonScaleTween::FadeIn"
},
"parameters": [
"Object",
"Behavior",
"FocusedScale",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Pressed\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Focused\""
]
},
{
"type": {
"value": "ButtonStates::ButtonScaleTween::FadeOut"
},
"parameters": [
"Object",
"Behavior",
"FocusedScale",
""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsPressed"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
},
{
"type": {
"value": "ButtonStates::ButtonScaleTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"!=",
"\"Pressed\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Pressed\""
]
},
{
"type": {
"value": "ButtonStates::ButtonScaleTween::FadeIn"
},
"parameters": [
"Object",
"Behavior",
"PressedScale",
""
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "Fade in",
"functionType": "Action",
"name": "FadeIn",
"private": true,
"sentence": "_PARAM0_ fade in to _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Tween::AddObjectScaleTween"
},
"parameters": [
"Object",
"Tween",
"\"__ButtonScaleTween.Fade\"",
"Value",
"Value",
"FadeInEasing",
"1000 * FadeInDuration",
"no",
"yes"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
},
{
"description": "Value",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"fullName": "Fade out",
"functionType": "Action",
"name": "FadeOut",
"private": true,
"sentence": "_PARAM0_ fade out to _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Tween::AddObjectScaleTween"
},
"parameters": [
"Object",
"Tween",
"\"__ButtonScaleTween.Fade\"",
"Value",
"Value",
"FadeOutEasing",
"1000 * FadeOutDuration",
"no",
"yes"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
},
{
"description": "Value",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "the idle state size scale of the object.",
"fullName": "Idle state size scale",
"functionType": "ExpressionAndCondition",
"group": "Button scale tween configuration",
"name": "IdleScale",
"sentence": "the idle state size scale",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"IdleScale"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "IdleScale",
"name": "SetIdleScale",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyIdleScale"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the focused state size scale of the object. The state is Focused when the button is hovered or held outside.",
"fullName": "Focused state size scale",
"functionType": "ExpressionAndCondition",
"group": "Button scale tween configuration",
"name": "FocusedScale",
"sentence": "the focused state size scale",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"FocusedScale"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FocusedScale",
"name": "SetFocusedScale",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyFocusedScale"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the pressed state size scale of the object.",
"fullName": "Pressed state size scale",
"functionType": "ExpressionAndCondition",
"group": "Button scale tween configuration",
"name": "PressedScale",
"sentence": "the pressed state size scale",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"PressedScale"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "PressedScale",
"name": "SetPressedScale",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyPressedScale"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-in duration of the object.",
"fullName": "Fade-in duration",
"functionType": "ExpressionAndCondition",
"group": "Button scale tween configuration",
"name": "FadeInDuration",
"sentence": "the fade-in duration",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"FadeInDuration"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeInDuration",
"name": "SetFadeInDuration",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyFadeInDuration"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-out duration of the object.",
"fullName": "Fade-out duration",
"functionType": "ExpressionAndCondition",
"group": "Button scale tween configuration",
"name": "FadeOutDuration",
"sentence": "the fade-out duration",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"FadeOutDuration"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeOutDuration",
"name": "SetFadeOutDuration",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyFadeOutDuration"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-in easing of the object.",
"fullName": "Fade-in easing",
"functionType": "ExpressionAndCondition",
"group": "Button scale tween configuration",
"name": "FadeInEasing",
"sentence": "the fade-in easing",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"FadeInEasing"
]
}
]
}
],
"expressionType": {
"supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
"type": "stringWithSelector"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeInEasing",
"name": "SetFadeInEasing",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyFadeInEasing"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-out easing of the object.",
"fullName": "Fade-out easing",
"functionType": "ExpressionAndCondition",
"group": "Button scale tween configuration",
"name": "FadeOutEasing",
"sentence": "the fade-out easing",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"FadeOutEasing"
]
}
]
}
],
"expressionType": {
"supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
"type": "stringWithSelector"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeOutEasing",
"name": "SetFadeOutEasing",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonScaleTween::SetPropertyFadeOutEasing"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonScaleTween",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "",
"type": "Behavior",
"label": "Scalable capability",
"extraInformation": [
"ScalableCapability::ScalableBehavior"
],
"choices": [],
"name": "Scale"
},
{
"value": "",
"type": "Behavior",
"label": "Button states behavior (required)",
"extraInformation": [
"ButtonStates::ButtonFSM"
],
"choices": [],
"name": "ButtonFSM"
},
{
"value": "",
"type": "Behavior",
"label": "Tween behavior (required)",
"extraInformation": [
"Tween::TweenBehavior"
],
"choices": [],
"name": "Tween"
},
{
"value": "1",
"type": "Number",
"unit": "Dimensionless",
"label": "Idle state size scale",
"group": "Size",
"name": "IdleScale"
},
{
"value": "1",
"type": "Number",
"unit": "Dimensionless",
"label": "Focused state size scale",
"description": "The state is Focused when the button is hovered or held outside.",
"group": "Size",
"name": "FocusedScale"
},
{
"value": "0.1",
"type": "Number",
"unit": "Second",
"label": "Fade-in duration",
"group": "Speed",
"name": "FadeInDuration"
},
{
"value": "0.2",
"type": "Number",
"unit": "Second",
"label": "Fade-out duration",
"group": "Speed",
"name": "FadeOutDuration"
},
{
"value": "0.95",
"type": "Number",
"unit": "Dimensionless",
"label": "Pressed state size scale",
"group": "Size",
"name": "PressedScale"
},
{
"value": "easeInOutQuad",
"type": "Choice",
"label": "Fade-in easing",
"group": "Speed",
"choices": [
{
"label": "linear",
"value": "linear"
},
{
"label": "easeInQuad",
"value": "easeInQuad"
},
{
"label": "easeOutQuad",
"value": "easeOutQuad"
},
{
"label": "easeInOutQuad",
"value": "easeInOutQuad"
},
{
"label": "easeInCubic",
"value": "easeInCubic"
},
{
"label": "easeOutCubic",
"value": "easeOutCubic"
},
{
"label": "easeInOutCubic",
"value": "easeInOutCubic"
},
{
"label": "easeInQuart",
"value": "easeInQuart"
},
{
"label": "easeOutQuart",
"value": "easeOutQuart"
},
{
"label": "easeInOutQuart",
"value": "easeInOutQuart"
},
{
"label": "easeInQuint",
"value": "easeInQuint"
},
{
"label": "easeOutQuint",
"value": "easeOutQuint"
},
{
"label": "easeInOutQuint",
"value": "easeInOutQuint"
},
{
"label": "easeInOutSine",
"value": "easeInOutSine"
},
{
"label": "easeInExpo",
"value": "easeInExpo"
},
{
"label": "easeOutExpo",
"value": "easeOutExpo"
},
{
"label": "easeInOutExpo",
"value": "easeInOutExpo"
},
{
"label": "easeInCirc",
"value": "easeInCirc"
},
{
"label": "easeOutCirc",
"value": "easeOutCirc"
},
{
"label": "easeInOutCirc",
"value": "easeInOutCirc"
},
{
"label": "easeOutBounce",
"value": "easeOutBounce"
},
{
"label": "easeInBack",
"value": "easeInBack"
},
{
"label": "easeOutBack",
"value": "easeOutBack"
},
{
"label": "easeInOutBack",
"value": "easeInOutBack"
},
{
"label": "elastic",
"value": "elastic"
},
{
"label": "swingFromTo",
"value": "swingFromTo"
},
{
"label": "swingFrom",
"value": "swingFrom"
},
{
"label": "swingTo",
"value": "swingTo"
},
{
"label": "bounce",
"value": "bounce"
},
{
"label": "bouncePast",
"value": "bouncePast"
},
{
"label": "easeFromTo",
"value": "easeFromTo"
},
{
"label": "easeFrom",
"value": "easeFrom"
},
{
"label": "easeTo",
"value": "easeTo"
}
],
"name": "FadeInEasing"
},
{
"value": "easeInOutQuad",
"type": "Choice",
"label": "Fade-out easing",
"group": "Speed",
"choices": [
{
"label": "linear",
"value": "linear"
},
{
"label": "easeInQuad",
"value": "easeInQuad"
},
{
"label": "easeOutQuad",
"value": "easeOutQuad"
},
{
"label": "easeInOutQuad",
"value": "easeInOutQuad"
},
{
"label": "easeInCubic",
"value": "easeInCubic"
},
{
"label": "easeOutCubic",
"value": "easeOutCubic"
},
{
"label": "easeInOutCubic",
"value": "easeInOutCubic"
},
{
"label": "easeInQuart",
"value": "easeInQuart"
},
{
"label": "easeOutQuart",
"value": "easeOutQuart"
},
{
"label": "easeInOutQuart",
"value": "easeInOutQuart"
},
{
"label": "easeInQuint",
"value": "easeInQuint"
},
{
"label": "easeOutQuint",
"value": "easeOutQuint"
},
{
"label": "easeInOutQuint",
"value": "easeInOutQuint"
},
{
"label": "easeInOutSine",
"value": "easeInOutSine"
},
{
"label": "easeInExpo",
"value": "easeInExpo"
},
{
"label": "easeOutExpo",
"value": "easeOutExpo"
},
{
"label": "easeInOutExpo",
"value": "easeInOutExpo"
},
{
"label": "easeInCirc",
"value": "easeInCirc"
},
{
"label": "easeOutCirc",
"value": "easeOutCirc"
},
{
"label": "easeInOutCirc",
"value": "easeInOutCirc"
},
{
"label": "easeOutBounce",
"value": "easeOutBounce"
},
{
"label": "easeInBack",
"value": "easeInBack"
},
{
"label": "easeOutBack",
"value": "easeOutBack"
},
{
"label": "easeInOutBack",
"value": "easeInOutBack"
},
{
"label": "elastic",
"value": "elastic"
},
{
"label": "swingFromTo",
"value": "swingFromTo"
},
{
"label": "swingFrom",
"value": "swingFrom"
},
{
"label": "swingTo",
"value": "swingTo"
},
{
"label": "bounce",
"value": "bounce"
},
{
"label": "bouncePast",
"value": "bouncePast"
},
{
"label": "easeFromTo",
"value": "easeFromTo"
},
{
"label": "easeFrom",
"value": "easeFrom"
},
{
"label": "easeTo",
"value": "easeTo"
}
],
"name": "FadeOutEasing"
},
{
"value": "Idle",
"type": "Choice",
"label": "",
"choices": [
{
"label": "Idle",
"value": "Idle"
},
{
"label": "Focused",
"value": "Focused"
},
{
"label": "Pressed",
"value": "Pressed"
}
],
"hidden": true,
"name": "PreviousState"
}
],
"sharedPropertyDescriptors": []
},
{
"description": "Smoothly change the color tint of buttons according to their state.",
"fullName": "Button color tint tween",
"name": "ButtonColorTintTween",
"objectType": "Sprite",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "onCreated",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ChangeColor"
},
"parameters": [
"Object",
"IdleColorTint"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "States",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsIdle"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
},
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"!=",
"\"Idle\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
},
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::FadeOut"
},
"parameters": [
"Object",
"Behavior",
"IdleColorTint",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsFocused"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Idle\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Focused\""
]
},
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::FadeIn"
},
"parameters": [
"Object",
"Behavior",
"FocusedColorTint",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Pressed\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Focused\""
]
},
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::FadeOut"
},
"parameters": [
"Object",
"Behavior",
"FocusedColorTint",
""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "ButtonStates::ButtonFSM::IsPressed"
},
"parameters": [
"Object",
"ButtonFSM",
""
]
},
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"!=",
"\"Pressed\""
]
}
],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Pressed\""
]
},
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::FadeIn"
},
"parameters": [
"Object",
"Behavior",
"PressedColorTint",
""
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "Fade in",
"functionType": "Action",
"name": "FadeIn",
"private": true,
"sentence": "_PARAM0_ fade in to _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Tween::AddObjectColorTween"
},
"parameters": [
"Object",
"Tween",
"\"__ButtonColorTintTween.Fade\"",
"Value",
"FadeInEasing",
"1000 * FadeInDuration",
"no",
"yes"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
},
{
"description": "Value",
"name": "Value",
"type": "color"
}
],
"objectGroups": []
},
{
"fullName": "Fade out",
"functionType": "Action",
"name": "FadeOut",
"private": true,
"sentence": "_PARAM0_ fade out to _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Tween::AddObjectColorTween"
},
"parameters": [
"Object",
"Tween",
"\"__ButtonColorTintTween.Fade\"",
"Value",
"FadeOutEasing",
"1000 * FadeOutDuration",
"no",
"yes"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
},
{
"description": "Value",
"name": "Value",
"type": "color"
}
],
"objectGroups": []
},
{
"description": "the idle state color tint of the object.",
"fullName": "Idle state color tint",
"functionType": "ExpressionAndCondition",
"group": "Button color tint tween",
"name": "IdleColorTint",
"sentence": "the idle state color tint",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"IdleColorTint"
]
}
]
}
],
"expressionType": {
"type": "color"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "IdleColorTint",
"name": "SetIdleColorTint",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyIdleColorTint"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the focused state color tint of the object. The state is Focused when the button is hovered or held outside.",
"fullName": "Focused state color tint",
"functionType": "ExpressionAndCondition",
"group": "Button color tint tween",
"name": "FocusedColorTint",
"sentence": "the focused state color tint",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"FocusedColorTint"
]
}
]
}
],
"expressionType": {
"type": "color"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FocusedColorTint",
"name": "SetFocusedColorTint",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyFocusedColorTint"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the pressed state color tint of the object.",
"fullName": "Pressed state color tint",
"functionType": "ExpressionAndCondition",
"group": "Button color tint tween",
"name": "PressedColorTint",
"sentence": "the pressed state color tint",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"PressedColorTint"
]
}
]
}
],
"expressionType": {
"type": "color"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "PressedColorTint",
"name": "SetPressedColorTint",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyPressedColorTint"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-in duration of the object.",
"fullName": "Fade-in duration",
"functionType": "ExpressionAndCondition",
"group": "Button color tint tween",
"name": "FadeInDuration",
"sentence": "the fade-in duration",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"FadeInDuration"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeInDuration",
"name": "SetFadeInDuration",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeInDuration"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-out duration of the object.",
"fullName": "Fade-out duration",
"functionType": "ExpressionAndCondition",
"group": "Button color tint tween",
"name": "FadeOutDuration",
"sentence": "the fade-out duration",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"FadeOutDuration"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeOutDuration",
"name": "SetFadeOutDuration",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeOutDuration"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-in easing of the object.",
"fullName": "Fade-in easing",
"functionType": "ExpressionAndCondition",
"group": "Button color tint tween",
"name": "FadeInEasing",
"sentence": "the fade-in easing",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"FadeInEasing"
]
}
]
}
],
"expressionType": {
"supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
"type": "stringWithSelector"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeInEasing",
"name": "SetFadeInEasing",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeInEasing"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the fade-out easing of the object.",
"fullName": "Fade-out easing",
"functionType": "ExpressionAndCondition",
"group": "Button color tint tween",
"name": "FadeOutEasing",
"sentence": "the fade-out easing",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"FadeOutEasing"
]
}
]
}
],
"expressionType": {
"supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]",
"type": "stringWithSelector"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "FadeOutEasing",
"name": "SetFadeOutEasing",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeOutEasing"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "Sprite",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "ButtonStates::ButtonColorTintTween",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "",
"type": "Behavior",
"label": "Button states",
"extraInformation": [
"ButtonStates::ButtonFSM"
],
"choices": [],
"name": "ButtonFSM"
},
{
"value": "",
"type": "Behavior",
"label": "Tween",
"extraInformation": [
"Tween::TweenBehavior"
],
"choices": [],
"name": "Tween"
},
{
"value": "255;255;255",
"type": "Color",
"label": "Idle state color tint",
"group": "Color",
"name": "IdleColorTint"
},
{
"value": "192;192;192",
"type": "Color",
"label": "Focused state color tint",
"description": "The state is Focused when the button is hovered or held outside.",
"group": "Color",
"name": "FocusedColorTint"
},
{
"value": "64;64;64",
"type": "Color",
"label": "Pressed state color tint",
"group": "Color",
"name": "PressedColorTint"
},
{
"value": "0.1",
"type": "Number",
"unit": "Second",
"label": "Fade-in duration",
"group": "Speed",
"name": "FadeInDuration"
},
{
"value": "0.2",
"type": "Number",
"unit": "Second",
"label": "Fade-out duration",
"group": "Speed",
"name": "FadeOutDuration"
},
{
"value": "easeInOutQuad",
"type": "Choice",
"label": "Fade-in easing",
"group": "Speed",
"choices": [
{
"label": "linear",
"value": "linear"
},
{
"label": "easeInQuad",
"value": "easeInQuad"
},
{
"label": "easeOutQuad",
"value": "easeOutQuad"
},
{
"label": "easeInOutQuad",
"value": "easeInOutQuad"
},
{
"label": "easeInCubic",
"value": "easeInCubic"
},
{
"label": "easeOutCubic",
"value": "easeOutCubic"
},
{
"label": "easeInOutCubic",
"value": "easeInOutCubic"
},
{
"label": "easeInQuart",
"value": "easeInQuart"
},
{
"label": "easeOutQuart",
"value": "easeOutQuart"
},
{
"label": "easeInOutQuart",
"value": "easeInOutQuart"
},
{
"label": "easeInQuint",
"value": "easeInQuint"
},
{
"label": "easeOutQuint",
"value": "easeOutQuint"
},
{
"label": "easeInOutQuint",
"value": "easeInOutQuint"
},
{
"label": "easeInOutSine",
"value": "easeInOutSine"
},
{
"label": "easeInExpo",
"value": "easeInExpo"
},
{
"label": "easeOutExpo",
"value": "easeOutExpo"
},
{
"label": "easeInOutExpo",
"value": "easeInOutExpo"
},
{
"label": "easeInCirc",
"value": "easeInCirc"
},
{
"label": "easeOutCirc",
"value": "easeOutCirc"
},
{
"label": "easeInOutCirc",
"value": "easeInOutCirc"
},
{
"label": "easeOutBounce",
"value": "easeOutBounce"
},
{
"label": "easeInBack",
"value": "easeInBack"
},
{
"label": "easeOutBack",
"value": "easeOutBack"
},
{
"label": "easeInOutBack",
"value": "easeInOutBack"
},
{
"label": "elastic",
"value": "elastic"
},
{
"label": "swingFromTo",
"value": "swingFromTo"
},
{
"label": "swingFrom",
"value": "swingFrom"
},
{
"label": "swingTo",
"value": "swingTo"
},
{
"label": "bounce",
"value": "bounce"
},
{
"label": "bouncePast",
"value": "bouncePast"
},
{
"label": "easeFromTo",
"value": "easeFromTo"
},
{
"label": "easeFrom",
"value": "easeFrom"
},
{
"label": "easeTo",
"value": "easeTo"
}
],
"name": "FadeInEasing"
},
{
"value": "easeInOutQuad",
"type": "Choice",
"label": "Fade-out easing",
"group": "Speed",
"choices": [
{
"label": "linear",
"value": "linear"
},
{
"label": "easeInQuad",
"value": "easeInQuad"
},
{
"label": "easeOutQuad",
"value": "easeOutQuad"
},
{
"label": "easeInOutQuad",
"value": "easeInOutQuad"
},
{
"label": "easeInCubic",
"value": "easeInCubic"
},
{
"label": "easeOutCubic",
"value": "easeOutCubic"
},
{
"label": "easeInOutCubic",
"value": "easeInOutCubic"
},
{
"label": "easeInQuart",
"value": "easeInQuart"
},
{
"label": "easeOutQuart",
"value": "easeOutQuart"
},
{
"label": "easeInOutQuart",
"value": "easeInOutQuart"
},
{
"label": "easeInQuint",
"value": "easeInQuint"
},
{
"label": "easeOutQuint",
"value": "easeOutQuint"
},
{
"label": "easeInOutQuint",
"value": "easeInOutQuint"
},
{
"label": "easeInOutSine",
"value": "easeInOutSine"
},
{
"label": "easeInExpo",
"value": "easeInExpo"
},
{
"label": "easeOutExpo",
"value": "easeOutExpo"
},
{
"label": "easeInOutExpo",
"value": "easeInOutExpo"
},
{
"label": "easeInCirc",
"value": "easeInCirc"
},
{
"label": "easeOutCirc",
"value": "easeOutCirc"
},
{
"label": "easeInOutCirc",
"value": "easeInOutCirc"
},
{
"label": "easeOutBounce",
"value": "easeOutBounce"
},
{
"label": "easeInBack",
"value": "easeInBack"
},
{
"label": "easeOutBack",
"value": "easeOutBack"
},
{
"label": "easeInOutBack",
"value": "easeInOutBack"
},
{
"label": "elastic",
"value": "elastic"
},
{
"label": "swingFromTo",
"value": "swingFromTo"
},
{
"label": "swingFrom",
"value": "swingFrom"
},
{
"label": "swingTo",
"value": "swingTo"
},
{
"label": "bounce",
"value": "bounce"
},
{
"label": "bouncePast",
"value": "bouncePast"
},
{
"label": "easeFromTo",
"value": "easeFromTo"
},
{
"label": "easeFrom",
"value": "easeFrom"
},
{
"label": "easeTo",
"value": "easeTo"
}
],
"name": "FadeOutEasing"
},
{
"value": "Idle",
"type": "Choice",
"label": "",
"choices": [
{
"label": "Idle",
"value": "Idle"
},
{
"label": "Focused",
"value": "Focused"
},
{
"label": "Pressed",
"value": "Pressed"
}
],
"hidden": true,
"name": "PreviousState"
}
],
"sharedPropertyDescriptors": []
}
],
"eventsBasedObjects": []
},
{
"author": "",
"category": "Input",
"extensionNamespace": "",
"fullName": "Multitouch joystick and buttons (sprite)",
"gdevelopVersion": "",
"helpPath": "/objects/multitouch-joystick",
"iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMTYiIGN5PSIxNiIgcj0iMTMiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjI4LjQsMTIgMjAsMTIgMjAsMy42ICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMjAsMjguNCAyMCwyMCAyOC40LDIwICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMy42LDIwIDEyLDIwIDEyLDI4LjQgIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIxMiwzLjYgMTIsMTIgMy42LDEyICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIxNiw2IDE2LjcsNyAxNS4zLDcgIi8+DQo8cG9seWdvbiBjbGFzcz0ic3QwIiBwb2ludHM9IjE2LDI2IDE1LjMsMjUgMTYuNywyNSAiLz4NCjxwb2x5Z29uIGNsYXNzPSJzdDAiIHBvaW50cz0iNiwxNiA3LDE1LjMgNywxNi43ICIvPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSIyNiwxNiAyNSwxNi43IDI1LDE1LjMgIi8+DQo8L3N2Zz4NCg==",
"name": "SpriteMultitouchJoystick",
"previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Videogames/Videogames_controller_joystick_arrows_direction.svg",
"shortDescription": "Joysticks or buttons for touchscreens.",
"version": "1.4.0",
"description": [
"Multitouch joysticks can be used the same way as physical gamepads:",
"- 4 or 8 directions",
"- Analogus pads",
"- Player selection",
"- Controls mapping for top-down movement and platformer characters",
"",
"There are ready-to-use joysticks in the asset-store [multitouch joysticks pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=multitouch-joysticks-multitouch-joysticks)."
],
"origin": {
"identifier": "SpriteMultitouchJoystick",
"name": "gdevelop-extension-store"
},
"tags": [
"multitouch",
"joystick",
"thumbstick",
"controller",
"touchscreen",
"twin stick",
"shooter",
"virtual",
"platformer",
"platform",
"top-down"
],
"authorIds": [
"gqDaZjCfevOOxBYkK6zlhtZnXCg1",
"1OgYzWp5UeVPbiWGJwI6vqfgZLC3",
"v0YRpdAnIucZFgiRCCecqVnGKno2",
"IWykYNRvhCZBN3vEgKEbBPOR3Oc2"
],
"dependencies": [],
"globalVariables": [],
"sceneVariables": [
{
"name": "Controllers",
"type": "array",
"children": [
{
"type": "structure",
"children": [
{
"name": "Buttons",
"type": "array",
"children": [
{
"type": "structure",
"children": [
{
"name": "State",
"type": "string",
"value": "Idle"
}
]
}
]
},
{
"name": "Joystick",
"type": "structure",
"children": []
}
]
}
]
}
],
"eventsFunctions": [
{
"description": "Check if a button is pressed on a gamepad.",
"fullName": "Multitouch controller button pressed",
"functionType": "Condition",
"name": "IsButtonPressed",
"sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ is pressed",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "StringVariable"
},
"parameters": [
"Controllers[ControllerIdentifier].Buttons[Button].State",
"=",
"\"Pressed\""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Button name",
"name": "Button",
"supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]",
"type": "string"
}
],
"objectGroups": []
},
{
"description": "Check if a button is released on a gamepad.",
"fullName": "Multitouch controller button released",
"functionType": "Condition",
"name": "IsButtonReleased",
"sentence": "Button _PARAM2_ of multitouch controller _PARAM1_ is released",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "StringVariable"
},
"parameters": [
"Controllers[ControllerIdentifier].Buttons[Button].State",
"=",
"\"Released\""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Button name",
"name": "Button",
"supplementaryInformation": "[\"A\",\"CROSS\",\"B\",\"CIRCLE\",\"X\",\"SQUARE\",\"Y\",\"TRIANGLE\",\"LB\",\"L1\",\"RB\",\"R1\",\"LT\",\"L2\",\"RT\",\"R2\",\"UP\",\"DOWN\",\"LEFT\",\"RIGHT\",\"BACK\",\"SHARE\",\"START\",\"OPTIONS\",\"CLICK_STICK_LEFT\",\"CLICK_STICK_RIGHT\",\"PS_BUTTON\",\"CLICK_TOUCHPAD\"]",
"type": "string"
}
],
"objectGroups": []
},
{
"description": "Change a button state for a multitouch controller.",
"fullName": "Button state",
"functionType": "Action",
"name": "SetButtonState",
"private": true,
"sentence": "Mark _PARAM2_ button as _PARAM3_ for multitouch controller _PARAM1_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetStringVariable"
},
"parameters": [
"Controllers[ControllerIdentifier].Buttons[Button].State",
"=",
"ButtonState"
]
}
]
}
],
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Button name",
"name": "Button",
"type": "string"
},
{
"description": "Button state",
"name": "ButtonState",
"supplementaryInformation": "[\"Idle\",\"Pressed\",\"Released\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Change the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).",
"fullName": "Dead zone radius",
"functionType": "Action",
"name": "SetDeadZone",
"private": true,
"sentence": "Change the dead zone of multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].DeadZone",
"=",
"DeadZoneRadius"
]
}
]
}
],
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"type": "string"
},
{
"description": "Dead zone radius",
"name": "DeadZoneRadius",
"supplementaryInformation": "[]",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Return the dead zone radius of a joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).",
"fullName": "Dead zone radius",
"functionType": "Expression",
"name": "DeadZone",
"private": true,
"sentence": "Change multitouch joystick _PARAM2_ of multitouch controller _PARAM1_ dead zone to _PARAM3_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].DeadZone"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"type": "string"
}
],
"objectGroups": []
},
{
"description": "the direction index (left = 1, bottom = 1, right = 2, top = 3) for an angle (in degrees).",
"fullName": "Angle to 4-way index",
"functionType": "ExpressionAndCondition",
"name": "AngleTo4Way",
"private": true,
"sentence": "The angle _PARAM1_ 4-way index",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"mod(round(Angle * 4 / 360), 4)"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Angle",
"name": "Angle",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "the direction index (left = 1, bottom-left = 1... top-left = 7) for an angle (in degrees).",
"fullName": "Angle to 8-way index",
"functionType": "ExpressionAndCondition",
"name": "AngleTo8Way",
"private": true,
"sentence": "The angle _PARAM1_ 8-way index",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"mod(round(Angle * 8 / 360), 8)"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Angle",
"name": "Angle",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Check if angle is in a given direction.",
"fullName": "Angle 4-way direction",
"functionType": "Condition",
"name": "IsAngleIn4WayDirection",
"private": true,
"sentence": "The angle _PARAM1_ is the 4-way direction _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"Right\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo4Way"
},
"parameters": [
"",
"=",
"0",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"Down\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo4Way"
},
"parameters": [
"",
"=",
"1",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"Left\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo4Way"
},
"parameters": [
"",
"=",
"2",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"Up\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo4Way"
},
"parameters": [
"",
"=",
"3",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Angle",
"name": "Angle",
"type": "expression"
},
{
"description": "Direction",
"name": "Direction",
"supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Check if angle is in a given direction.",
"fullName": "Angle 8-way direction",
"functionType": "Condition",
"name": "IsAngleIn8WayDirection",
"private": true,
"sentence": "The angle _PARAM1_ is the 8-way direction _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"Right\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo8Way"
},
"parameters": [
"",
"=",
"0",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"DownRight\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo8Way"
},
"parameters": [
"",
"=",
"1",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"Down\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo8Way"
},
"parameters": [
"",
"=",
"2",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"DownLeft\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo8Way"
},
"parameters": [
"",
"=",
"3",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"Left\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo8Way"
},
"parameters": [
"",
"=",
"4",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"UpLeft\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo8Way"
},
"parameters": [
"",
"=",
"5",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"Up\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo8Way"
},
"parameters": [
"",
"=",
"6",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::CompareStrings"
},
"parameters": [
"Direction",
"=",
"\"UpRight\""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::AngleTo8Way"
},
"parameters": [
"",
"=",
"7",
"Angle",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Angle",
"name": "Angle",
"type": "expression"
},
{
"description": "Direction",
"name": "Direction",
"supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Check if joystick is pushed in a given direction.",
"fullName": "Joystick pushed in a direction (4-way)",
"functionType": "Condition",
"name": "IsDirectionPushed4Way",
"sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Make sure the joystick has moved from center"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::JoystickForce"
},
"parameters": [
"",
">",
"0",
"ControllerIdentifier",
"JoystickIdentifier",
""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection"
},
"parameters": [
"",
"SpriteMultitouchJoystick::JoystickAngle(ControllerIdentifier, JoystickIdentifier)",
"Direction",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"supplementaryInformation": "[\"Primary\",\"Secondary\"]",
"type": "stringWithSelector"
},
{
"description": "Direction",
"name": "Direction",
"supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Check if joystick is pushed in a given direction.",
"fullName": "Joystick pushed in a direction (8-way)",
"functionType": "Condition",
"name": "IsDirectionPushed8Way",
"sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ is pushed in direction _PARAM3_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Make sure the joystick has moved from center"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::JoystickForce"
},
"parameters": [
"",
">",
"0",
"ControllerIdentifier",
"JoystickIdentifier",
""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection"
},
"parameters": [
"",
"SpriteMultitouchJoystick::JoystickAngle(ControllerIdentifier, JoystickIdentifier)",
"Direction",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"supplementaryInformation": "[\"Primary\",\"Secondary\"]",
"type": "stringWithSelector"
},
{
"description": "Direction",
"name": "Direction",
"supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).",
"fullName": "Joystick force (deprecated)",
"functionType": "ExpressionAndCondition",
"name": "JoystickForce",
"private": true,
"sentence": "Joystick _PARAM2_ of multitouch controller _PARAM1_ force",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"SpriteMultitouchJoystick::StickForce(ControllerIdentifier, JoystickIdentifier)"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"supplementaryInformation": "[\"Primary\",\"Secondary\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "the force of multitouch contoller stick (from 0 to 1).",
"fullName": "Stick force",
"functionType": "ExpressionAndCondition",
"name": "StickForce",
"sentence": "multitouch controller _PARAM1_ _PARAM2_ stick force",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"max(0, Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].Force - SpriteMultitouchJoystick::DeadZone(ControllerIdentifier, JoystickIdentifier)) / (1 - SpriteMultitouchJoystick::DeadZone(ControllerIdentifier, JoystickIdentifier))"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Stick name",
"name": "JoystickIdentifier",
"supplementaryInformation": "[\"Primary\",\"Secondary\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Change the percentage the thumb has been pulled away from the joystick center (Range: 0 to 1).",
"fullName": "Joystick force",
"functionType": "Action",
"name": "SetJoystickForce",
"private": true,
"sentence": "Change the force of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].Force",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"type": "string"
},
{
"description": "Value",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Return the angle the joystick is pointing towards (Range: -180 to 180).",
"fullName": "Joystick angle (deprecated)",
"functionType": "Expression",
"name": "JoystickAngle",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"SpriteMultitouchJoystick::StickAngle(ControllerIdentifier, JoystickIdentifier)"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"supplementaryInformation": "[\"Primary\",\"Secondary\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Return the angle the multitouch controller stick is pointing towards (Range: -180 to 180).",
"fullName": "Stick angle",
"functionType": "Expression",
"name": "StickAngle",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].Angle"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"supplementaryInformation": "[\"Primary\",\"Secondary\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Change the angle the joystick is pointing towards (Range: -180 to 180).",
"fullName": "Joystick angle",
"functionType": "Action",
"name": "SetJoystickAngle",
"private": true,
"sentence": "Change the angle of the joystick _PARAM2_ of multitouch controller _PARAM1_ to _PARAM3_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetNumberVariable"
},
"parameters": [
"Controllers[ControllerIdentifier].Joystick[JoystickIdentifier].Angle",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"type": "string"
},
{
"description": "Value",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Return the multitouch contoller stick force on X axis (from -1 at the left to 1 at the right).",
"fullName": "Stick X force",
"functionType": "Expression",
"name": "StickForceX",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"SpriteMultitouchJoystick::JoystickForce(ControllerIdentifier, JoystickIdentifier) * cos(ToRad(SpriteMultitouchJoystick::JoystickAngle(ControllerIdentifier, JoystickIdentifier)))"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"supplementaryInformation": "[\"Primary\",\"Secondary\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Return the multitouch contoller stick force on Y axis (from -1 at the top to 1 at the bottom).",
"fullName": "Stick Y force",
"functionType": "Expression",
"name": "StickForceY",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"SpriteMultitouchJoystick::JoystickForce(ControllerIdentifier, JoystickIdentifier) * sin(ToRad(SpriteMultitouchJoystick::JoystickAngle(ControllerIdentifier, JoystickIdentifier)))"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier",
"type": "expression"
},
{
"description": "Joystick name",
"name": "JoystickIdentifier",
"supplementaryInformation": "[\"Primary\",\"Secondary\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
}
],
"eventsBasedBehaviors": [
{
"description": "Joystick that can be controlled by interacting with a touchscreen.",
"fullName": "Multitouch Joystick",
"name": "MultitouchJoystick",
"objectType": "",
"private": true,
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "onCreated",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::SetDeadZone"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"DeadZoneRadius",
""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "onDeActivate",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "HasGameJustResumed"
},
"parameters": [
""
]
}
],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Manage touches",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "HasAnyTouchOrMouseStarted"
},
"parameters": [
""
]
}
],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "StartedTouchOrMouseCount()",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
},
{
"type": {
"value": "CollisionPoint"
},
"parameters": [
"Object",
"TouchX(StartedTouchOrMouseId(TouchIndex), Object.Layer(), 0)",
"TouchY(StartedTouchOrMouseId(TouchIndex), Object.Layer(), 0)"
]
}
],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"=",
"StartedTouchOrMouseId(TouchIndex)"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchIndex"
},
"parameters": [
"Object",
"Behavior",
"+",
"1"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Move thumb back to center when not being pressed (acts like a spring on a real controller)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "HasTouchEnded"
},
"parameters": [
"",
"TouchId"
]
}
],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::Reset"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Update joystick position",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"!=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickAngle"
},
"parameters": [
"Object",
"Behavior",
"AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(TouchId, Object.Layer(), 0), TouchY(TouchId, Object.Layer(), 0))",
"AngleBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(TouchId, Object.Layer(), 0), TouchY(TouchId, Object.Layer(), 0))"
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce"
},
"parameters": [
"Object",
"Behavior",
"=",
"clamp(2 * DistanceBetweenPositions(Object.CenterX(), Object.CenterY(), TouchX(TouchId, Object.Layer(), 0), TouchY(TouchId, Object.Layer(), 0)) / Object.Width(), 0, 1)",
""
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the joystick force (from 0 to 1).",
"fullName": "Joystick force",
"functionType": "ExpressionAndCondition",
"name": "JoystickForce",
"sentence": "the joystick force",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"max(0, JoystickForce - DeadZoneRadius) / (1 - DeadZoneRadius)"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "JoystickForce",
"name": "SetJoystickForce",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickForce"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::SetJoystickForce"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"JoystickForce",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Return the angle the joystick is pointing towards (Range: -180 to 180).",
"fullName": "Joystick angle",
"functionType": "Expression",
"name": "JoystickAngle",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"JoystickAngle"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Change the angle the joystick is pointing towards (Range: -180 to 180).",
"fullName": "Joystick angle",
"functionType": "Action",
"name": "SetJoystickAngle",
"private": true,
"sentence": "Change the joystick angle of _PARAM0_ to _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickAngle"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::SetJoystickAngle"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"JoystickAngle",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
},
{
"description": "Angle",
"name": "Value",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Return the stick force on X axis (from -1 at the left to 1 at the right).",
"fullName": "Stick X force",
"functionType": "Expression",
"name": "StickForceX",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Object.Behavior::JoystickForce() * cos(ToRad(Object.Behavior::JoystickAngle()))"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Return the stick force on Y axis (from -1 at the top to 1 at the bottom).",
"fullName": "Stick Y force",
"functionType": "Expression",
"name": "StickForceY",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Object.Behavior::JoystickForce() * sin(ToRad(Object.Behavior::JoystickAngle()))"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if joystick is pushed in a given direction.",
"fullName": "Joystick pushed in a direction (4-way movement)",
"functionType": "Condition",
"name": "IsDirectionPushed4Way",
"sentence": "_PARAM0_ is pushed in direction _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::JoystickForce"
},
"parameters": [
"Object",
"Behavior",
">",
"0",
""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::IsAngleIn4WayDirection"
},
"parameters": [
"",
"JoystickAngle",
"Direction",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
},
{
"description": "Direction",
"name": "Direction",
"supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Check if joystick is pushed in a given direction.",
"fullName": "Joystick pushed in a direction (8-way movement)",
"functionType": "Condition",
"name": "IsDirectionPushed8Way",
"sentence": "_PARAM0_ is pushed in direction _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::JoystickForce"
},
"parameters": [
"Object",
"Behavior",
">",
"0",
""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::IsAngleIn8WayDirection"
},
"parameters": [
"",
"JoystickAngle",
"Direction",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
},
{
"description": "Direction",
"name": "Direction",
"supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Check if a joystick is pressed.",
"fullName": "Joystick pressed",
"functionType": "Condition",
"name": "IsPressed",
"sentence": "Joystick _PARAM0_ is pressed",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::PropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"!=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Reset the joystick values (except for angle, which stays the same)",
"fullName": "Reset",
"functionType": "Action",
"name": "Reset",
"private": true,
"sentence": "Reset the joystick of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickForce"
},
"parameters": [
"Object",
"Behavior",
"=",
"0",
""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the multitouch controller identifier.",
"fullName": "Multitouch controller identifier",
"functionType": "ExpressionAndCondition",
"group": "Multitouch Joystick configuration",
"name": "ControllerIdentifier",
"sentence": "the multitouch controller identifier",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"ControllerIdentifier"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "ControllerIdentifier",
"name": "SetControllerIdentifier",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyControllerIdentifier"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the joystick name.",
"fullName": "Joystick name",
"functionType": "ExpressionAndCondition",
"group": "Multitouch Joystick configuration",
"name": "JoystickIdentifier",
"sentence": "the joystick name",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"JoystickIdentifier"
]
}
]
}
],
"expressionType": {
"type": "string"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "JoystickIdentifier",
"name": "SetJoystickIdentifier",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyJoystickIdentifier"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "the dead zone radius (range: 0 to 1) of the joystick. The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).",
"fullName": "Dead zone radius",
"functionType": "ExpressionAndCondition",
"group": "Multitouch Joystick configuration",
"name": "DeadZoneRadius",
"sentence": "the dead zone radius",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"DeadZoneRadius"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "DeadZoneRadius",
"name": "SetDeadZoneRadius",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetPropertyDeadZoneRadius"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchJoystick",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "1",
"type": "Number",
"label": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier"
},
{
"value": "Primary",
"type": "String",
"label": "Joystick name",
"name": "JoystickIdentifier"
},
{
"value": "0.4",
"type": "Number",
"label": "Dead zone radius (range: 0 to 1)",
"description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)",
"name": "DeadZoneRadius"
},
{
"value": "0",
"type": "Number",
"label": "Joystick angle (range: -180 to 180)",
"hidden": true,
"name": "JoystickAngle"
},
{
"value": "0",
"type": "Number",
"label": "Joystick force (range: 0 to 1)",
"hidden": true,
"name": "JoystickForce"
},
{
"value": "0",
"type": "Number",
"label": "",
"hidden": true,
"name": "TouchId"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "TouchIndex"
}
],
"sharedPropertyDescriptors": []
},
{
"description": "Detect button presses made on a touchscreen.",
"fullName": "Multitouch button",
"name": "MultitouchButton",
"objectType": "",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::IsReleased"
},
"parameters": [
"Object",
"Behavior",
""
]
}
],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased"
},
"parameters": [
"Object",
"Behavior",
"no"
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState"
},
"parameters": [
"Object",
"Behavior",
"\"Idle\"",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "HasAnyTouchOrMouseStarted"
},
"parameters": [
""
]
}
],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "StartedTouchOrMouseCount()",
"conditions": [],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CollisionPoint"
},
"parameters": [
"Object",
"TouchX(StartedTouchOrMouseId(TouchIndex), Object.Layer(), 0)",
"TouchY(StartedTouchOrMouseId(TouchIndex), Object.Layer(), 0)"
]
}
],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"=",
"StartedTouchOrMouseId(TouchIndex)"
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState"
},
"parameters": [
"Object",
"Behavior",
"\"Pressed\"",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchIndex"
},
"parameters": [
"Object",
"Behavior",
"+",
"1"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::IsPressed"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "HasTouchEnded"
},
"parameters": [
"",
"TouchId"
]
}
],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::SetButtonState"
},
"parameters": [
"Object",
"Behavior",
"\"Released\"",
""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyIsReleased"
},
"parameters": [
"Object",
"Behavior",
"yes"
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::SetPropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if button is released.",
"fullName": "Button released",
"functionType": "Condition",
"name": "IsReleased",
"sentence": "Button _PARAM0_ is released",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::PropertyIsReleased"
},
"parameters": [
"Object",
"Behavior"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if button is pressed.",
"fullName": "Button pressed",
"functionType": "Condition",
"name": "IsPressed",
"sentence": "Button _PARAM0_ is pressed",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchButton::PropertyTouchId"
},
"parameters": [
"Object",
"Behavior",
"!=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "Button state",
"functionType": "Action",
"name": "SetButtonState",
"private": true,
"sentence": "Mark the button _PARAM0_ as _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::SetButtonState"
},
"parameters": [
"",
"ControllerIdentifier",
"ButtonIdentifier",
"ButtonState",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::MultitouchButton",
"type": "behavior"
},
{
"description": "Button state",
"name": "ButtonState",
"supplementaryInformation": "[\"Idle\",\"Pressed\",\"Released\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "1",
"type": "Number",
"label": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier"
},
{
"value": "A",
"type": "String",
"label": "Button identifier",
"name": "ButtonIdentifier"
},
{
"value": "0",
"type": "Number",
"label": "TouchID",
"hidden": true,
"name": "TouchId"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "TouchIndex"
},
{
"value": "",
"type": "Boolean",
"label": "Button released",
"hidden": true,
"name": "IsReleased"
}
],
"sharedPropertyDescriptors": []
},
{
"description": "Control a platformer character with a multitouch controller.",
"fullName": "Platformer multitouch controller mapper",
"name": "PlatformerMultitouchMapper",
"objectType": "",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Left\"",
""
]
}
],
"actions": [
{
"type": {
"value": "PlatformBehavior::SimulateLeftKey"
},
"parameters": [
"Object",
"Property"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Right\"",
""
]
}
],
"actions": [
{
"type": {
"value": "PlatformBehavior::SimulateRightKey"
},
"parameters": [
"Object",
"Property"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Up\"",
""
]
}
],
"actions": [
{
"type": {
"value": "PlatformBehavior::SimulateUpKey"
},
"parameters": [
"Object",
"Property"
]
},
{
"type": {
"value": "PlatformBehavior::SimulateLadderKey"
},
"parameters": [
"Object",
"Property"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Down\"",
""
]
}
],
"actions": [
{
"type": {
"value": "PlatformBehavior::SimulateDownKey"
},
"parameters": [
"Object",
"Property"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsButtonPressed"
},
"parameters": [
"",
"ControllerIdentifier",
"JumpButton",
"\"Down\""
]
}
],
"actions": [
{
"type": {
"value": "PlatformBehavior::SimulateJumpKey"
},
"parameters": [
"Object",
"Property"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::PlatformerMultitouchMapper",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "",
"type": "Behavior",
"label": "Platform character behavior",
"extraInformation": [
"PlatformBehavior::PlatformerObjectBehavior"
],
"choices": [],
"name": "Property"
},
{
"value": "1",
"type": "Number",
"label": "Controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier"
},
{
"value": "Primary",
"type": "Choice",
"label": "Joystick name",
"group": "Controls",
"choices": [
{
"label": "Primary",
"value": "Primary"
},
{
"label": "Secondary",
"value": "Secondary"
}
],
"name": "JoystickIdentifier"
},
{
"value": "A",
"type": "String",
"label": "Jump button name",
"group": "Controls",
"name": "JumpButton"
}
],
"sharedPropertyDescriptors": []
},
{
"description": "Control a top-down character with a multitouch controller.",
"fullName": "Top-down multitouch controller mapper",
"name": "TopDownMultitouchMapper",
"objectType": "",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"Analog\""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateStick"
},
"parameters": [
"Object",
"TopDownMovement",
"SpriteMultitouchJoystick::StickAngle(ControllerIdentifier, JoystickIdentifier)",
"SpriteMultitouchJoystick::StickForce(ControllerIdentifier, JoystickIdentifier)"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"360°\""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateStick"
},
"parameters": [
"Object",
"TopDownMovement",
"SpriteMultitouchJoystick::StickAngle(ControllerIdentifier, JoystickIdentifier)",
"sign(SpriteMultitouchJoystick::StickForce(ControllerIdentifier, JoystickIdentifier))"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::TopDownMultitouchMapper::PropertyStickMode"
},
"parameters": [
"Object",
"Behavior",
"=",
"\"8 Directions\""
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "TopDownMovementBehavior::DiagonalsAllowed"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Left\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateLeftKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Right\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateRightKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Up\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateUpKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed4Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Down\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateDownKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "TopDownMovementBehavior::DiagonalsAllowed"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Left\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateLeftKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Right\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateRightKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Up\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateUpKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"Down\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateDownKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"UpLeft\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateUpKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
},
{
"type": {
"value": "TopDownMovementBehavior::SimulateLeftKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"UpRight\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateUpKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
},
{
"type": {
"value": "TopDownMovementBehavior::SimulateRightKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"DownLeft\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateDownKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
},
{
"type": {
"value": "TopDownMovementBehavior::SimulateLeftKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::IsDirectionPushed8Way"
},
"parameters": [
"",
"ControllerIdentifier",
"JoystickIdentifier",
"\"DownRight\"",
""
]
}
],
"actions": [
{
"type": {
"value": "TopDownMovementBehavior::SimulateDownKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
},
{
"type": {
"value": "TopDownMovementBehavior::SimulateRightKey"
},
"parameters": [
"Object",
"TopDownMovement"
]
}
]
}
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SpriteMultitouchJoystick::TopDownMultitouchMapper",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "",
"type": "Behavior",
"label": "Top-down movement behavior",
"extraInformation": [
"TopDownMovementBehavior::TopDownMovementBehavior"
],
"choices": [],
"name": "TopDownMovement"
},
{
"value": "1",
"type": "Number",
"label": "Controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier"
},
{
"value": "Primary",
"type": "Choice",
"label": "Joystick name",
"choices": [
{
"label": "Primary",
"value": "Primary"
},
{
"label": "Secondary",
"value": "Secondary"
}
],
"name": "JoystickIdentifier"
},
{
"value": "Analog",
"type": "Choice",
"label": "Stick mode",
"group": "Controls",
"choices": [
{
"label": "Analog",
"value": "Analog"
},
{
"label": "360°",
"value": "360°"
},
{
"label": "8 Directions",
"value": "8 Directions"
}
],
"name": "StickMode"
}
],
"sharedPropertyDescriptors": []
}
],
"eventsBasedObjects": [
{
"areaMaxX": 64,
"areaMaxY": 64,
"areaMaxZ": 64,
"areaMinX": 0,
"areaMinY": 0,
"areaMinZ": 0,
"defaultName": "Joystick",
"description": "Joystick for touchscreens.",
"fullName": "Multitouch Joystick",
"isUsingLegacyInstancesRenderer": true,
"name": "SpriteMultitouchJoystick",
"objects": [
{
"adaptCollisionMaskAutomatically": false,
"assetStoreId": "",
"name": "Thumb",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [],
"animations": [
{
"name": "Idle",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"timeBetweenFrames": 0.08,
"sprites": []
}
]
}
]
},
{
"adaptCollisionMaskAutomatically": false,
"assetStoreId": "",
"name": "Border",
"type": "Sprite",
"updateIfNotVisible": false,
"variables": [],
"effects": [],
"behaviors": [
{
"name": "MultitouchJoystick",
"type": "SpriteMultitouchJoystick::MultitouchJoystick",
"ControllerIdentifier": 1,
"JoystickIdentifier": "Primary",
"FloatingEnabled": false,
"DeadZoneRadius": 0.4,
"JoystickAngle": 0,
"JoystickForce": 0,
"TouchId": 0,
"TouchIndex": 0
}
],
"animations": [
{
"name": "Idle",
"useMultipleDirections": false,
"directions": [
{
"looping": false,
"timeBetweenFrames": 0.08,
"sprites": []
}
]
}
]
}
],
"objectsFolderStructure": {
"folderName": "__ROOT",
"children": [
{
"objectName": "Thumb"
},
{
"objectName": "Border"
}
]
},
"objectsGroups": [],
"layers": [
{
"ambientLightColorB": 200,
"ambientLightColorG": 200,
"ambientLightColorR": 200,
"camera3DFarPlaneDistance": 10000,
"camera3DFieldOfView": 45,
"camera3DNearPlaneDistance": 3,
"cameraType": "",
"followBaseLayerCamera": false,
"isLightingLayer": false,
"isLocked": false,
"name": "",
"renderingType": "",
"visibility": true,
"cameras": [
{
"defaultSize": true,
"defaultViewport": true,
"height": 0,
"viewportBottom": 1,
"viewportLeft": 0,
"viewportRight": 1,
"viewportTop": 0,
"width": 0
}
],
"effects": []
}
],
"instances": [],
"editionSettings": {},
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "onCreated",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "Create"
},
"parameters": [
"",
"Border",
"0",
"0",
""
]
},
{
"type": {
"value": "Create"
},
"parameters": [
"",
"Thumb",
"0",
"0",
""
]
},
{
"type": {
"value": "ChangePlan"
},
"parameters": [
"Border",
"=",
"1"
]
},
{
"type": {
"value": "ChangePlan"
},
"parameters": [
"Thumb",
"=",
"2"
]
},
{
"type": {
"value": "SetCenter"
},
"parameters": [
"Border",
"=",
"0",
"=",
"0"
]
},
{
"type": {
"value": "SetCenter"
},
"parameters": [
"Thumb",
"=",
"0",
"=",
"0"
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration"
},
"parameters": [
"Object",
""
]
},
{
"type": {
"value": "SetIncludedInParentCollisionMask"
},
"parameters": [
"Thumb",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "doStepPostEvents",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "MettreAutour"
},
"parameters": [
"Thumb",
"Border",
"Border.MultitouchJoystick::JoystickForce() * Border.Width() / 2",
"Border.MultitouchJoystick::JoystickAngle()"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "onHotReloading",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::SpriteMultitouchJoystick::UpdateConfiguration"
},
"parameters": [
"Object",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "Pass the object property values to the behavior.",
"fullName": "Update configuration",
"functionType": "Action",
"name": "UpdateConfiguration",
"private": true,
"sentence": "Update the configuration of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier"
},
"parameters": [
"Border",
"MultitouchJoystick",
"=",
"Object.PropertyControllerIdentifier()",
""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier"
},
"parameters": [
"Border",
"MultitouchJoystick",
"=",
"Object.PropertyJoystickIdentifier()",
""
]
},
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius"
},
"parameters": [
"Border",
"MultitouchJoystick",
"=",
"Object.PropertyDeadZoneRadius()",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "De/activate control of the joystick.",
"fullName": "De/activate control",
"functionType": "Action",
"name": "ActivateControl",
"sentence": "Activate control of _PARAM0_: _PARAM1_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "GetArgumentAsBoolean"
},
"parameters": [
"\"ShouldActivate\""
]
}
],
"actions": [
{
"type": {
"value": "ActivateBehavior"
},
"parameters": [
"Border",
"MultitouchJoystick",
"no"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "GetArgumentAsBoolean"
},
"parameters": [
"\"ShouldActivate\""
]
}
],
"actions": [
{
"type": {
"value": "ActivateBehavior"
},
"parameters": [
"Border",
"MultitouchJoystick",
"yes"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
},
{
"description": "Activate",
"name": "ShouldActivate",
"type": "yesorno"
}
],
"objectGroups": []
},
{
"description": "Check if a stick is pressed.",
"fullName": "Stick pressed",
"functionType": "Condition",
"name": "IsPressed",
"sentence": "Stick _PARAM0_ is pressed",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::IsPressed"
},
"parameters": [
"Border",
"MultitouchJoystick",
"!="
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "the joystick force (from 0 to 1).",
"fullName": "Joystick force (deprecated)",
"functionType": "ExpressionAndCondition",
"name": "JoystickForce",
"private": true,
"sentence": "the joystick force",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Border.MultitouchJoystick::JoystickForce()"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "the strick force (from 0 to 1).",
"fullName": "Stick force",
"functionType": "ExpressionAndCondition",
"name": "StickForce",
"sentence": "the stick force",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Border.MultitouchJoystick::JoystickForce()"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "the stick force on X axis (from -1 at the left to 1 at the right).",
"fullName": "Stick X force",
"functionType": "ExpressionAndCondition",
"name": "StickForceX",
"sentence": "the stick X force",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Border.MultitouchJoystick::StickForceX()"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "the stick force on Y axis (from -1 at the top to 1 at the bottom).",
"fullName": "Stick Y force",
"functionType": "ExpressionAndCondition",
"name": "StickForceY",
"sentence": "the stick Y force",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Border.MultitouchJoystick::StickForceY()"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "Return the angle the joystick is pointing towards (from -180 to 180).",
"fullName": "Joystick angle (deprecated)",
"functionType": "Expression",
"name": "JoystickAngle",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Border.MultitouchJoystick::JoystickAngle()"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "Return the angle the stick is pointing towards (from -180 to 180).",
"fullName": "Stick angle",
"functionType": "Expression",
"name": "StickAngle",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Border.MultitouchJoystick::JoystickAngle()"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "Check if joystick is pushed in a given direction.",
"fullName": "Joystick pushed in a direction (4-way movement)",
"functionType": "Condition",
"name": "IsDirectionPushed4Way",
"sentence": "_PARAM0_ is pushed in direction _PARAM1_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed4Way"
},
"parameters": [
"Border",
"MultitouchJoystick",
"Direction",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
},
{
"description": "Direction",
"name": "Direction",
"supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "Check if joystick is pushed in a given direction.",
"fullName": "Joystick pushed in a direction (8-way movement)",
"functionType": "Condition",
"name": "IsDirectionPushed8Way",
"sentence": "_PARAM0_ is pushed in direction _PARAM1_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::IsDirectionPushed8Way"
},
"parameters": [
"Border",
"MultitouchJoystick",
"Direction",
""
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
},
{
"description": "Direction",
"name": "Direction",
"supplementaryInformation": "[\"Up\",\"Down\",\"Left\",\"Right\",\"UpLeft\",\"UpRight\",\"DownLeft\",\"DownRight\"]",
"type": "stringWithSelector"
}
],
"objectGroups": []
},
{
"description": "the multitouch controller identifier (1, 2, 3, 4...).",
"fullName": "Multitouch controller identifier",
"functionType": "ExpressionAndCondition",
"group": "Multitouch Joystick configuration",
"name": "ControllerIdentifier",
"sentence": "the multitouch controller identifier",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Border.MultitouchJoystick::PropertyControllerIdentifier()"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "ControllerIdentifier",
"name": "SetControllerIdentifier",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetControllerIdentifier"
},
"parameters": [
"Border",
"MultitouchJoystick",
"=",
"Value",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "the joystick name of the object.",
"fullName": "Joystick name",
"functionType": "ExpressionAndCondition",
"group": "Multitouch Joystick configuration",
"name": "JoystickIdentifier",
"sentence": "the joystick name",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnString"
},
"parameters": [
"Border.MultitouchJoystick::PropertyJoystickIdentifier()"
]
}
]
}
],
"expressionType": {
"type": "string"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "JoystickIdentifier",
"name": "SetJoystickIdentifier",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetJoystickIdentifier"
},
"parameters": [
"Border",
"MultitouchJoystick",
"=",
"Value",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"description": "the dead zone radius of the joystick (range: 0 to 1). The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved).",
"fullName": "Dead zone radius",
"functionType": "ExpressionAndCondition",
"group": "Multitouch Joystick configuration",
"name": "DeadZoneRadius",
"sentence": "the dead zone radius",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"Border.MultitouchJoystick::PropertyDeadZoneRadius()"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "DeadZoneRadius",
"name": "SetDeadZoneRadius",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SpriteMultitouchJoystick::MultitouchJoystick::SetDeadZoneRadius"
},
"parameters": [
"Border",
"MultitouchJoystick",
"=",
"Value",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"supplementaryInformation": "SpriteMultitouchJoystick::SpriteMultitouchJoystick",
"type": "object"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "1",
"type": "Number",
"label": "Multitouch controller identifier (1, 2, 3, 4...)",
"name": "ControllerIdentifier"
},
{
"value": "Primary",
"type": "Choice",
"label": "Joystick name",
"choices": [
{
"label": "Primary",
"value": "Primary"
},
{
"label": "Secondary",
"value": "Secondary"
}
],
"name": "JoystickIdentifier"
},
{
"value": "0.4",
"type": "Number",
"label": "Dead zone radius (range: 0 to 1)",
"description": "The deadzone is an area for which movement on sticks won't be taken into account (instead, the stick will be considered as not moved)",
"name": "DeadZoneRadius"
},
{
"value": "Center-center",
"type": "String",
"label": "",
"description": "Only used by the scene editor.",
"extraInformation": [
"Thumb"
],
"choices": [],
"hidden": true,
"name": "ThumbAnchorOrigin"
},
{
"value": "Center-center",
"type": "Number",
"label": "",
"description": "Only used by the scene editor.",
"hidden": true,
"name": "ThumbAnchorTarget"
},
{
"value": "true",
"type": "Boolean",
"label": "",
"description": "Only used by the scene editor.",
"extraInformation": [
"Thumb"
],
"choices": [],
"hidden": true,
"name": "ThumbIsScaledProportionally"
},
{
"value": "Center-center",
"type": "String",
"label": "",
"description": "Only used by the scene editor.",
"hidden": true,
"name": "ParentOrigin"
}
],
"variants": []
}
]
},
{
"author": "",
"category": "Camera",
"extensionNamespace": "",
"fullName": "Smooth Camera",
"gdevelopVersion": "",
"helpPath": "/tutorials/follow-player-with-camera/",
"iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO30NCjwvc3R5bGU+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjQsMTNoLTZjLTEuMSwwLTItMC45LTItMlY1YzAtMS4xLDAuOS0yLDItMmg2YzEuMSwwLDIsMC45LDIsMnY2QzI2LDEyLjEsMjUuMSwxMywyNCwxM3oiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNiw4djEwYzAsMS4xLTAuOSwyLTIsMkg4Yy0xLjEsMC0yLTAuOS0yLTJWOGMwLTEuMSwwLjktMiwyLTJoOCIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjEiIGN5PSI4IiByPSIyIi8+DQo8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSIxMSIgY3k9IjE2IiByPSIxIi8+DQo8cmVjdCB4PSI5IiB5PSI5IiBjbGFzcz0ic3QwIiB3aWR0aD0iNCIgaGVpZ2h0PSIzIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIyMSwyOSAyMSwyOSAxMSwyOSAxMSwyOSAiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjE4LDIwIDE4LDI5IDE0LDI5IDE0LDIwICIvPg0KPHJlY3QgeD0iNyIgeT0iMyIgY2xhc3M9InN0MCIgd2lkdGg9IjQiIGhlaWdodD0iMyIvPg0KPC9zdmc+DQo=",
"name": "SmoothCamera",
"previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Computers and Hardware/Computers and Hardware_camcoder_gopro_go_pro_camera.svg",
"shortDescription": "Smoothly scroll to follow an object.",
"version": "0.3.2",
"description": [
"The camera follows an object according to:",
"- a frame rate independent catch-up speed to make the scrolling from smooth to strong",
"- a maximum speed to do linear following ([open the project online](https://editor.gdevelop.io/?project=example://platformer-with-tilemap)) or slow down the camera when teleporting the object",
"- a follow-free zone to avoid scrolling on small movements",
"- an offset to see further in one direction",
"- an extra delay and catch-up speed to give an impression of speed (useful for dash)",
"- position forecasting and delay to simulate a cameraman response time",
"",
"A platformer dedicated behavior allows to switch of settings when the character is in air or on the floor. This can be used to stabilize the camera when jumping."
],
"origin": {
"identifier": "SmoothCamera",
"name": "gdevelop-extension-store"
},
"tags": [
"camera",
"scrolling",
"follow",
"smooth",
"platformer",
"platform"
],
"authorIds": [
"IWykYNRvhCZBN3vEgKEbBPOR3Oc2"
],
"dependencies": [],
"globalVariables": [],
"sceneVariables": [],
"eventsFunctions": [],
"eventsBasedBehaviors": [
{
"description": "Smoothly scroll to follow an object.",
"fullName": "Smooth Camera",
"name": "SmoothCamera",
"objectType": "",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "onCreated",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Update private properties through setters to check their values and initialize state."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetLeftwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"LeftwardSpeed",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetRightwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"RightwardSpeed",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"UpwardSpeed",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"DownwardSpeed",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetLeftwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"LeftwardSpeedMax",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetRightwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"RightwardSpeedMax",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"UpwardSpeedMax",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"DownwardSpeedMax",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaLeft"
},
"parameters": [
"Object",
"Behavior",
"FollowFreeAreaLeft",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaRight"
},
"parameters": [
"Object",
"Behavior",
"FollowFreeAreaRight",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop"
},
"parameters": [
"Object",
"Behavior",
"FollowFreeAreaTop",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom"
},
"parameters": [
"Object",
"Behavior",
"FollowFreeAreaBottom",
"log(1 - )"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelay"
},
"parameters": [
"Object",
"Behavior",
"=",
"CameraDelay"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::PropertyIsCalledManually"
},
"parameters": [
"Object",
"Behavior"
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::DoMoveCameraCloser"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Move the camera closer to the object. This action must be called after the object has moved for the frame.",
"fullName": "Move the camera closer",
"functionType": "Action",
"name": "MoveCameraCloser",
"sentence": "Move the camera closer to _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "The camera following is called with an action, the call from doStepPreEvents must be disabled to avoid to do it twice."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIsCalledManually"
},
"parameters": [
"Object",
"Behavior",
"yes"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::DoMoveCameraCloser"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Move the camera closer to the object.",
"fullName": "Do move the camera closer",
"functionType": "Action",
"name": "DoMoveCameraCloser",
"private": true,
"sentence": "Do move the camera closer _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Delaying and forecasting can be used at the same time.\nForecasting only use the positions that are older than the one used for delaying.\nThe behavior uses a position history that is split in 2 arrays:\n- one for delaying the position (from TimeFromStart to TimeFromStart - CamearDelay)\n- one for forecasting the position (from TimeFromStart - CamearDelay to TimeFromStart - CamearDelay - ForecastHistoryDuration"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::UpdateDelayedPosition"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::UpdateForecastedPosition"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "At each frame, the camera must catchup the target by a given ratio (speed)\ncameraX(t) - targetX = (cameraX(t - 1) - targetX) * speed\n\nThe frame rate must not impact on the catch-up speed, we don't want a speed in ratio per frame but a speed ratio per second, like this:\ncameraX(t) - targetX = (cameraX(t - 1s) - targetX) * speed\n\nOk, but we still need to process each frame, we can use a exponent for this:\ncameraX(t) - targetX = (cameraX(t - timeDelta) - targetX) * speed^timeDelta\ncameraX(t) = targetX + (cameraX(t - timeDelta) - targetX) * exp(timeDelta * ln(speed))\n\npow is probably more efficient than precalculated log if the speed is changed continuously but this might be rare enough."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyFollowOnX"
},
"parameters": [
"Object",
"Behavior"
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyOldX"
},
"parameters": [
"Object",
"Behavior",
"=",
"CameraX(Object.Layer(), 0)"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraX"
},
"parameters": [
"",
">",
"Object.Behavior::FreeAreaRight()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraX"
},
"parameters": [
"",
"=",
"Object.Behavior::FreeAreaRight()\n+ (CameraX(Object.Layer(), 0) - Object.Behavior::FreeAreaRight())\n* exp(TimeDelta() * LogLeftwardSpeed)",
"Object.Layer()",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraX"
},
"parameters": [
"",
"<",
"OldX - LeftwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraX"
},
"parameters": [
"",
"=",
"OldX - LeftwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraX"
},
"parameters": [
"",
"<",
"Object.Behavior::FreeAreaLeft()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraX"
},
"parameters": [
"",
"=",
"Object.Behavior::FreeAreaLeft()\n+ (CameraX(Object.Layer(), 0) - Object.Behavior::FreeAreaLeft())\n* exp(TimeDelta() * LogRightwardSpeed)",
"Object.Layer()",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraX"
},
"parameters": [
"",
">",
"OldX + RightwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraX"
},
"parameters": [
"",
"=",
"OldX + RightwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyFollowOnY"
},
"parameters": [
"Object",
"Behavior"
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyOldY"
},
"parameters": [
"Object",
"Behavior",
"=",
"CameraY(Object.Layer(), 0)"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraY"
},
"parameters": [
"",
">",
"Object.Behavior::FreeAreaBottom()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraY"
},
"parameters": [
"",
"=",
"Object.Behavior::FreeAreaBottom()\n+ (CameraY(Object.Layer(), 0) - Object.Behavior::FreeAreaBottom())\n* exp(TimeDelta() * LogUpwardSpeed)",
"Object.Layer()",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraY"
},
"parameters": [
"",
"<",
"OldY - UpwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraY"
},
"parameters": [
"",
"=",
"OldY - UpwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraY"
},
"parameters": [
"",
"<",
"Object.Behavior::FreeAreaTop()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraY"
},
"parameters": [
"",
"=",
"Object.Behavior::FreeAreaTop()\n+ (CameraY(Object.Layer(), 0) - Object.Behavior::FreeAreaTop())\n* exp(TimeDelta() * LogDownwardSpeed)",
"Object.Layer()",
"0"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "CameraY"
},
"parameters": [
"",
">",
"OldY + DownwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetCameraY"
},
"parameters": [
"",
"=",
"OldY + DownwardSpeedMax * TimeDelta()",
"Object.Layer()",
"0"
]
}
]
}
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Delay the camera according to a maximum speed and catch up the delay.",
"fullName": "Wait and catch up",
"functionType": "Action",
"name": "WaitAndCatchUp",
"sentence": "Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Maybe the catch-up show be done in constant pixel speed instead of constant time speed."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyWaitingEnd"
},
"parameters": [
"Object",
"Behavior",
"=",
"TimeFromStart() + WaitingDuration"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyWaitingSpeedXMax"
},
"parameters": [
"Object",
"Behavior",
"=",
"WaitingSpeedXMax"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyWaitingSpeedYMax"
},
"parameters": [
"Object",
"Behavior",
"=",
"WaitingSpeedYMax"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelayCatchUpDuration"
},
"parameters": [
"Object",
"Behavior",
"=",
"CatchUpDuration"
]
}
]
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Wait and catch up\"",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Waiting duration (in seconds)",
"name": "WaitingDuration",
"type": "expression"
},
{
"description": "Waiting maximum camera target speed X",
"name": "WaitingSpeedXMax",
"type": "expression"
},
{
"description": "Waiting maximum camera target speed Y",
"name": "WaitingSpeedYMax",
"type": "expression"
},
{
"description": "Catch up duration (in seconds)",
"name": "CatchUpDuration",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Draw the targeted and actual camera position.",
"fullName": "Draw debug",
"functionType": "Action",
"name": "DrawDebug",
"sentence": "Draw targeted and actual camera position for _PARAM0_ on _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::FillOpacity"
},
"parameters": [
"ShapePainter",
"=",
"0"
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Path used by the forecasting",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "Egal"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)",
">",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
},
{
"type": {
"value": "PrimitiveDrawing::OutlineColor"
},
"parameters": [
"ShapePainter",
"\"245;166;35\""
]
},
{
"type": {
"value": "PrimitiveDrawing::BeginFillPath"
},
"parameters": [
"ShapePainter",
"Object.Variable(__SmoothCamera.ForecastHistoryX[0])",
"Object.Variable(__SmoothCamera.ForecastHistoryY[0])"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)",
"conditions": [],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::PathLineTo"
},
"parameters": [
"ShapePainter",
"Object.Variable(__SmoothCamera.ForecastHistoryX[Index])",
"Object.Variable(__SmoothCamera.ForecastHistoryY[Index])"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"+",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::EndFillPath"
},
"parameters": [
"ShapePainter"
]
}
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Follow-free area.",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaLeft"
},
"parameters": [
"Object",
"Behavior",
"!=",
"0"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaRight"
},
"parameters": [
"Object",
"Behavior",
"!=",
"0"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaTop"
},
"parameters": [
"Object",
"Behavior",
"!=",
"0"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaBottom"
},
"parameters": [
"Object",
"Behavior",
"!=",
"0"
]
}
]
}
],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::OutlineColor"
},
"parameters": [
"ShapePainter",
"\"126;211;33\""
]
},
{
"type": {
"value": "PrimitiveDrawing::Rectangle"
},
"parameters": [
"ShapePainter",
"Object.Behavior::FreeAreaLeft() - 1",
"Object.Behavior::FreeAreaTop() - 1",
"Object.Behavior::FreeAreaRight() + 1",
"Object.Behavior::FreeAreaBottom() + 1"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Linear regression vector used by the forecasting.",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::OutlineColor"
},
"parameters": [
"ShapePainter",
"\"208;2;27\""
]
},
{
"type": {
"value": "PrimitiveDrawing::LineV2"
},
"parameters": [
"ShapePainter",
"ProjectedOldestX",
"ProjectedOldestY",
"ProjectedNewestX",
"ProjectedNewestY",
"1"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Targeted and actual camera position",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "PrimitiveDrawing::Circle"
},
"parameters": [
"ShapePainter",
"ForecastedX",
"ForecastedY",
"3"
]
},
{
"type": {
"value": "PrimitiveDrawing::LineV2"
},
"parameters": [
"ShapePainter",
"CameraX(Object.Layer(), 0)",
"CameraY(Object.Layer(), 0) - 4",
"CameraX(Object.Layer(), 0)",
"CameraY(Object.Layer(), 0) + 4",
"1"
]
},
{
"type": {
"value": "PrimitiveDrawing::LineV2"
},
"parameters": [
"ShapePainter",
"CameraX(Object.Layer(), 0) - 4",
"CameraY(Object.Layer(), 0)",
"CameraX(Object.Layer(), 0) + 4",
"CameraY(Object.Layer(), 0)",
"1"
]
}
]
}
],
"parameters": []
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Shape painter",
"name": "ShapePainter",
"supplementaryInformation": "PrimitiveDrawing::Drawer",
"type": "objectList"
}
],
"objectGroups": []
},
{
"description": "Enable or disable the following on X axis.",
"fullName": "Follow on X",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowOnX",
"sentence": "The camera follows _PARAM0_ on X axis: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnX"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "GetArgumentAsBoolean"
},
"parameters": [
"\"FollowOnX\""
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnX"
},
"parameters": [
"Object",
"Behavior",
"yes"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow on X axis",
"name": "FollowOnX",
"type": "yesorno"
}
],
"objectGroups": []
},
{
"description": "Enable or disable the following on Y axis.",
"fullName": "Follow on Y",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowOnY",
"sentence": "The camera follows _PARAM0_ on Y axis: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnY"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "GetArgumentAsBoolean"
},
"parameters": [
"\"FollowOnY\""
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnY"
},
"parameters": [
"Object",
"Behavior",
"yes"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow on Y axis",
"name": "FollowOnY",
"type": "yesorno"
}
],
"objectGroups": []
},
{
"description": "Change the camera follow free area right border.",
"fullName": "Follow free area right border",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowFreeAreaRight",
"sentence": "Change the camera follow free area right border of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop"
},
"parameters": [
"Object",
"Behavior",
"=",
"max(0, SetFollowFreeAreaRight)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow free area right border",
"name": "SetFollowFreeAreaRight",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera follow free area left border.",
"fullName": "Follow free area left border",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowFreeAreaLeft",
"sentence": "Change the camera follow free area left border of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop"
},
"parameters": [
"Object",
"Behavior",
"=",
"max(0, SetFollowFreeAreaLeft)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow free area left border",
"name": "SetFollowFreeAreaLeft",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera follow free area top border.",
"fullName": "Follow free area top border",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowFreeAreaTop",
"sentence": "Change the camera follow free area top border of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop"
},
"parameters": [
"Object",
"Behavior",
"=",
"max(0, FollowFreeAreaTop)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow free area top border",
"name": "FollowFreeAreaTop",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera follow free area bottom border.",
"fullName": "Follow free area bottom border",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetFollowFreeAreaBottom",
"sentence": "Change the camera follow free area bottom border of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaBottom"
},
"parameters": [
"Object",
"Behavior",
"=",
"max(0, SetFollowFreeAreaBottom)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Follow free area bottom border",
"name": "SetFollowFreeAreaBottom",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera leftward maximum speed (in pixels per second).",
"fullName": "Leftward maximum speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetLeftwardSpeedMax",
"sentence": "Change the camera leftward maximum speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"=",
"max(0, Speed)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Leftward maximum speed (in ratio per second)",
"name": "Speed",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera rightward maximum speed (in pixels per second).",
"fullName": "Rightward maximum speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetRightwardSpeedMax",
"sentence": "Change the camera rightward maximum speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"=",
"max(0, Speed)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Rightward maximum speed (in pixels per second)",
"name": "Speed",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera upward maximum speed (in pixels per second).",
"fullName": "Upward maximum speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetUpwardSpeedMax",
"sentence": "Change the camera upward maximum speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyUpwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"=",
"max(0, Speed)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Upward maximum speed (in pixels per second)",
"name": "Speed",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera downward maximum speed (in pixels per second).",
"fullName": "Downward maximum speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetDownwardSpeedMax",
"sentence": "Change the camera downward maximum speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyDownwardSpeedMax"
},
"parameters": [
"Object",
"Behavior",
"=",
"max(0, Speed)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Downward maximum speed (in pixels per second)",
"name": "Speed",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera leftward catch-up speed (in ratio per second).",
"fullName": "Leftward catch-up speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetLeftwardSpeed",
"sentence": "Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"=",
"clamp(0, 1, LeftwardSpeed)"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyLogLeftwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"=",
"log(1 - LeftwardSpeed)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Leftward catch-up speed (in ratio per second)",
"name": "LeftwardSpeed",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera rightward catch-up speed (in ratio per second).",
"fullName": "Rightward catch-up speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetRightwardSpeed",
"sentence": "Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyRightwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"=",
"clamp(0, 1, RightwardSpeed)"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyLogRightwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"=",
"log(1 - RightwardSpeed)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Rightward catch-up speed (in ratio per second)",
"name": "RightwardSpeed",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera downward catch-up speed (in ratio per second).",
"fullName": "Downward catch-up speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetDownwardSpeed",
"sentence": "Change the camera downward catch-up speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyDownwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"=",
"clamp(0, 1, DownwardSpeed)"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyLogDownwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"=",
"log(1 - DownwardSpeed)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Downward catch-up speed (in ratio per second)",
"name": "DownwardSpeed",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera upward catch-up speed (in ratio per second).",
"fullName": "Upward catch-up speed",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetUpwardSpeed",
"sentence": "Change the camera upward catch-up speed of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyUpwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"=",
"clamp(0, 1, UpwardSpeed)"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyLogUpwardSpeed"
},
"parameters": [
"Object",
"Behavior",
"=",
"log(1 - UpwardSpeed)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Upward catch-up speed (in ratio per second)",
"name": "UpwardSpeed",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "the camera offset on X axis of the object. This is not the current difference between the object and the camera position.",
"fullName": "Camera offset X",
"functionType": "ExpressionAndCondition",
"group": "Camera configuration",
"name": "OffsetX",
"sentence": "the camera offset on X axis",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"CameraOffsetX"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "OffsetX",
"name": "SetOffsetXOp",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyCameraOffsetX"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Change the camera offset on X axis of an object.",
"fullName": "Camera Offset X",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetOffsetX",
"private": true,
"sentence": "Change the camera offset on X axis of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Deprecated use SetOffsetXOp instead."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetOffsetXOp"
},
"parameters": [
"Object",
"Behavior",
"=",
"CameraOffsetX",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Camera offset X",
"name": "CameraOffsetX",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.",
"fullName": "Camera offset Y",
"functionType": "ExpressionAndCondition",
"group": "Camera configuration",
"name": "OffsetY",
"sentence": "the camera offset on Y axis",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"CameraOffsetY"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"fullName": "",
"functionType": "ActionWithOperator",
"getterName": "OffsetY",
"name": "SetOffsetYOp",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Deprecated use SetOffsetYOp instead."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyCameraOffsetY"
},
"parameters": [
"Object",
"Behavior",
"=",
"Value"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Change the camera offset on Y axis of an object.",
"fullName": "Camera Offset Y",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetOffsetY",
"private": true,
"sentence": "Change the camera offset on Y axis of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetOffsetYOp"
},
"parameters": [
"Object",
"Behavior",
"=",
"CameraOffsetY",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Camera offset Y",
"name": "CameraOffsetY",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera forecast time (in seconds).",
"fullName": "Forecast time",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetForecastTime",
"sentence": "Change the camera forecast time of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastTime"
},
"parameters": [
"Object",
"Behavior",
"=",
"min(0, ForecastTime)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Forecast time",
"name": "ForecastTime",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Change the camera delay (in seconds).",
"fullName": "Camera delay",
"functionType": "Action",
"group": "Camera configuration",
"name": "SetCameraDelay",
"sentence": "Change the camera delay of _PARAM0_: _PARAM2_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelay"
},
"parameters": [
"Object",
"Behavior",
"=",
"min(0, CameraDelay)"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Camera delay",
"name": "CameraDelay",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Return follow free area left border X.",
"fullName": "Free area left",
"functionType": "Expression",
"group": "Private",
"name": "FreeAreaLeft",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"ForecastedX + CameraOffsetX - FollowFreeAreaLeft"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Return follow free area right border X.",
"fullName": "Free area right",
"functionType": "Expression",
"group": "Private",
"name": "FreeAreaRight",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"ForecastedX + CameraOffsetX + FollowFreeAreaRight"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Return follow free area bottom border Y.",
"fullName": "Free area bottom",
"functionType": "Expression",
"group": "Private",
"name": "FreeAreaBottom",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"ForecastedY + CameraOffsetY + FollowFreeAreaBottom"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Return follow free area top border Y.",
"fullName": "Free area top",
"functionType": "Expression",
"group": "Private",
"name": "FreeAreaTop",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"ForecastedY + CameraOffsetY - FollowFreeAreaTop"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Update delayed position and delayed history. This is called in doStepPreEvents.",
"fullName": "Update delayed position",
"functionType": "Action",
"group": "Private",
"name": "UpdateDelayedPosition",
"private": true,
"sentence": "Update delayed position and delayed history of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Add the previous position to have enough (2) positions to evaluate the extra delay for waiting mode."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "Egal"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ObjectTime)",
"=",
"0"
]
}
],
"actions": [
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime",
"TimeFromStart()"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectX",
"DelayedCenterX"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectY",
"DelayedCenterY"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Use the object center when no delay is asked."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX"
},
"parameters": [
"Object",
"Behavior",
"=",
"Object.CenterX()"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY"
},
"parameters": [
"Object",
"Behavior",
"=",
"Object.CenterY()"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::IsDelayed"
},
"parameters": [
"Object",
"Behavior",
""
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::AddForecastHistoryPosition"
},
"parameters": [
"Object",
"Behavior",
"TimeFromStart()",
"Object.CenterX()",
"Object.CenterY()",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::IsDelayed"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
}
]
}
],
"actions": [
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime",
"TimeFromStart()"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectX",
"Object.CenterX()"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectY",
"Object.CenterY()"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Remove history entries that are too old to be useful for delaying and pass it to the history for forecasting."
},
{
"infiniteLoopWarning": true,
"type": "BuiltinCommonInstructions::While",
"whileConditions": [
{
"type": {
"value": "Egal"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ObjectTime)",
">=",
"2"
]
},
{
"type": {
"value": "VarObjet"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime[1]",
"<",
"TimeFromStart() - Object.Behavior::CurrentDelay()"
]
}
],
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::AddForecastHistoryPosition"
},
"parameters": [
"Object",
"Behavior",
"Object.Variable(__SmoothCamera.ObjectTime[0])",
"Object.Variable(__SmoothCamera.ObjectX[0])",
"Object.Variable(__SmoothCamera.ObjectY[0])",
""
]
},
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime",
"0"
]
},
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectX",
"0"
]
},
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectY",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Don't move the camera if there is not enough history."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX"
},
"parameters": [
"Object",
"Behavior",
"=",
"Object.Variable(__SmoothCamera.ObjectX[0])"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY"
},
"parameters": [
"Object",
"Behavior",
"=",
"Object.Variable(__SmoothCamera.ObjectY[0])"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "Egal"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ObjectTime)",
">=",
"2"
]
},
{
"type": {
"value": "VarObjet"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime[0]",
"<",
"TimeFromStart() - Object.Behavior::CurrentDelay()"
]
}
],
"actions": [],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Add the extra delay that could be needed to respect the speed limit in waiting mode.\n\nspeedRatio = min(speedMaxX / historySpeedX, speedMaxY / historySpeedY)\ndelay += min(0, timeDelta * (1 - speedRatio))"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyCameraExtraDelay"
},
"parameters": [
"Object",
"Behavior",
"+",
"max(0, TimeDelta() * (1 - min(WaitingSpeedXMax * abs(Object.Variable(__SmoothCamera.ObjectX[1]) - Object.Variable(__SmoothCamera.ObjectX[0])), WaitingSpeedYMax * abs(Object.Variable(__SmoothCamera.ObjectY[1]) - Object.Variable(__SmoothCamera.ObjectY[0]))) / (Object.Variable(__SmoothCamera.ObjectTime[1]) - Object.Variable(__SmoothCamera.ObjectTime[0]))))"
]
}
],
"events": [
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Extra delay: \" + ToString(CameraExtraDelay)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "The time with delay is now between the first 2 indexes"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX"
},
"parameters": [
"Object",
"Behavior",
"=",
"lerp(Object.Variable(__SmoothCamera.ObjectX[1]), Object.Variable(__SmoothCamera.ObjectX[0]), ((TimeFromStart() - Object.Behavior::CurrentDelay()) - Object.Variable(__SmoothCamera.ObjectTime[1])) / (Object.Variable(__SmoothCamera.ObjectTime[0]) - Object.Variable(__SmoothCamera.ObjectTime[1])))"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY"
},
"parameters": [
"Object",
"Behavior",
"=",
"lerp(Object.Variable(__SmoothCamera.ObjectY[1]), Object.Variable(__SmoothCamera.ObjectY[0]), ((TimeFromStart() - Object.Behavior::CurrentDelay()) - Object.Variable(__SmoothCamera.ObjectTime[1])) / (Object.Variable(__SmoothCamera.ObjectTime[0]) - Object.Variable(__SmoothCamera.ObjectTime[1])))"
]
}
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::IsDelayed"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
}
],
"actions": [
{
"type": {
"value": "ObjectVariableClearChildren"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectTime"
]
},
{
"type": {
"value": "ObjectVariableClearChildren"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectX"
]
},
{
"type": {
"value": "ObjectVariableClearChildren"
},
"parameters": [
"Object",
"__SmoothCamera.ObjectY"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "BuiltinCommonInstructions::Once"
},
"parameters": []
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelayCatchUpSpeed"
},
"parameters": [
"Object",
"Behavior",
"=",
"CameraExtraDelay / CameraDelayCatchUpDuration"
]
}
],
"events": [
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Start to catch up\"",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "SmoothCamera::SmoothCamera::IsWaiting"
},
"parameters": [
"Object",
"Behavior",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyCameraExtraDelay"
},
"parameters": [
"Object",
"Behavior",
">",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyCameraExtraDelay"
},
"parameters": [
"Object",
"Behavior",
"=",
"max(0, CameraExtraDelay -CameraDelayCatchUpSpeed * TimeDelta())"
]
}
],
"events": [
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Catching up delay: \" + ToString(CameraExtraDelay)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if the camera following target is delayed from the object.",
"fullName": "Camera is delayed",
"functionType": "Condition",
"name": "IsDelayed",
"private": true,
"sentence": "The camera of _PARAM0_ is delayed",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "Egal"
},
"parameters": [
"Object.Behavior::CurrentDelay()",
">",
"0"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Return the current camera delay.",
"fullName": "Current delay",
"functionType": "Expression",
"name": "CurrentDelay",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"CameraDelay + CameraExtraDelay"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Check if the camera following is waiting at a reduced speed.",
"fullName": "Camera is waiting",
"functionType": "Condition",
"name": "IsWaiting",
"private": true,
"sentence": "The camera of _PARAM0_ is waiting",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyWaitingEnd"
},
"parameters": [
"Object",
"Behavior",
">",
"TimeFromStart()"
]
}
],
"actions": [
{
"type": {
"value": "SetReturnBoolean"
},
"parameters": [
"True"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.",
"fullName": "Add forecast history position",
"functionType": "Action",
"group": "Private",
"name": "AddForecastHistoryPosition",
"private": true,
"sentence": "Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyForecastHistoryDuration"
},
"parameters": [
"Object",
"Behavior",
">",
"0"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyForecastTime"
},
"parameters": [
"Object",
"Behavior",
">",
"0"
]
}
]
}
],
"actions": [
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryTime",
"Time"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryX",
"ObjectX"
]
},
{
"type": {
"value": "ObjectVariablePushNumber"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryY",
"ObjectY"
]
}
],
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Remove history entries that are too old to be useful.\nKeep at least 2 positions because no forecast can be done with less positions."
},
{
"infiniteLoopWarning": true,
"type": "BuiltinCommonInstructions::While",
"whileConditions": [
{
"type": {
"value": "Egal"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)",
">=",
"3"
]
},
{
"type": {
"value": "VarObjet"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryTime[0]",
"<",
"TimeFromStart() - CameraDelay - CameraExtraDelay - ForecastHistoryDuration"
]
}
],
"conditions": [],
"actions": [
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryTime",
"0"
]
},
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryX",
"0"
]
},
{
"type": {
"value": "ObjectVariableRemoveAt"
},
"parameters": [
"Object",
"__SmoothCamera.ForecastHistoryY",
"0"
]
}
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "Time",
"name": "Time",
"type": "expression"
},
{
"description": "Object X",
"name": "ObjectX",
"type": "expression"
},
{
"description": "Object Y",
"name": "ObjectY",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Update forecasted position. This is called in doStepPreEvents.",
"fullName": "Update forecasted position",
"functionType": "Action",
"group": "Private",
"name": "UpdateForecastedPosition",
"private": true,
"sentence": "Update forecasted position of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastedX"
},
"parameters": [
"Object",
"Behavior",
"=",
"DelayedCenterX"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY"
},
"parameters": [
"Object",
"Behavior",
"=",
"DelayedCenterY"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Simple linear regression\ny = A * x + B\n\nA = Covariance / VarianceX\nB = MeanY - A * MeanX\n\nNote than we could use only one position every N positions to reduce the process time,\nbut if we really need efficient process JavaScript and circular queues are a must."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "Egal"
},
"parameters": [
"Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)",
">=",
"2"
]
},
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyForecastHistoryDuration"
},
"parameters": [
"Object",
"Behavior",
">",
"0"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::PropertyForecastTime"
},
"parameters": [
"Object",
"Behavior",
">",
"0"
]
}
]
}
],
"actions": [],
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Mean X",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX"
},
"parameters": [
"Object",
"Behavior",
"+",
"Object.Variable(__SmoothCamera.ForecastHistoryX[Index])"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"+",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX"
},
"parameters": [
"Object",
"Behavior",
"/",
"Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)"
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Mean Y",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY"
},
"parameters": [
"Object",
"Behavior",
"+",
"Object.Variable(__SmoothCamera.ForecastHistoryY[Index])"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"+",
"1"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY"
},
"parameters": [
"Object",
"Behavior",
"/",
"Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)"
]
}
]
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Mean: \" + ToString(ForecastHistoryMeanX) + \" \" + ToString(ForecastHistoryMeanY)",
"",
""
]
}
]
}
],
"parameters": []
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Variance and Covariance",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "VarianceX = sum((X[i] - MeanX)²)\nVarianceY = sum((Y[i] - MeanY)²)\nCovariance = sum((X[i] - MeanX) * (Y[i] - MeanY))"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceX"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceY"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryCovariance"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"=",
"0"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Repeat",
"repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceX"
},
"parameters": [
"Object",
"Behavior",
"+",
"pow(Object.Variable(__SmoothCamera.ForecastHistoryX[Index]) - ForecastHistoryMeanX, 2)"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceY"
},
"parameters": [
"Object",
"Behavior",
"+",
"pow(Object.Variable(__SmoothCamera.ForecastHistoryY[Index]) - ForecastHistoryMeanY, 2)"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryCovariance"
},
"parameters": [
"Object",
"Behavior",
"+",
"(Object.Variable(__SmoothCamera.ForecastHistoryX[Index]) - ForecastHistoryMeanX)\n*\n(Object.Variable(__SmoothCamera.ForecastHistoryY[Index]) - ForecastHistoryMeanY)"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"+",
"1"
]
}
]
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Variances: \" + ToString(ForecastHistoryVarianceX) + \" \" + ToString(ForecastHistoryVarianceY) + \" \" + ToString(ForecastHistoryCovariance)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "Egal"
},
"parameters": [
"abs(ForecastHistoryVarianceX)",
"<",
"1"
]
},
{
"type": {
"value": "Egal"
},
"parameters": [
"abs(ForecastHistoryVarianceY)",
"<",
"1"
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastedX"
},
"parameters": [
"Object",
"Behavior",
"=",
"DelayedCenterX"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY"
},
"parameters": [
"Object",
"Behavior",
"=",
"DelayedCenterY"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "Egal"
},
"parameters": [
"abs(ForecastHistoryVarianceX)",
">=",
"1"
]
},
{
"type": {
"value": "Egal"
},
"parameters": [
"abs(ForecastHistoryVarianceY)",
">=",
"1"
]
}
]
}
],
"actions": [],
"events": [
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Linear function parameters",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "y = A * x + B\n\nA = Covariance / VarianceX\nB = MeanY - A * MeanX"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "Egal"
},
"parameters": [
"abs(ForecastHistoryVarianceX)",
">=",
"abs(ForecastHistoryVarianceY)"
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearA"
},
"parameters": [
"Object",
"Behavior",
"=",
"ForecastHistoryCovariance / ForecastHistoryVarianceX"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearB"
},
"parameters": [
"Object",
"Behavior",
"=",
"ForecastHistoryMeanY - ForecastHistoryLinearA * ForecastHistoryMeanX"
]
}
],
"events": [
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Linear: \" + ToString(ForecastHistoryLinearA) + \" \" + ToString(ForecastHistoryLinearB)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Projection",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::ProjectHistoryEnds"
},
"parameters": [
"Object",
"Behavior",
"Object.Variable(__SmoothCamera.ForecastHistoryX[0])",
"Object.Variable(__SmoothCamera.ForecastHistoryY[0])",
"Object.Variable(__SmoothCamera.ForecastHistoryX[Object.VariableChildCount(__SmoothCamera.ForecastHistoryX) - 1])",
"Object.Variable(__SmoothCamera.ForecastHistoryY[Object.VariableChildCount(__SmoothCamera.ForecastHistoryY) - 1])",
""
]
}
]
}
],
"parameters": []
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Axis permutation to avoid a ratio between 2 numbers near 0."
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "Egal"
},
"parameters": [
"abs(ForecastHistoryVarianceX)",
"<",
"abs(ForecastHistoryVarianceY)"
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearA"
},
"parameters": [
"Object",
"Behavior",
"=",
"ForecastHistoryCovariance / ForecastHistoryVarianceY"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearB"
},
"parameters": [
"Object",
"Behavior",
"=",
"ForecastHistoryMeanX - ForecastHistoryLinearA * ForecastHistoryMeanY"
]
}
],
"events": [
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Linear: \" + ToString(ForecastHistoryLinearA) + \" \" + ToString(ForecastHistoryLinearB)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Projection",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::ProjectHistoryEnds"
},
"parameters": [
"Object",
"Behavior",
"Object.Variable(__SmoothCamera.ForecastHistoryY[0])",
"Object.Variable(__SmoothCamera.ForecastHistoryX[0])",
"Object.Variable(__SmoothCamera.ForecastHistoryY[Object.VariableChildCount(__SmoothCamera.ForecastHistoryY) - 1])",
"Object.Variable(__SmoothCamera.ForecastHistoryX[Object.VariableChildCount(__SmoothCamera.ForecastHistoryX) - 1])",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Permute back axis"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"=",
"ProjectedOldestX"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestX"
},
"parameters": [
"Object",
"Behavior",
"=",
"ProjectedOldestY"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestY"
},
"parameters": [
"Object",
"Behavior",
"=",
"Index"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyIndex"
},
"parameters": [
"Object",
"Behavior",
"=",
"ProjectedNewestX"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestX"
},
"parameters": [
"Object",
"Behavior",
"=",
"ProjectedNewestY"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestY"
},
"parameters": [
"Object",
"Behavior",
"=",
"Index"
]
}
]
}
],
"parameters": []
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Oldest: \" + ToString(ProjectedOldestX) + \" \" + ToString(ProjectedOldestY)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Newest: \" + ToString(ProjectedNewestX) + \" \" + ToString(ProjectedNewestY)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
]
},
{
"colorB": 228,
"colorG": 176,
"colorR": 74,
"creationTime": 0,
"name": "Forecasted position",
"source": "",
"type": "BuiltinCommonInstructions::Group",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastedX"
},
"parameters": [
"Object",
"Behavior",
"=",
"ProjectedNewestX + ( ProjectedNewestX - ProjectedOldestX) * Object.Behavior::ForecastTimeRatio()"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY"
},
"parameters": [
"Object",
"Behavior",
"=",
"ProjectedNewestY + ( ProjectedNewestY - ProjectedOldestY) * Object.Behavior::ForecastTimeRatio()"
]
}
]
},
{
"disabled": true,
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "DebuggerTools::ConsoleLog"
},
"parameters": [
"\"Forecasted: \" + ToString(ForecastedX) + \" \" + ToString(ForecastedY)",
"\"info\"",
"\"SmoothCamera\""
]
}
]
}
],
"parameters": []
}
],
"parameters": []
}
]
}
],
"parameters": []
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
},
{
"description": "Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.",
"fullName": "Project history ends",
"functionType": "Action",
"group": "Private",
"name": "ProjectHistoryEnds",
"private": true,
"sentence": "Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_",
"events": [
{
"type": "BuiltinCommonInstructions::Comment",
"color": {
"b": 109,
"g": 230,
"r": 255,
"textB": 0,
"textG": 0,
"textR": 0
},
"comment": "Perpendicular line:\npA = -1/a; \npB = -pA * x + y\n\nIntersection:\n/ ProjectedY = a * ProjectedX + b\n\\ ProjectedY = pA * ProjectedX + b\n\nSolution that is cleaned out from indeterminism (like 0 / 0 or infinity / infinity):\nProjectedX= (x + (y - b) * a) / (a² + 1)\nProjectedY = y + (x * a - y + b) / (a² + 1)"
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestX"
},
"parameters": [
"Object",
"Behavior",
"=",
"(NewestX + (NewestY - ForecastHistoryLinearB) * ForecastHistoryLinearA) / (1 + pow(ForecastHistoryLinearA, 2))"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestY"
},
"parameters": [
"Object",
"Behavior",
"=",
"NewestY + (NewestX * ForecastHistoryLinearA - NewestY \n+ ForecastHistoryLinearB) / (1 + pow(ForecastHistoryLinearA, 2))"
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestX"
},
"parameters": [
"Object",
"Behavior",
"=",
"(OldestX + (OldestY - ForecastHistoryLinearB) * ForecastHistoryLinearA) / (1 + pow(ForecastHistoryLinearA, 2))"
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestY"
},
"parameters": [
"Object",
"Behavior",
"=",
"OldestY + (OldestX * ForecastHistoryLinearA - OldestY \n+ ForecastHistoryLinearB) / (1 + pow(ForecastHistoryLinearA, 2))"
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
},
{
"description": "OldestX",
"name": "OldestX",
"type": "expression"
},
{
"description": "OldestY",
"name": "OldestY",
"type": "expression"
},
{
"description": "Newest X",
"name": "NewestX",
"type": "expression"
},
{
"description": "Newest Y",
"name": "NewestY",
"type": "expression"
}
],
"objectGroups": []
},
{
"description": "Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.",
"fullName": "Forecast time ratio",
"functionType": "Expression",
"group": "Private",
"name": "ForecastTimeRatio",
"private": true,
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [],
"actions": [
{
"type": {
"value": "SetReturnNumber"
},
"parameters": [
"- ForecastTime / (Object.Variable(__SmoothCamera.ForecastHistoryTime[0]) - Object.Variable(__SmoothCamera.ForecastHistoryTime[Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime) - 1]))"
]
}
]
}
],
"expressionType": {
"type": "expression"
},
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothCamera",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "0.9",
"type": "Number",
"label": "Leftward catch-up speed (in ratio per second)",
"group": "Catch-up speed",
"name": "LeftwardSpeed"
},
{
"value": "0.9",
"type": "Number",
"label": "Rightward catch-up speed (in ratio per second)",
"group": "Catch-up speed",
"name": "RightwardSpeed"
},
{
"value": "0.9",
"type": "Number",
"label": "Upward catch-up speed (in ratio per second)",
"group": "Catch-up speed",
"name": "UpwardSpeed"
},
{
"value": "0.9",
"type": "Number",
"label": "Downward catch-up speed (in ratio per second)",
"group": "Catch-up speed",
"name": "DownwardSpeed"
},
{
"value": "true",
"type": "Boolean",
"label": "Follow on X axis",
"name": "FollowOnX"
},
{
"value": "true",
"type": "Boolean",
"label": "Follow on Y axis",
"name": "FollowOnY"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area left border",
"group": "Position",
"advanced": true,
"name": "FollowFreeAreaLeft"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area right border",
"group": "Position",
"advanced": true,
"name": "FollowFreeAreaRight"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area top border",
"group": "Position",
"advanced": true,
"name": "FollowFreeAreaTop"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area bottom border",
"group": "Position",
"advanced": true,
"name": "FollowFreeAreaBottom"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Camera offset X",
"group": "Position",
"advanced": true,
"name": "CameraOffsetX"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Camera offset Y",
"group": "Position",
"advanced": true,
"name": "CameraOffsetY"
},
{
"value": "0",
"type": "Number",
"unit": "Second",
"label": "Camera delay",
"group": "Timing",
"deprecated": true,
"name": "CameraDelay"
},
{
"value": "0",
"type": "Number",
"unit": "Second",
"label": "Forecast time",
"group": "Timing",
"deprecated": true,
"name": "ForecastTime"
},
{
"value": "0",
"type": "Number",
"unit": "Second",
"label": "Forecast history duration",
"group": "Timing",
"deprecated": true,
"name": "ForecastHistoryDuration"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "LogLeftwardSpeed"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "LogRightwardSpeed"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "LogDownwardSpeed"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "LogUpwardSpeed"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "DelayedCenterX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "DelayedCenterY"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryMeanX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryMeanY"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryVarianceX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryCovariance"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryLinearA"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryLinearB"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastedX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastedY"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ProjectedNewestX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ProjectedNewestY"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ProjectedOldestX"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ProjectedOldestY"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "ForecastHistoryVarianceY"
},
{
"value": "",
"type": "Number",
"label": "Index (local variable)",
"hidden": true,
"name": "Index"
},
{
"value": "0",
"type": "Number",
"label": "",
"hidden": true,
"name": "CameraDelayCatchUpSpeed"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "CameraExtraDelay"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "WaitingSpeedXMax"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "WaitingSpeedYMax"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "WaitingEnd"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "CameraDelayCatchUpDuration"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Leftward maximum speed",
"group": "Maximum speed",
"advanced": true,
"name": "LeftwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Rightward maximum speed",
"group": "Maximum speed",
"advanced": true,
"name": "RightwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Upward maximum speed",
"group": "Maximum speed",
"advanced": true,
"name": "UpwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Downward maximum speed",
"group": "Maximum speed",
"advanced": true,
"name": "DownwardSpeedMax"
},
{
"value": "",
"type": "Number",
"label": "OldX (local variable)",
"hidden": true,
"name": "OldX"
},
{
"value": "",
"type": "Number",
"label": "OldY (local variable)",
"hidden": true,
"name": "OldY"
},
{
"value": "",
"type": "Boolean",
"label": "",
"hidden": true,
"name": "IsCalledManually"
}
],
"sharedPropertyDescriptors": []
},
{
"description": "Smoothly scroll to follow a character and stabilize the camera when jumping.",
"fullName": "Smooth platformer camera",
"name": "SmoothPlatformerCamera",
"objectType": "",
"eventsFunctions": [
{
"fullName": "",
"functionType": "Action",
"name": "doStepPreEvents",
"sentence": "",
"events": [
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"inverted": true,
"value": "PlatformBehavior::IsJumping"
},
"parameters": [
"Object",
"PlatformerCharacter"
]
},
{
"type": {
"inverted": true,
"value": "PlatformBehavior::IsFalling"
},
"parameters": [
"Object",
"PlatformerCharacter"
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorFollowFreeAreaTop",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorFollowFreeAreaBottom",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeed"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorUpwardSpeed",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeed"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorDownwardSpeed",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorUpwardSpeedMax",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax"
},
"parameters": [
"Object",
"SmoothCamera",
"FloorDownwardSpeedMax",
""
]
}
]
},
{
"type": "BuiltinCommonInstructions::Standard",
"conditions": [
{
"type": {
"value": "BuiltinCommonInstructions::Or"
},
"parameters": [],
"subInstructions": [
{
"type": {
"value": "PlatformBehavior::IsJumping"
},
"parameters": [
"Object",
"PlatformerCharacter"
]
},
{
"type": {
"value": "PlatformBehavior::IsFalling"
},
"parameters": [
"Object",
"PlatformerCharacter"
]
}
]
}
],
"actions": [
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom"
},
"parameters": [
"Object",
"SmoothCamera",
"AirFollowFreeAreaTop",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop"
},
"parameters": [
"Object",
"SmoothCamera",
"AirFollowFreeAreaBottom",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeed"
},
"parameters": [
"Object",
"SmoothCamera",
"AirUpwardSpeed",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeed"
},
"parameters": [
"Object",
"SmoothCamera",
"AirDownwardSpeed",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax"
},
"parameters": [
"Object",
"SmoothCamera",
"AirUpwardSpeedMax",
""
]
},
{
"type": {
"value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax"
},
"parameters": [
"Object",
"SmoothCamera",
"AirDownwardSpeedMax",
""
]
}
]
}
],
"parameters": [
{
"description": "Object",
"name": "Object",
"type": "object"
},
{
"description": "Behavior",
"name": "Behavior",
"supplementaryInformation": "SmoothCamera::SmoothPlatformerCamera",
"type": "behavior"
}
],
"objectGroups": []
}
],
"propertyDescriptors": [
{
"value": "",
"type": "Behavior",
"label": "Platformer character behavior",
"extraInformation": [
"PlatformBehavior::PlatformerObjectBehavior"
],
"choices": [],
"name": "PlatformerCharacter"
},
{
"value": "",
"type": "Behavior",
"label": "Smooth camera behavior",
"extraInformation": [
"SmoothCamera::SmoothCamera"
],
"choices": [],
"name": "SmoothCamera"
},
{
"value": "",
"type": "Number",
"label": "",
"hidden": true,
"name": "JumpOriginY"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area top in the air",
"group": "Position",
"name": "AirFollowFreeAreaTop"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area bottom in the air",
"group": "Position",
"name": "AirFollowFreeAreaBottom"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area top on the floor",
"group": "Position",
"name": "FloorFollowFreeAreaTop"
},
{
"value": "0",
"type": "Number",
"unit": "Pixel",
"label": "Follow free area bottom on the floor",
"group": "Position",
"name": "FloorFollowFreeAreaBottom"
},
{
"value": "0.95",
"type": "Number",
"label": "Upward speed in the air (in ratio per second)",
"group": "Catch-up speed",
"name": "AirUpwardSpeed"
},
{
"value": "0.95",
"type": "Number",
"label": "Downward speed in the air (in ratio per second)",
"group": "Catch-up speed",
"name": "AirDownwardSpeed"
},
{
"value": "0.9",
"type": "Number",
"label": "Upward speed on the floor (in ratio per second)",
"group": "Catch-up speed",
"name": "FloorUpwardSpeed"
},
{
"value": "0.9",
"type": "Number",
"label": "Downward speed on the floor (in ratio per second)",
"group": "Catch-up speed",
"name": "FloorDownwardSpeed"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Upward maximum speed in the air",
"group": "Maximum speed",
"name": "AirUpwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Downward maximum speed in the air",
"group": "Maximum speed",
"name": "AirDownwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Upward maximum speed on the floor",
"group": "Maximum speed",
"name": "FloorUpwardSpeedMax"
},
{
"value": "9000",
"type": "Number",
"unit": "PixelSpeed",
"label": "Downward maximum speed on the floor",
"group": "Maximum speed",
"name": "FloorDownwardSpeedMax"
}
],
"sharedPropertyDescriptors": []
}
],
"eventsBasedObjects": []
}
],
"externalLayouts": []
}