-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathFlats 6 Rebooted.json.autosave
1 lines (1 loc) · 510 KB
/
Flats 6 Rebooted.json.autosave
1
{"firstLayout":"","gdVersion":{"build":99,"major":4,"minor":0,"revision":0},"properties":{"adaptGameResolutionAtRuntime":true,"antialiasingMode":"none","antialisingEnabledOnMobile":false,"folderProject":true,"orientation":"landscape","packageName":"com.flats.mtsyntho","pixelsRounding":false,"projectUuid":"4ea0a112-1627-4261-a2d5-bd9b51e9de80","scaleMode":"linear","sizeOnStartupMode":"","templateSlug":"","useExternalSourceFiles":false,"version":"1.0.0","name":"Flats 6 Rebooted","description":"Flats is an FPS Game by Foliage Games which had sadly been discontinued due to the company being deadpooled (allegedly)","author":"MTSyntho Dev","windowWidth":1920,"windowHeight":1080,"latestCompilationDirectory":"","maxFPS":60,"minFPS":20,"verticalSync":false,"platformSpecificAssets":{},"loadingScreen":{"backgroundColor":0,"backgroundFadeInDuration":0.2,"backgroundImageResourceName":"","gdevelopLogoStyle":"light","logoAndProgressFadeInDuration":0.2,"logoAndProgressLogoFadeInDelay":0.2,"minDuration":1.5,"progressBarColor":16777215,"progressBarHeight":20.0,"progressBarMaxWidth":200.0,"progressBarMinWidth":40.0,"progressBarWidthPercent":30.0,"showGDevelopSplash":true,"showProgressBar":true},"watermark":{"placement":"bottom-left","showWatermark":true},"authorIds":["wJNvBw2TGEZ09MUQUZDv8c12dig1"],"authorUsernames":["MTSyntho"],"categories":[],"playableDevices":[],"extensionProperties":[],"platforms":[{"name":"GDevelop JS platform"}],"currentPlatform":"GDevelop JS platform"},"resources":{"resources":[{"file":"assets/fonts/Casper.ttf","kind":"font","metadata":"","name":"assets\\fonts\\Casper.ttf","userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Main1.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Main1.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/splash.png","kind":"image","metadata":"","name":"assets\\images\\ui\\splash.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/placeholder/white.png","kind":"image","metadata":"","name":"assets\\placeholder\\white.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/placeholder/reference.jpg","kind":"image","metadata":"","name":"assets\\placeholder\\reference.jpg","smoothed":true,"userAdded":false},{"alwaysLoaded":false,"file":"assets/placeholder/black.png","kind":"image","metadata":"","name":"assets\\placeholder\\black.png","smoothed":true,"userAdded":false},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Main0.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Main0.png","smoothed":true,"userAdded":false},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Main2.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Main2.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Main3.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Main3.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Main4.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Main4.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Main5.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Main5.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Quit.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Quit.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Reset.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Reset.png","smoothed":true,"userAdded":true},{"file":"assets/fonts/default_android.ttf","kind":"font","metadata":"","name":"assets\\fonts\\default_android.ttf","userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Multiplayer0.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Multiplayer0.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Multiplayer1.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Multiplayer1.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Multiplayer2.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Multiplayer2.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Multiplayer3.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Multiplayer3.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Multiplayer4.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Multiplayer4.png","smoothed":true,"userAdded":false},{"alwaysLoaded":false,"file":"assets/images/ui/menu/Multiplayer5.png","kind":"image","metadata":"","name":"assets\\images\\ui\\menu\\Multiplayer5.png","smoothed":true,"userAdded":false},{"file":"assets/audio/FlatsBGM1.mp3","kind":"audio","metadata":"","name":"assets\\audio\\FlatsBGM1.mp3","preloadAsMusic":false,"preloadAsSound":false,"preloadInCache":false,"userAdded":true},{"file":"assets/audio/Menu.mp3","kind":"audio","metadata":"","name":"assets\\audio\\Menu.mp3","preloadAsMusic":false,"preloadAsSound":false,"preloadInCache":false,"userAdded":true},{"alwaysLoaded":false,"file":"assets/placeholder/reference2.jpg","kind":"image","metadata":"","name":"assets\\placeholder\\reference2.jpg","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/weapons/Weapon12.png","kind":"image","metadata":"","name":"assets\\images\\weapons\\Weapon12.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/gui/fire.png","kind":"image","metadata":"","name":"assets\\images\\ui\\gui\\fire.png","smoothed":true,"userAdded":false},{"alwaysLoaded":false,"file":"assets/images/ui/gui/Reload.png","kind":"image","metadata":"","name":"assets\\images\\ui\\gui\\Reload.png","smoothed":true,"userAdded":false},{"alwaysLoaded":false,"file":"assets/images/ui/gui/Jump.png","kind":"image","metadata":"","name":"assets\\images\\ui\\gui\\Jump.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/gui/Zoom.png","kind":"image","metadata":"","name":"assets\\images\\ui\\gui\\Zoom.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/images/ui/gui/Menu.png","kind":"image","metadata":"","name":"assets\\images\\ui\\gui\\Menu.png","smoothed":true,"userAdded":true},{"file":"assets/models/Flatman_LOD0.glb","kind":"model3D","metadata":"","name":"assets\\models\\Flatman_LOD0.glb","userAdded":true},{"alwaysLoaded":false,"file":"texture_03.png","kind":"image","metadata":"","name":"texture_03.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"texture_04.png","kind":"image","metadata":"","name":"texture_04.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/glow.png","kind":"image","metadata":"","name":"assets\\glow.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/placeholders/black.png","kind":"image","metadata":"","name":"assets\\placeholders\\black.png","smoothed":true,"userAdded":true},{"alwaysLoaded":false,"file":"assets/placeholders/reference2.jpg","kind":"image","metadata":"","name":"assets\\placeholders\\reference2.jpg","smoothed":true,"userAdded":true},{"file":"assets/models/tree.glb","kind":"model3D","metadata":"","name":"assets\\models\\tree.glb","userAdded":true},{"file":"assets/models/MerryGoRound.glb","kind":"model3D","metadata":"","name":"assets\\models\\MerryGoRound.glb","userAdded":true},{"file":"assets/models/BeachTable.glb","kind":"model3D","metadata":"","name":"assets\\models\\BeachTable.glb","userAdded":true},{"file":"assets/models/parkDome.glb","kind":"model3D","metadata":"","name":"assets\\models\\parkDome.glb","userAdded":true},{"file":"assets/models/parkDomeRoof.glb","kind":"model3D","metadata":"","name":"assets\\models\\parkDomeRoof.glb","userAdded":true},{"file":"assets/models/grayClimbPole.glb","kind":"model3D","metadata":"","name":"assets\\models\\grayClimbPole.glb","userAdded":true},{"alwaysLoaded":false,"file":"assets/images/maps/urbanPark/parkGrass.png","kind":"image","metadata":"","name":"assets\\images\\maps\\urbanPark\\parkGrass.png","smoothed":true,"userAdded":true},{"file":"assets/models/parkPath.glb","kind":"model3D","metadata":"","name":"assets\\models\\parkPath.glb","userAdded":true},{"alwaysLoaded":false,"file":"assets/Square White Slider Border.png","kind":"image","metadata":"","name":"Square White Slider Border.png","smoothed":false,"userAdded":false,"origin":{"identifier":"https://asset-resources.gdevelop.io/public-resources/Settings UI/Slider/pixel art/324e5f522f6242e9f93090e75ddc38427c3a6c42e8236dbf0ed541bd85cf7221_Square White Slider Border.png","name":"Square White Slider Border.png"}},{"alwaysLoaded":false,"file":"assets/Square White Slider Fill Bar.png","kind":"image","metadata":"","name":"Square White Slider Fill Bar.png","smoothed":false,"userAdded":false,"origin":{"identifier":"https://asset-resources.gdevelop.io/public-resources/Settings UI/Slider/pixel art/47bc684198cd25b3ec74b0e72c2e2c7abb1b6736bd9f4b78a943c663e83118bf_Square White Slider Fill Bar.png","name":"Square White Slider Fill Bar.png"}},{"alwaysLoaded":false,"file":"assets/Square White Slider Thumb.png","kind":"image","metadata":"","name":"Square White Slider Thumb.png","smoothed":false,"userAdded":false,"origin":{"identifier":"https://asset-resources.gdevelop.io/public-resources/Settings UI/Slider/pixel art/848f861767e7ce4581dba9e122ee7bafeaca57987655cebe1f78ab31d1300f0f_Square White Slider Thumb.png","name":"Square White Slider Thumb.png"}},{"alwaysLoaded":false,"file":"assets/images/maps/urbanPark/parkPath.png","kind":"image","metadata":"","name":"assets\\images\\maps\\urbanPark\\parkPath.png","smoothed":true,"userAdded":true},{"file":"assets/models/circularBox.glb","kind":"model3D","metadata":"","name":"assets\\models\\circularBox.glb","userAdded":true},{"file":"assets/models/Bush.glb","kind":"model3D","metadata":"","name":"assets\\models\\Bush.glb","userAdded":true},{"file":"assets/models/streetlight.glb","kind":"model3D","metadata":"","name":"assets\\models\\streetlight.glb","userAdded":true},{"file":"assets/models/parkBench.glb","kind":"model3D","metadata":"","name":"assets\\models\\parkBench.glb","userAdded":true},{"file":"assets/models/parkCenter.glb","kind":"model3D","metadata":"","name":"assets\\models\\parkCenter.glb","userAdded":true},{"alwaysLoaded":false,"file":"assets/images/maps/orange.png","kind":"image","metadata":"","name":"assets\\images\\maps\\orange.png","smoothed":true,"userAdded":true}],"resourceFolders":[]},"objects":[{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"button","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":2.0,"leftEdgeAnchor":1.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":1.0,"useLegacyBottomAndRightAnchors":false},{"name":"SpriteRecolorizer","type":"Recolorizer::SpriteRecolorizer"},{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\placeholders\\black.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]}],"objectsFolderStructure":{"folderName":"__ROOT","children":[{"objectName":"button"}]},"objectsGroups":[],"variables":[{"name":"player","type":"structure","children":[{"name":"colorHex","type":"string","value":"0"}]}],"layouts":[{"b":0,"disableInputWhenNotFocused":true,"mangledName":"splash","name":"splash","r":0,"standardSortMethod":true,"stopSoundsOnStartup":true,"title":"","v":0,"uiSettings":{"grid":false,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":false,"zoomFactor":0.334324390751703,"windowMask":false},"objectsGroups":[],"variables":[],"instances":[{"angle":0.0,"customSize":true,"depth":0.0,"height":164.0,"layer":"","name":"splash","persistentUuid":"0fca39fd-1ca8-4f30-8dd1-c46575116c8d","width":224.0,"x":838.0,"y":452.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"objects":[{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"splash","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\splash.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":60.0,"y":36.0},{"x":642.0,"y":36.0},{"x":642.0,"y":476.0},{"x":60.0,"y":476.0}]]}]}]}]}],"objectsFolderStructure":{"folderName":"__ROOT","children":[{"objectName":"splash"}]},"events":[{"disabled":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]}],"actions":[{"type":{"value":"PlayerAuthentication::DisplayAuthenticationBanner"},"parameters":[""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]}],"actions":[{"type":{"value":"OpacityCapability::OpacityBehavior::SetValue"},"parameters":["splash","Opacity","=","0"]},{"type":{"value":"Wait"},"parameters":[".1"]},{"type":{"value":"Tween::TweenBehavior::AddObjectOpacityTween2"},"parameters":["splash","Tween","\"\"","255","\"linear\"",".5",""]},{"type":{"value":"Wait"},"parameters":["1"]},{"type":{"value":"Tween::TweenBehavior::AddObjectOpacityTween2"},"parameters":["splash","Tween","\"\"","0","\"linear\"",".5",""]},{"type":{"value":"Wait"},"parameters":[".6"]},{"type":{"value":"Scene"},"parameters":["","\"menu\"","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"AlignObject::ToSceneCentered"},"parameters":["","splash",""]}]}],"layers":[{"ambientLightColorB":0,"ambientLightColorG":8042920,"ambientLightColorR":16,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":0.1,"cameraType":"perspective","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"","renderingType":"","visibility":true,"cameras":[{"defaultSize":true,"defaultViewport":true,"height":0.0,"viewportBottom":1.0,"viewportLeft":0.0,"viewportRight":1.0,"viewportTop":0.0,"width":0.0}],"effects":[]}],"behaviorsSharedData":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior"},{"name":"Animation","type":"AnimatableCapability::AnimatableBehavior"},{"name":"Effect","type":"EffectCapability::EffectBehavior"},{"name":"Flippable","type":"FlippableCapability::FlippableBehavior"},{"name":"Opacity","type":"OpacityCapability::OpacityBehavior"},{"name":"Resizable","type":"ResizableCapability::ResizableBehavior"},{"name":"Scale","type":"ScalableCapability::ScalableBehavior"},{"name":"SpriteRecolorizer","type":"Recolorizer::SpriteRecolorizer"},{"name":"Tween","type":"Tween::TweenBehavior"}]},{"b":204,"disableInputWhenNotFocused":true,"mangledName":"menu","name":"menu","r":204,"standardSortMethod":true,"stopSoundsOnStartup":true,"title":"","v":204,"uiSettings":{"grid":false,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":false,"zoomFactor":0.3645833333333333,"windowMask":false},"objectsGroups":[{"name":"notifyBar","objects":[{"name":"notification"},{"name":"notificationText"},{"name":"notifcationTime"}]},{"name":"btnText","objects":[{"name":"btn1"},{"name":"btn2"},{"name":"btn3"},{"name":"btn4"},{"name":"btn5"},{"name":"btn6"}]},{"name":"mainIcons","objects":[{"name":"multiplayer"},{"name":"singleplayer"},{"name":"character"},{"name":"settings"},{"name":"leaderboard"},{"name":"info"}]},{"name":"mpIcons","objects":[{"name":"openMatch"},{"name":"inviteMatch"},{"name":"lanMatch"},{"name":"chatRoom"},{"name":"connectMethod"},{"name":"serverVersion"}]}],"variables":[{"folded":true,"name":"colorHex","type":"string","value":""},{"folded":true,"name":"state","type":"number","value":0.0},{"folded":true,"name":"notify","type":"boolean","value":false}],"instances":[{"angle":0.0,"customSize":true,"depth":11.0,"height":268.0,"layer":"","locked":true,"name":"button","persistentUuid":"be15f303-dba5-4b87-9496-eea589cea4e4","width":444.0,"x":252.0,"y":230.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[{"folded":true,"name":"button","type":"number","value":0.0}]},{"angle":0.0,"customSize":true,"depth":2.0,"height":1080.0,"layer":"reference","locked":true,"name":"reference","persistentUuid":"acd5294e-60ff-453e-ad33-7a3318319a6a","sealed":true,"width":2162.0,"x":-121.0,"y":0.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":11.0,"height":268.0,"layer":"","locked":true,"name":"button","persistentUuid":"7e21392d-9030-4c37-a0a7-5312a8870def","width":444.0,"x":738.0,"y":230.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[{"folded":true,"name":"button","type":"number","value":1.0}]},{"angle":0.0,"customSize":true,"depth":11.0,"height":268.0,"layer":"","locked":true,"name":"button","persistentUuid":"4170bb7e-8245-4c3b-81e9-49fcba7a6857","width":444.0,"x":1224.0,"y":230.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[{"folded":true,"name":"button","type":"number","value":2.0}]},{"angle":0.0,"customSize":true,"depth":11.0,"height":268.0,"layer":"","locked":true,"name":"button","persistentUuid":"cb2ad79f-726e-4c6f-9c53-def4cc7411b4","width":444.0,"x":252.0,"y":581.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[{"folded":true,"name":"button","type":"number","value":3.0}]},{"angle":0.0,"customSize":true,"depth":11.0,"height":268.0,"layer":"","locked":true,"name":"button","persistentUuid":"aa0c7dc0-998e-4348-a0b1-4c55095d00cc","width":444.0,"x":738.0,"y":581.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[{"folded":true,"name":"button","type":"number","value":4.0}]},{"angle":0.0,"customSize":true,"depth":11.0,"height":268.0,"layer":"","locked":true,"name":"button","persistentUuid":"a7143047-71eb-4c38-96b8-6413f231281c","width":444.0,"x":1224.0,"y":581.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[{"folded":true,"name":"button","type":"number","value":5.0}]},{"angle":0.0,"customSize":true,"depth":1.0,"height":194.0,"layer":"main","locked":true,"name":"multiplayer","persistentUuid":"a4cd942c-33c4-463f-bc97-2a229f826d6c","width":160.0,"x":297.0,"y":252.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":194.0,"layer":"main","locked":true,"name":"singleplayer","persistentUuid":"a874c07b-abe9-4810-a8d6-f94705c7b0a7","width":132.0,"x":811.0,"y":252.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":194.0,"layer":"main","locked":true,"name":"character","persistentUuid":"74faaa59-c817-4c5c-b33e-7afd64bacef3","width":234.0,"x":1282.0,"y":252.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":162.0,"layer":"main","locked":true,"name":"settings","persistentUuid":"145804a8-33bc-453e-baa7-ed9894e3aaf2","width":138.0,"x":408.0,"y":615.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":146.0,"layer":"main","locked":true,"name":"leaderboard","persistentUuid":"9b1e2457-6f99-4def-8d57-ba750e364aea","width":160.0,"x":880.0,"y":615.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":-1.0,"customSize":true,"depth":1.0,"height":128.0,"layer":"main","locked":true,"name":"info","persistentUuid":"5052953c-f564-41c9-82a3-e3ff799b0331","width":128.0,"x":1381.0,"y":625.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":34.0,"layer":"main","locked":true,"name":"btn1","persistentUuid":"9df20875-b5d8-47fe-ba00-a717c6b0af25","width":294.0,"x":370.0,"y":440.0,"zOrder":9,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":0.0,"height":32.0,"layer":"main","locked":true,"name":"btn2","persistentUuid":"a67ecbe3-7ac6-49de-a998-8734e59aea38","width":295.0,"x":860.0,"y":440.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":0.0,"height":32.0,"layer":"main","locked":true,"name":"btn3","persistentUuid":"d927a619-7048-4f2f-8abd-4a19ed13ff7d","width":295.0,"x":1344.0,"y":440.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":0.0,"height":32.0,"layer":"main","locked":true,"name":"btn4","persistentUuid":"9886bd92-8859-4565-97b6-0266f5462d93","width":294.0,"x":370.0,"y":793.0,"zOrder":12,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":0.0,"height":32.0,"layer":"main","locked":true,"name":"btn5","persistentUuid":"d4962e2b-9bbb-453a-9d36-856cfe199aad","width":295.0,"x":860.0,"y":793.0,"zOrder":13,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":0.0,"height":32.0,"layer":"main","locked":true,"name":"btn6","persistentUuid":"3506bae6-1835-49fd-ae27-c562e901f3b3","width":295.0,"x":1344.0,"y":793.0,"zOrder":14,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":3.0,"height":92.0,"layer":"","name":"button","persistentUuid":"0cefe456-c072-4f98-bcdc-60907a3d2159","width":92.0,"x":1778.0,"y":930.0,"zOrder":15,"numberProperties":[],"stringProperties":[],"initialVariables":[{"folded":true,"name":"button","type":"number","value":5.0}]},{"angle":0.0,"customSize":true,"depth":3.0,"height":92.0,"layer":"","name":"button","persistentUuid":"b03bddf5-cad5-4345-91cd-40e2e8f37bb8","width":92.0,"x":1650.0,"y":930.0,"zOrder":15,"numberProperties":[],"stringProperties":[],"initialVariables":[{"folded":true,"name":"button","type":"number","value":6.0}]},{"angle":0.0,"customSize":true,"depth":1.0,"height":60.0,"layer":"main","name":"quit","persistentUuid":"41e8eb16-348f-4d92-9e27-639c47a97258","width":60.0,"x":1794.0,"y":945.0,"zOrder":16,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":60.0,"layer":"main","name":"reset","persistentUuid":"d2878cdf-2b83-4f21-b84d-e44416164ad9","width":62.0,"x":1665.0,"y":946.0,"zOrder":17,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"layer":"","name":"fps","persistentUuid":"739ac2dc-8fc6-45d9-80d1-f9c9f0aec9bb","width":0.0,"x":23.0,"y":20.0,"zOrder":18,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":154.0,"layer":"multiplayer","locked":true,"name":"openMatch","persistentUuid":"6af300f0-ccce-4874-aa16-7ba8d1341600","width":154.0,"x":402.0,"y":268.0,"zOrder":19,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":154.0,"layer":"multiplayer","locked":true,"name":"inviteMatch","persistentUuid":"915160d1-61ca-4233-a7b8-64cbd35ce295","width":154.0,"x":886.0,"y":268.0,"zOrder":20,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":154.0,"layer":"multiplayer","locked":true,"name":"lanMatch","persistentUuid":"93208fbc-8b04-4a5b-9047-70682a1758b7","width":249.0,"x":1322.0,"y":268.0,"zOrder":21,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":154.0,"layer":"multiplayer","locked":true,"name":"chatRoom","persistentUuid":"2075dea7-cfc2-4d5f-abac-7346583fcd4a","width":165.0,"x":398.0,"y":619.0,"zOrder":22,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":154.0,"layer":"multiplayer","locked":true,"name":"connectMethod","persistentUuid":"9e961d92-d623-41e0-b684-5405d6443c37","width":147.0,"x":889.0,"y":619.0,"zOrder":23,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":121.0,"layer":"multiplayer","locked":true,"name":"serverVersion","persistentUuid":"666f4a96-6cb5-43c1-a747-9ffc205e39f1","width":188.0,"x":1356.0,"y":638.0,"zOrder":24,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":95.0,"layer":"","locked":true,"name":"notification","persistentUuid":"01a352d9-66b6-439a-a305-aceec4e3fa3b","width":640.0,"x":62.0,"y":942.0,"zOrder":25,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":52.0,"layer":"","locked":true,"name":"notificationText","persistentUuid":"dd4a7f95-2fbe-4d5a-8f86-c3dd824cf92d","width":588.0,"x":84.0,"y":962.0,"zOrder":26,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":10.0,"layer":"","locked":true,"name":"notifcationTime","persistentUuid":"49f3e56d-0b43-412b-b11e-892897003d9b","width":640.0,"x":62.0,"y":1027.0,"zOrder":27,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"objects":[{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"bgSquare","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"SpriteRecolorizer","type":"Recolorizer::SpriteRecolorizer"},{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\placeholder\\white.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"reference","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\placeholder\\reference.jpg","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":1440.0,"y":0.0},{"x":1440.0,"y":720.0},{"x":0.0,"y":720.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"multiplayer","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":2.0,"leftEdgeAnchor":1.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":1.0,"useLegacyBottomAndRightAnchors":false},{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Main0.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":3.0},{"x":204.0,"y":3.0},{"x":204.0,"y":356.0},{"x":2.0,"y":356.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"singleplayer","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Main1.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":3.0,"y":2.0},{"x":158.0,"y":2.0},{"x":158.0,"y":344.0},{"x":3.0,"y":344.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"character","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Main2.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":3.0,"y":2.0},{"x":277.0,"y":2.0},{"x":277.0,"y":344.0},{"x":3.0,"y":344.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"settings","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Main3.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":3.0},{"x":148.0,"y":3.0},{"x":148.0,"y":286.0},{"x":2.0,"y":286.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"leaderboard","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Main4.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":3.0},{"x":172.0,"y":3.0},{"x":172.0,"y":239.0},{"x":2.0,"y":239.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"info","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Main5.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":3.0,"y":2.0},{"x":143.0,"y":2.0},{"x":143.0,"y":234.0},{"x":3.0,"y":234.0}]]}]}]}]},{"assetStoreId":"","bold":false,"italic":false,"name":"btn1","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":2.0,"leftEdgeAnchor":1.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":1.0,"useLegacyBottomAndRightAnchors":false},{"name":"Tween","type":"Tween::TweenBehavior"}],"string":"Multiplayer","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Multiplayer","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":"255;255;255"}},{"assetStoreId":"","bold":false,"italic":false,"name":"btn2","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"string":"Singleplayer","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Singleplayer","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":"255;255;255"}},{"assetStoreId":"","bold":false,"italic":false,"name":"btn3","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"string":"Character","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Character","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":"255;255;255"}},{"assetStoreId":"","bold":false,"italic":false,"name":"btn4","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"string":"Settings","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Settings","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":"255;255;255"}},{"assetStoreId":"","bold":false,"italic":false,"name":"btn5","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"string":"Leaderboard","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Leaderboard","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":"255;255;255"}},{"assetStoreId":"","bold":false,"italic":false,"name":"btn6","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"string":"Information","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Information","font":"assets\\fonts\\Casper.ttf","textAlignment":"right","characterSize":30.0,"color":"255;255;255"}},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"quit","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Quit.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":2.0},{"x":84.0,"y":2.0},{"x":84.0,"y":90.0},{"x":2.0,"y":90.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"reset","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Reset.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":3.0},{"x":88.0,"y":3.0},{"x":88.0,"y":80.0},{"x":2.0,"y":80.0}]]}]}]}]},{"assetStoreId":"","bold":false,"italic":false,"name":"fps","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[{"name":"FPSDisplayer","type":"FPS::FPSDisplayer","prefix":"FPS: ","DecimalDigits":0.0}],"string":"FPS","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":30.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"FPS","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":30.0,"color":"255;255;255"}},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"openMatch","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Multiplayer0.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":2.0},{"x":186.0,"y":2.0},{"x":186.0,"y":308.0},{"x":2.0,"y":308.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"inviteMatch","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Multiplayer1.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":3.0,"y":2.0},{"x":181.0,"y":2.0},{"x":181.0,"y":303.0},{"x":3.0,"y":303.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"lanMatch","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Multiplayer2.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":3.0,"y":3.0},{"x":235.0,"y":3.0},{"x":235.0,"y":237.0},{"x":3.0,"y":237.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"chatRoom","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Multiplayer3.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":3.0,"y":2.0},{"x":167.0,"y":2.0},{"x":167.0,"y":264.0},{"x":3.0,"y":264.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"connectMethod","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Multiplayer4.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":2.0},{"x":137.0,"y":2.0},{"x":137.0,"y":282.0},{"x":2.0,"y":282.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"serverVersion","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Multiplayer5.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":3.0,"y":3.0},{"x":181.0,"y":3.0},{"x":181.0,"y":220.0},{"x":3.0,"y":220.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"notification","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"SpriteRecolorizer","type":"Recolorizer::SpriteRecolorizer"},{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\placeholder\\black.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]},{"assetStoreId":"","name":"notificationText","type":"BBText::BBText","variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"content":{"text":"notifications [i]yowzers![/i]","opacity":255.0,"fontSize":30.0,"visible":true,"color":"255;255;255","fontFamily":"assets\\fonts\\Casper.ttf","align":"left","wordWrap":true}},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"notifcationTime","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"SpriteRecolorizer","type":"Recolorizer::SpriteRecolorizer"},{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\placeholder\\white.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]}],"objectsFolderStructure":{"folderName":"__ROOT","children":[{"folderName":"notificationBar","children":[{"objectName":"notification"},{"objectName":"notificationText"},{"objectName":"notifcationTime"}]},{"folderName":"multiplayer","children":[{"objectName":"openMatch"},{"objectName":"inviteMatch"},{"objectName":"lanMatch"},{"objectName":"chatRoom"},{"objectName":"connectMethod"},{"objectName":"serverVersion"}]},{"folderName":"main","children":[{"objectName":"multiplayer"},{"objectName":"singleplayer"},{"objectName":"character"},{"objectName":"settings"},{"objectName":"leaderboard"},{"objectName":"info"},{"objectName":"btn1"},{"objectName":"btn2"},{"objectName":"btn3"},{"objectName":"btn4"},{"objectName":"btn5"},{"objectName":"btn6"},{"objectName":"quit"},{"objectName":"reset"}]},{"objectName":"bgSquare"},{"objectName":"reference"},{"objectName":"fps"}]},"events":[{"colorB":27,"colorG":2,"colorR":208,"creationTime":0,"folded":true,"name":"Save & Load","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]},{"type":{"inverted":true,"value":"GroupExists"},"parameters":["\"Player\"","\"Color\""]}],"actions":[{"type":{"value":"ModVarGlobalTxt"},"parameters":["player.colorHex","=","\"CC1A1A\""]},{"type":{"value":"EcrireFichierTxt"},"parameters":["\"Player\"","\"Color\"","\"CC1A1A\""]},{"type":{"value":"Recolorizer::SpriteRecolorizer::Recolorize"},"parameters":["bgSquare","SpriteRecolorizer","\"255;255;255\"","ColorConversion::HexToRgb(\"CC1A1A\")","0","50","50",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]},{"type":{"value":"GroupExists"},"parameters":["\"Player\"","\"Color\""]}],"actions":[{"type":{"value":"LireFichierTxt"},"parameters":["\"Player\"","\"Color\"","","colorHex"]},{"type":{"value":"ModVarGlobalTxt"},"parameters":["player.colorHex","=","VariableString(colorHex)"]},{"type":{"value":"Recolorizer::SpriteRecolorizer::Recolorize"},"parameters":["bgSquare","SpriteRecolorizer","\"255;255;255\"","ColorConversion::HexToRgb(GlobalVariableString(player.colorHex))","0","50","50",""]}]}],"parameters":[]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]},{"type":{"inverted":true,"value":"GroupExists"},"parameters":["\"Player\"","\"FirstTime\""]}],"actions":[{"type":{"value":"EcrireFichierExp"},"parameters":["\"Player\"","\"FirstTime\"","0"]},{"type":{"value":"SetSceneVariableAsBoolean"},"parameters":["notify","True"]},{"type":{"value":"BBText::SetBBText"},"parameters":["notificationText","=","\"Welcome to [i]Flats 6[/i]\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]}],"actions":[{"type":{"value":"OpacityCapability::OpacityBehavior::SetValue"},"parameters":["button","Opacity","=","80"]},{"type":{"value":"Recolorizer::SpriteRecolorizer::Recolorize"},"parameters":["button","SpriteRecolorizer","\"0;0;0\"","ColorConversion::HexToRgb(GlobalVariableString(player.colorHex))","0","50","50",""]},{"type":{"value":"MettreX"},"parameters":["notifyBar","-","710"]},{"type":{"value":"PlayMusicCanal"},"parameters":["","assets\\audio\\Menu.mp3","0","yes","100","1"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]}],"actions":[{"type":{"value":"ScalableCapability::ScalableBehavior::SetY"},"parameters":["mpIcons","Scale","=",".001"]},{"type":{"value":"MettreY"},"parameters":["openMatch","+","77"]},{"type":{"value":"MettreY"},"parameters":["inviteMatch","+","77"]},{"type":{"value":"MettreY"},"parameters":["lanMatch","+","77"]},{"type":{"value":"MettreY"},"parameters":["chatRoom","+","77"]},{"type":{"value":"MettreY"},"parameters":["connectMethod","+","77"]},{"type":{"value":"MettreY"},"parameters":["serverVersion","+","60.5"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"RepeatEveryXSeconds::Repeat"},"parameters":["bgSquare","\"bg\"",".3",""]}],"actions":[{"type":{"value":"Create"},"parameters":["","bgSquare","RandomInRange(-100, 2000)","1080","\"background\""]},{"type":{"value":"ScalableCapability::ScalableBehavior::SetValue"},"parameters":["bgSquare","Scale","=","RandomInRange(1, 5)"]},{"type":{"value":"Recolorizer::SpriteRecolorizer::Recolorize"},"parameters":["bgSquare","SpriteRecolorizer","\"255;255;255\"","ColorConversion::HexToRgb(GlobalVariableString(player.colorHex))","0","50","50",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreY"},"parameters":["bgSquare","-","200 * TimeDelta()"]}]},{"disabled":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"AjoutHasard"},"parameters":["","bgSquare"]},{"type":{"inverted":true,"value":"Tween::IsPlaying"},"parameters":["bgSquare","Tween","\"\""]}],"actions":[{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["bgSquare","Tween","\"\"","-500","\"linear\"","RandomInRange(5, 20)","yes"]}]},{"colorB":27,"colorG":2,"colorR":208,"creationTime":0,"name":"Button 1","source":"","type":"BuiltinCommonInstructions::Group","events":[{"colorB":27,"colorG":2,"colorR":208,"creationTime":0,"folded":true,"name":"Multiplayer","source":"","type":"BuiltinCommonInstructions::Group","events":[{"folded":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"SourisSurObjet"},"parameters":["button","","",""]},{"type":{"value":"MouseButtonReleased"},"parameters":["","Left"]},{"type":{"value":"VarScene"},"parameters":["state","=","0"]},{"type":{"value":"VarObjet"},"parameters":["button","button","=","0"]},{"type":{"value":"AjoutObjConcern"},"parameters":["","button"]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"Tween::TweenBehavior::AddObjectHeightTween2"},"parameters":["button","Tween","\"\"","0","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["button","Tween","\"y\"","button.Y() + 134","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectHeightTween2"},"parameters":["mainIcons","Tween","\"\"","0","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["mainIcons","Tween","\"y\"","mainIcons.Y() + mainIcons.Height() / 2","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectOpacityTween2"},"parameters":["btnText","Tween","\"\"","0","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["btnText","Tween","\"y\"","btnText.Y() - 134","\"linear\"",".3",""]},{"type":{"value":"Wait"},"parameters":[".3"]},{"type":{"value":"ModVarScene"},"parameters":["state","=","1"]},{"type":{"value":"Cache"},"parameters":["mainIcons"]}],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Tween::TweenBehavior::AddObjectHeightTween2"},"parameters":["button","Tween","\"\"","268","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["button","Tween","\"y\"","button.Y() - 134","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectHeightTween2"},"parameters":["mpIcons","Tween","\"\"","154","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectHeightTween2"},"parameters":["serverVersion","Tween","\"\"","121","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["openMatch","Tween","\"y\"","openMatch.Y() - 77","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["inviteMatch","Tween","\"y\"","inviteMatch.Y() - 77","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["lanMatch","Tween","\"y\"","lanMatch.Y() - 77","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["chatRoom","Tween","\"y\"","chatRoom.Y() - 77","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["connectMethod","Tween","\"y\"","connectMethod.Y() - 77","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["serverVersion","Tween","\"y\"","serverVersion.Y() - 60.5","\"linear\"",".3",""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn1","Text","=","\"Open Match\""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn2","Text","=","\"Invitation Match\""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn3","Text","=","\"Local Match\""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn4","Text","=","\"Chatroom\""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn5","Text","=","\"Connection Method\""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn6","Text","=","\"Online Version: 6.0\""]},{"type":{"value":"Tween::TweenBehavior::AddObjectOpacityTween2"},"parameters":["btnText","Tween","\"\"","255","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["btnText","Tween","\"y\"","btnText.Y() + 134","\"linear\"",".3",""]}]}]},{"colorB":27,"colorG":2,"colorR":208,"creationTime":0,"folded":true,"name":"MP Buttons","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"SourisSurObjet"},"parameters":["button","","",""]},{"type":{"value":"MouseButtonReleased"},"parameters":["","Left"]},{"type":{"value":"VarScene"},"parameters":["state","=","1"]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"SetSceneVariableAsBoolean"},"parameters":["notify","True"]},{"type":{"value":"BBText::SetBBText"},"parameters":["notificationText","=","\"Not Implemented.\""]}]}],"parameters":[]}],"parameters":[]},{"colorB":27,"colorG":2,"colorR":208,"creationTime":0,"disabled":true,"folded":true,"name":"Singleplayer","source":"","type":"BuiltinCommonInstructions::Group","events":[{"folded":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"SourisSurObjet"},"parameters":["button","","",""]},{"type":{"value":"MouseButtonReleased"},"parameters":["","Left"]},{"type":{"value":"VarScene"},"parameters":["state","=","0"]},{"type":{"value":"VarObjet"},"parameters":["button","button","=","0"]},{"type":{"value":"AjoutObjConcern"},"parameters":["","button"]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"Tween::TweenBehavior::AddObjectHeightTween2"},"parameters":["button","Tween","\"\"","0","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["button","Tween","\"y\"","button.Y() + 134","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectHeightTween2"},"parameters":["mainIcons","Tween","\"\"","0","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["mainIcons","Tween","\"y\"","mainIcons.Y() + mainIcons.Height() / 2","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectOpacityTween2"},"parameters":["btnText","Tween","\"\"","0","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["btnText","Tween","\"y\"","btnText.Y() - 134","\"linear\"",".3",""]},{"type":{"value":"Wait"},"parameters":[".3"]},{"type":{"value":"ModVarScene"},"parameters":["state","=","1"]},{"type":{"value":"Cache"},"parameters":["mainIcons"]}],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Tween::TweenBehavior::AddObjectHeightTween2"},"parameters":["button","Tween","\"\"","268","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["button","Tween","\"y\"","button.Y() - 134","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectHeightTween2"},"parameters":["mpIcons","Tween","\"\"","154","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectHeightTween2"},"parameters":["serverVersion","Tween","\"\"","121","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["openMatch","Tween","\"y\"","openMatch.Y() - 77","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["inviteMatch","Tween","\"y\"","inviteMatch.Y() - 77","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["lanMatch","Tween","\"y\"","lanMatch.Y() - 77","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["chatRoom","Tween","\"y\"","chatRoom.Y() - 77","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["connectMethod","Tween","\"y\"","connectMethod.Y() - 77","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["serverVersion","Tween","\"y\"","serverVersion.Y() - 60.5","\"linear\"",".3",""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn1","Text","=","\"Open Match\""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn2","Text","=","\"Invitation Match\""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn3","Text","=","\"Local Match\""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn4","Text","=","\"Chatroom\""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn5","Text","=","\"Connection Method\""]},{"type":{"value":"TextContainerCapability::TextContainerBehavior::SetValue"},"parameters":["btn6","Text","=","\"Online Version: 6.0\""]},{"type":{"value":"Tween::TweenBehavior::AddObjectOpacityTween2"},"parameters":["btnText","Tween","\"\"","255","\"linear\"",".3",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionYTween2"},"parameters":["btnText","Tween","\"y\"","btnText.Y() + 134","\"linear\"",".3",""]}]}]},{"colorB":27,"colorG":2,"colorR":208,"creationTime":0,"folded":true,"name":"MP Buttons","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"SourisSurObjet"},"parameters":["button","","",""]},{"type":{"value":"MouseButtonReleased"},"parameters":["","Left"]},{"type":{"value":"VarScene"},"parameters":["state","=","1"]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"SetSceneVariableAsBoolean"},"parameters":["notify","True"]},{"type":{"value":"BBText::SetBBText"},"parameters":["notificationText","=","\"Not Implemented.\""]}]}],"parameters":[]}],"parameters":[]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"SourisSurObjet"},"parameters":["button","","",""]},{"type":{"value":"MouseButtonReleased"},"parameters":["","Left"]},{"type":{"value":"VarObjet"},"parameters":["button","button","=","1"]},{"type":{"value":"VarScene"},"parameters":["state","=","0"]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"Scene"},"parameters":["","\"game\"","yes"]}]}],"parameters":[]},{"disabled":true,"type":"BuiltinCommonInstructions::ForEach","object":"bgSquare","conditions":[],"actions":[{"type":{"value":"MettreY"},"parameters":["bgSquare","-","RandomInRange(5, 10)"]}]},{"colorB":0,"colorG":0,"colorR":0,"creationTime":0,"name":"Notifcation System","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"SceneVariableAsBoolean"},"parameters":["notify","True"]},{"type":{"inverted":true,"value":"Tween::IsPlaying"},"parameters":["notifcationTime","Tween","\"time\""]},{"type":{"inverted":true,"value":"Tween::IsPlaying"},"parameters":["notification","Tween","\"\""]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"Recolorizer::SpriteRecolorizer::Recolorize"},"parameters":["notification","SpriteRecolorizer","\"0;0;0\"","ColorConversion::HexToRgb(GlobalVariableString(player.colorHex))","0","50","50",""]},{"type":{"value":"OpacityCapability::OpacityBehavior::SetValue"},"parameters":["notification","Opacity","=","150"]},{"type":{"value":"SetSceneVariableAsBoolean"},"parameters":["notify",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionXTween2"},"parameters":["notifyBar","Tween","\"\"","notifyBar.X() + 710","\"easeOutCubic\"","1",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectWidthTween2"},"parameters":["notifcationTime","Tween","\"time\"","0","\"easeInSine\"","3",""]},{"type":{"value":"Wait"},"parameters":["3"]},{"type":{"value":"Tween::TweenBehavior::AddObjectPositionXTween2"},"parameters":["notifyBar","Tween","\"\"","notifyBar.X() - 710","\"easeInCubic\"","1",""]},{"type":{"value":"Wait"},"parameters":["1"]},{"type":{"value":"ResizableCapability::ResizableBehavior::SetWidth"},"parameters":["notifcationTime","Resizable","=","640"]}]}],"parameters":[]}],"layers":[{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":true,"name":"reference","renderingType":"","visibility":false,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"background","renderingType":"","visibility":true,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"","renderingType":"","visibility":true,"cameras":[{"defaultSize":true,"defaultViewport":true,"height":0.0,"viewportBottom":1.0,"viewportLeft":0.0,"viewportRight":1.0,"viewportTop":0.0,"width":0.0}],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"main","renderingType":"","visibility":true,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"multiplayer","renderingType":"","visibility":false,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]}],"behaviorsSharedData":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior"},{"name":"Animation","type":"AnimatableCapability::AnimatableBehavior"},{"name":"Effect","type":"EffectCapability::EffectBehavior"},{"name":"FPSDisplayer","type":"FPS::FPSDisplayer"},{"name":"Flippable","type":"FlippableCapability::FlippableBehavior"},{"name":"Opacity","type":"OpacityCapability::OpacityBehavior"},{"name":"Resizable","type":"ResizableCapability::ResizableBehavior"},{"name":"Scale","type":"ScalableCapability::ScalableBehavior"},{"name":"SpriteRecolorizer","type":"Recolorizer::SpriteRecolorizer"},{"name":"Text","type":"TextContainerCapability::TextContainerBehavior"},{"name":"Tween","type":"Tween::TweenBehavior"}]},{"b":251,"disableInputWhenNotFocused":true,"mangledName":"game","name":"game","r":148,"standardSortMethod":true,"stopSoundsOnStartup":true,"title":"","v":255,"uiSettings":{"grid":false,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":false,"zoomFactor":0.24539410121741027,"windowMask":false},"objectsGroups":[],"variables":[],"instances":[{"angle":0.0,"customSize":true,"depth":1.0,"height":1080.0,"layer":"reference","locked":true,"name":"reference","persistentUuid":"4bc86807-cdd5-49fe-9d45-2f6055f336fa","sealed":true,"width":2157.0,"x":0.0,"y":0.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":174.0,"layer":"gui","locked":true,"name":"button","persistentUuid":"c1e072b4-4c56-4967-a411-d5cc68dfd6f1","width":264.0,"x":1326.0,"y":497.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[{"name":"button","type":"number","value":0.0}]},{"angle":0.0,"customSize":true,"depth":1.0,"height":174.0,"layer":"gui","locked":true,"name":"button","persistentUuid":"4bdc11f9-6d20-40b4-a27e-32ac815c9742","width":264.0,"x":1601.0,"y":497.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[{"name":"button","type":"number","value":0.0}]},{"angle":0.0,"customSize":true,"depth":1.0,"height":174.0,"layer":"gui","locked":true,"name":"button","persistentUuid":"35ad3b2a-c965-446f-a24d-02e26641004e","width":264.0,"x":1326.0,"y":684.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[{"name":"button","type":"number","value":0.0}]},{"angle":0.0,"customSize":true,"depth":1.0,"height":174.0,"layer":"gui","locked":true,"name":"button","persistentUuid":"f6b79c04-071e-4e48-86d2-2c0b5c4308a2","width":264.0,"x":1601.0,"y":684.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[{"name":"button","type":"number","value":0.0}]},{"angle":0.0,"customSize":true,"depth":1.0,"height":71.0,"layer":"gui","locked":true,"name":"fire","persistentUuid":"7645a1b3-f829-4dff-93f1-c23160b31637","width":96.0,"x":1414.0,"y":547.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":89.0,"layer":"gui","locked":true,"name":"reload","persistentUuid":"84d9a805-1769-4d41-912c-9444a2b5c2ef","width":95.0,"x":1685.0,"y":539.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":87.0,"layer":"gui","locked":true,"name":"sprint","persistentUuid":"c3f830d4-fea1-483d-a87a-322cbcd173f6","width":88.0,"x":1419.0,"y":727.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":102.0,"layer":"gui","locked":true,"name":"zoom","persistentUuid":"ca60e054-cedf-4658-bd2d-adc25a6f8515","width":102.0,"x":1684.0,"y":717.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":0.0,"height":24.0,"layer":"gui","locked":true,"name":"pause","persistentUuid":"3dc96182-301b-48fd-9611-5b265d5ce4de","width":96.0,"x":18.0,"y":54.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":106.0,"layer":"gui","locked":true,"name":"ammoBG","persistentUuid":"badea5aa-b0aa-407f-8a3f-f14138391e3d","width":323.0,"x":518.0,"y":708.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":65.0,"layer":"gui","name":"bullets","persistentUuid":"11a3d5ad-bc85-43b6-9055-c4a6ee98d76d","width":323.0,"x":518.0,"y":728.0,"zOrder":9,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":5.0,"height":10.0,"layer":"","name":"playerCam","persistentUuid":"883f63c5-8b1b-499e-9b08-3607c652b58a","width":10.0,"x":855.0,"y":516.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"player","persistentUuid":"3f81bf8d-e0d0-445b-958b-57262b61fec9","width":0.0,"x":895.0,"y":523.0,"zOrder":12,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"sun","persistentUuid":"d15e8dc3-d059-41c2-af7e-f0cbd4adb5d6","width":0.0,"x":919.0,"y":461.0,"z":1000.0,"zOrder":13,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"objects":[{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"reference","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\placeholders\\reference2.jpg","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":1440.0,"y":0.0},{"x":1440.0,"y":720.0},{"x":0.0,"y":720.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"fire","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":0.0,"leftEdgeAnchor":0.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":0.0,"useLegacyBottomAndRightAnchors":false}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\gui\\fire.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":3.0},{"x":234.0,"y":3.0},{"x":234.0,"y":264.0},{"x":2.0,"y":264.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"reload","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":0.0,"leftEdgeAnchor":0.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":0.0,"useLegacyBottomAndRightAnchors":false}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\gui\\Reload.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":3.0,"y":2.0},{"x":179.0,"y":2.0},{"x":179.0,"y":167.0},{"x":3.0,"y":167.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"sprint","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":0.0,"leftEdgeAnchor":0.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":0.0,"useLegacyBottomAndRightAnchors":false}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\gui\\Jump.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":2.0},{"x":140.0,"y":2.0},{"x":140.0,"y":139.0},{"x":2.0,"y":139.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"zoom","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":0.0,"leftEdgeAnchor":0.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":0.0,"useLegacyBottomAndRightAnchors":false}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\gui\\Zoom.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":2.0},{"x":198.0,"y":2.0},{"x":198.0,"y":198.0},{"x":2.0,"y":198.0}]]}]}]}]},{"assetStoreId":"","bold":false,"italic":false,"name":"bullets","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[],"string":"100 / 100","font":"assets\\fonts\\Casper.ttf","textAlignment":"center","characterSize":60.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"100 / 100","font":"assets\\fonts\\Casper.ttf","textAlignment":"center","characterSize":60.0,"color":"255;255;255"}},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"pause","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\gui\\Menu.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":2.0},{"x":94.0,"y":2.0},{"x":94.0,"y":22.0},{"x":2.0,"y":22.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"ammoBG","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"SpriteRecolorizer","type":"Recolorizer::SpriteRecolorizer"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\placeholders\\black.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]},{"assetStoreId":"","name":"player","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Jump3D","type":"Jump3D::Jump3D","Object3D":"Object3D","JumpHeight":150.0,"MaxFallingSpeed":700.0,"Gravity":1000.0,"JumpSpeed":600.0,"JumpSustainDurationMax":0.2,"State":"Idle","CurrentJumpSpeed":0.19999992847454,"CurrentFallSpeed":0.19999992847454,"PreviousJumpSpeed":0.19999992847454,"PreviousFallSpeed":0.19999992847454,"HasPressedJumpKey":false,"CanJump":true,"ShouldStopAtZero":false,"PreviousState":"Idle"},{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true},{"name":"Walk3D","type":"Walk3D::Walk3D","RotationSpeedMax":180.0,"RotationAcceleration":720.0,"RotationDeceleration":720.0,"TranslationSpeedMax":400.0,"TranslationAcceleration":1600.0,"TranslationDeceleration":1600.0,"CurrentRotationSpeed":0.0,"PreviousRotationSpeed":0.0,"CurrentForwardSpeed":0.0,"CurrentSidewaysSpeed":0.0,"PreviousForwardSpeed":0.0,"PreviousSidewaysSpeed":0.0,"HasPressedTurnLeft":false,"HasPressedTurnRight":false,"HasPressedTurnLeftLast":false,"HadPressedTurnLeft":false,"HadPressedTurnRight":false,"HasPressedMoveForward":false,"HasPressedMoveBackward":false,"HadPressedMoveForward":false,"HadPressedMoveBackward":false,"HasPressedMoveBackwardLast":false,"HasPressedMoveLeft":false,"HasPressedMoveRight":false,"HadPressedMoveLeft":false,"HadPressedMoveRight":false,"HasPressedMoveLeftLast":false,"TargetedForwardSpeed":0.0,"TargetedSidewaysSpeed":0.0,"TargetedRotationSpeed":0.0}],"content":{"centerLocation":"ModelOrigin","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"StandardWithoutMetalness","modelResourceName":"assets\\models\\Flatman_LOD0.glb","originLocation":"ModelOrigin","rotationX":0.0,"rotationY":0.0,"rotationZ":90.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"playerCam","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"","backFaceResourceName":"","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"","rightFaceResourceName":"","topFaceResourceName":"","bottomFaceResourceName":"","frontFaceVisible":false,"backFaceVisible":false,"leftFaceVisible":false,"rightFaceVisible":false,"topFaceVisible":false,"bottomFaceVisible":false,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"Basic"}},{"assetStoreId":"","name":"ground","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DBox","type":"Shadows::Shadows3DBox","CastShadow3DBox":false,"ReceiveShadow3DBox":true}],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"assets\\images\\maps\\urbanPark\\parkGrass.png","backFaceResourceName":"","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"","rightFaceResourceName":"","topFaceResourceName":"","bottomFaceResourceName":"","frontFaceVisible":true,"backFaceVisible":false,"leftFaceVisible":false,"rightFaceVisible":false,"topFaceVisible":false,"bottomFaceVisible":false,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"StandardWithoutMetalness"}},{"assetStoreId":"","name":"platform","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DBox","type":"Shadows::Shadows3DBox","CastShadow3DBox":true,"ReceiveShadow3DBox":true}],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"texture_04.png","backFaceResourceName":"texture_04.png","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"texture_04.png","rightFaceResourceName":"texture_04.png","topFaceResourceName":"texture_04.png","bottomFaceResourceName":"texture_04.png","frontFaceVisible":true,"backFaceVisible":true,"leftFaceVisible":true,"rightFaceVisible":true,"topFaceVisible":true,"bottomFaceVisible":true,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"StandardWithoutMetalness"}},{"assetStoreId":"","name":"sun","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":true,"facesOrientation":"Y","frontFaceResourceName":"","backFaceResourceName":"assets\\glow.png","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"","rightFaceResourceName":"","topFaceResourceName":"","bottomFaceResourceName":"","frontFaceVisible":false,"backFaceVisible":true,"leftFaceVisible":false,"rightFaceVisible":false,"topFaceVisible":false,"bottomFaceVisible":false,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"Basic"}},{"assetStoreId":"","name":"tree","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ObjectCenter","depth":162.74872295558459,"height":137.85000085830695,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\tree.glb","originLocation":"BottomCenterZ","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":134.788920879364,"animations":[]}},{"assetStoreId":"","name":"beachTable","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"BottomCenterZ","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\BeachTable.glb","originLocation":"ObjectCenter","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"parkDome","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ObjectCenter","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\parkDome.glb","originLocation":"ObjectCenter","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"parkDomeRoof","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ModelOrigin","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\parkDomeRoof.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"grayClimbPole","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ModelOrigin","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\grayClimbPole.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"collision","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"assets\\placeholders\\black.png","backFaceResourceName":"","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"assets\\placeholders\\black.png","rightFaceResourceName":"assets\\placeholders\\black.png","topFaceResourceName":"assets\\placeholders\\black.png","bottomFaceResourceName":"assets\\placeholders\\black.png","frontFaceVisible":true,"backFaceVisible":false,"leftFaceVisible":true,"rightFaceVisible":true,"topFaceVisible":true,"bottomFaceVisible":true,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"Basic"}},{"assetStoreId":"","name":"curvedPath","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[],"content":{"centerLocation":"ModelOrigin","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\parkPath.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"path","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DBox","type":"Shadows::Shadows3DBox","CastShadow3DBox":false,"ReceiveShadow3DBox":true}],"content":{"width":100.0,"height":100.0,"depth":1.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"assets\\images\\maps\\urbanPark\\parkPath.png","backFaceResourceName":"","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"","rightFaceResourceName":"","topFaceResourceName":"","bottomFaceResourceName":"","frontFaceVisible":true,"backFaceVisible":false,"leftFaceVisible":false,"rightFaceVisible":false,"topFaceVisible":false,"bottomFaceVisible":false,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"StandardWithoutMetalness"}},{"assetStoreId":"","name":"circularBox","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ModelOrigin","depth":131.25000000000004,"height":300.00000000000008,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\circularBox.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":300.00000000000008,"animations":[]}},{"assetStoreId":"","name":"bush","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ModelOrigin","depth":264.90139584057035,"height":500.0,"keepAspectRatio":true,"materialType":"StandardWithoutMetalness","modelResourceName":"assets\\models\\Bush.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":99.95304048061371,"animations":[]}},{"assetStoreId":"","name":"Streetlight","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ModelOrigin","depth":544.6569204330444,"height":22.352560609579208,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\streetlight.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":229.4860415160656,"animations":[]}},{"assetStoreId":"","name":"parkBench","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ModelOrigin","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\parkBench.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"parkCenter","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ModelOrigin","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\parkCenter.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"dirt","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DBox","type":"Shadows::Shadows3DBox","CastShadow3DBox":true,"ReceiveShadow3DBox":true}],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"assets\\images\\maps\\orange.png","backFaceResourceName":"","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"assets\\images\\maps\\orange.png","rightFaceResourceName":"assets\\images\\maps\\orange.png","topFaceResourceName":"assets\\images\\maps\\orange.png","bottomFaceResourceName":"assets\\images\\maps\\orange.png","frontFaceVisible":true,"backFaceVisible":false,"leftFaceVisible":true,"rightFaceVisible":true,"topFaceVisible":true,"bottomFaceVisible":true,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"StandardWithoutMetalness"}}],"objectsFolderStructure":{"folderName":"__ROOT","children":[{"folderName":"urbanPark","children":[{"objectName":"parkDome"},{"objectName":"parkDomeRoof"}]},{"folderName":"buttons","children":[{"objectName":"fire"},{"objectName":"reload"},{"objectName":"sprint"},{"objectName":"zoom"}]},{"objectName":"reference"},{"objectName":"bullets"},{"objectName":"pause"},{"objectName":"ammoBG"},{"objectName":"player"},{"objectName":"playerCam"},{"objectName":"ground"},{"objectName":"parkCenter"},{"objectName":"platform"},{"objectName":"sun"},{"objectName":"tree"},{"objectName":"parkBench"},{"objectName":"circularBox"},{"objectName":"beachTable"},{"objectName":"grayClimbPole"},{"objectName":"collision"},{"objectName":"curvedPath"},{"objectName":"path"},{"objectName":"bush"},{"objectName":"Streetlight"},{"objectName":"dirt"}]},"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]}],"actions":[{"type":{"value":"PointLights::CreatePointLight"},"parameters":["","\"Light\"","\"255;255;255\"","1","9999","2","","no","\"2048\"","sun.CenterX()","sun.CenterY()","sun.Object3D::CenterZ()",""]},{"type":{"value":"PointLights::SetShadowBias"},"parameters":["","=","-0.0005","\"Light\"",""]},{"type":{"value":"Shadows::ShadowMap"},"parameters":["","","\"VSM\"",""]},{"type":{"value":"PointLights::SetNeedsUpdate"},"parameters":["","\"Light\"",""]},{"type":{"value":"BuiltinExternalLayouts::CreateObjectsFromExternalLayout"},"parameters":["button","\"urbanPark\"","0","0","0"]},{"type":{"value":"Cache"},"parameters":["player"]},{"type":{"value":"OpacityCapability::OpacityBehavior::SetValue"},"parameters":["button","Opacity","=","100"]},{"type":{"value":"OpacityCapability::OpacityBehavior::SetValue"},"parameters":["ammoBG","Opacity","=","100"]}]},{"colorB":254,"colorG":19,"colorR":144,"creationTime":0,"folded":true,"name":"Player","source":"","type":"BuiltinCommonInstructions::Group","events":[{"colorB":255,"colorG":38,"colorR":154,"creationTime":0,"name":"Movement","source":"","type":"BuiltinCommonInstructions::Group","events":[{"colorB":255,"colorG":77,"colorR":171,"creationTime":0,"name":"Walking","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"KeyPressed"},"parameters":["","w"]},{"type":{"value":"KeyPressed"},"parameters":["","Up"]}]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SimulateMoveForwardKey"},"parameters":["player","Walk3D",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"KeyPressed"},"parameters":["","a"]},{"type":{"value":"KeyPressed"},"parameters":["","Left"]}]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SimulateMoveLeftKey"},"parameters":["player","Walk3D",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"KeyPressed"},"parameters":["","s"]},{"type":{"value":"KeyPressed"},"parameters":["","Down"]}]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SimulateMoveBackwardKey"},"parameters":["player","Walk3D",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"KeyPressed"},"parameters":["","d"]},{"type":{"value":"KeyPressed"},"parameters":["","Right"]}]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SimulateMoveRightKey"},"parameters":["player","Walk3D",""]}]},{"disabled":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"LayerVisible"},"parameters":["","\"mobile\""]},{"type":{"value":"SpriteMultitouchJoystick::SpriteMultitouchJoystick::IsPressed"},"parameters":["joystick",""]}],"actions":[{"type":{"value":"AddForceAL"},"parameters":["playerCam","joystick.StickAngle() + playerHitbox.Angle() + 90","400",""]}]},{"colorB":254,"colorG":19,"colorR":144,"creationTime":0,"disabled":true,"folded":true,"name":"Head Bobbing","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"KeyPressed"},"parameters":["","w"]},{"type":{"value":"KeyPressed"},"parameters":["","Up"]},{"type":{"value":"KeyPressed"},"parameters":["","a"]},{"type":{"value":"KeyPressed"},"parameters":["","Left"]},{"type":{"value":"KeyPressed"},"parameters":["","s"]},{"type":{"value":"KeyPressed"},"parameters":["","Down"]},{"type":{"value":"KeyPressed"},"parameters":["","d"]},{"type":{"value":"KeyPressed"},"parameters":["","Right"]}]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"CameraShake3D::StartShaking"},"parameters":["",".5",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"KeyReleased"},"parameters":["","w"]},{"type":{"value":"KeyReleased"},"parameters":["","Up"]},{"type":{"value":"KeyReleased"},"parameters":["","a"]},{"type":{"value":"KeyReleased"},"parameters":["","Left"]},{"type":{"value":"KeyReleased"},"parameters":["","s"]},{"type":{"value":"KeyReleased"},"parameters":["","Down"]},{"type":{"value":"KeyReleased"},"parameters":["","d"]},{"type":{"value":"KeyReleased"},"parameters":["","Right"]}]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"CameraShake3D::StopShaking"},"parameters":["",".5",""]}]}],"parameters":[]}],"parameters":[]},{"colorB":255,"colorG":77,"colorR":171,"creationTime":0,"disabled":true,"folded":true,"name":"Crouching (Broken)","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"KeyPressed"},"parameters":["","LShift"]},{"type":{"value":"KeyPressed"},"parameters":["","RShift"]}]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"Tween::AddObjectPositionZTween2"},"parameters":["playerCam","Tween","Object3D","\"crouchCam\"","playerCam.Z() - 40","\"easeInOutCubic\"",".2",""]},{"type":{"value":"Tween::AddObjectDepthTween2"},"parameters":["playerCam","Tween","Object3D","\"crouch\"","playerCam.Depth() - 20","\"easeInOutCubic\"",".2",""]},{"type":{"value":"Wait"},"parameters":[".2"]},{"type":{"value":"SetSceneVariableAsBoolean"},"parameters":["crouch","True"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"SceneVariableAsBoolean"},"parameters":["crouch","True"]}],"actions":[{"type":{"value":"Scene3D::Base3DBehavior::SetZ"},"parameters":["playerCam","Object3D","=","playerCam.Object3D::Z()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"KeyReleased"},"parameters":["","LShift"]},{"type":{"value":"KeyReleased"},"parameters":["","RShift"]}]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"Tween::AddObjectPositionZTween2"},"parameters":["playerCam","Tween","Object3D","\"crouchCam\"","playerCam.Z() + 40","\"easeInOutCubic\"",".2",""]},{"type":{"value":"Tween::AddObjectDepthTween2"},"parameters":["playerCam","Tween","Object3D","\"crouch\"","playerCam.Depth() + 20","\"easeInOutCubic\"",".2",""]}]}],"parameters":[]}],"parameters":[]},{"colorB":255,"colorG":43,"colorR":156,"creationTime":0,"name":"Camera & Jump","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"KeyPressed"},"parameters":["","Space"]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SimulateJumpKey"},"parameters":["player","Jump3D",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"DepartScene"},"parameters":["player"]},{"type":{"value":"MouseButtonPressed"},"parameters":["","Left"]}]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"MousePointerLock::RequestPointerLock"},"parameters":["",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"MousePointerLock::isPointerLocked"},"parameters":["",""]}],"actions":[{"type":{"value":"SetAngle"},"parameters":["player","+","MousePointerLock::MovementX() / 10"]},{"type":{"value":"Scene3D::Base3DBehavior::SetRotationY"},"parameters":["playerCam","Object3D","+","MousePointerLock::MovementY() / 10"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"FirstPersonCamera::LookFromObjectEyes"},"parameters":["","playerCam","",""]},{"type":{"value":"SetAngle"},"parameters":["playerCam","=","player.Angle()"]}]}],"parameters":[]},{"colorB":255,"colorG":38,"colorR":154,"creationTime":0,"folded":true,"name":"Pistol","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"MouseButtonPressed"},"parameters":["","Left"]}],"actions":[{"type":{"value":"FireBullet::FireBullet::Fire"},"parameters":["player","FireBullet","player.CenterX()","player.CenterY()","bullet","player.Angle()","1000",""]},{"type":{"value":"Scene3D::Base3DBehavior::SetZ"},"parameters":["bullet","Object3D","=","player.Object3D::Z()"]}]}],"parameters":[]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":0,"g":0,"r":0,"textB":255,"textG":255,"textR":255},"comment":"Code reused from Polarity Shift (By MTSyntho)"}],"parameters":[]},{"colorB":255,"colorG":66,"colorR":167,"creationTime":0,"folded":true,"name":"Collisions","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"CollisionNP"},"parameters":["player","redPillar","","",""]}],"actions":[{"type":{"value":"SeparateFromObjects"},"parameters":["player","redPillar",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"CollisionNP"},"parameters":["bullet","redPillar","","",""]}],"actions":[{"type":{"value":"Delete"},"parameters":["bullet",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"CollisionNP"},"parameters":["bullet","enemy","","",""]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"Delete"},"parameters":["enemy",""]},{"type":{"value":"Delete"},"parameters":["bullet",""]}]}],"parameters":[]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreXY"},"parameters":["playerCam","=","player.X()","=","player.Y()"]},{"type":{"value":"Scene3D::Base3DBehavior::SetZ"},"parameters":["playerCam","Object3D","=","player.Object3D::Z() + 90"]},{"type":{"value":"Cache"},"parameters":["collision"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"FirstPersonCamera::LookFromObjectEyes"},"parameters":["","playerCam","",""]}]},{"disabled":true,"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"ThirdPersonCamera::LookFromDistanceAtObject3D"},"parameters":["","playerCam","Object3D","200","90","20","",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Collision3D::AreInCollision"},"parameters":["","player","Object3D","collision","Object3D","",""]}],"actions":[{"type":{"value":"Collision3D::SeparateFromObjects"},"parameters":["","player","Object3D","collision","Object3D",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Collision3D::AreInCollision"},"parameters":["","player","Object3D","ground","Object3D","",""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SetShouldStopAtZero"},"parameters":["player","Jump3D","yes",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Collision3D::AreInCollision"},"parameters":["","player","Object3D","ground","Object3D","",""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SetShouldStopAtZero"},"parameters":["player","Jump3D","no",""]}]},{"disabled":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Collision3D::AreInCollision"},"parameters":["","player","Object3D","dirt","Object3D","",""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SetShouldStopAtZero"},"parameters":["player","Jump3D","no",""]},{"type":{"value":"Jump3D::Jump3D::SetCurrentFallSpeed"},"parameters":["player","Jump3D","=","0",""]}]},{"disabled":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Collision3D::AreInCollision"},"parameters":["","player","Object3D","grayClimbPole","Object3D","",""]}],"actions":[{"type":{"value":"Collision3D::SeparateFromObjects"},"parameters":["","player","Object3D","grayClimbPole","Object3D",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Collision3D::AreInCollision"},"parameters":["","player","Object3D","grayClimbPole","Object3D","",""]},{"type":{"value":"KeyPressed"},"parameters":["","Space"]}],"actions":[{"type":{"value":"Scene3D::Base3DBehavior::SetZ"},"parameters":["player","Object3D","+","10"]},{"type":{"value":"Jump3D::Jump3D::SetCurrentFallSpeed"},"parameters":["player","Jump3D","=","0",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[]}],"layers":[{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":true,"name":"reference","renderingType":"","visibility":false,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":70.0,"camera3DNearPlaneDistance":3.0,"cameraType":"perspective","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"","renderingType":"","visibility":true,"cameras":[{"defaultSize":true,"defaultViewport":true,"height":0.0,"viewportBottom":1.0,"viewportLeft":0.0,"viewportRight":1.0,"viewportTop":0.0,"width":0.0}],"effects":[{"effectType":"Scene3D::DirectionalLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":0.7,"rotation":45.0},"stringParameters":{"color":"255;255;255","top":"Y-"},"booleanParameters":{}},{"effectType":"Scene3D::HemisphereLight","name":"Effect","doubleParameters":{"elevation":90.0,"intensity":0.5,"rotation":0.0},"stringParameters":{"groundColor":"102;180;177","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"collisions","renderingType":"","visibility":false,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"gui","renderingType":"2d","visibility":false,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]}],"behaviorsSharedData":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior"},{"name":"Animation","type":"AnimatableCapability::AnimatableBehavior"},{"name":"Effect","type":"EffectCapability::EffectBehavior"},{"name":"Flippable","type":"FlippableCapability::FlippableBehavior"},{"name":"Jump3D","type":"Jump3D::Jump3D"},{"name":"Object3D","type":"Scene3D::Base3DBehavior"},{"name":"Opacity","type":"OpacityCapability::OpacityBehavior"},{"name":"Resizable","type":"ResizableCapability::ResizableBehavior"},{"name":"Scale","type":"ScalableCapability::ScalableBehavior"},{"name":"Shadows3DBox","type":"Shadows::Shadows3DBox"},{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel"},{"name":"SpriteRecolorizer","type":"Recolorizer::SpriteRecolorizer"},{"name":"Text","type":"TextContainerCapability::TextContainerBehavior"},{"name":"Tween","type":"Tween::TweenBehavior"},{"name":"Walk3D","type":"Walk3D::Walk3D","Cos":0.0,"Sin":0.0}]},{"b":251,"disableInputWhenNotFocused":true,"mangledName":"lighting","name":"lighting","r":148,"standardSortMethod":true,"stopSoundsOnStartup":true,"title":"","v":255,"uiSettings":{"grid":false,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":false,"zoomFactor":0.28655169534542709,"windowMask":false},"objectsGroups":[],"variables":[],"instances":[{"angle":0.0,"customSize":true,"depth":1.0,"height":1080.0,"layer":"reference","locked":true,"name":"reference","persistentUuid":"4bc86807-cdd5-49fe-9d45-2f6055f336fa","sealed":true,"width":2157.0,"x":0.0,"y":0.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":5.0,"height":10.0,"layer":"","name":"playerCam","persistentUuid":"883f63c5-8b1b-499e-9b08-3607c652b58a","width":10.0,"x":855.0,"y":516.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"sun","persistentUuid":"d15e8dc3-d059-41c2-af7e-f0cbd4adb5d6","width":0.0,"x":919.0,"y":461.0,"z":1000.0,"zOrder":13,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"playerCam","persistentUuid":"1e40d4b2-9a23-4dae-9461-e1b541f7c647","width":0.0,"x":783.0,"y":481.0,"z":5.0,"zOrder":14,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":8.0,"height":482.0,"keepRatio":true,"layer":"gui","name":"menu","persistentUuid":"b27e3795-3839-4337-be09-56eb59c1dcf4","width":698.0,"x":40.0,"y":556.0,"zOrder":15,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":47.0,"keepRatio":true,"layer":"gui","name":"skyColorTitle","persistentUuid":"cbec996a-adb0-431e-843a-b7f9714f3795","width":222.0,"x":91.0,"y":591.0,"zOrder":16,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":2.0,"height":41.0,"keepRatio":true,"layer":"gui","name":"skyColor","persistentUuid":"36b602bb-0e6e-4c84-bef1-a28c72f006e4","width":470.0,"x":91.0,"y":656.0,"zOrder":17,"numberProperties":[],"stringProperties":[{"name":"placeholder","value":"#94FFFB"}],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":47.0,"keepRatio":true,"layer":"gui","name":"sunlightTitle","persistentUuid":"43c8e022-804f-4f9c-8bca-1b0b6ab8eb68","width":317.0,"x":91.0,"y":737.0,"zOrder":18,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":41.0,"keepRatio":true,"layer":"gui","name":"sunlight","persistentUuid":"933fadc8-7261-48b7-a7da-2e016956d344","width":470.0,"x":91.0,"y":800.0,"zOrder":19,"numberProperties":[],"stringProperties":[{"name":"placeholder","value":"#FFFFFF"}],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":47.0,"keepRatio":true,"layer":"gui","name":"lightBtn","persistentUuid":"1f26912b-3735-4223-9932-c08986d84965","width":81.0,"x":612.0,"y":763.0,"zOrder":20,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":47.0,"keepRatio":true,"layer":"gui","name":"decayTitle","persistentUuid":"58dd91a9-60d9-4942-bde4-7c6af221b160","width":331.0,"x":91.0,"y":875.0,"zOrder":21,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":81.0,"height":41.0,"layer":"gui","name":"decay","persistentUuid":"68bd9327-8b9d-45da-8c57-62ca3621bfa1","width":470.0,"x":91.0,"y":941.0,"zOrder":22,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":48.0,"height":28.0,"keepRatio":true,"layer":"gui","name":"lighting","persistentUuid":"e37435d1-1c34-48c2-aebc-af9b6ec67d85","width":86.0,"x":91.0,"y":160.0,"zOrder":23,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":192.0,"keepRatio":true,"layer":"gui","name":"menu","persistentUuid":"f7dfe200-fb0d-493d-b8f9-ec448bbe0f39","width":288.0,"x":40.0,"y":47.0,"zOrder":22,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"gui","name":"lightingTitle","persistentUuid":"49592728-b25a-4fe4-b703-315d10e6b9ab","width":0.0,"x":91.0,"y":83.0,"zOrder":25,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":78.0,"layer":"gui","name":"exit","persistentUuid":"e352f31e-5835-44b5-af47-fd60ee2d6fe2","width":78.0,"x":1758.0,"y":79.0,"zOrder":26,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":128.0,"keepRatio":true,"layer":"gui","name":"menu","persistentUuid":"822fe85c-dde5-4369-97cb-a423b67c8648","width":128.0,"x":1732.0,"y":54.0,"zOrder":24,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":0.0,"height":1080.0,"layer":"fade","name":"fade","persistentUuid":"b46df830-fe6d-4c31-a53c-d2c2e007d26f","width":1920.0,"x":0.0,"y":0.0,"zOrder":27,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"objects":[{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"reference","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\placeholders\\reference2.jpg","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":1440.0,"y":0.0},{"x":1440.0,"y":720.0},{"x":0.0,"y":720.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"fire","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":0.0,"leftEdgeAnchor":0.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":0.0,"useLegacyBottomAndRightAnchors":false}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\gui\\fire.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":3.0},{"x":234.0,"y":3.0},{"x":234.0,"y":264.0},{"x":2.0,"y":264.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"reload","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":0.0,"leftEdgeAnchor":0.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":0.0,"useLegacyBottomAndRightAnchors":false}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\gui\\Reload.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":3.0,"y":2.0},{"x":179.0,"y":2.0},{"x":179.0,"y":167.0},{"x":3.0,"y":167.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"sprint","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":0.0,"leftEdgeAnchor":0.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":0.0,"useLegacyBottomAndRightAnchors":false}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\gui\\Jump.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":2.0},{"x":140.0,"y":2.0},{"x":140.0,"y":139.0},{"x":2.0,"y":139.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"zoom","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior","bottomEdgeAnchor":0.0,"leftEdgeAnchor":0.0,"relativeToOriginalWindowSize":true,"rightEdgeAnchor":2.0,"topEdgeAnchor":0.0,"useLegacyBottomAndRightAnchors":false}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\gui\\Zoom.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":2.0},{"x":198.0,"y":2.0},{"x":198.0,"y":198.0},{"x":2.0,"y":198.0}]]}]}]}]},{"assetStoreId":"","bold":false,"italic":false,"name":"bullets","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[],"string":"100 / 100","font":"assets\\fonts\\Casper.ttf","textAlignment":"center","characterSize":60.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"100 / 100","font":"assets\\fonts\\Casper.ttf","textAlignment":"center","characterSize":60.0,"color":"255;255;255"}},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"pause","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\gui\\Menu.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":2.0},{"x":94.0,"y":2.0},{"x":94.0,"y":22.0},{"x":2.0,"y":22.0}]]}]}]}]},{"assetStoreId":"","name":"player","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Jump3D","type":"Jump3D::Jump3D","Object3D":"Object3D","JumpHeight":150.0,"MaxFallingSpeed":700.0,"Gravity":1000.0,"JumpSpeed":600.0,"JumpSustainDurationMax":0.2,"State":"Idle","CurrentJumpSpeed":0.19999992847454,"CurrentFallSpeed":0.19999992847454,"PreviousJumpSpeed":0.19999992847454,"PreviousFallSpeed":0.19999992847454,"HasPressedJumpKey":false,"CanJump":true,"ShouldStopAtZero":true,"PreviousState":"Idle"},{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true},{"name":"Walk3D","type":"Walk3D::Walk3D","RotationSpeedMax":180.0,"RotationAcceleration":720.0,"RotationDeceleration":720.0,"TranslationSpeedMax":400.0,"TranslationAcceleration":1600.0,"TranslationDeceleration":1600.0,"CurrentRotationSpeed":0.0,"PreviousRotationSpeed":0.0,"CurrentForwardSpeed":0.0,"CurrentSidewaysSpeed":0.0,"PreviousForwardSpeed":0.0,"PreviousSidewaysSpeed":0.0,"HasPressedTurnLeft":false,"HasPressedTurnRight":false,"HasPressedTurnLeftLast":false,"HadPressedTurnLeft":false,"HadPressedTurnRight":false,"HasPressedMoveForward":false,"HasPressedMoveBackward":false,"HadPressedMoveForward":false,"HadPressedMoveBackward":false,"HasPressedMoveBackwardLast":false,"HasPressedMoveLeft":false,"HasPressedMoveRight":false,"HadPressedMoveLeft":false,"HadPressedMoveRight":false,"HasPressedMoveLeftLast":false,"TargetedForwardSpeed":0.0,"TargetedSidewaysSpeed":0.0,"TargetedRotationSpeed":0.0}],"content":{"centerLocation":"ModelOrigin","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"StandardWithoutMetalness","modelResourceName":"assets\\models\\Flatman_LOD0.glb","originLocation":"ModelOrigin","rotationX":0.0,"rotationY":0.0,"rotationZ":90.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"playerCam","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"","backFaceResourceName":"","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"","rightFaceResourceName":"","topFaceResourceName":"","bottomFaceResourceName":"","frontFaceVisible":false,"backFaceVisible":false,"leftFaceVisible":false,"rightFaceVisible":false,"topFaceVisible":false,"bottomFaceVisible":false,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"Basic"}},{"assetStoreId":"","name":"ground","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DBox","type":"Shadows::Shadows3DBox","CastShadow3DBox":false,"ReceiveShadow3DBox":true}],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"assets\\images\\maps\\urbanPark\\parkGrass.png","backFaceResourceName":"","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"","rightFaceResourceName":"","topFaceResourceName":"","bottomFaceResourceName":"","frontFaceVisible":true,"backFaceVisible":false,"leftFaceVisible":false,"rightFaceVisible":false,"topFaceVisible":false,"bottomFaceVisible":false,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"StandardWithoutMetalness"}},{"assetStoreId":"","name":"platform","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DBox","type":"Shadows::Shadows3DBox","CastShadow3DBox":true,"ReceiveShadow3DBox":true}],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"texture_04.png","backFaceResourceName":"texture_04.png","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"texture_04.png","rightFaceResourceName":"texture_04.png","topFaceResourceName":"texture_04.png","bottomFaceResourceName":"texture_04.png","frontFaceVisible":true,"backFaceVisible":true,"leftFaceVisible":true,"rightFaceVisible":true,"topFaceVisible":true,"bottomFaceVisible":true,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"StandardWithoutMetalness"}},{"assetStoreId":"","name":"sun","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"","backFaceResourceName":"assets\\glow.png","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"","rightFaceResourceName":"","topFaceResourceName":"","bottomFaceResourceName":"","frontFaceVisible":false,"backFaceVisible":true,"leftFaceVisible":false,"rightFaceVisible":false,"topFaceVisible":false,"bottomFaceVisible":false,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"Basic"}},{"assetStoreId":"","name":"tree","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ObjectCenter","depth":162.74872295558459,"height":137.85000085830695,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\tree.glb","originLocation":"BottomCenterZ","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":134.788920879364,"animations":[]}},{"assetStoreId":"","name":"beachTable","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"BottomCenterZ","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\BeachTable.glb","originLocation":"ObjectCenter","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"parkDome","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ObjectCenter","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\parkDome.glb","originLocation":"ObjectCenter","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"parkDomeRoof","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ModelOrigin","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\parkDomeRoof.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"grayClimbPole","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel","CastShadow3DModel":true,"ReceiveShadow3DModel":true}],"content":{"centerLocation":"ModelOrigin","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\grayClimbPole.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"assetStoreId":"","name":"collision","type":"Scene3D::Cube3DObject","variables":[],"effects":[],"behaviors":[],"content":{"width":100.0,"height":100.0,"depth":100.0,"enableTextureTransparency":false,"facesOrientation":"Y","frontFaceResourceName":"assets\\placeholders\\black.png","backFaceResourceName":"","backFaceUpThroughWhichAxisRotation":"X","leftFaceResourceName":"assets\\placeholders\\black.png","rightFaceResourceName":"assets\\placeholders\\black.png","topFaceResourceName":"assets\\placeholders\\black.png","bottomFaceResourceName":"assets\\placeholders\\black.png","frontFaceVisible":true,"backFaceVisible":false,"leftFaceVisible":true,"rightFaceVisible":true,"topFaceVisible":true,"bottomFaceVisible":true,"frontFaceResourceRepeat":false,"backFaceResourceRepeat":false,"leftFaceResourceRepeat":false,"rightFaceResourceRepeat":false,"topFaceResourceRepeat":false,"bottomFaceResourceRepeat":false,"materialType":"Basic"}},{"assetStoreId":"","name":"path","type":"Scene3D::Model3DObject","variables":[],"effects":[],"behaviors":[],"content":{"centerLocation":"ModelOrigin","depth":100.0,"height":100.0,"keepAspectRatio":true,"materialType":"KeepOriginal","modelResourceName":"assets\\models\\parkPath.glb","originLocation":"ModelOrigin","rotationX":90.0,"rotationY":0.0,"rotationZ":0.0,"width":100.0,"animations":[]}},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"menu","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\placeholders\\black.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]},{"assetStoreId":"","bold":false,"italic":false,"name":"skyColorTitle","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[],"string":"Sky Color:","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":50.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Sky Color:","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":50.0,"color":"255;255;255"}},{"assetStoreId":"","name":"skyColor","type":"TextInput::TextInputObject","variables":[],"effects":[],"behaviors":[],"content":{"initialValue":"","placeholder":"#","fontResourceName":"assets\\fonts\\Casper.ttf","fontSize":30.0,"inputType":"text","textColor":"0;0;0","fillColor":"255;255;255","fillOpacity":255.0,"borderColor":"0;0;0","borderOpacity":255.0,"borderWidth":1.0,"readOnly":false,"disabled":false}},{"assetStoreId":"","bold":false,"italic":false,"name":"sunlightTitle","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[],"string":"Sunlight Color:","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":50.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Sunlight Color:","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":50.0,"color":"255;255;255"}},{"assetStoreId":"","name":"sunlight","type":"TextInput::TextInputObject","variables":[],"effects":[],"behaviors":[],"content":{"initialValue":"","placeholder":"#","fontResourceName":"assets\\fonts\\Casper.ttf","fontSize":30.0,"inputType":"text","textColor":"0;0;0","fillColor":"255;255;255","fillOpacity":255.0,"borderColor":"0;0;0","borderOpacity":255.0,"borderWidth":1.0,"readOnly":false,"disabled":false}},{"assetStoreId":"","bold":false,"italic":false,"name":"lightBtn","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[],"string":"Set!","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":50.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Set!","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":50.0,"color":"255;255;255"}},{"assetStoreId":"","bold":false,"italic":false,"name":"decayTitle","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[],"string":"Lighting Decay:","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":50.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Lighting Decay:","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":50.0,"color":"255;255;255"}},{"assetStoreId":"bfeeb465a4a164b560a2215e3ff9e78e66123af43cbf7ef1f22d56fca4271c80","name":"decay","type":"PanelSpriteSlider::PanelSpriteSlider","variables":[],"effects":[],"behaviors":[],"content":{"BarTopPadding":6.0,"BarLeftPadding":6.0,"BarRightPadding":6.0,"BarBottomPadding":6.0,"LabelMargin":6.0,"MinValue":1.0,"MaxValue":19.0,"StepSize":1.0,"InitialValue":2.0},"childrenContent":{"Background":{"bottomMargin":4.0,"height":28.0,"leftMargin":2.0,"rightMargin":2.0,"texture":"Square White Slider Border.png","tiled":false,"topMargin":4.0,"width":265.0},"FillBar":{"bottomMargin":2.0,"height":16.0,"leftMargin":0.0,"rightMargin":0.0,"texture":"Square White Slider Fill Bar.png","tiled":false,"topMargin":0.0,"width":16.0},"Label":{"bold":false,"italic":false,"smoothed":true,"underlined":false,"string":"It displays the value when it changes.","font":"assets\\fonts\\Casper.ttf","textAlignment":"","characterSize":30.0,"color":{"b":221,"g":221,"r":221},"content":{"bold":false,"isOutlineEnabled":true,"isShadowEnabled":true,"italic":false,"outlineColor":"0;0;0","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":10.0,"shadowColor":"0;0;0","shadowDistance":0.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"It displays the value when it changes.","font":"assets\\fonts\\Casper.ttf","textAlignment":"","characterSize":30.0,"color":"221;221;221"}},"Thumb":{"bottomMargin":2.0,"height":36.0,"leftMargin":1.0,"rightMargin":1.0,"texture":"Square White Slider Thumb.png","tiled":false,"topMargin":2.0,"width":22.0}}},{"assetStoreId":"bfeeb465a4a164b560a2215e3ff9e78e66123af43cbf7ef1f22d56fca4271c80","name":"lighting","type":"PanelSpriteSlider::PanelSpriteSlider","variables":[],"effects":[],"behaviors":[],"content":{"BarTopPadding":6.0,"BarLeftPadding":6.0,"BarRightPadding":6.0,"BarBottomPadding":6.0,"LabelMargin":6.0,"MaxValue":1.0,"InitialValue":1.0},"childrenContent":{"Background":{"bottomMargin":4.0,"height":28.0,"leftMargin":2.0,"rightMargin":2.0,"texture":"Square White Slider Border.png","tiled":false,"topMargin":4.0,"width":265.0},"FillBar":{"bottomMargin":2.0,"height":16.0,"leftMargin":0.0,"rightMargin":0.0,"texture":"Square White Slider Fill Bar.png","tiled":false,"topMargin":0.0,"width":16.0},"Label":{"bold":false,"italic":false,"smoothed":true,"underlined":false,"string":"It displays the value when it changes.","font":"","textAlignment":"","characterSize":0.0,"color":{"b":221,"g":221,"r":221},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"It displays the value when it changes.","font":"","textAlignment":"","characterSize":0.0,"color":"221;221;221"}},"Thumb":{"bottomMargin":2.0,"height":36.0,"leftMargin":1.0,"rightMargin":1.0,"texture":"Square White Slider Thumb.png","tiled":false,"topMargin":2.0,"width":22.0}}},{"assetStoreId":"","bold":false,"italic":false,"name":"lightingTitle","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[],"string":"Lighting:","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":50.0,"color":{"b":255,"g":255,"r":255},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"Lighting:","font":"assets\\fonts\\Casper.ttf","textAlignment":"left","characterSize":50.0,"color":"255;255;255"}},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"exit","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\images\\ui\\menu\\Quit.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":2.0,"y":2.0},{"x":84.0,"y":2.0},{"x":84.0,"y":90.0},{"x":2.0,"y":90.0}]]}]}]}]},{"adaptCollisionMaskAutomatically":true,"assetStoreId":"","name":"fade","type":"Sprite","updateIfNotVisible":false,"variables":[],"effects":[],"behaviors":[{"name":"Tween","type":"Tween::TweenBehavior"}],"animations":[{"name":"","useMultipleDirections":false,"directions":[{"looping":false,"timeBetweenFrames":0.08,"sprites":[{"hasCustomCollisionMask":true,"image":"assets\\placeholders\\black.png","points":[],"originPoint":{"name":"origine","x":0.0,"y":0.0},"centerPoint":{"automatic":true,"name":"centre","x":0.0,"y":0.0},"customCollisionMask":[[{"x":0.0,"y":0.0},{"x":32.0,"y":0.0},{"x":32.0,"y":32.0},{"x":0.0,"y":32.0}]]}]}]}]}],"objectsFolderStructure":{"folderName":"__ROOT","children":[{"folderName":"urbanPark","children":[{"objectName":"parkDome"},{"objectName":"parkDomeRoof"}]},{"folderName":"buttons","children":[{"objectName":"fire"},{"objectName":"reload"},{"objectName":"sprint"},{"objectName":"zoom"}]},{"objectName":"reference"},{"objectName":"bullets"},{"objectName":"pause"},{"objectName":"player"},{"objectName":"playerCam"},{"objectName":"ground"},{"objectName":"platform"},{"objectName":"sun"},{"objectName":"tree"},{"objectName":"beachTable"},{"objectName":"grayClimbPole"},{"objectName":"collision"},{"objectName":"path"},{"objectName":"menu"},{"objectName":"fade"},{"objectName":"skyColorTitle"},{"objectName":"sunlightTitle"},{"objectName":"decayTitle"},{"objectName":"lightingTitle"},{"objectName":"skyColor"},{"objectName":"sunlight"},{"objectName":"lightBtn"},{"objectName":"decay"},{"objectName":"lighting"},{"objectName":"exit"}]},"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DepartScene"},"parameters":[""]}],"actions":[{"type":{"value":"PointLights::CreatePointLight"},"parameters":["","\"Light\"","\"255;255;255\"","1","9999","2","","no","\"2048\"","sun.CenterX()","sun.CenterY()","sun.Object3D::CenterZ()",""]},{"type":{"value":"PointLights::SetShadowBias"},"parameters":["","=","-0.0005","\"Light\"",""]},{"type":{"value":"Shadows::ShadowMap"},"parameters":["","","\"VSM\"",""]},{"type":{"value":"ShowLayer"},"parameters":["","\"fade\""]},{"type":{"value":"BuiltinExternalLayouts::CreateObjectsFromExternalLayout"},"parameters":["button","\"testArena\"","0","0","0"]},{"type":{"value":"PointLights::SetNeedsUpdate"},"parameters":["","\"Light\"",""]},{"type":{"value":"Scene3D::Base3DBehavior::SetZ"},"parameters":["playerCam","Object3D","=","200"]},{"type":{"value":"SetAngle"},"parameters":["playerCam","=","-45"]},{"type":{"value":"Scene3D::Base3DBehavior::SetRotationY"},"parameters":["playerCam","Object3D","=","15"]},{"type":{"value":"OpacityCapability::OpacityBehavior::SetValue"},"parameters":["menu","Opacity","=","100"]},{"type":{"value":"EnableLayerEffect"},"parameters":["","","\"Flats\"",""]},{"type":{"value":"Tween::TweenBehavior::AddObjectOpacityTween2"},"parameters":["fade","Tween","\"\"","0","\"linear\"",".5",""]}]},{"colorB":27,"colorG":2,"colorR":208,"creationTime":0,"folded":true,"name":"Camera Controls","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Not"},"parameters":[],"subInstructions":[{"type":{"value":"KeyPressed"},"parameters":["","Left"]},{"type":{"value":"KeyPressed"},"parameters":["","a"]},{"type":{"value":"KeyPressed"},"parameters":["","Right"]},{"type":{"value":"KeyPressed"},"parameters":["","d"]}]}],"actions":[{"type":{"value":"SetAngle"},"parameters":["playerCam","+","5 * TimeDelta()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"KeyPressed"},"parameters":["","Left"]},{"type":{"value":"KeyPressed"},"parameters":["","a"]}]}],"actions":[{"type":{"value":"SetAngle"},"parameters":["playerCam","-","50 * TimeDelta()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"KeyPressed"},"parameters":["","Right"]},{"type":{"value":"KeyPressed"},"parameters":["","d"]}]}],"actions":[{"type":{"value":"SetAngle"},"parameters":["playerCam","+","50 * TimeDelta()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"KeyPressed"},"parameters":["","w"]}],"actions":[{"type":{"value":"Scene3D::Base3DBehavior::SetZ"},"parameters":["playerCam","Object3D","+","5"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"KeyPressed"},"parameters":["","s"]}],"actions":[{"type":{"value":"Scene3D::Base3DBehavior::SetZ"},"parameters":["playerCam","Object3D","-","5"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"KeyPressed"},"parameters":["","Up"]}],"actions":[{"type":{"value":"Scene3D::Base3DBehavior::SetRotationY"},"parameters":["playerCam","Object3D","-","2"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"KeyPressed"},"parameters":["","Down"]}],"actions":[{"type":{"value":"Scene3D::Base3DBehavior::SetRotationY"},"parameters":["playerCam","Object3D","+","2"]}]}],"parameters":[]},{"colorB":0,"colorG":125,"colorR":255,"creationTime":0,"folded":true,"name":"Sliders n Values","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::IsBeingDragged"},"parameters":["decay",""]}],"actions":[{"type":{"value":"PointLights::SetDecay"},"parameters":["","=","decay.Value()","\"Light\"",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::Value"},"parameters":["lighting","=","0",""]}],"actions":[{"type":{"value":"EnableLayerEffect"},"parameters":["","","\"Flats\"","yes"]},{"type":{"value":"EnableLayerEffect"},"parameters":["","","\"General Light\"",""]},{"type":{"value":"EnableLayerEffect"},"parameters":["","","\"Sunlight\"",""]},{"type":{"value":"PointLights::DeletePointLight"},"parameters":["","\"Light\"",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::Value"},"parameters":["lighting","=","1",""]}],"actions":[{"type":{"value":"EnableLayerEffect"},"parameters":["","","\"Flats\"","no"]},{"type":{"value":"EnableLayerEffect"},"parameters":["","","\"General Light\"","yes"]},{"type":{"value":"EnableLayerEffect"},"parameters":["","","\"Sunlight\"","yes"]},{"type":{"value":"PointLights::CreatePointLight"},"parameters":["","\"Light\"","\"255;255;255\"","1","9999","2","","no","\"2048\"","sun.CenterX()","sun.CenterY()","sun.Object3D::CenterZ()",""]},{"type":{"value":"PointLights::SetShadowBias"},"parameters":["","=","-0.0005","\"Light\"",""]},{"type":{"value":"Shadows::ShadowMap"},"parameters":["","","\"VSM\"",""]},{"type":{"value":"PointLights::SetNeedsUpdate"},"parameters":["","\"Light\"",""]}]}],"parameters":[]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"FirstPersonCamera::LookFromObjectEyes"},"parameters":["","playerCam","",""]}]},{"folded":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"SourisSurObjet"},"parameters":["lightBtn","","",""]},{"type":{"value":"MouseButtonPressed"},"parameters":["","Left"]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"PointLights::SetColor"},"parameters":["","\"Light\"","ColorConversion::HexToRgb(sunlight.Text())",""]},{"type":{"value":"SceneBackground"},"parameters":["","ColorConversion::HexToRgb(skyColor.Text())"]},{"type":{"value":"SetLayerEffectStringParameter"},"parameters":["","","\"General Light\"","\"skyColor\"","ColorConversion::HexToRgb(sunlight.Text())"]},{"type":{"value":"SetLayerEffectStringParameter"},"parameters":["","","\"Sunlight\"","\"color\"","ColorConversion::HexToRgb(sunlight.Text())"]},{"type":{"value":"SetLayerEffectStringParameter"},"parameters":["","","\"General Light\"","\"skyColor\"","ColorConversion::HexToRgb(skyColor.Text())"]}],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"TextContainerCapability::TextContainerBehavior::Value"},"parameters":["skyColor","Text","=","\"\""]}],"actions":[{"type":{"value":"SceneBackground"},"parameters":["","\"148;255;251\""]},{"type":{"value":"SetLayerEffectStringParameter"},"parameters":["","","\"General Light\"","\"skyColor\"","\"148;255;251\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"TextContainerCapability::TextContainerBehavior::Value"},"parameters":["sunlight","Text","=","\"\""]}],"actions":[{"type":{"value":"PointLights::SetColor"},"parameters":["","\"Light\"","\"255;255;255\"",""]},{"type":{"value":"SetLayerEffectStringParameter"},"parameters":["","","\"General Light\"","\"skyColor\"","\"255;255;255\""]},{"type":{"value":"SetLayerEffectStringParameter"},"parameters":["","","\"Sunlight\"","\"color\"","\"255;255;255\""]}]}]},{"folded":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"SourisSurObjet"},"parameters":["exit","","",""]},{"type":{"value":"MouseButtonPressed"},"parameters":["","Left"]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"Tween::TweenBehavior::AddObjectOpacityTween2"},"parameters":["fade","Tween","\"\"","255","\"linear\"",".5",""]},{"type":{"value":"Wait"},"parameters":[".5"]},{"type":{"value":"Scene"},"parameters":["","\"menu\"",""]}],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"TextContainerCapability::TextContainerBehavior::Value"},"parameters":["skyColor","Text","=","\"\""]}],"actions":[{"type":{"value":"SceneBackground"},"parameters":["","\"148;255;251\""]},{"type":{"value":"SetLayerEffectStringParameter"},"parameters":["","","\"General Light\"","\"skyColor\"","\"148;255;251\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"TextContainerCapability::TextContainerBehavior::Value"},"parameters":["sunlight","Text","=","\"\""]}],"actions":[{"type":{"value":"PointLights::SetColor"},"parameters":["","\"Light\"","\"255;255;255\"",""]},{"type":{"value":"SetLayerEffectStringParameter"},"parameters":["","","\"General Light\"","\"skyColor\"","\"255;255;255\""]},{"type":{"value":"SetLayerEffectStringParameter"},"parameters":["","","\"Sunlight\"","\"color\"","\"255;255;255\""]}]}]}],"layers":[{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":true,"name":"reference","renderingType":"","visibility":false,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":70.0,"camera3DNearPlaneDistance":3.0,"cameraType":"perspective","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"","renderingType":"","visibility":true,"cameras":[{"defaultSize":true,"defaultViewport":true,"height":0.0,"viewportBottom":1.0,"viewportLeft":0.0,"viewportRight":1.0,"viewportTop":0.0,"width":0.0}],"effects":[{"effectType":"Scene3D::DirectionalLight","name":"Sunlight","doubleParameters":{"elevation":45.0,"intensity":0.7,"rotation":45.0},"stringParameters":{"color":"255;255;255","top":"Y-"},"booleanParameters":{}},{"effectType":"Scene3D::HemisphereLight","name":"General Light","doubleParameters":{"elevation":90.0,"intensity":0.5,"rotation":0.0},"stringParameters":{"groundColor":"148;255;251","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}},{"effectType":"Scene3D::AmbientLight","name":"Flats","doubleParameters":{"intensity":0.75},"stringParameters":{"color":"255;255;255"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"collisions","renderingType":"","visibility":false,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"gui","renderingType":"2d","visibility":true,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]},{"ambientLightColorB":200,"ambientLightColorG":200,"ambientLightColorR":200,"camera3DFarPlaneDistance":10000.0,"camera3DFieldOfView":45.0,"camera3DNearPlaneDistance":3.0,"cameraType":"","followBaseLayerCamera":false,"isLightingLayer":false,"isLocked":false,"name":"fade","renderingType":"","visibility":false,"cameras":[],"effects":[{"effectType":"Scene3D::HemisphereLight","name":"3D Light","doubleParameters":{"elevation":45.0,"intensity":1.0,"rotation":0.0},"stringParameters":{"groundColor":"64;64;64","skyColor":"255;255;255","top":"Y-"},"booleanParameters":{}}]}],"behaviorsSharedData":[{"name":"Anchor","type":"AnchorBehavior::AnchorBehavior"},{"name":"Animation","type":"AnimatableCapability::AnimatableBehavior"},{"name":"Effect","type":"EffectCapability::EffectBehavior"},{"name":"Flippable","type":"FlippableCapability::FlippableBehavior"},{"name":"Jump3D","type":"Jump3D::Jump3D"},{"name":"Object3D","type":"Scene3D::Base3DBehavior"},{"name":"Opacity","type":"OpacityCapability::OpacityBehavior"},{"name":"Resizable","type":"ResizableCapability::ResizableBehavior"},{"name":"Scale","type":"ScalableCapability::ScalableBehavior"},{"name":"Shadows3DBox","type":"Shadows::Shadows3DBox"},{"name":"Shadows3DModel","type":"Shadows::Shadows3DModel"},{"name":"SpriteRecolorizer","type":"Recolorizer::SpriteRecolorizer"},{"name":"Text","type":"TextContainerCapability::TextContainerBehavior"},{"name":"Tween","type":"Tween::TweenBehavior"},{"name":"Walk3D","type":"Walk3D::Walk3D","Cos":0.0,"Sin":0.0}]}],"externalEvents":[{"associatedLayout":"","lastChangeTimeStamp":0,"name":"Untitled external events","events":[]}],"eventsFunctionsExtensions":[{"author":"","category":"User interface","extensionNamespace":"","fullName":"Slider","helpPath":"/objects/slider","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=","name":"PanelSpriteSlider","previewIconUrl":"https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg","shortDescription":"A draggable slider that users can move to select a numerical value.","version":"1.4.2","description":["A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.","","There are ready-to-use sliders in the asset-store [settings UI pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=settings-ui-settings-ui)."],"origin":{"identifier":"PanelSpriteSlider","name":"gdevelop-extension-store"},"tags":["draggable","slider","ui","widget"],"authorIds":["IWykYNRvhCZBN3vEgKEbBPOR3Oc2","gqDaZjCfevOOxBYkK6zlhtZnXCg1"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[],"eventsBasedBehaviors":[{"description":"Represent a value on a slider.","fullName":"Slider","name":"Slider","objectType":"","private":true,"eventsFunctions":[{"description":"the value of the object.","fullName":"Value","functionType":"ExpressionAndCondition","name":"Value","sentence":"the value","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["Object.Behavior::PropertyValue()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"Value","name":"SetValue","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::Slider::PropertyStepSize"},"parameters":["Object","Behavior","=","0"]}],"actions":[{"type":{"value":"PanelSpriteSlider::Slider::SetPropertyValue"},"parameters":["Object","Behavior","=","clamp(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyMinValue(), Object.Behavior::PropertyMaxValue())"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::Slider::PropertyStepSize"},"parameters":["Object","Behavior","!=","0"]}],"actions":[{"type":{"value":"PanelSpriteSlider::Slider::SetPropertyValue"},"parameters":["Object","Behavior","=","clamp(round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyStepSize()) * Object.Behavior::PropertyStepSize(), Object.Behavior::PropertyMinValue(), Object.Behavior::PropertyMaxValue())"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"description":"the minimum value of the object.","fullName":"Minimum value","functionType":"ExpressionAndCondition","group":"Resource bar configuration","name":"MinValue","sentence":"the minimum value","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["Object.Behavior::PropertyMinValue()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"MinValue","name":"SetMinValue","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::Slider::SetPropertyMinValue"},"parameters":["Object","Behavior","=","GetArgumentAsNumber(\"Value\")"]},{"type":{"value":"PanelSpriteSlider::Slider::SetValue"},"parameters":["Object","Behavior","=","Object.Behavior::Value()",""]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"description":"the maximum value of the object.","fullName":"Maximum value","functionType":"ExpressionAndCondition","group":"Resource bar configuration","name":"MaxValue","sentence":"the maximum value","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["Object.Behavior::PropertyMaxValue()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"MaxValue","name":"SetMaxValue","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::Slider::SetPropertyMaxValue"},"parameters":["Object","Behavior","=","GetArgumentAsNumber(\"Value\")"]},{"type":{"value":"PanelSpriteSlider::Slider::SetValue"},"parameters":["Object","Behavior","=","Object.Behavior::Value()",""]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"description":"the bar value bounds size.","fullName":"Size","functionType":"ExpressionAndCondition","name":"Size","sentence":"the bar value bounds size","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["Object.Behavior::MaxValue() - Object.Behavior::MinValue()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"description":"the step size of the object.","fullName":"Step size","functionType":"ExpressionAndCondition","group":"Resource bar configuration","name":"StepSize","sentence":"the step size","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["Object.Behavior::PropertyStepSize()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"StepSize","name":"SetStepSize","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::Slider::SetPropertyStepSize"},"parameters":["Object","Behavior","=","GetArgumentAsNumber(\"Value\")"]},{"type":{"value":"PanelSpriteSlider::Slider::SetValue"},"parameters":["Object","Behavior","=","Object.Behavior::Value()",""]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]}],"propertyDescriptors":[{"value":"0","type":"Number","label":"Value","description":"","group":"","extraInformation":[],"name":"Value"},{"value":"0","type":"Number","label":"Minimum value","description":"","group":"","extraInformation":[],"name":"MinValue"},{"value":"1","type":"Number","label":"Maximum value","description":"","group":"","extraInformation":[],"name":"MaxValue"},{"value":"0","type":"Number","label":"Step size","description":"","group":"","extraInformation":[],"name":"StepSize"}],"sharedPropertyDescriptors":[]},{"description":"The finite state machine used internally by the button object.","fullName":"Button finite state machine","name":"ButtonFSM","objectType":"","private":true,"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":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"Validated\""]}],"actions":[{"type":{"value":"PanelSpriteSlider::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":"PanelSpriteSlider::ButtonFSM::SetPropertyMouseIsInside"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyShouldCheckHovering"},"parameters":["Object","Behavior"]},{"type":{"value":"CollisionPoint"},"parameters":["Object","MouseOnlyCursorX(Object.Layer(), 0)","MouseOnlyCursorY(Object.Layer(), 0)"]}],"actions":[{"type":{"value":"PanelSpriteSlider::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":"PanelSpriteSlider::ButtonFSM::SetPropertyTouchIsInside"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyTouchId"},"parameters":["Object","Behavior","!=","0"]},{"type":{"value":"CollisionPoint"},"parameters":["Object","TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)","TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)"]}],"actions":[{"type":{"value":"PanelSpriteSlider::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":"PanelSpriteSlider::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(Object.Behavior::PropertyIndex()), Object.Layer(), 0)","TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)"]}],"actions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyTouchId"},"parameters":["Object","Behavior","=","StartedTouchOrMouseId(Object.Behavior::PropertyIndex())"]},{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyTouchIsInside"},"parameters":["Object","Behavior","yes"]}],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"Hovered\""]},{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"Idle\""]}]}],"actions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyState"},"parameters":["Object","Behavior","=","\"PressedInside\""]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::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":"PanelSpriteSlider::ButtonFSM::PropertyMouseIsInside"},"parameters":["Object","Behavior"]},{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"Hovered\""]}],"actions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyState"},"parameters":["Object","Behavior","=","\"Idle\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyMouseIsInside"},"parameters":["Object","Behavior"]},{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"Idle\""]}],"actions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyState"},"parameters":["Object","Behavior","=","\"Hovered\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"PanelSpriteSlider::ButtonFSM::PropertyTouchIsInside"},"parameters":["Object","Behavior"]},{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"PressedInside\""]}],"actions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyState"},"parameters":["Object","Behavior","=","\"PressedOutside\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyTouchIsInside"},"parameters":["Object","Behavior"]},{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"PressedOutside\""]}],"actions":[{"type":{"value":"PanelSpriteSlider::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":["","Object.Behavior::PropertyTouchId()"]}],"actions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyTouchId"},"parameters":["Object","Behavior","=","0"]}],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"PressedInside\""]}],"actions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyState"},"parameters":["Object","Behavior","=","\"Validated\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"PressedInside\""]},{"type":{"inverted":true,"value":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"Validated\""]}],"actions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyState"},"parameters":["Object","Behavior","=","\"Idle\""]}]}]}],"parameters":[]}],"parameters":[]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::ButtonFSM","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"onDeActivate","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyState"},"parameters":["Object","Behavior","=","\"Idle\""]},{"type":{"value":"PanelSpriteSlider::ButtonFSM::SetPropertyTouchId"},"parameters":["Object","Behavior","=","0"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::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":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"Idle\""]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::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":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"Validated\""]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::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":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"Hovered\""]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::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":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"Hovered\""]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"PressedOutside\""]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::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":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"PressedInside\""]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::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":"PanelSpriteSlider::ButtonFSM::PropertyState"},"parameters":["Object","Behavior","=","\"PressedOutside\""]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::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":["Object.Behavior::PropertyTouchId()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::ButtonFSM","type":"behavior"}],"objectGroups":[]}],"propertyDescriptors":[{"value":"true","type":"Boolean","label":"","description":"Should check hovering","group":"","extraInformation":[],"hidden":true,"name":"ShouldCheckHovering"},{"value":"Idle","type":"Choice","label":"State","description":"","group":"","extraInformation":["Idle","Hovered","PressedInside","PressedOutside","Validated"],"hidden":true,"name":"State"},{"value":"0","type":"Number","label":"Touch id","description":"","group":"","extraInformation":[],"hidden":true,"name":"TouchId"},{"value":"","type":"Boolean","label":"Touch is inside","description":"","group":"","extraInformation":[],"hidden":true,"name":"TouchIsInside"},{"value":"","type":"Boolean","label":"Mouse is inside","description":"","group":"","extraInformation":[],"hidden":true,"name":"MouseIsInside"},{"value":"","type":"Number","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"Index"}],"sharedPropertyDescriptors":[]}],"eventsBasedObjects":[{"defaultName":"Slider","description":"Let users select a numerical value by dragging a slider.","fullName":"Slider","name":"PanelSpriteSlider","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":"This allows to detect a change of \"intial value\" on hot reload."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetPropertyPreviousInitialValue"},"parameters":["Object","=","Object.PropertyInitialValue()"]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Create the child-object instances."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Create"},"parameters":["","Background","0","0",""]},{"type":{"value":"Create"},"parameters":["","FillBar","0","0",""]},{"type":{"value":"Create"},"parameters":["","Thumb","0","0",""]},{"type":{"value":"ChangePlan"},"parameters":["Background","=","1"]},{"type":{"value":"ChangePlan"},"parameters":["FillBar","=","2"]},{"type":{"value":"ChangePlan"},"parameters":["Thumb","=","3"]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Create the label that is displayed over the thumb."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Create"},"parameters":["","Label","0","0",""]},{"type":{"value":"ChangePlan"},"parameters":["Label","=","4"]},{"type":{"value":"TextObject::SetWrapping"},"parameters":["Label","no"]},{"type":{"value":"Cache"},"parameters":["Label"]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Pass the configuration to the behavior."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateSliderConfiguration"},"parameters":["Object",""]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetValue"},"parameters":["Object","=","Object.PropertyInitialValue()","Object.PropertyInitialValue()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetIncludedInParentCollisionMask"},"parameters":["Label",""]},{"type":{"value":"SetIncludedInParentCollisionMask"},"parameters":["Thumb",""]},{"type":{"value":"SetIncludedInParentCollisionMask"},"parameters":["FillBar",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"onHotReloading","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateLayout"},"parameters":["Object",""]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateSliderConfiguration"},"parameters":["Object",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::PropertyInitialValue"},"parameters":["Object","!=","Object.PropertyPreviousInitialValue()"]}],"actions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetPropertyPreviousInitialValue"},"parameters":["Object","=","Object.PropertyInitialValue()"]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetValue"},"parameters":["Object","=","Object.PropertyInitialValue()","Object.PropertyInitialValue()"]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"doStepPostEvents","sentence":"","events":[{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Handle touches","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BehaviorActivated"},"parameters":["Background","ButtonFSM"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"DraggableBehavior::Dragged"},"parameters":["Thumb","Draggable"]},{"type":{"inverted":true,"value":"DraggableBehavior::Dropped"},"parameters":["Thumb","Draggable"]},{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"PanelSpriteSlider::ButtonFSM::IsPressed"},"parameters":["Background","ButtonFSM",""]},{"type":{"value":"PanelSpriteSlider::ButtonFSM::IsPressedOutside"},"parameters":["Background","ButtonFSM",""]}]}],"actions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetValue"},"parameters":["Object","=","FillBar.Slider::MinValue() + FillBar.Slider::Size() * (TouchX(Background.ButtonFSM::TouchId(), Object.Layer()) - Object.FullBarLeft()) / Object.FullBarWidth()","FillBar.Slider::MinValue() + FillBar.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()"]}],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges"},"parameters":["Object"]}],"actions":[{"type":{"value":"Montre"},"parameters":["Label",""]},{"type":{"value":"ResetObjectTimer"},"parameters":["Label","\"HideBack\""]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DraggableBehavior::Dragged"},"parameters":["Thumb","Draggable"]}],"actions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetValue"},"parameters":["Object","=","FillBar.Slider::MinValue() + FillBar.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()","FillBar.Slider::MinValue() + FillBar.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()"]}],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges"},"parameters":["Object"]}],"actions":[{"type":{"value":"Montre"},"parameters":["Label",""]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"DraggableBehavior::Dropped"},"parameters":["Thumb","Draggable"]}],"actions":[{"type":{"value":"ResetObjectTimer"},"parameters":["Label","\"HideBack\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges"},"parameters":["Object"]},{"type":{"value":"CollisionPoint"},"parameters":["Thumb","MouseOnlyCursorX(Object.Layer(), 0)","MouseOnlyCursorY(Thumb.Layer(), 0)"]}],"actions":[{"type":{"value":"Montre"},"parameters":["Label",""]},{"type":{"value":"ResetObjectTimer"},"parameters":["Label","\"HideBack\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"CompareObjectTimer"},"parameters":["Label","\"HideBack\"",">","0.5"]}],"actions":[{"type":{"value":"Cache"},"parameters":["Label"]},{"type":{"value":"RemoveObjectTimer"},"parameters":["Label","\"HideBack\""]}]}]}],"parameters":[]},{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Resize","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Children instances must be resized when the parent size change:\n- background is resized to take the full dimensions of the parent\n- the label is put back at the center of the bar\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances."},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"BuiltinCommonInstructions::CompareNumbers"},"parameters":["Object.Width()","!=","max(Background.BoundingBoxRight(), max(Label.BoundingBoxRight(), Thumb.BoundingBoxRight())) - min(Background.BoundingBoxLeft(), min(Label.BoundingBoxLeft(), Thumb.BoundingBoxLeft()))"]},{"type":{"value":"BuiltinCommonInstructions::CompareNumbers"},"parameters":["Object.Height()","!=","max(Background.BoundingBoxBottom(), max(Label.BoundingBoxBottom(), Thumb.BoundingBoxBottom())) - min(Background.BoundingBoxTop(), min(Label.BoundingBoxTop(), Thumb.BoundingBoxTop()))"]}]}],"actions":[{"type":{"value":"ModVarObjet"},"parameters":["Background","Width","=","Object.Width()"]},{"type":{"value":"ModVarObjet"},"parameters":["Background","Height","=","Object.Height()"]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::Scale"},"parameters":["Object","=","1"]},{"type":{"value":"PanelSpriteObject::Width"},"parameters":["Background","=","Background.Variable(Width)"]},{"type":{"value":"PanelSpriteObject::Height"},"parameters":["Background","=","Background.Variable(Height)"]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateLayout"},"parameters":["Object",""]}]}],"parameters":[]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"The parent size is not defined in onCreate so it needs to be done here."},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateLayout"},"parameters":["Object",""]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition"},"parameters":["Object",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"description":"Check if the slider is being dragged.","fullName":"Being dragged","functionType":"Condition","group":"Slider","name":"IsBeingDragged","sentence":"_PARAM0_ is being dragged","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"DraggableBehavior::Dragged"},"parameters":["Thumb","Draggable"]},{"type":{"value":"PanelSpriteSlider::ButtonFSM::IsPressed"},"parameters":["Background","ButtonFSM",""]},{"type":{"value":"PanelSpriteSlider::ButtonFSM::IsPressedOutside"},"parameters":["Background","ButtonFSM",""]}]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"description":"the value of the slider.","fullName":"Value","functionType":"ExpressionAndCondition","name":"Value","sentence":"the value","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["FillBar.Slider::Value()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"Value","name":"SetValue","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::Slider::SetValue"},"parameters":["FillBar","Slider","=","GetArgumentAsNumber(\"Value\")",""]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition"},"parameters":["Object",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"description":"the minimum value of the slider.","fullName":"Minimum value","functionType":"ExpressionAndCondition","group":"Slider configuration","name":"MinValue","sentence":"the minimum value","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["FillBar.Slider::MinValue()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"MinValue","name":"SetMinValue","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::Slider::SetMinValue"},"parameters":["FillBar","Slider","=","GetArgumentAsNumber(\"Value\")",""]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateLayout"},"parameters":["Object",""]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition"},"parameters":["Object",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"description":"the maximum value of the slider.","fullName":"Maximum value","functionType":"ExpressionAndCondition","group":"Slider configuration","name":"MaxValue","sentence":"the maximum value","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["FillBar.Slider::MaxValue()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"MaxValue","name":"SetMaxValue","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::Slider::SetMaxValue"},"parameters":["FillBar","Slider","=","GetArgumentAsNumber(\"Value\")",""]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateLayout"},"parameters":["Object",""]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition"},"parameters":["Object",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"description":"the step size of the slider.","fullName":"Step size","functionType":"ExpressionAndCondition","group":"Slider configuration","name":"StepSize","sentence":"the step size","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["FillBar.Slider::StepSize()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"StepSize","name":"SetStepSize","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::Slider::SetStepSize"},"parameters":["FillBar","Slider","=","GetArgumentAsNumber(\"Value\")",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"PanelSpriteSlider::Slider","type":"behavior"}],"objectGroups":[]},{"description":"Check if the label is shown.","fullName":"Label is shown","functionType":"Condition","group":"Slider configuration","name":"IsLabelShown","sentence":"_PARAM0_ label is shown","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges"},"parameters":["Object"]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"description":"Show (or hide) the label on the bar.","fullName":"Show label","functionType":"Action","group":"Slider configuration","name":"SetLabelShown","sentence":"Show the label of _PARAM0_: _PARAM1_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"GetArgumentAsBoolean"},"parameters":["\"Value\""]}],"actions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetPropertyShowLabelAtChanges"},"parameters":["Object","no"]},{"type":{"value":"Cache"},"parameters":["Label"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"GetArgumentAsBoolean"},"parameters":["\"Value\""]}],"actions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetPropertyShowLabelAtChanges"},"parameters":["Object","yes"]},{"type":{"value":"Montre"},"parameters":["Label",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"},{"description":"Show the label","name":"Value","type":"yesorno"}],"objectGroups":[]},{"description":"Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.","fullName":"Update layout","functionType":"Action","name":"UpdateLayout","private":true,"sentence":"Update layout of _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreXY"},"parameters":["FillBar","=","Object.PropertyBarLeftPadding()","=","Object.PropertyBarTopPadding()"]},{"type":{"value":"PanelSpriteObject::Height"},"parameters":["FillBar","=","round(Background.Height() - Object.PropertyBarTopPadding() - Object.PropertyBarBottomPadding())"]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"description":"Update the thumb position according to the slider value.","fullName":"Update thumb position","functionType":"Action","name":"UpdateThumbPosition","private":true,"sentence":"Update the thumb position of _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"PanelSpriteSlider::Slider::Size"},"parameters":["FillBar","Slider",">","0",""]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteObject::Width"},"parameters":["FillBar","=","Object.FullBarWidth() * (FillBar.Slider::Value() - FillBar.Slider::MinValue()) / FillBar.Slider::Size()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetCenterX"},"parameters":["Thumb","=","Object.FullBarLeft() + FillBar.Width()"]},{"type":{"value":"SetCenterY"},"parameters":["Thumb","=","FillBar.CenterY()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"TextObject::String"},"parameters":["Label","=","ToString(Object.Value())"]},{"type":{"value":"SetCenterX"},"parameters":["Label","=","Thumb.CenterX()"]},{"type":{"value":"MettreY"},"parameters":["Label","=","Thumb.Y() - Label.Height() - Object.PropertyLabelMargin()"]},{"type":{"value":"TextObject::Angle"},"parameters":["Label","=","-Object.Angle()"]}]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"fullName":"","functionType":"Expression","name":"FullBarLeft","private":true,"sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["Object.PropertyBarLeftPadding()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"fullName":"","functionType":"Expression","name":"FullBarRight","private":true,"sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["Background.Width() - Object.PropertyBarRightPadding()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"fullName":"","functionType":"Expression","name":"FullBarWidth","private":true,"sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["Background.Width() - Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"description":"Update the slider configuration.","fullName":"Update slider configuration","functionType":"Action","name":"UpdateSliderConfiguration","private":true,"sentence":"Update the slider configuration of _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Pass configuration to the behavior and update children."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetMinValue"},"parameters":["Object","=","Object.PropertyMinValue()","Object.PropertyMaxValue()",""]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetMaxValue"},"parameters":["Object","=","Object.PropertyMaxValue()","Object.PropertyMaxValue()"]},{"type":{"value":"PanelSpriteSlider::PanelSpriteSlider::SetStepSize"},"parameters":["Object","=","Object.PropertyStepSize()","Object.PropertyMaxValue()"]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]},{"description":"De/activate interactions with the button.","fullName":"De/activate interactions","functionType":"Action","name":"Activate","sentence":"Activate interactions with _PARAM0_: _PARAM1_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"GetArgumentAsBoolean"},"parameters":["\"ShouldActivate\""]}],"actions":[{"type":{"value":"ActivateBehavior"},"parameters":["Thumb","Draggable","yes"]},{"type":{"value":"ActivateBehavior"},"parameters":["Background","ButtonFSM","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"GetArgumentAsBoolean"},"parameters":["\"ShouldActivate\""]}],"actions":[{"type":{"value":"ActivateBehavior"},"parameters":["Thumb","Draggable","no"]},{"type":{"value":"ActivateBehavior"},"parameters":["Background","ButtonFSM","no"]},{"type":{"value":"Cache"},"parameters":["Label"]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"},{"description":"Activate","name":"ShouldActivate","type":"yesorno"}],"objectGroups":[]},{"description":"Check if the slider allows interactions.","fullName":"Interactions activated","functionType":"Condition","name":"IsActivated","sentence":"Interactions on _PARAM0_ are activated","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BehaviorActivated"},"parameters":["Background","ButtonFSM"]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteSlider::PanelSpriteSlider","type":"object"}],"objectGroups":[]}],"propertyDescriptors":[{"value":"0","type":"Number","label":"Bar left margin","description":"","group":"Bar","extraInformation":["Label","FillBar"],"name":"BarLeftPadding"},{"value":"0","type":"Number","label":"Bar top margin","description":"","group":"Bar","extraInformation":["Label","FillBar"],"name":"BarTopPadding"},{"value":"0","type":"Number","label":"Bar right margin","description":"","group":"Bar","extraInformation":["Label","FillBar"],"name":"BarRightPadding"},{"value":"0","type":"Number","label":"Bar bottom margin","description":"","group":"Bar","extraInformation":["Label","FillBar"],"name":"BarBottomPadding"},{"value":"true","type":"Boolean","label":"Show the label when the value is changed","description":"","group":"Label","extraInformation":[],"name":"ShowLabelAtChanges"},{"value":"8","type":"Number","label":"Label margin","description":"","group":"Label","extraInformation":[],"name":"LabelMargin"},{"value":"0","type":"Number","label":"Minimum value","description":"","group":"Value","extraInformation":[],"name":"MinValue"},{"value":"100","type":"Number","label":"Maximum value","description":"","group":"Value","extraInformation":[],"name":"MaxValue"},{"value":"1","type":"Number","label":"Step size","description":"","group":"Value","extraInformation":[],"name":"StepSize"},{"value":"50","type":"Number","label":"Initial value","description":"","group":"Value","extraInformation":[],"name":"InitialValue"},{"value":"","type":"Number","label":"","description":"It's used to detect a change at hot reload.","group":"","extraInformation":[],"hidden":true,"name":"PreviousInitialValue"},{"value":"Center-center","type":"String","label":"","description":"Only used by the scene editor.","group":"","extraInformation":["Thumb"],"hidden":true,"name":"ThumbAnchorOrigin"},{"value":"Center-right","type":"String","label":"","description":"Only used by the scene editor.","group":"","extraInformation":["FillBar"],"hidden":true,"name":"ThumbAnchorTarget"},{"value":"","type":"Boolean","label":"","description":"Only used by the scene editor.","group":"","extraInformation":["Label"],"hidden":true,"name":"ShowLabel"}],"objects":[{"assetStoreId":"","bold":false,"italic":false,"name":"Label","smoothed":true,"type":"TextObject::Text","underlined":false,"variables":[],"effects":[],"behaviors":[],"string":"It displays the value when it changes.","font":"","textAlignment":"","characterSize":20.0,"color":{"b":0,"g":0,"r":0},"content":{"bold":false,"isOutlineEnabled":false,"isShadowEnabled":false,"italic":false,"outlineColor":"255;255;255","outlineThickness":2.0,"shadowAngle":90.0,"shadowBlurRadius":2.0,"shadowColor":"0;0;0","shadowDistance":4.0,"shadowOpacity":127.0,"smoothed":true,"underlined":false,"text":"It displays the value when it changes.","font":"","textAlignment":"","characterSize":20.0,"color":"0;0;0"}},{"assetStoreId":"","bottomMargin":0.0,"height":32.0,"leftMargin":0.0,"name":"Thumb","rightMargin":0.0,"texture":"","tiled":false,"topMargin":0.0,"type":"PanelSpriteObject::PanelSprite","width":32.0,"variables":[],"effects":[],"behaviors":[{"name":"Draggable","type":"DraggableBehavior::Draggable","checkCollisionMask":false}]},{"assetStoreId":"","bottomMargin":0.0,"height":32.0,"leftMargin":0.0,"name":"FillBar","rightMargin":0.0,"texture":"","tiled":true,"topMargin":0.0,"type":"PanelSpriteObject::PanelSprite","width":32.0,"variables":[],"effects":[],"behaviors":[{"name":"Slider","type":"PanelSpriteSlider::Slider","Value":0.0,"MinValue":0.0,"MaxValue":1.0,"StepSize":1.0}]},{"assetStoreId":"","bottomMargin":0.0,"height":32.0,"leftMargin":0.0,"name":"Background","rightMargin":0.0,"texture":"","tiled":true,"topMargin":0.0,"type":"PanelSpriteObject::PanelSprite","width":32.0,"variables":[],"effects":[],"behaviors":[{"name":"ButtonFSM","type":"PanelSpriteSlider::ButtonFSM","ShouldCheckHovering":true,"State":"Idle","TouchId":0.0,"TouchIsInside":false,"MouseIsInside":false,"Index":0.0}]}],"objectsFolderStructure":{"folderName":"__ROOT","children":[{"objectName":"Label"},{"objectName":"Thumb"},{"objectName":"FillBar"},{"objectName":"Background"}]}}]},{"author":"","category":"General","extensionNamespace":"","fullName":"Point Lights","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWxpZ2h0YnVsYi1vdXRsaW5lIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyLDJBNyw3IDAgMCwxIDE5LDlDMTksMTEuMzggMTcuODEsMTMuNDcgMTYsMTQuNzRWMTdBMSwxIDAgMCwxIDE1LDE4SDlBMSwxIDAgMCwxIDgsMTdWMTQuNzRDNi4xOSwxMy40NyA1LDExLjM4IDUsOUE3LDcgMCAwLDEgMTIsMk05LDIxVjIwSDE1VjIxQTEsMSAwIDAsMSAxNCwyMkgxMEExLDEgMCAwLDEgOSwyMU0xMiw0QTUsNSAwIDAsMCA3LDlDNywxMS4wNSA4LjIzLDEyLjgxIDEwLDEzLjU4VjE2SDE0VjEzLjU4QzE1Ljc3LDEyLjgxIDE3LDExLjA1IDE3LDlBNSw1IDAgMCwwIDEyLDRaIiAvPjwvc3ZnPg==","name":"PointLights","previewIconUrl":"https://asset-resources.gdevelop.io/public-resources/Icons/63564f3ae7ec22f1bc63068b1eef93c5dafb490796ea338c2a6d6e857f8d7e9c_lightbulb-outline.svg","shortDescription":"A light that gets emitted from a single point in all directions.","version":"0.0.5","description":["A light that gets emitted from a single point in all directions.","A common use case for this is to replicate the light emitted from a bare lightbulb."],"tags":["3d","lights"],"authorIds":["q8ubdigLvIRXLxsJDDTaokO41mc2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"fullName":"","functionType":"Action","name":"onSceneLoaded","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["runtimeScene._pointLightsExtension = runtimeScene._pointLightsExtension || {};\r","runtimeScene._pointLightsExtension.pointLights = runtimeScene._pointLightsExtension.pointLights || new Map();"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[],"objectGroups":[]},{"description":"Create a point light.","fullName":"Create point light","functionType":"Action","name":"CreatePointLight","sentence":"Create point light _PARAM1_, color: _PARAM2_, intensity: _PARAM3_, distance: _PARAM4_, decay: _PARAM5_, cast shadow: _PARAM6_, auto update: _PARAM7_, shadow map size: _PARAM8_, position X: _PARAM9_, Y: _PARAM10_, Z: _PARAM11_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (!runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {"," const rgbColorGD = gdjs.rgbOrHexToRGBColor(eventsFunctionContext.getArgument(\"Color\"));"," const pointLight = new THREE.PointLight(\"rgb(\" + rgbColorGD[0] + \", \" + rgbColorGD[1] + \", \" + rgbColorGD[2] + \")\", eventsFunctionContext.getArgument(\"Intensity\"), eventsFunctionContext.getArgument(\"Distance\"), eventsFunctionContext.getArgument(\"Decay\"));"," pointLight.position.set(eventsFunctionContext.getArgument(\"PositionX\"), eventsFunctionContext.getArgument(\"PositionY\"), eventsFunctionContext.getArgument(\"PositionZ\"));"," pointLight.castShadow = eventsFunctionContext.getArgument(\"CastShadow\");",""," switch (eventsFunctionContext.getArgument(\"ShadowMapSize\")) {"," case '256':"," pointLight.shadow.mapSize.width = 256;"," pointLight.shadow.mapSize.height = 256;"," break;"," case '512':"," pointLight.shadow.mapSize.width = 512;"," pointLight.shadow.mapSize.height = 512;"," break;"," case '1024':"," pointLight.shadow.mapSize.width = 1024;"," pointLight.shadow.mapSize.height = 1024;"," break;"," case '2048':"," pointLight.shadow.mapSize.width = 2048;"," pointLight.shadow.mapSize.height = 2048;"," break;"," case '4096':"," pointLight.shadow.mapSize.width = 4096;"," pointLight.shadow.mapSize.height = 4096;"," break;"," default:"," pointLight.shadow.mapSize.width = 512;"," pointLight.shadow.mapSize.height = 512;"," }",""," pointLight.shadow.autoUpdate = eventsFunctionContext.getArgument(\"AutoUpdate\");"," runtimeScene.getLayer('').getRenderer().getThreeScene().add(pointLight);"," runtimeScene._pointLightsExtension.pointLights.set(eventsFunctionContext.getArgument(\"Identifier\"), { pointLight });","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Color of the light","name":"Color","type":"color"},{"description":"Intensity (default is 1)","name":"Intensity","type":"expression"},{"description":"Distance (default is 0)","name":"Distance","type":"expression"},{"description":"Decay (default is 2)","name":"Decay","type":"expression"},{"defaultValue":"yes","description":"Cast shadow","name":"CastShadow","optional":true,"type":"yesorno"},{"defaultValue":"yes","description":"Enable automatic updates of the light's shadow, if you do not require dynamic lighting set this to false.","name":"AutoUpdate","optional":true,"type":"yesorno"},{"description":"Shadow map size (default is 512)","name":"ShadowMapSize","supplementaryInformation":"[\"256\",\"512\",\"1024\",\"2048\",\"4096\"]","type":"stringWithSelector"},{"description":"X position","name":"PositionX","type":"expression"},{"description":"Y position","name":"PositionY","type":"expression"},{"description":"Z position","name":"PositionZ","type":"expression"}],"objectGroups":[]},{"description":"Delete a point light.","fullName":"Delete point light","functionType":"Action","name":"DeletePointLight","sentence":"Delete point light _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene.getLayer('').getRenderer().getThreeScene().remove(runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight);\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.dispose();\r"," runtimeScene._pointLightsExtension.pointLights.delete(eventsFunctionContext.getArgument(\"Identifier\"));\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"description":"Shadow maps for a point light will be updated in the next render call (for use with a none dynamic point light).","fullName":"Update shadow maps","functionType":"Action","name":"SetNeedsUpdate","sentence":"Update shadow maps for _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.needsUpdate = true;","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"description":"Change the color of a point light.","fullName":"Color","functionType":"Action","getterName":"Color","name":"SetColor","sentence":"Change the color of _PARAM1_ to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," const rgbColor = gdjs.rgbOrHexToRGBColor(eventsFunctionContext.getArgument(\"Color\"));\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.color.set(\"rgb(\" + rgbColor[0] + \", \" + rgbColor[1] + \", \" + rgbColor[2] + \")\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Color","name":"Color","type":"color"}],"objectGroups":[]},{"description":"The color of a point light.","fullName":"Color","functionType":"StringExpression","name":"Color","sentence":"The color of _PARAM1_ point light","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r","const rgbColor = gdjs.hexToRGBColor(runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.color.getHexString());\r","eventsFunctionContext.returnValue = rgbColor[0] + \";\" + rgbColor[1] + \";\" + rgbColor[2];\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"string"},"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"fullName":"Intensity","functionType":"ActionWithOperator","getterName":"Intensity","name":"SetIntensity","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.intensity = eventsFunctionContext.getArgument(\"Value\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"description":"the intensity of a point light.","fullName":"Intensity","functionType":"ExpressionAndCondition","name":"Intensity","sentence":"the intensity of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," eventsFunctionContext.returnValue = runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.intensity;\r","} else {\r"," eventsFunctionContext.returnValue = 0;\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"description":"Point light distance.","fullName":"Distance","functionType":"ActionWithOperator","getterName":"Distance","name":"SetDistance","sentence":"Change point light _PARAM1_ distance to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.distance = eventsFunctionContext.getArgument(\"Value\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Distance (Default is 0)","name":"Distance","type":"expression"}],"objectGroups":[]},{"description":"the distance of a point light.","fullName":"Distance","functionType":"ExpressionAndCondition","name":"Distance","sentence":"the distance of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," eventsFunctionContext.returnValue = runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.distance;\r","} else {\r"," eventsFunctionContext.returnValue = 0;\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"description":"Point light decay.","fullName":"Decay","functionType":"ActionWithOperator","getterName":"Decay","name":"SetDecay","sentence":"Change point light _PARAM1_ decay to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.decay = eventsFunctionContext.getArgument(\"Value\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Decay (Default is 2)","name":"Decay","type":"expression"}],"objectGroups":[]},{"description":"the decay of a point light.","fullName":"Decay","functionType":"ExpressionAndCondition","name":"Decay","sentence":"the decay of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," eventsFunctionContext.returnValue = runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.decay;\r","} else {\r"," eventsFunctionContext.returnValue = 0;\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"description":"Point light decay.","fullName":"Decay","functionType":"ActionWithOperator","getterName":"ShadowBias","name":"SetShadowBias","sentence":"Change point light _PARAM1_ decay to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.bias = eventsFunctionContext.getArgument(\"Value\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Decay (Default is 2)","name":"Decay","type":"expression"}],"objectGroups":[]},{"description":"the shadow bias of a point light, how much to add or subtract from the normalized depth when deciding whether a surface is in shadow.\nThe default is 0. Very tiny adjustments here (in the order of 0.0001) may help reduce artifacts in shadows","fullName":"Shadow bias","functionType":"ExpressionAndCondition","name":"ShadowBias","sentence":"the shadow bias of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," eventsFunctionContext.returnValue = runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.bias;\r","} else {\r"," eventsFunctionContext.returnValue = 0;\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"description":"Point light decay.","fullName":"Decay","functionType":"ActionWithOperator","getterName":"ShadowNormalBias","name":"SetShadowNormalBias","sentence":"Change point light _PARAM1_ decay to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.normalBias = eventsFunctionContext.getArgument(\"Value\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Decay (Default is 2)","name":"Decay","type":"expression"}],"objectGroups":[]},{"description":"the shadow normal bias of a point light, how much the position used to query the shadow map is offset along the object normal. The default is 0. Increasing this value can be used to reduce shadow acne especially in large scenes where light shines onto geometry at a shallow angle. The cost is that shadows may appear distorted.","fullName":"Shadow normal bias","functionType":"ExpressionAndCondition","name":"ShadowNormalBias","sentence":"the shadow normal bias of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," eventsFunctionContext.returnValue = runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.normalBias;\r","} else {\r"," eventsFunctionContext.returnValue = 0;\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"description":"Point light decay.","fullName":"Decay","functionType":"ActionWithOperator","getterName":"ShadowRadius","name":"SetShadowRadius","sentence":"Change point light _PARAM1_ decay to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.radius = eventsFunctionContext.getArgument(\"Value\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Decay (Default is 2)","name":"Decay","type":"expression"}],"objectGroups":[]},{"description":"the shadow radius of a point light, values greater than 1 will blur the edges of the shadow. High values will cause unwanted banding effects in the shadows - a greater mapSize will allow for a higher value to be used here before these effects become visible. If WebGLRenderer.shadowMap.type is set to PCFSoftShadowMap, radius has no effect and it is recommended to increase softness by decreasing mapSize instead.","fullName":"Shadow radius","functionType":"ExpressionAndCondition","name":"ShadowRadius","sentence":"the shadow radius of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," eventsFunctionContext.returnValue = runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.radius;\r","} else {\r"," eventsFunctionContext.returnValue = 0;\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"description":"Enable or disable point light cast shadow.","fullName":"Cast shadow","functionType":"Action","getterName":"CastShadow","name":"SetCastShadow","sentence":"Enable casting shadows for _PARAM1_: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.castShadow = eventsFunctionContext.getArgument(\"CastShadow\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"defaultValue":"yes","description":"Cast shadow","name":"CastShadow","optional":true,"type":"yesorno"}],"objectGroups":[]},{"description":"The cast shadow of a point light.","fullName":"Cast shadow","functionType":"StringExpression","name":"CastShadow","sentence":"the cast shadow of _PARAM1_ point light","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," eventsFunctionContext.returnValue = runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.castShadow;\r","} else {\r"," eventsFunctionContext.returnValue = 0;\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"string"},"parameters":[{"description":"Identifier","name":"Identifier","type":"string"}],"objectGroups":[]},{"description":"Change the position of a point light.","fullName":"Position","functionType":"Action","name":"SetPosition","sentence":"Change the position of _PARAM1_ to X: _PARAM2_, Y: _PARAM3_, Z: _PARAM4_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.position.set(eventsFunctionContext.getArgument(\"PositionX\"), eventsFunctionContext.getArgument(\"PositionY\"), eventsFunctionContext.getArgument(\"PositionZ\"));\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"X position","name":"PositionX","type":"expression"},{"description":"Y position","name":"PositionY","type":"expression"},{"description":"Z position","name":"PositionZ","type":"expression"}],"objectGroups":[]},{"description":"Change the X position of a point light.","fullName":"X position","functionType":"ActionWithOperator","getterName":"PositionX","name":"SetPositionX","sentence":"Change point light _PARAM1_ X position to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.position.x = eventsFunctionContext.getArgument(\"Value\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"X","name":"PositionX","type":"expression"}],"objectGroups":[]},{"description":"Change the Y position of a point light.","fullName":"Y position","functionType":"ActionWithOperator","getterName":"PositionY","name":"SetPositionY","sentence":"Change point light _PARAM1_ Y position to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.position.y = eventsFunctionContext.getArgument(\"Value\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Y","name":"PositionY","type":"expression"}],"objectGroups":[]},{"description":"Change the Z position of a point light.","fullName":"Z position","functionType":"ActionWithOperator","getterName":"PositionZ","name":"SetPositionZ","sentence":"Change point light _PARAM1_ Z position to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.position.z = eventsFunctionContext.getArgument(\"Value\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Z","name":"PositionZ","type":"expression"}],"objectGroups":[]},{"description":"the X position of point light.","fullName":"X position","functionType":"ExpressionAndCondition","name":"PositionX","sentence":"the X position of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," eventsFunctionContext.returnValue = runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.position.x;\r","} else {\r"," eventsFunctionContext.returnValue = 0;\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Identifier","name":"Identifier","supplementaryInformation":"Scene3D::Model3DObject","type":"string"}],"objectGroups":[]},{"description":"the Y position of point light.","fullName":"Y position","functionType":"ExpressionAndCondition","name":"PositionY","sentence":"the Y position of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," eventsFunctionContext.returnValue = runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.position.y;\r","} else {\r"," eventsFunctionContext.returnValue = 0;\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Identifier","name":"Identifier","supplementaryInformation":"Scene3D::Model3DObject","type":"string"}],"objectGroups":[]},{"description":"the Z position of point light.","fullName":"Z position","functionType":"ExpressionAndCondition","name":"PositionZ","sentence":"the Z position of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," eventsFunctionContext.returnValue = runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.position.z;\r","} else {\r"," eventsFunctionContext.returnValue = 0;\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Identifier","name":"Identifier","supplementaryInformation":"Scene3D::Model3DObject","type":"string"}],"objectGroups":[]},{"description":"Change the shadow map size of a point light.","fullName":"Shadow map size","functionType":"Action","name":"SetShadowMapSize","sentence":"Change the shadow map size of _PARAM1_ to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," switch (eventsFunctionContext.getArgument(\"ShadowMapSize\")) {\r"," case '256':\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.width = 256;\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.height = 256;\r"," break;\r"," case '512':\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.width = 512;\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.height = 512;\r"," break;\r"," case '1024':\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.width = 1024;\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.height = 1024;\r"," break;\r"," case '2048':\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.width = 2048;\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.height = 2048;\r"," break;\r"," case '4096':\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.width = 4096;\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.height = 4096;\r"," break;\r"," default:\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.width = 512;\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.mapSize.height = 512;\r"," }\r","}\r","\r",""],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Shadow map size (default is 512)","name":"ShadowMapSize","supplementaryInformation":"[\"256\",\"512\",\"1024\",\"2048\",\"4096\"]","type":"stringWithSelector"}],"objectGroups":[]},{"description":"The distance to the near clipping plane of the shadow camera, objects closer to the light source than this distance will not contribute to the shadow map.","fullName":"Shadow camera near","functionType":"Action","name":"SetShadowCameraNear","sentence":"Change the shadow camera near of _PARAM1_ to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.camera.near = eventsFunctionContext.getArgument(\"ShadowCameraNear\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Shadow camera near (default is 0.5)","name":"ShadowCameraNear","type":"expression"}],"objectGroups":[]},{"description":"The distance to the far clipping plane of the shadow camera, objects farther away from the light source than this distance will not contribute to the shadow map.","fullName":"Shadow camera far","functionType":"Action","name":"SetShadowCameraFar","sentence":"Change the shadow camera far of _PARAM1_ to _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.camera.far = eventsFunctionContext.getArgument(\"ShadowCameraFar\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"description":"Shadow camera far (default is 500)","name":"ShadowCameraFar","type":"expression"}],"objectGroups":[]},{"description":"Enables or disables automatic updates of the light's shadow, if you do not require dynamic lighting set this to false.","fullName":"Dynamic light","functionType":"Action","name":"SetDynamicLight","sentence":"Enable dynamic light for _PARAM1_: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (runtimeScene._pointLightsExtension.pointLights.has(eventsFunctionContext.getArgument(\"Identifier\"))) {\r"," runtimeScene._pointLightsExtension.pointLights.get(eventsFunctionContext.getArgument(\"Identifier\")).pointLight.shadow.autoUpdate = eventsFunctionContext.getArgument(\"AutoUpdate\");\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"Identifier","name":"Identifier","type":"string"},{"defaultValue":"yes","description":"Dynamic light","name":"AutoUpdate","optional":true,"type":"yesorno"}],"objectGroups":[]}],"eventsBasedBehaviors":[],"eventsBasedObjects":[]},{"author":"","category":"General","extensionNamespace":"","fullName":"Shadows","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30NCgkuc3Qye2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLWRhc2hhcnJheTo2LDY7fQ0KCS5zdDN7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtZGFzaGFycmF5OjQsNDt9DQoJLnN0NHtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7fQ0KCS5zdDV7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1kYXNoYXJyYXk6My4xMDgxLDMuMTA4MTt9DQoJDQoJCS5zdDZ7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5OjQsMzt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMTMiIGN5PSIxMyIgcj0iMTAiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyMCIgeTE9IjIwIiB4Mj0iMjYuMSIgeTI9IjI2LjEiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIxNiIgeTE9IjIzIiB4Mj0iMjEuOCIgeTI9IjI4LjkiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyMyIgeTE9IjE2IiB4Mj0iMjguOSIgeTI9IjIxLjgiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yMi40LDkuNmMxLjMsMC41LDIuNiwxLjMsMy43LDIuM2MzLjksMy45LDMuOSwxMC4yLDAsMTQuMXMtMTAuMiwzLjktMTQuMSwwYy0xLjEtMS4xLTEuOC0yLjMtMi4zLTMuNyIvPg0KPC9zdmc+DQo=","name":"Shadows","previewIconUrl":"https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Graphic Design/72d62d2888b4617f55edbefa73aa471fe8c846bb8552ce6a368fc05327dc8fa6_Graphic Design_drop_shadow.svg","shortDescription":"Adjust the shadow map resolution and shadow casting/receiving properties of 3D objects.","version":"0.0.4","description":"Allows you to adjust the shadow map resolution and shadow casting and receiving shadow properties of 3D objects.","tags":["3d"],"authorIds":["q8ubdigLvIRXLxsJDDTaokO41mc2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"Enable or disable casting shadow for a 3D model.","fullName":"Cast shadow - 3D model","functionType":"Action","name":"CastShadow","private":true,"sentence":"Enable casting shadow for _PARAM1_: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length > 0) {"," objects[0].get3DRendererObject().traverse((node) => {"," if (node.isMesh) {"," node.castShadow = eventsFunctionContext.getArgument(\"CastShadow\");"," }"," });","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}],"parameters":[{"description":"3D model","name":"Object","supplementaryInformation":"Scene3D::Model3DObject","type":"objectList"},{"defaultValue":"yes","description":"Cast shadow","name":"CastShadow","optional":true,"type":"yesorno"}],"objectGroups":[]},{"description":"Enable or disable receive shadows for a 3D model.","fullName":"Receive shadows - 3D model","functionType":"Action","name":"ReceiveShadow","private":true,"sentence":"Enable receiving shadows for _PARAM1_: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length > 0) {"," objects[0].get3DRendererObject().traverse((node) => {"," if (node.isMesh) {"," node.receiveShadow = eventsFunctionContext.getArgument(\"ReceiveShadow\");"," }"," });","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"3D model","name":"Object","supplementaryInformation":"Scene3D::Model3DObject","type":"objectList"},{"defaultValue":"yes","description":"Receive shadow","name":"ReceiveShadow","optional":true,"type":"yesorno"}],"objectGroups":[]},{"description":"Enable or disable casting shadow for a 3D box.","fullName":"Cast shadow - 3D box","functionType":"Action","name":"CastShadow3DBox","private":true,"sentence":"Enable casting shadow for _PARAM1_: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length > 0) {"," objects[0].get3DRendererObject().castShadow = eventsFunctionContext.getArgument(\"CastShadow\");","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"3D box","name":"Object","supplementaryInformation":"Scene3D::Cube3DObject","type":"objectList"},{"defaultValue":"yes","description":"Cast shadow","name":"CastShadow","optional":true,"type":"yesorno"}],"objectGroups":[]},{"description":"Enable or disable receive shadows for a 3D box.","fullName":"Receive shadows - 3D box","functionType":"Action","name":"ReceiveShadow3DBox","private":true,"sentence":"Enable receiving shadows for _PARAM1_: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length > 0) {"," objects[0].get3DRendererObject().receiveShadow = eventsFunctionContext.getArgument(\"ReceiveShadow\");","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"3D box","name":"Object","supplementaryInformation":"Scene3D::Cube3DObject","type":"objectList"},{"defaultValue":"yes","description":"Receive shadow","name":"ReceiveShadow","optional":true,"type":"yesorno"}],"objectGroups":[]},{"description":"Change Shadow map.","fullName":"Shadow map","functionType":"Action","name":"ShadowMap","sentence":"Change shadow map to _PARAM2_, enabled: _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["switch (eventsFunctionContext.getArgument(\"ShadowMapType\")) {\r"," case 'Basic':\r"," runtimeScene.getGame().getRenderer().getThreeRenderer().shadowMap.type = THREE.BasicShadowMap;\r"," break;\r"," case 'PCF':\r"," runtimeScene.getGame().getRenderer().getThreeRenderer().shadowMap.type = THREE.PCFShadowMap;\r"," break;\r"," case 'PCF Soft':\r"," runtimeScene.getGame().getRenderer().getThreeRenderer().shadowMap.type = THREE.PCFSoftShadowMap;\r"," break;\r"," case 'VSM':\r"," runtimeScene.getGame().getRenderer().getThreeRenderer().shadowMap.type = THREE.VSMShadowMap;\r"," break;\r"," default:\r"," runtimeScene.getGame().getRenderer().getThreeRenderer().shadowMap.type = THREE.PCFShadowMap;\r","}\r","runtimeScene.getGame().getRenderer().getThreeRenderer().shadowMap.enabled = eventsFunctionContext.getArgument(\"ShadowMap\");\r","runtimeScene.getGame().getRenderer().getThreeRenderer().shadowMap.requestAnimationFrame = 1;\r","runtimeScene.getGame().getRenderer().getThreeRenderer().shadowMap.needsUpdate = true;"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"defaultValue":"yes","description":"Shadow map","name":"ShadowMap","optional":true,"type":"yesorno"},{"description":"Shadow map type","name":"ShadowMapType","supplementaryInformation":"[\"Basic\",\"PCF\",\"PCF Soft\",\"VSM\"]","type":"stringWithSelector"}],"objectGroups":[]}],"eventsBasedBehaviors":[{"description":"Shadow casting and receiving shadow for 3D box objects.","fullName":"Shadows 3D box","name":"Shadows3DBox","objectType":"Scene3D::Cube3DObject","eventsFunctions":[{"fullName":"","functionType":"Action","name":"onCreated","sentence":"","events":[{"folded":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Shadows::Shadows3DBox::PropertyCastShadow3DBox"},"parameters":["Object","Behavior"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"objects[0].get3DRendererObject().castShadow = true;","parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}]},{"folded":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Shadows::Shadows3DBox::PropertyReceiveShadow3DBox"},"parameters":["Object","Behavior"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"objects[0].get3DRendererObject().receiveShadow = true;","parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Scene3D::Cube3DObject","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Shadows::Shadows3DBox","type":"behavior"}],"objectGroups":[]},{"description":"Enable or disable casting shadow for a 3D box.","fullName":"Cast shadow - 3D box","functionType":"Action","name":"CastShadow3DBox","sentence":"Enable casting shadow for _PARAM0_: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"GetArgumentAsBoolean"},"parameters":["\"CastShadow\""]}],"actions":[{"type":{"value":"Shadows::CastShadow3DBox"},"parameters":["","Object","",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"GetArgumentAsBoolean"},"parameters":["\"CastShadow\""]}],"actions":[{"type":{"value":"Shadows::CastShadow3DBox"},"parameters":["","Object","no",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BehaviorActivated"},"parameters":["Object","Behavior"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length > 0) {\r"," objects[0].get3DRendererObject().castShadow = eventsFunctionContext.getArgument(\"CastShadow\");\r","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Scene3D::Cube3DObject","type":"object"},{"defaultValue":"yes","description":"Behavior","name":"Behavior","optional":true,"supplementaryInformation":"Shadows::Shadows3DBox","type":"behavior"},{"description":"Cast shadow","name":"CastShadow","type":"yesorno"}],"objectGroups":[]},{"description":"Enable or disable receive shadows for a 3D box.","fullName":"Receive shadows - 3D box","functionType":"Action","name":"ReceiveShadow3DBox","sentence":"Enable receiving shadows for _PARAM0_: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"GetArgumentAsBoolean"},"parameters":["\"ReceiveShadow\""]}],"actions":[{"type":{"value":"Shadows::ReceiveShadow3DBox"},"parameters":["","Object","",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"GetArgumentAsBoolean"},"parameters":["\"ReceiveShadow\""]}],"actions":[{"type":{"value":"Shadows::ReceiveShadow3DBox"},"parameters":["","Object","no",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BehaviorActivated"},"parameters":["Object","Behavior"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length > 0) {\r"," objects[0].get3DRendererObject().receiveShadow = eventsFunctionContext.getArgument(\"ReceiveShadow\");\r","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Scene3D::Cube3DObject","type":"object"},{"defaultValue":"yes","description":"Behavior","name":"Behavior","optional":true,"supplementaryInformation":"Shadows::Shadows3DBox","type":"behavior"},{"description":"Receive shadow","name":"ReceiveShadow","type":"yesorno"}],"objectGroups":[]}],"propertyDescriptors":[{"value":"","type":"Boolean","label":"Cast shadow","description":"","group":"","extraInformation":[],"name":"CastShadow3DBox"},{"value":"","type":"Boolean","label":"Receive shadow","description":"","group":"","extraInformation":[],"name":"ReceiveShadow3DBox"}],"sharedPropertyDescriptors":[]},{"description":"Shadow casting and receiving shadow for 3D model objects.","fullName":"Shadows 3D model","name":"Shadows3DModel","objectType":"Scene3D::Model3DObject","eventsFunctions":[{"fullName":"","functionType":"Action","name":"onCreated","sentence":"","events":[{"folded":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Shadows::Shadows3DModel::PropertyCastShadow3DModel"},"parameters":["Object","Behavior"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["objects[0].get3DRendererObject().traverse((node) => {\r"," if (node.isMesh) {\r"," node.castShadow = true;\r"," }\r","});"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}]},{"folded":true,"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Shadows::Shadows3DModel::PropertyReceiveShadow3DModel"},"parameters":["Object","Behavior"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["objects[0].get3DRendererObject().traverse((node) => {\r"," if (node.isMesh) {\r"," node.receiveShadow = true;\r"," }\r","});"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Scene3D::Model3DObject","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Shadows::Shadows3DModel","type":"behavior"}],"objectGroups":[]},{"description":"Enable or disable casting shadow for a 3D model.","fullName":"Cast shadow - 3D model","functionType":"Action","name":"CastShadow","sentence":"Enable casting shadow for _PARAM0_: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"GetArgumentAsBoolean"},"parameters":["\"CastShadow\""]}],"actions":[{"type":{"value":"Shadows::CastShadow"},"parameters":["","Object","",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"GetArgumentAsBoolean"},"parameters":["\"CastShadow\""]}],"actions":[{"type":{"value":"Shadows::CastShadow"},"parameters":["","Object","no",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BehaviorActivated"},"parameters":["Object","Behavior"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length > 0) {"," objects[0].get3DRendererObject().traverse((node) => {"," if (node.isMesh) {"," node.castShadow = eventsFunctionContext.getArgument(\"CastShadow\");"," }"," });","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Scene3D::Model3DObject","type":"object"},{"defaultValue":"yes","description":"Behavior","name":"Behavior","optional":true,"supplementaryInformation":"Shadows::Shadows3DModel","type":"behavior"},{"description":"Cast shadow","name":"CastShadow","type":"yesorno"}],"objectGroups":[]},{"description":"Enable or disable receive shadows for a 3D model.","fullName":"Receive shadows - 3D model","functionType":"Action","name":"ReceiveShadow","sentence":"Enable receiving shadows for _PARAM0_: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"GetArgumentAsBoolean"},"parameters":["\"ReceiveShadow\""]}],"actions":[{"type":{"value":"Shadows::ReceiveShadow"},"parameters":["","Object","",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"GetArgumentAsBoolean"},"parameters":["\"ReceiveShadow\""]}],"actions":[{"type":{"value":"Shadows::ReceiveShadow"},"parameters":["","Object","no",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BehaviorActivated"},"parameters":["Object","Behavior"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length > 0) {"," objects[0].get3DRendererObject().traverse((node) => {"," if (node.isMesh) {"," node.receiveShadow = eventsFunctionContext.getArgument(\"ReceiveShadow\");"," }"," });","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Scene3D::Model3DObject","type":"object"},{"defaultValue":"yes","description":"Behavior","name":"Behavior","optional":true,"supplementaryInformation":"Shadows::Shadows3DModel","type":"behavior"},{"description":"Receive shadow","name":"ReceiveShadow","type":"yesorno"}],"objectGroups":[]}],"propertyDescriptors":[{"value":"","type":"Boolean","label":"Cast shadow","description":"","group":"","extraInformation":[],"name":"CastShadow3DModel"},{"value":"","type":"Boolean","label":"Receive shadow","description":"","group":"","extraInformation":[],"name":"ReceiveShadow3DModel"}],"sharedPropertyDescriptors":[]}],"eventsBasedObjects":[]},{"author":"@ddabrahim","category":"Camera","extensionNamespace":"","fullName":"Drag camera with the mouse (or touchscreen)","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWRyYWctdmFyaWFudCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0yMi42NywxMkwxOC4xOCwxNi41TDE1LjY3LDE0TDE3LjY1LDEyTDE1LjY3LDEwLjA0TDE4LjE4LDcuNTNMMjIuNjcsMTJNMTIsMS4zM0wxNi40Nyw1LjgyTDEzLjk2LDguMzNMMTIsNi4zNUwxMCw4LjMzTDcuNSw1LjgyTDEyLDEuMzNNMTIsMjIuNjdMNy41MywxOC4xOEwxMC4wNCwxNS42N0wxMiwxNy42NUwxNCwxNS42N0wxNi41LDE4LjE4TDEyLDIyLjY3TTEuMzMsMTJMNS44Miw3LjVMOC4zMywxMEw2LjM1LDEyTDguMzMsMTMuOTZMNS44MiwxNi40N0wxLjMzLDEyTTEyLDEwQTIsMiAwIDAsMSAxNCwxMkEyLDIgMCAwLDEgMTIsMTRBMiwyIDAgMCwxIDEwLDEyQTIsMiAwIDAsMSAxMiwxMFoiIC8+PC9zdmc+","name":"DragCameraWithPointer","previewIconUrl":"https://resources.gdevelop-app.com/assets/Icons/drag-variant.svg","shortDescription":"Move a camera by dragging the mouse (or touchscreen).","version":"1.1.0","description":["Move a camera by dragging the mouse (or touchscreen). ","","How to use:","- Run this action on every frame that you want the camera to be movable by the mouse (or touchscreen)","- Select the mouse button to use (choose \"left\" for touchscreen)","- Select which directions the camera will move (vertical, horizontal, or both) ","- Select the layer that will be moved","","Tips:","- If no parameters are selected, the camera will move in both directions when the left mouse button (or touchscreen) are dragged."],"origin":{"identifier":"DragCameraWithPointer","name":"gdevelop-extension-store"},"tags":["mouse","cursor","pointer","touch","drag","camera","scroll","gestures"],"authorIds":["GfzRsieyUFVnsRR8OZThsPR29oq2","gqDaZjCfevOOxBYkK6zlhtZnXCg1"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"Move a camera by dragging the mouse (or touchscreen).","fullName":"Drag camera with the mouse","functionType":"Action","name":"DragCameraWithPointer","sentence":"Drag camera on layer _PARAM2_ in _PARAM3_ directions using _PARAM4_ mouse button","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"When mouse button is pressed, get starting position of mouse"},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"MouseButtonFromTextPressed"},"parameters":["","GetArgumentAsString(\"InputButton\")"]},{"type":{"value":"BuiltinCommonInstructions::And"},"parameters":[],"subInstructions":[{"type":{"value":"MouseButtonPressed"},"parameters":["","Left"]},{"type":{"inverted":true,"value":"GetArgumentAsBoolean"},"parameters":["\"InputButton\""]}]}]},{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"ModVarScene"},"parameters":["__DragCameraWithPointer.scrollStartX","=","MouseX(GetArgumentAsString(\"CamLayer\"),GetArgumentAsNumber(\"CamNumber\"))"]},{"type":{"value":"ModVarScene"},"parameters":["__DragCameraWithPointer.scrollStartY","=","MouseY(GetArgumentAsString(\"CamLayer\"),GetArgumentAsNumber(\"CamNumber\"))"]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"When mouse button is pressed, get current position of mouse and calculate distance between the previous and current position on X and Y axis"},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"MouseButtonFromTextPressed"},"parameters":["","GetArgumentAsString(\"InputButton\")"]},{"type":{"value":"BuiltinCommonInstructions::And"},"parameters":[],"subInstructions":[{"type":{"value":"MouseButtonPressed"},"parameters":["","Left"]},{"type":{"inverted":true,"value":"GetArgumentAsBoolean"},"parameters":["\"InputButton\""]}]}]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"ModVarScene"},"parameters":["__DragCameraWithPointer.scrollTargetX","=","MouseX(GetArgumentAsString(\"CamLayer\"),GetArgumentAsNumber(\"CamNumber\"))"]},{"type":{"value":"ModVarScene"},"parameters":["__DragCameraWithPointer.scrollTargetY","=","MouseY(GetArgumentAsString(\"CamLayer\"),GetArgumentAsNumber(\"CamNumber\"))"]},{"type":{"value":"ModVarScene"},"parameters":["__DragCameraWithPointer.scrollDistanceX","=","(Variable(__DragCameraWithPointer.scrollTargetX) - Variable(__DragCameraWithPointer.scrollStartX))"]},{"type":{"value":"ModVarScene"},"parameters":["__DragCameraWithPointer.scrollDistanceY","=","(Variable(__DragCameraWithPointer.scrollTargetY) - Variable(__DragCameraWithPointer.scrollStartY))"]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"If selected direction is horizontal, both, or left blank, move camera on X axis"},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"StrEqual"},"parameters":["GetArgumentAsString(\"Direction\")","=","\"horizontal\""]},{"type":{"value":"StrEqual"},"parameters":["GetArgumentAsString(\"Direction\")","=","\"both\""]},{"type":{"value":"StrEqual"},"parameters":["GetArgumentAsString(\"Direction\")","=","\"\""]}]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Only move camera when the distance is more than one pixel"},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Egal"},"parameters":["abs(Variable(__DragCameraWithPointer.scrollDistanceX))",">=","1"]}],"actions":[{"type":{"value":"SetCameraX"},"parameters":["","-","Variable(__DragCameraWithPointer.scrollDistanceX)","GetArgumentAsString(\"CamLayer\")","GetArgumentAsNumber(\"CamNumber\")"]}]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"If direction is vertical, both, or left blank, move camera on Y axis"},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"StrEqual"},"parameters":["GetArgumentAsString(\"Direction\")","=","\"vertical\""]},{"type":{"value":"StrEqual"},"parameters":["GetArgumentAsString(\"Direction\")","=","\"both\""]},{"type":{"value":"StrEqual"},"parameters":["GetArgumentAsString(\"Direction\")","=","\"\""]}]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Only move camera when the distance is more than one pixel"},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Egal"},"parameters":["abs(Variable(__DragCameraWithPointer.scrollDistanceY))",">=","1"]}],"actions":[{"type":{"value":"SetCameraY"},"parameters":["","-","Variable(__DragCameraWithPointer.scrollDistanceY)","GetArgumentAsString(\"CamLayer\")","GetArgumentAsNumber(\"CamNumber\")"]}]}]}]}],"parameters":[{"description":"Camera number (default: 0)","name":"CamNumber","type":"expression"},{"description":"Camera layer (default: \"\")","name":"CamLayer","type":"layer"},{"description":"Directions that the camera can move (horizontal, vertical, both)","name":"Direction","supplementaryInformation":"[\"vertical\",\"horizontal\",\"both\"]","type":"stringWithSelector"},{"description":"Mouse button (use \"Left\" for touchscreen)","name":"InputButton","type":"mouse"}],"objectGroups":[]}],"eventsBasedBehaviors":[],"eventsBasedObjects":[]},{"author":"PANDAKO-GitHub","category":"Input","extensionNamespace":"","fullName":"Mouse Pointer Lock","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMTksMTkgMjQsMTkgMjQsMjQgIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSI2LDIzIDExLDIzIDExLDE4ICIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTI0LDE5LjRjLTAuNywwLjgtMS40LDEuNi0yLjIsMi40Yy03LDctMTUuMywxMC4yLTE4LjUsN3MtMC4xLTExLjUsNy0xOC41czE1LjMtMTAuMiwxOC41LTcNCgljMS40LDEuNCwxLjYsMy42LDAuOCw2LjMiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMSwyMi41Yy0wLjMtMC4yLTAuNS0wLjUtMC44LTAuOGMtNy03LTEwLjItMTUuMy03LTE4LjVzMTEuNS0wLjEsMTguNSw3czEwLjIsMTUuMyw3LDE4LjUNCgljLTEuNywxLjctNC44LDEuNi04LjQsMC4xIi8+DQo8L3N2Zz4NCg==","name":"MousePointerLock","previewIconUrl":"https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Virtual Reality/Virtual Reality_360_rotate_vr_movement.svg","shortDescription":"This behavior removes the limit on the distance the mouse can move and hides the cursor.","version":"0.1.6","description":["This behavior removes the limit on the distance the mouse can move and hides the cursor.","","For example, a user can rotate or continue to manipulate an object by moving the mouse endlessly ([open the project online](https://editor.gdevelop.io/?project=example://mouse-pointer-lock)).","Without the pointer lock, the rotation or operation will stop the moment the pointer reaches the edge of the browser or screen.","","Game players don't have to worry about leaving the gameplay area or accidentally clicking on another application that moves the mouse focus away from the game.","","Locking the pointer locks `CursorX()` and `CursorY()` expressions.","Use `MovementX()` and `MovementY()` instead.",""],"origin":{"identifier":"MousePointerLock","name":"gdevelop-extension-store"},"tags":["mouse","lock","cursor","pointer"],"authorIds":["Zu55H5hcb9YmZTltIVOTAFDJQyB2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"fullName":"","functionType":"Action","name":"onFirstSceneLoaded","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const canvas = runtimeScene.getGame().getRenderer().getCanvas();","","gdjs._MousePointerLockExtension = {};","gdjs._MousePointerLockExtension.movement = { x: 0, y: 0 };","","canvas.addEventListener(\"pointermove\", (e) => {"," gdjs._MousePointerLockExtension.movement.x += e.movementX || 0;"," gdjs._MousePointerLockExtension.movement.y += e.movementY || 0;","}, false);"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"parameters":[],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"onScenePostEvents","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"gdjs._MousePointerLockExtension.movement = { x: 0, y: 0 };","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[],"objectGroups":[]},{"description":"Get the movement of the pointer on the X-axis.","fullName":"Pointer X movement","functionType":"Expression","name":"MovementX","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = gdjs._MousePointerLockExtension.movement.x || 0;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[],"objectGroups":[]},{"description":"Get the movement of the pointer on the Y-axis.","fullName":"Pointer Y movement","functionType":"Expression","name":"MovementY","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = gdjs._MousePointerLockExtension.movement.y || 0;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[],"objectGroups":[]},{"description":"Lock the mouse pointer to hide it.","fullName":"Request Pointer Lock","functionType":"Action","name":"RequestPointerLock","sentence":"Request Pointer Lock","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const canvas = runtimeScene.getGame().getRenderer().getCanvas();\r","if (canvas.requestPointerLock) {\r"," canvas.requestPointerLock({ unadjustedMovement: true });\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[],"objectGroups":[]},{"description":"Unlocks the mouse pointer and show it.","fullName":"Exit pointer lock","functionType":"Action","name":"ExitPointerLock","sentence":"Exit pointer lock","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (document.exitPointerLock) {\r"," document.exitPointerLock();\r","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[],"objectGroups":[]},{"description":"Check if the mouse pointer is locked.","fullName":"Pointer is locked","functionType":"Condition","name":"isPointerLocked","sentence":"The mouse pointer is locked","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = document.pointerLockElement ? true : false;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"parameters":[],"objectGroups":[]}],"eventsBasedBehaviors":[],"eventsBasedObjects":[]},{"author":"","category":"Visual effect","extensionNamespace":"","fullName":"Object recolorizer (experimental)","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO30NCgkuc3Qye2ZpbGw6bm9uZTtzdHJva2U6IzAwMDAwMDtzdHJva2Utd2lkdGg6MjtzdHJva2UtbGluZWNhcDpyb3VuZDtzdHJva2UtbGluZWpvaW46cm91bmQ7c3Ryb2tlLWRhc2hhcnJheTo2LDY7fQ0KCS5zdDN7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtZGFzaGFycmF5OjQsNDt9DQoJLnN0NHtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVjYXA6cm91bmQ7fQ0KCS5zdDV7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1kYXNoYXJyYXk6My4xMDgxLDMuMTA4MTt9DQoJDQoJCS5zdDZ7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDtzdHJva2UtZGFzaGFycmF5OjQsMzt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTE2LjksMTRjLTEuOCwwLTMuMywxLjQtMy4zLDMuMXYwLjdjMCwxLjEtMC42LDEuOS0xLjYsMi4ybDAsMGgxLjZsMy4xLDBjMS44LDAsMy40LTEuNCwzLjMtMy4xDQoJQzIwLDE1LjMsMTguNiwxNCwxNi45LDE0eiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTIwLjMsMTEuNUMxOC45LDExLjIsMTcuNSwxMSwxNiwxMWMtNy4yLDAtMTMsNC0xMyw5YzAsMSwwLjIsMiwwLjcsMi45YzEsMiwzLjYsMi42LDUuNCwxLjNsMCwwDQoJYzIuNC0xLjcsNS44LDAsNS44LDNWMjljMC40LDAsMC43LDAsMS4xLDBjNy4yLDAsMTMtNCwxMy05YzAtMi4yLTEuMS00LjItMi45LTUuNyIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTE3LjQsMTQuMWw5LjgtOC44YzAuNC0wLjQsMS4xLTAuNCwxLjUsMGwwLDBjMC40LDAuNCwwLjQsMSwwLDEuNEwyMCwxNiIvPg0KPC9zdmc+DQo=","name":"Recolorizer","previewIconUrl":"https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Graphic Design/Graphic Design_color_colour_palette_paint_brush.svg","shortDescription":"Independently change the colors of a sprite, a tiled sprite or a panel sprite.","version":"0.1.4","description":["This extension allows to restyle a sprite, a tiled sprite or a panel sprite.","","It can be used to:","- Change the color of player short according to its team color.","- Add small color variation to trees of a forest.","- Restyle objects to match other assets.","","An example shows how to change the 2 main colors of an object ([open the project online](https://editor.gdevelop.io/?project=example://recolorizer)).","","This extension is experimental and might no longer work in future version of GDevelop."],"origin":{"identifier":"Recolorizer","name":"gdevelop-extension-store"},"tags":["color","hue","saturation","lightness","hsl","hsv","rgb"],"authorIds":["IWykYNRvhCZBN3vEgKEbBPOR3Oc2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"Define JavaScript classes.","fullName":"Define JavaScript classes","functionType":"Action","name":"DefineJavaScript","private":true,"sentence":"Define JavaScript classes","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (gdjs.__recolorizerExtension) {"," return;","}","","/**"," * Converts an HSL color value to RGB. Conversion formula"," * adapted from http://en.wikipedia.org/wiki/HSL_color_space."," * Assumes h, s, and l are contained in the set [0, 1] and"," * returns r, g, and b in the set [0, 255]."," * https://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion"," *"," * @param {number} h The hue"," * @param {number} s The saturation"," * @param {number} l The lightness"," * @return {number[]} The RGB representation"," */","function hslToRgb(h, s, l) {"," let r, g, b;"," if (s == 0) {"," r = g = b = l; // achromatic"," } else {"," const q = l < 0.5 ? l * (1 + s) : l + s - l * s;"," const p = 2 * l - q;"," r = hue2rgb(p, q, h + 1 / 3);"," g = hue2rgb(p, q, h);"," b = hue2rgb(p, q, h - 1 / 3);"," }",""," return [Math.round(r * 255), Math.round(g * 255), Math.round(b * 255)];","}","","function hue2rgb(p, q, t) {"," if (t < 0) t += 1;"," if (t > 1) t -= 1;"," if (t < 1 / 6) return p + (q - p) * 6 * t;"," if (t < 1 / 2) return q;"," if (t < 2 / 3) return p + (q - p) * (2 / 3 - t) * 6;"," return p;","}","","/**"," * Converts an RGB color value to HSL. Conversion formula"," * adapted from http://en.wikipedia.org/wiki/HSL_color_space."," * Assumes r, g, and b are contained in the set [0, 255] and"," * returns h, s, and l in the set [0, 1]."," * https://stackoverflow.com/questions/2353211/hsl-to-rgb-color-conversion"," *"," * @param {number} r The red color value"," * @param {number} g The green color value"," * @param {number} b The blue color value"," * @return {number[]} The HSL representation"," */","function rgbToHsl(r, g, b) {"," r /= 255, g /= 255, b /= 255;"," const max = Math.max(r, g, b), min = Math.min(r, g, b);"," let h, s, l = (max + min) / 2;",""," if (max == min) {"," h = s = 0; // achromatic"," } else {"," const d = max - min;"," s = l > 0.5 ? d / (2 - max - min) : d / (max + min);"," switch (max) {"," case r: h = (g - b) / d + (g < b ? 6 : 0); break;"," case g: h = (b - r) / d + 2; break;"," case b: h = (r - g) / d + 4; break;"," }"," h /= 6;"," }",""," return [h, s, l];","}","","/**"," * @param {HTMLCanvasElement} canvas"," * @param {PIXI.Texture} texture"," * @returns {HTMLCanvasElement}"," */","function resetCanvas(canvas, texture) {"," const context = canvas.getContext('2d');"," const crop = texture._frame;"," context.save();"," context.globalCompositeOperation = 'copy';"," context.drawImage("," texture.baseTexture.getDrawableSource(),"," crop.x,"," crop.y,"," crop.width,"," crop.height,"," 0,"," 0,"," crop.width,"," crop.height"," );"," context.restore();"," return canvas;","}","","/**"," * Replace a color with an other one."," *"," * @param {HTMLCanvasElement} sourceCanvas"," * @param {HTMLCanvasElement} targetCanvas"," * @param {{x: number, y: number, width: number, height: number}} frame"," * @param {[number, number, number]} originColor The color to replace from."," * @param {[number, number, number]} targetColor The color to replate to."," * @param {number} hueScope Pixels within the hue scope relatively from originColor are recolorized."," * @param {number} saturationScope Pixels within the saturation scope relatively from originColor are recolorized."," * @param {number} lighnessScope Pixels within the lightness scope relatively from originColor are recolorized."," */","function recolorizeTexture(sourceCanvas, targetCanvas, frame, originColor, targetColor, hueScope, saturationScope, lighnessScope) {"," const sourceContext = sourceCanvas.getContext('2d');"," const targetContext = targetCanvas.getContext('2d');"," const sourcePixels = sourceContext.getImageData(0, 0, frame.width, frame.height).data;"," const targetImageData = targetContext.getImageData(0, 0, frame.width, frame.height);"," const targetPixels = targetImageData.data;",""," const originColorHSL = rgbToHsl(originColor[0], originColor[1], originColor[2]);"," const targetColorHSL = rgbToHsl(targetColor[0], targetColor[1], targetColor[2]);",""," const originHue = originColorHSL[0];"," const originSaturation = originColorHSL[1];"," const originLightness = originColorHSL[2];",""," const targetHue = targetColorHSL[0];"," const targetSaturation = targetColorHSL[1];"," const saturationDelta = targetSaturation - originSaturation;"," const lightnessDelta = targetColorHSL[2] - originLightness;",""," // hue is not knowned for graycase colors."," const hueIsConstrained = hueScope < 0.5;",""," for (let i = 0; i < sourcePixels.length; i += 4) {"," const alpha = sourcePixels[i + 3];"," if (alpha === 0) {"," continue;"," }"," const pixelHsl = rgbToHsl(sourcePixels[i + 0], sourcePixels[i + 1], sourcePixels[i + 2]);",""," const pixelHue = pixelHsl[0];"," const pixelSaturation = pixelHsl[1];"," const pixelLightness = pixelHsl[2];",""," const hueDelta = gdjs.evtTools.common.mod(pixelHue - originHue + 0.5, 1) - 0.5;"," if ((!hueIsConstrained || Math.abs(hueDelta) <= hueScope)"," && Math.abs(pixelSaturation - originSaturation) <= saturationScope"," && Math.abs(pixelLightness - originLightness) <= lighnessScope) {"," // graycase pixels must take the targeted hue"," pixelHsl[0] = pixelSaturation === 0 ? targetHue : gdjs.evtTools.common.mod(pixelHue - originHue + targetHue, 1);"," // white pixels must also take the targeted saturation."," pixelHsl[1] = pixelLightness > 0.999 ? targetSaturation : gdjs.evtTools.common.clamp(pixelSaturation + saturationDelta, 0, 1);"," pixelHsl[2] = gdjs.evtTools.common.clamp(pixelLightness + lightnessDelta, 0, 1);"," const pixelRgb = hslToRgb(pixelHsl[0], pixelHsl[1], pixelHsl[2]);"," targetPixels[i + 0] = pixelRgb[0];"," targetPixels[i + 1] = pixelRgb[1];"," targetPixels[i + 2] = pixelRgb[2];"," }"," }"," targetContext.putImageData(targetImageData, 0, 0);","};","","/**"," * @param {[number, number, number]} originColor The color to replace from."," * @param {[number, number, number]} targetColor The color to replate to."," * @param {number} hueScope Pixels within the hue scope relatively from originColor are recolorized."," * @param {number} saturationScope Pixels within the saturation scope relatively from originColor are recolorized."," * @param {number} lighnessScope Pixels within the lightness scope relatively from originColor are recolorized."," * @return {number} key"," */","function getRecolorizationKey(originColor, targetColor, hueScope, saturationScope, lighnessScope) {"," return String.fromCharCode(originColor[0] * (2 ** 8) + originColor[1],"," originColor[2] * (2 ** 8) + targetColor[0],"," targetColor[1] * (2 ** 8) + targetColor[2],"," (hueScope * (2 ** 8) + saturationScope) * (2 ** 8),"," lighnessScope * (2 ** 8));","}","","/**"," * @param {PIXI.Texture} texture"," * @returns {HTMLCanvasElement}"," */","function getCanvas(texture) {"," /** @type {HTMLCanvasElement} */"," const canvas = document.createElement('canvas');",""," const context = canvas.getContext('2d');"," const crop = texture._frame.clone();"," const resolution = texture.baseTexture.resolution;",""," crop.x *= resolution;"," crop.y *= resolution;"," crop.width *= resolution;"," crop.height *= resolution;",""," canvas.width = Math.ceil(crop.width);"," canvas.height = Math.ceil(crop.height);",""," context.save();"," context.globalCompositeOperation = 'copy';"," context.drawImage("," texture.baseTexture.getDrawableSource(),"," crop.x,"," crop.y,"," crop.width,"," crop.height,"," 0,"," 0,"," crop.width,"," crop.height"," );"," context.restore();",""," return canvas;","}","","/**"," * Manage recolorizations to ensure uniqueness of textures."," **/","class RecolorizationManager {"," /**"," * Create a manager."," * @param {PIXI.Texture[]} sourceTextures"," */"," constructor(sourceTextures) {"," /** @type {PIXI.Texture[]} */"," this.sourceTextures = sourceTextures;"," this.sourceCanvas = sourceTextures.map(texture => gdjs.__recolorizerExtension.getCanvas(texture));"," /** @type {Map<string, {userCount: integer, textures: PIXI.Texture[], canvas: HTMLCanvasElement[]}>} */"," this.recolorizedSprites = new Map();"," /** @type {Array<{userCount: integer, textures: PIXI.Texture[], canvas: HTMLCanvasElement[]}>} */"," this.recycledRecolorizedSprites = [];"," }",""," /**"," * Unregister a recoloration usage."," *"," * @param {string} previousRecolorizationKey"," */"," unregister(previousRecolorizationKey) {"," const previousRecolorizedSprite = this.recolorizedSprites.get(previousRecolorizationKey);"," if (previousRecolorizedSprite) {"," previousRecolorizedSprite.userCount--;"," if (previousRecolorizedSprite.userCount <= 0) {"," this.recolorizedSprites.delete(previousRecolorizationKey);"," this.recycledRecolorizedSprites.push(previousRecolorizedSprite);"," }"," }"," }",""," /**"," * Register a recolorization usage and get recolored textures."," *"," * @param {string} recolorizationKey"," * @param {Array<{originColor: [number, number, number], targetColor: [number, number, number], hueScope: number, saturationScope: number, lighnessScope: number}>} recolorizations"," * @returns {PIXI.Texture[]} "," */"," register(recolorizationKey, recolorizations) {"," if (recolorizationKey === \"\") {"," return this.sourceTextures;"," }",""," /** @type {PIXI.Texture[]} */"," let targetTextures;"," let recolorizedSprite = this.recolorizedSprites.get(recolorizationKey);"," if (recolorizedSprite) {"," targetTextures = recolorizedSprite.textures;"," }"," else {"," if (this.recycledRecolorizedSprites.length > 0) {"," const reusableRecolorizedSprite = this.recycledRecolorizedSprites.pop();"," targetTextures = reusableRecolorizedSprite.textures;"," /** @type {PIXI.Texture[]} */"," const targetCanvas = reusableRecolorizedSprite.canvas;",""," for (let textureIndex = 0; textureIndex < this.sourceTextures.length; textureIndex++) {"," const sourceTexture = this.sourceTextures[textureIndex];"," const targetCanva = targetCanvas[textureIndex];"," resetCanvas(targetCanva, sourceTexture);"," }",""," this._recolorizeAll(targetCanvas, recolorizations);",""," targetTextures.forEach(texture => texture.update());"," reusableRecolorizedSprite.userCount = 0;"," recolorizedSprite = reusableRecolorizedSprite;"," }"," else {"," /** @type {HTMLCanvasElement[]} */"," const targetCanvas = this.sourceTextures.map(texture => gdjs.__recolorizerExtension.getCanvas(texture));",""," this._recolorizeAll(targetCanvas, recolorizations);",""," targetTextures = targetCanvas.map((targetCanva, index) => {"," const texture = PIXI.Texture.from(targetCanva);"," texture.baseTexture.scaleMode = this.sourceTextures[index].baseTexture.scaleMode;"," texture.baseTexture.wrapMode = this.sourceTextures[index].baseTexture.wrapMode;"," texture.baseTexture.alphaMode = this.sourceTextures[index].baseTexture.alphaMode;"," return texture;"," });"," recolorizedSprite = { userCount: 0, textures: targetTextures, canvas: targetCanvas };"," }"," this.recolorizedSprites.set(recolorizationKey, recolorizedSprite);"," }"," recolorizedSprite.userCount++;"," return targetTextures;"," }",""," /**"," * Apply a recoloration to every textures."," *"," * @param {HTMLCanvasElement[]} targetCanvas"," * @param {Array<{originColor: [number, number, number], targetColor: [number, number, number], hueScope: number, saturationScope: number, lighnessScope: number}>} recolorizations"," */"," _recolorizeAll(targetCanvas, recolorizations) {"," for (let textureIndex = 0; textureIndex < this.sourceTextures.length; textureIndex++) {"," const sourceTexture = this.sourceTextures[textureIndex];"," const targetCanva = targetCanvas[textureIndex];"," const frame = sourceTexture._frame;"," for (const recolorization of recolorizations) {"," recolorizeTexture("," this.sourceCanvas[textureIndex],"," targetCanva,"," frame,"," recolorization.originColor,"," recolorization.targetColor,"," recolorization.hueScope,"," recolorization.saturationScope,"," recolorization.lighnessScope"," );"," }"," }"," }","}","","/**"," * Object recolorizer."," **/","class Recolorizer {"," /**"," * Create an object recolorizer."," * @param {RecolorizationManager} manager"," * @param {{texture: PIXI.Texture[]}} sourceTextureConatiners"," */"," constructor(manager, sourceTextureContainers) {"," this.manager = manager;"," this.sourceTextureContainers = sourceTextureContainers;",""," this.previousRecolorizationKey = \"\";"," this.recolorizationKey = \"\";"," /** @type {Array<{originColor: [number, number, number], targetColor: [number, number, number], hueScope: number, saturationScope: number, lighnessScope: number}>} */"," this.recolorizations = [];"," }",""," /**"," * Replace a color with an other one."," *"," * @param {[number, number, number]} originColor The color to replace from."," * @param {[number, number, number]} targetColor The color to replate to."," * @param {number} hueScope Pixels within the hue scope relatively from originColor are recolorized."," * @param {number} saturationScope Pixels within the saturation scope relatively from originColor are recolorized."," * @param {number} lighnessScope Pixels within the lightness scope relatively from originColor are recolorized."," */"," recolorizeSprite(originColor, targetColor, hueScope, saturationScope, lighnessScope) {"," this.recolorizationKey += getRecolorizationKey(originColor, targetColor, hueScope, saturationScope, lighnessScope);"," this.recolorizations.push({ originColor, targetColor, hueScope, saturationScope, lighnessScope});"," }",""," /**"," * Reset the default textures of the object."," */"," resetSprite() {"," this.recolorizationKey = \"\";"," this.recolorizations = [];"," }",""," /**"," * Update the textures of the object."," */"," updateSprite() {"," const needsRecolorization = this.recolorizationKey !== this.previousRecolorizationKey;"," if (needsRecolorization) {"," this.manager.unregister(this.previousRecolorizationKey);",""," /** @type {PIXI.Texture[]} */"," const targetTextures = this.manager.register(this.recolorizationKey, this.recolorizations);",""," let textureIndex = 0;"," for (const container of this.sourceTextureContainers) {"," container.texture = targetTextures[textureIndex];"," textureIndex++;"," }"," this.previousRecolorizationKey = this.recolorizationKey;"," }"," return needsRecolorization;"," }","}","","gdjs.__recolorizerExtension = {"," getCanvas,"," RecolorizationManager,"," Recolorizer","};"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"parameters":[],"objectGroups":[]}],"eventsBasedBehaviors":[{"description":"Independently change the colors of a sprite.","fullName":"Sprite recolorizer","name":"SpriteRecolorizer","objectType":"Sprite","eventsFunctions":[{"fullName":"","functionType":"Action","name":"onCreated","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Recolorizer::DefineJavaScript"},"parameters":["",""]}]},{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const {RecolorizationManager, Recolorizer} = gdjs.__recolorizerExtension;","","/** @type {gdjs.SpriteRuntimeObject} */","const sprite = objects[0];","const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");","const behavior = sprite.getBehavior(behaviorName);","","if (!runtimeScene.__recolorizerExtension) {"," runtimeScene.__recolorizerExtension = { managers: new Map()};","}","/** @type {Map} */","const managers = runtimeScene.__recolorizerExtension.managers || new Map();","let manager = managers.get(sprite.getName());","if (!manager) {"," /** @type {PIXI.Texture[]} */"," const sourceTextures = [];"," for (const animation of sprite._animator._animations) {"," for (const direction of animation.directions) {"," for (const frame of direction.frames) {"," sourceTextures.push(frame.texture);"," }"," }"," }"," manager = new RecolorizationManager(sourceTextures);"," managers.set(sprite.getName(), manager);","}","","/** @type {{texture: PIXI.Texture[]}} */","const sourceTextureContainers = [];","for (const animation of sprite._animator._animations) {"," for (const direction of animation.directions) {"," for (const frame of direction.frames) {"," sourceTextureContainers.push(frame);"," }"," }","}","","behavior.recolorizer = new Recolorizer("," manager,"," sourceTextureContainers",");"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Sprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::SpriteRecolorizer","type":"behavior"}],"objectGroups":[]},{"description":"Replace a given color of an object with another one. The scope allows to change similar colors at once.","fullName":"Recolorize","functionType":"Action","name":"Recolorize","sentence":"Recolorize _PARAM0_ from color _PARAM2_ to color _PARAM3_ within a scope of hue: _PARAM4_° saturation: _PARAM5_% lightness: _PARAM6_%","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");","const behavior = objects[0].getBehavior(behaviorName);","","const originColor = gdjs.rgbOrHexToRGBColor(eventsFunctionContext.getArgument(\"OriginColor\"));","const targetColor = gdjs.rgbOrHexToRGBColor(eventsFunctionContext.getArgument(\"TargetColor\"));","const hueScope = gdjs.evtTools.common.clamp(eventsFunctionContext.getArgument(\"HueScope\") / 360, 0, 180);","const saturationScope = gdjs.evtTools.common.clamp(eventsFunctionContext.getArgument(\"SaturationScope\") / 100, 0, 50);","const lightnessScope = gdjs.evtTools.common.clamp(eventsFunctionContext.getArgument(\"LightnessScope\") / 100, 0, 50);","","behavior.recolorizer.recolorizeSprite(originColor, targetColor, hueScope, saturationScope, lightnessScope);"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Sprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::SpriteRecolorizer","type":"behavior"},{"description":"Origin color","name":"OriginColor","type":"color"},{"description":"Target color","name":"TargetColor","type":"color"},{"description":"Hue scope (from 0° to 180°)","name":"HueScope","type":"expression"},{"description":"Saturation scope (in percent)","name":"SaturationScope","type":"expression"},{"description":"Lightness scope (in percent)","name":"LightnessScope","type":"expression"}],"objectGroups":[]},{"description":"Set back the original colors of an object.","fullName":"Reset color","functionType":"Action","name":"ResetColor","sentence":"Reset the colors of _PARAM0_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");","const behavior = objects[0].getBehavior(behaviorName);","","behavior.recolorizer.resetSprite();"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Sprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::SpriteRecolorizer","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"doStepPostEvents","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["\r","/** @type {gdjs.SpriteRuntimeObject} */\r","const sprite = objects[0];\r","const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\r","const behavior = sprite.getBehavior(behaviorName);\r","\r","const recolorized = behavior.recolorizer.updateSprite();\r","if (recolorized) {\r"," sprite._animationFrameDirty = true;\r","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Sprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::SpriteRecolorizer","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"onDestroy","sentence":"","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Unsure that destroyed instance recolorization can be free."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Recolorizer::SpriteRecolorizer::ResetColor"},"parameters":["Object","Behavior",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Sprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::SpriteRecolorizer","type":"behavior"}],"objectGroups":[]}],"propertyDescriptors":[],"sharedPropertyDescriptors":[]},{"description":"Independently change the colors of a tiled sprite.","fullName":"Tiled sprite recolorizer","name":"TiledSpriteRecolorizer","objectType":"TiledSpriteObject::TiledSprite","eventsFunctions":[{"fullName":"","functionType":"Action","name":"onCreated","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Recolorizer::DefineJavaScript"},"parameters":["",""]}]},{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const {RecolorizationManager, Recolorizer} = gdjs.__recolorizerExtension;","","/** @type {gdjs.TiledSpriteRuntimeObject} */","const tiledSprite = objects[0];","const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");","const behavior = tiledSprite.getBehavior(behaviorName);","","if (!runtimeScene.__recolorizerExtension) {"," runtimeScene.__recolorizerExtension = { managers: new Map()};","}","/** @type {Map} */","const managers = runtimeScene.__recolorizerExtension.managers || new Map();","let manager = managers.get(tiledSprite.getName());","if (!manager) {"," /** @type {PIXI.TilingSprite} */"," const tilingSprite = tiledSprite.getRendererObject();"," manager = new RecolorizationManager([tilingSprite.texture]);"," managers.set(tiledSprite.getName(), manager);","}","","behavior.recolorizer = new Recolorizer("," manager,"," [tiledSprite.getRendererObject()]",");",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"TiledSpriteObject::TiledSprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::TiledSpriteRecolorizer","type":"behavior"}],"objectGroups":[]},{"description":"Replace a given color of an object with another one. The scope allows to change similar colors at once.","fullName":"Recolorize","functionType":"Action","name":"Recolorize","sentence":"Recolorize _PARAM0_ from color _PARAM2_ to color _PARAM3_ within a scope of hue: _PARAM4_° saturation: _PARAM5_% lightness: _PARAM6_%","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");","const behavior = objects[0].getBehavior(behaviorName);","","const originColor = gdjs.rgbOrHexToRGBColor(eventsFunctionContext.getArgument(\"OriginColor\"));","const targetColor = gdjs.rgbOrHexToRGBColor(eventsFunctionContext.getArgument(\"TargetColor\"));","const hueScope = gdjs.evtTools.common.clamp(eventsFunctionContext.getArgument(\"HueScope\") / 360, 0, 180);","const saturationScope = gdjs.evtTools.common.clamp(eventsFunctionContext.getArgument(\"SaturationScope\") / 100, 0, 50);","const lightnessScope = gdjs.evtTools.common.clamp(eventsFunctionContext.getArgument(\"LightnessScope\") / 100, 0, 50);","","behavior.recolorizer.recolorizeSprite(originColor, targetColor, hueScope, saturationScope, lightnessScope);"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"TiledSpriteObject::TiledSprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::TiledSpriteRecolorizer","type":"behavior"},{"description":"Origin color","name":"OriginColor","type":"color"},{"description":"Target color","name":"TargetColor","type":"color"},{"description":"Hue scope (from 0° to 180°)","name":"HueScope","type":"expression"},{"description":"Saturation scope (in percent)","name":"SaturationScope","type":"expression"},{"description":"Lightness scope (in percent)","name":"LightnessScope","type":"expression"}],"objectGroups":[]},{"description":"Set back the original colors of an object.","fullName":"Reset color","functionType":"Action","name":"ResetColor","sentence":"Reset the colors of _PARAM0_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");","const behavior = objects[0].getBehavior(behaviorName);","","behavior.recolorizer.resetSprite();"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"TiledSpriteObject::TiledSprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::TiledSpriteRecolorizer","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"doStepPostEvents","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["\r","const object = objects[0];\r","const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\r","const behavior = object.getBehavior(behaviorName);\r","\r","const recolorized = behavior.recolorizer.updateSprite();"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"TiledSpriteObject::TiledSprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::TiledSpriteRecolorizer","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"onDestroy","sentence":"","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Unsure that destroyed instance recolorization can be free."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Recolorizer::TiledSpriteRecolorizer::ResetColor"},"parameters":["Object","Behavior",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"TiledSpriteObject::TiledSprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::TiledSpriteRecolorizer","type":"behavior"}],"objectGroups":[]}],"propertyDescriptors":[],"sharedPropertyDescriptors":[]},{"description":"Independently change the colors of a panel sprite.","fullName":"Panel sprite recolorizer","name":"PanelSpriteRecolorizer","objectType":"PanelSpriteObject::PanelSprite","eventsFunctions":[{"fullName":"","functionType":"Action","name":"onCreated","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Recolorizer::DefineJavaScript"},"parameters":["",""]}]},{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const {RecolorizationManager, Recolorizer} = gdjs.__recolorizerExtension;","","/** @type {gdjs.PanelSpriteRuntimeObject} */","const panelSprite = objects[0];","const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");","const behavior = panelSprite.getBehavior(behaviorName);","","if (!runtimeScene.__recolorizerExtension) {"," runtimeScene.__recolorizerExtension = { managers: new Map()};","}","/** @type {Map} */","const managers = runtimeScene.__recolorizerExtension.managers || new Map();","let manager = managers.get(panelSprite.getName());","if (!manager) {"," const renderer = panelSprite._renderer;"," /** @type {PIXI.Texture[]} */"," const sourceTextures = renderer._borderSprites.map(sprite => sprite.texture);"," sourceTextures.push(renderer._centerSprite.texture);"," manager = new RecolorizationManager(sourceTextures);"," managers.set(panelSprite.getName(), manager);","}","","const renderer = panelSprite._renderer;","","behavior.recolorizer = new Recolorizer("," manager,"," [...renderer._borderSprites, renderer._centerSprite],",");",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteObject::PanelSprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::PanelSpriteRecolorizer","type":"behavior"}],"objectGroups":[]},{"description":"Replace a given color of an object with another one. The scope allows to change similar colors at once.","fullName":"Recolorize","functionType":"Action","name":"Recolorize","sentence":"Recolorize _PARAM0_ from color _PARAM2_ to color _PARAM3_ within a scope of hue: _PARAM4_° saturation: _PARAM5_% lightness: _PARAM6_%","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");","const behavior = objects[0].getBehavior(behaviorName);","","const originColor = gdjs.rgbOrHexToRGBColor(eventsFunctionContext.getArgument(\"OriginColor\"));","const targetColor = gdjs.rgbOrHexToRGBColor(eventsFunctionContext.getArgument(\"TargetColor\"));","const hueScope = gdjs.evtTools.common.clamp(eventsFunctionContext.getArgument(\"HueScope\") / 360, 0, 180);","const saturationScope = gdjs.evtTools.common.clamp(eventsFunctionContext.getArgument(\"SaturationScope\") / 100, 0, 50);","const lightnessScope = gdjs.evtTools.common.clamp(eventsFunctionContext.getArgument(\"LightnessScope\") / 100, 0, 50);","","behavior.recolorizer.recolorizeSprite(originColor, targetColor, hueScope, saturationScope, lightnessScope);"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteObject::PanelSprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::PanelSpriteRecolorizer","type":"behavior"},{"description":"Origin color","name":"OriginColor","type":"color"},{"description":"Target color","name":"TargetColor","type":"color"},{"description":"Hue scope (from 0° to 180°)","name":"HueScope","type":"expression"},{"description":"Saturation scope (in percent)","name":"SaturationScope","type":"expression"},{"description":"Lightness scope (in percent)","name":"LightnessScope","type":"expression"}],"objectGroups":[]},{"description":"Set back the original colors of an object.","fullName":"Reset color","functionType":"Action","name":"ResetColor","sentence":"Reset the colors of _PARAM0_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");","const behavior = objects[0].getBehavior(behaviorName);","","behavior.recolorizer.resetSprite();"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteObject::PanelSprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::PanelSpriteRecolorizer","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"doStepPostEvents","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["/** @type {gdjs.PanelSpriteRuntimeObject} */\r","const panelSprite = objects[0];\r","const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");\r","const behavior = panelSprite.getBehavior(behaviorName);\r","\r","const recolorized = behavior.recolorizer.updateSprite();\r","if (recolorized) {\r"," const renderer = panelSprite._renderer;\r"," //renderer._wasRendered = false;\r"," renderer._spritesContainer.cacheAsBitmap = false;\r","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteObject::PanelSprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::PanelSpriteRecolorizer","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"onDestroy","sentence":"","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Unsure that destroyed instance recolorization can be free."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Recolorizer::PanelSpriteRecolorizer::ResetColor"},"parameters":["Object","Behavior",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"PanelSpriteObject::PanelSprite","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Recolorizer::PanelSpriteRecolorizer","type":"behavior"}],"objectGroups":[]}],"propertyDescriptors":[],"sharedPropertyDescriptors":[]}],"eventsBasedObjects":[]},{"author":"","category":"General","extensionNamespace":"","fullName":"3D collision","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXZlY3Rvci1pbnRlcnNlY3Rpb24iIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMy4xNCwxQTIuMTQsMi4xNCAwIDAsMCAxLDMuMTRWNUgzVjNINVYxSDMuMTRNNywxVjNIMTBWMUg3TTEyLDFWM0gxNFY1SDE2VjMuMTRDMTYsMS45NiAxNS4wNCwxIDEzLjg2LDFIMTJNMSw3VjEwSDNWN0gxTTksN0M3Ljg5LDcgNyw3Ljg5IDcsOUM3LDExLjMzIDcsMTYgNywxNkM3LDE2IDExLjU3LDE2IDEzLjg2LDE2QTIuMTQsMi4xNCAwIDAsMCAxNiwxMy44NkMxNiwxMS41NyAxNiw3IDE2LDdDMTYsNyAxMS4zMyw3IDksN00xOCw3VjlIMjBWMTFIMjJWOUMyMiw3Ljg5IDIxLjExLDcgMjAsN0gxOE05LDlIMTRWMTRIOVY5TTEsMTJWMTMuODZDMSwxNS4wNCAxLjk2LDE2IDMuMTQsMTZINVYxNEgzVjEySDFNMjAsMTNWMTZIMjJWMTNIMjBNNywxOFYyMEM3LDIxLjExIDcuODksMjIgOSwyMkgxMVYyMEg5VjE4SDdNMjAsMThWMjBIMThWMjJIMjBDMjEuMTEsMjIgMjIsMjEuMTEgMjIsMjBWMThIMjBNMTMsMjBWMjJIMTZWMjBIMTNaIiAvPjwvc3ZnPg==","name":"Collision3D","previewIconUrl":"https://asset-resources.gdevelop.io/public-resources/Icons/7a5696a515bf40813692e118147568392a854f65f5b50750c9b9aaa967aba7df_vector-intersection.svg","shortDescription":"Check collision and distance between 3D objects.","version":"0.1.0","description":"Check collision and distance between 3D objects and separate them from each other.","origin":{"identifier":"Collision3D","name":"gdevelop-extension-store"},"tags":["3d","collision"],"authorIds":["IWykYNRvhCZBN3vEgKEbBPOR3Oc2","PEzPAaWHgYgk5UwIPppsL6f2ugp2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"Define helper classes JavaScript code.","fullName":"Define helper classes","functionType":"Action","name":"DefineHelperClasses","private":true,"sentence":"Define helper classes JavaScript code","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (gdjs._collision3DExtension) {"," return;","}","","/**"," * @param {gdjs.RuntimeObject} object"," * @param {float} x"," * @param {float} y"," * @param {float} z"," * @return {number}"," */","const getSqDistanceToPosition = (object, x, y, z) => {"," const deltaX = object.getCenterXInScene() - x;"," const deltaY = object.getCenterYInScene() - y;"," const deltaZ = (object.getCenterZInScene ? object.getCenterZInScene() : 0) - z;"," return deltaX * deltaX + deltaY * deltaY + deltaZ * deltaZ;","};","","/**"," * @param {gdjs.RuntimeObject} object"," * @param {float} x"," * @param {float} y"," * @param {float} z"," * @return {number}"," */","const getDistanceToPosition = (object, x, y, z) => Math.sqrt(getSqDistanceToPosition(object, x, y, z));","","/**"," * @param {gdjs.RuntimeObject} object"," * @param {gdjs.RuntimeObject} otherObject"," * @return {number}"," */","const getSqDistanceToObject = (object, otherObject) => {"," return getSqDistanceToPosition("," object,"," otherObject.getCenterXInScene(),"," otherObject.getCenterYInScene(),"," otherObject.getCenterZInScene ? otherObject.getCenterZInScene() : 0"," );","};","","/**"," * @param {gdjs.RuntimeObject} object"," * @param {gdjs.RuntimeObject} otherObject"," * @return {number}"," */","const getDistanceToObject = (object, otherObject) => Math.sqrt(getSqDistanceToObject(object, otherObject));","","/**"," * @param {gdjs.RuntimeObject} object"," * @param {gdjs.RuntimeObject} otherObject"," * @param {number} distanceSq"," * @return {boolean}"," */","const areObjectsWithinDistance = (object, otherObject, distanceSq) => {"," return getSqDistanceToObject(object, otherObject) <= distanceSq;","};","","/**"," * @param {gdjs.ObjectList} objectsLists1"," * @param {gdjs.ObjectList} objectsLists2"," * @param {number} distance"," * @param {boolean} inverted"," * @return {boolean}"," */","const pickObjectsWithinDistance = (objectsLists1, objectsLists2, distance, inverted) => {"," const distanceSq = distance * distance;"," return gdjs.evtTools.object.twoListsTest("," areObjectsWithinDistance,"," objectsLists1,"," objectsLists2,"," inverted,"," distance * distance"," );","}","","/**"," * @param {gdjs.ObjectList} objectsLists"," * @param {gdjs.ObjectList} objectsLists2"," * @param {number} x"," * @param {number} y"," * @param {number} z"," * @param {boolean} inverted"," * @return {boolean}"," */","const pickNearestObject = function (objectsLists, x, y, z, inverted) {"," let bestObject = null;"," let best = 0;"," let first = true;"," const lists = gdjs.staticArray(gdjs._collision3DExtension.pickNearestObject);"," objectsLists.values(lists);"," for (let i = 0, len = lists.length; i < len; ++i) {"," const list = lists[i];"," for (let j = 0; j < list.length; ++j) {"," const object = list[j];"," const distance = getSqDistanceToPosition(object, x, y, z);"," // @ts-ignore"," if (first || (distance < best) ^ inverted) {"," best = distance;"," bestObject = object;"," }"," first = false;"," }"," }"," if (bestObject) {"," gdjs.evtTools.object.pickOnly(objectsLists, bestObject);"," }"," return !!bestObject;","}","","/**"," * @param {gdjs.RuntimeObject} object"," * @return {float}"," */","const getObjectMinZ = (object) =>"," object.getDrawableZ ? object.getDrawableZ() : 0","","/**"," * @param {gdjs.RuntimeObject} object"," * @return {float}"," */","const getObjectMaxZ = (object) =>"," object.getDrawableZ ? object.getDrawableZ() + object.getDepth() : 0;","","/**"," * @param {gdjs.RuntimeObject} object1"," * @param {gdjs.RuntimeObject} object2"," * @param {boolean} ignoreTouchingEdges If true, then edges that are touching each other, without the hitbox polygons actually overlapping, won't be considered in collision."," * @return {boolean}"," */","const areObjectsInCollision = ("," object1,"," object2,"," ignoreTouchingEdges,",") => {"," const object1MinZ = getObjectMinZ(object1);"," const object1MaxZ = getObjectMaxZ(object1);"," const object2MinZ = getObjectMinZ(object2);"," const object2MaxZ = getObjectMaxZ(object2);",""," const canObjectsOverlapOnZ = ignoreTouchingEdges ?"," (object1MinZ < object2MaxZ && object1MaxZ > object2MinZ) :"," (object1MinZ <= object2MaxZ && object1MaxZ >= object2MinZ);",""," return canObjectsOverlapOnZ &&"," gdjs.RuntimeObject.collisionTest("," object1,"," object2,"," ignoreTouchingEdges"," );","}","","/**"," * @param {gdjs.ObjectList} objectsLists"," * @param {gdjs.ObjectList} objectsLists2"," * @param {boolean} inverted"," * @return {boolean}"," */","const pickObjectsInCollision = ("," objectsLists1,"," objectsLists2,"," inverted,",") => {"," return gdjs.evtTools.object.twoListsTest("," areObjectsInCollision,"," objectsLists1,"," objectsLists2,"," inverted,"," );","}","","/**"," * @param {gdjs.RuntimeObject} movingObject"," * @param {gdjs.RuntimeObject} object"," * @return {float}"," */","const getSeparationDeltaZ = ("," movingObject,"," object,",") => {"," const movingObjectMinZ = getObjectMinZ(movingObject);"," const movingObjectMaxZ = getObjectMaxZ(movingObject);"," const objectMinZ = getObjectMinZ(object);"," const objectMaxZ = getObjectMaxZ(object);",""," const downwardDeltaZ = Math.min(0, objectMinZ - movingObjectMaxZ);"," const upwardDeltaZ = Math.max(0, objectMaxZ - movingObjectMinZ);",""," return -downwardDeltaZ < upwardDeltaZ ? downwardDeltaZ : upwardDeltaZ","}","","// This function is an exact copy from GDJS/Runtime/runtimeobject.ts","/**"," * Move the object using the results from collisionTest call."," * This moves the object according to the direction of the longest vector,"," * and projects the others on the orthogonal vector."," *"," * See {@link RuntimeObject.separateFromObjects}"," *"," * @param {gdjs.RuntimeObject} object The object to move."," * @param {float[]} moveXArray The X coordinates of the vectors to move the object."," * @param {float[]} moveYArray The Y coordinates of the vectors to move the object."," * @return {boolean} true if the object was moved."," */","const moveFollowingSeparatingVectors = ("," object,"," moveXArray,"," moveYArray",") => {"," if (moveXArray.length === 0) {"," moveXArray.length = 0;"," moveYArray.length = 0;"," return false;"," }"," if (moveXArray.length === 1) {"," // Move according to the results returned by the collision algorithm."," object.setPosition("," object.getX() + moveXArray[0],"," object.getY() + moveYArray[0]"," );"," moveXArray.length = 0;"," moveYArray.length = 0;"," return true;"," }",""," // Find the longest vector"," let squaredDistanceMax = 0;"," let distanceMaxIndex = 0;"," for (let index = 0; index < moveXArray.length; index++) {"," const moveX = moveXArray[index];"," const moveY = moveYArray[index];",""," const squaredDistance = moveX * moveX + moveY * moveY;"," if (squaredDistance > squaredDistanceMax) {"," squaredDistanceMax = squaredDistance;"," distanceMaxIndex = index;"," }"," }",""," const distanceMax = Math.sqrt(squaredDistanceMax);"," // unit vector of the longest vector"," const uX = moveXArray[distanceMaxIndex] / distanceMax;"," const uY = moveYArray[distanceMaxIndex] / distanceMax;",""," // normal vector of the longest vector"," const vX = -uY;"," const vY = uX;",""," // Project other vectors on the normal"," let scalarProductMin = 0;"," let scalarProductMax = 0;"," for (let index = 0; index < moveXArray.length; index++) {"," const moveX = moveXArray[index];"," const moveY = moveYArray[index];",""," const scalarProduct = moveX * vX + moveY * vY;"," scalarProductMin = Math.min(scalarProductMin, scalarProduct);"," scalarProductMax = Math.max(scalarProductMax, scalarProduct);"," }",""," // Apply the longest vector"," let deltaX = moveXArray[distanceMaxIndex];"," let deltaY = moveYArray[distanceMaxIndex];",""," // Apply the longest projected vector if they all are in the same direction"," // Some projections could have rounding errors,"," // they are considered negligible under a 1 for 1,000,000 ratio."," const scalarProductMinIsNegligible ="," -scalarProductMin < scalarProductMax / 1048576;"," const scalarProductMaxIsNegligible ="," scalarProductMax < -scalarProductMin / 1048576;"," if (scalarProductMinIsNegligible !== scalarProductMaxIsNegligible) {"," if (scalarProductMaxIsNegligible) {"," deltaX += scalarProductMin * vX;"," deltaY += scalarProductMin * vY;"," } else {"," deltaX += scalarProductMax * vX;"," deltaY += scalarProductMax * vY;"," }"," }"," object.setPosition(object.getX() + deltaX, object.getY() + deltaY);"," moveXArray.length = 0;"," moveYArray.length = 0;"," return true;","};","","/**"," * Arrays and data structure that are (re)used by"," * {@link separateFromObjects} to avoid any allocation."," * @type {moveXArray: float[], moveYArray: float[], moveZArray: float[]}"," */","const separateFromObjectsStatics = {"," moveXArray: [],"," moveYArray: [],"," moveZArray: [],","};","","/**"," * Separate the object from others objects, using their hitboxes."," * @param {gdjs.RuntimeObject} object The object that moves."," * @param {gdjs.RuntimeObject[]} objects The objects that stay still."," * @return {boolean} true if the object was moved"," */","const separateFromObjects = ("," object,"," objects",") => {"," const moveXArray = separateFromObjectsStatics.moveXArray;"," const moveYArray = separateFromObjectsStatics.moveYArray;"," moveXArray.length = 0;"," moveYArray.length = 0;"," let moveZMax = 0;",""," // We can assume that the moving object is not grid based,"," // so there is no need for optimization:"," // getHitBoxes can be called directly."," const hitBoxes = object.getHitBoxes();"," /** @type {gdjs.AABB | null} */"," let aabb = null;",""," // Check if there is a collision with each object"," for (const otherObject of objects) {"," if (otherObject.id === object.id) {"," continue;"," }"," const moveZ = getSeparationDeltaZ(object, otherObject);"," if (moveZ === 0) {"," continue;"," }"," const moveZSq = moveZ * moveZ;",""," let otherHitBoxesArray = otherObject.getHitBoxes();"," /** @type {Iterable<gdjs.Polygon>} */"," let otherHitBoxes = otherHitBoxesArray;"," if (otherHitBoxesArray.length > 4) {"," // The other object has a lot of hit boxes."," // Try to reduce the amount of hitboxes to check."," if (!aabb) {"," aabb = object.getAABB();"," }"," otherHitBoxes = otherObject.getHitBoxesAround("," aabb.min[0],"," aabb.min[1],"," aabb.max[0],"," aabb.max[1]"," );"," }"," for (const hitBox of hitBoxes) {"," for (const otherHitBox of otherHitBoxes) {"," const result = gdjs.Polygon.collisionTest("," hitBox,"," otherHitBox,"," true"," );"," if (result.collision) {"," const moveX = result.move_axis[0];"," const moveY = result.move_axis[1];"," if (moveZSq < moveX * moveX + moveY * moveY) {"," if (Math.abs(moveZ) > Math.abs(moveZMax)) {"," moveZMax = moveZ;"," }"," }"," else {"," moveXArray.push(moveX);"," moveYArray.push(moveY);"," }"," }"," }"," }"," }"," const hasObjectMovedOnZ = moveZMax !== 0;"," if (hasObjectMovedOnZ) {"," object.setZ(object.getZ() + moveZMax);"," }"," const hasObjectMovedOnXY = moveFollowingSeparatingVectors(object, moveXArray, moveYArray);"," return hasObjectMovedOnXY || hasObjectMovedOnZ;","}","","gdjs._collision3DExtension = {"," getSqDistanceToPosition,"," getDistanceToPosition,"," getSqDistanceToObject,"," getDistanceToObject,"," pickObjectsWithinDistance,"," pickNearestObject,"," pickObjectsInCollision,"," separateFromObjects","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"parameters":[],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"onFirstSceneLoaded","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Collision3D::DefineHelperClasses"},"parameters":["",""]}]}],"parameters":[],"objectGroups":[]},{"description":"Compare the distance between two objects in 3D.","fullName":"Distance between two objects in 3D","functionType":"Condition","group":"Position","name":"AreWithinDistance","sentence":"_PARAM1_ distance to _PARAM2_ is below _PARAM3_ pixels","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["// TODO If condition is inverted, only objects that have a distance greater than specified to any other object will be picked.\r","const inverted = false;\r","\r","eventsFunctionContext.returnValue = gdjs._collision3DExtension.pickObjectsWithinDistance(\r"," eventsFunctionContext.getObjectsLists(\"Object\"),\r"," eventsFunctionContext.getObjectsLists(\"OtherObject\"),\r"," eventsFunctionContext.getArgument(\"Distance\"),\r"," inverted\r",");\r",""],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"Other object","name":"OtherObject","type":"objectList"},{"description":"Distance","name":"Distance","type":"expression"}],"objectGroups":[]},{"description":"Distance between two objects in 3D.","fullName":"Distance between two objects in 3D","functionType":"Expression","group":"Position","name":"Distance","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["\r","const otherObjects = eventsFunctionContext.getObjectsLists(\"OtherObject\");\r","\r","if (objects.length > 0 && otherObjects.length > 0) {\r"," eventsFunctionContext.returnValue = gdjs._collision3DExtension.getDistanceToObject(\r"," objects[0],\r"," otherObjects[0]\r"," );\r","}\r",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"Other object","name":"OtherObject","type":"objectList"}],"objectGroups":[]},{"description":"Square distance between two objects in 3D.","fullName":"Square distance between two objects","functionType":"Expression","group":"Position","name":"SqDistance","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["\r","const otherObjects = eventsFunctionContext.getObjectsLists(\"OtherObject\");\r","\r","if (objects.length > 0 && otherObjects.length > 0) {\r"," eventsFunctionContext.returnValue = gdjs._collision3DExtension.getSqDistanceToObject(\r"," objects[0],\r"," otherObjects[0]\r"," );\r","}\r",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"Other object","name":"OtherObject","type":"objectList"}],"objectGroups":[]},{"description":"Distance between an object and a position in 3D.","fullName":"Distance between an object and a position","functionType":"Expression","group":"Position","name":"DistanceToPosition","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["\r","if (objects.length > 0) {\r"," eventsFunctionContext.returnValue = gdjs._collision3DExtension.getSqDistanceToPosition(\r"," objects[0],\r"," eventsFunctionContext.getArgument(\"PositionX\"),\r"," eventsFunctionContext.getArgument(\"PositionY\"),\r"," eventsFunctionContext.getArgument(\"PositionZ\"),\r"," );\r","}\r",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"X position","name":"PositionX","type":"expression"},{"description":"Y position","name":"PositionY","type":"expression"},{"description":"Z position","name":"PositionZ","type":"expression"}],"objectGroups":[]},{"description":"Square distance between an object and a position in 3D.","fullName":"Square distance between an object and a position","functionType":"Expression","group":"Position","name":"SqDistanceToPosition","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["\r","if (objects.length > 0) {\r"," eventsFunctionContext.returnValue = gdjs._collision3DExtension.getDistanceToPosition(\r"," objects[0],\r"," eventsFunctionContext.getArgument(\"PositionX\"),\r"," eventsFunctionContext.getArgument(\"PositionY\"),\r"," eventsFunctionContext.getArgument(\"PositionZ\"),\r"," );\r","}\r",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"X position","name":"PositionX","type":"expression"},{"description":"Y position","name":"PositionY","type":"expression"},{"description":"Z position","name":"PositionZ","type":"expression"}],"objectGroups":[]},{"description":"Pick the object of this type that is nearest to the specified position in 3D.","fullName":"Pick nearest object in 3D","functionType":"Condition","group":"Objects","name":"PickNearest","sentence":"Pick the _PARAM1_ that is nearest to _PARAM2_ ; _PARAM3_ ; _PARAM4_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["// TODO If the condition is inverted, the object farthest from the specified position is picked instead.\r","const inverted = false;\r","\r","eventsFunctionContext.returnValue = gdjs._collision3DExtension.pickNearestObject(\r"," eventsFunctionContext.getObjectsLists(\"Object\"),\r"," eventsFunctionContext.getArgument(\"PositionX\"),\r"," eventsFunctionContext.getArgument(\"PositionY\"),\r"," eventsFunctionContext.getArgument(\"PositionZ\"),\r"," inverted\r",");"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"X position","name":"PositionX","type":"expression"},{"description":"Y position","name":"PositionY","type":"expression"},{"description":"Z position","name":"PositionZ","type":"expression"}],"objectGroups":[]},{"description":"Check the collision between two objects using their collision masks. Object rotation around X and Y axes are ignored.","fullName":"Collision in 3D","functionType":"Condition","group":"Collision","name":"AreInCollision","sentence":"_PARAM1_ is in collision with _PARAM3_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["// TODO If the condition is inverted, the object farthest from the specified position is picked instead.\r","const inverted = false;\r","\r","eventsFunctionContext.returnValue = gdjs._collision3DExtension.pickObjectsInCollision(\r"," eventsFunctionContext.getObjectsLists(\"Object\"),\r"," eventsFunctionContext.getObjectsLists(\"OtherObject\"),\r"," eventsFunctionContext.getArgument(\"IgnoreEdges\"),\r"," inverted\r",");"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"3D capability","name":"Object3D","supplementaryInformation":"Scene3D::Base3DBehavior","type":"behavior"},{"description":"Other object","name":"OtherObject","type":"objectList"},{"description":"3D capability","name":"OtherObjectCapability","supplementaryInformation":"Scene3D::Base3DBehavior","type":"behavior"},{"description":"Ignore objects that are touching each other on their edges, but are not overlapping (default: no)","name":"IgnoreEdges","type":"yesorno"}],"objectGroups":[]},{"description":"Move an object away from another using their collision masks. Object rotation around X and Y axes are ignored.\nBe sure to call this action on a reasonable number of objects to avoid slowing down the game.","fullName":"Separate objects in 3D","functionType":"Action","group":"Position","name":"SeparateFromObjects","sentence":"Move _PARAM1_ away from _PARAM3_ (only _PARAM1_ will move)","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["\r","const otherObjects = eventsFunctionContext.getObjects(\"OtherObject\");\r","\r","for (const object of objects) {\r"," gdjs._collision3DExtension.separateFromObjects(\r"," object,\r"," otherObjects,\r"," );\r","}"],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"3D capability","name":"Object3D","supplementaryInformation":"Scene3D::Base3DBehavior","type":"behavior"},{"description":"Objects (won't move)","name":"OtherObject","type":"objectList"},{"description":"3D capability","name":"OtherObject3D","supplementaryInformation":"Scene3D::Base3DBehavior","type":"behavior"}],"objectGroups":[]}],"eventsBasedBehaviors":[],"eventsBasedObjects":[]},{"author":"","category":"General","extensionNamespace":"","fullName":"3D raycast","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXJheS1zdGFydC1hcnJvdyIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0yMywxMkwxOSwxNlYxM0g2LjgzQzYuNDIsMTQuMTcgNS4zMSwxNSA0LDE1QTMsMyAwIDAsMSAxLDEyQTMsMyAwIDAsMSA0LDlDNS4zMSw5IDYuNDIsOS44MyA2LjgzLDExSDE5VjhMMjMsMTJaIiAvPjwvc3ZnPg==","name":"Raycaster3D","previewIconUrl":"https://asset-resources.gdevelop.io/public-resources/Icons/8419f46b76bce482c14b4c03b4141a64d457e4cdc92686f3470381f5d2694abd_ray-start-arrow.svg","shortDescription":"Find 3D objects that cross a line.","version":"0.1.4","description":["It can be useful to:","- Find 3D objects under the pointer","- Target objects from a 1st person view","- Make AI that detect objects in their field of view"],"origin":{"identifier":"Raycaster3D","name":"gdevelop-extension-store"},"tags":["3d","recast","collision"],"authorIds":["IWykYNRvhCZBN3vEgKEbBPOR3Oc2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"fullName":"","functionType":"Action","name":"onFirstSceneLoaded","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Raycaster3D::DefineHelperClasses"},"parameters":["",""]}]}],"parameters":[],"objectGroups":[]},{"description":"Define helper classes JavaScript code.","fullName":"Define helper classes","functionType":"Action","name":"DefineHelperClasses","private":true,"sentence":"Define helper classes JavaScript code","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"GlobalVariableAsBoolean"},"parameters":["_Raycaster3DExtension_ClassesDefined",""]}],"actions":[{"type":{"value":"SetGlobalVariableAsBoolean"},"parameters":["_Raycaster3DExtension_ClassesDefined","True"]}],"events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["gdjs.__raycaster3DExtension = gdjs.__raycaster3DExtension || {};","","class Raycaster {"," raycaster = new THREE.Raycaster();"," pointer = new THREE.Vector2();"," raycastResults = [];"," lastDistance = 0;"," lastPositionX = 0;"," lastPositionY = 0;"," lastPositionZ = 0;"," lastNormalX = 0;"," lastNormalY = 0;"," lastNormalZ = 0;",""," /**"," * @param objectsLists {Hashtable<gdjs.RuntimeObject[]>}"," * @param objects {gdjs.RuntimeObject[]}"," * @param pointerX {number}"," * @param pointerY {number}"," * @param distanceMax {number}"," */"," recastFromCamera(objectsLists, objects, pointerX, pointerY, distanceMax) {"," if (objects.length === 0) {"," return false;"," }"," const object = objects[0];"," const layer = object.getInstanceContainer().getLayer(object.getLayer());"," const camera = layer.getRenderer().getThreeCamera();",""," const raycaster = this.raycaster;"," const pointer = this.pointer;"," pointer.x = -1 + 2 * pointerX;"," pointer.y = 1 - 2 * pointerY;"," raycaster.setFromCamera(pointer, camera);"," raycaster.far = distanceMax;",""," return this._doRecast(objectsLists, objects);"," }",""," /**"," * @param objectsLists {Hashtable<gdjs.RuntimeObject[]>}"," * @param objects {gdjs.RuntimeObject[]}"," * @param originX {number}"," * @param originY {number}"," * @param originZ {number}"," * @param rotationAngle {number}"," * @param elevationAngle {number}"," * @param distanceMax {number}"," */"," recastWithAngle("," objectsLists,"," objects,"," originX,"," originY,"," originZ,"," rotationAngle,"," elevationAngle,"," distanceMax"," ) {"," if (objects.length === 0) {"," return false;"," }"," const raycaster = this.raycaster;"," raycaster.ray.origin.set("," originX,"," -originY,"," originZ,"," );"," const rotation = rotationAngle * Math.PI / 180;"," const elevation = elevationAngle * Math.PI / 180;"," const cosElevation = Math.cos(elevation);"," raycaster.ray.direction.set("," Math.cos(rotation) * cosElevation,"," -Math.sin(rotation) * cosElevation,"," Math.sin(elevation),"," );"," raycaster.far = distanceMax;",""," return this._doRecast(objectsLists, objects);"," }",""," /**"," * @param objectsLists {Hashtable<gdjs.RuntimeObject[]>}"," * @param objects {gdjs.RuntimeObject[]}"," * @param originX {number}"," * @param originY {number}"," * @param originZ {number}"," * @param targetX {number}"," * @param targetY {number}"," * @param targetZ {number}"," * @param distanceMax {number}"," */"," recastBetweenPosition("," objectsLists,"," objects,"," originX,"," originY,"," originZ,"," targetX,"," targetY,"," targetZ"," ) {"," if (objects.length === 0) {"," return false;"," }"," const raycaster = this.raycaster;"," raycaster.ray.origin.set("," originX,"," -originY,"," originZ,"," );"," const deltaX = targetX - originX;"," const deltaY = targetY - originY;"," const deltaZ = targetZ - originZ;"," const deltaLength = Math.hypot(deltaX, deltaY, deltaZ);"," raycaster.ray.direction.set("," deltaX / deltaLength,"," -deltaY / deltaLength,"," deltaZ / deltaLength,"," );"," raycaster.far = deltaLength;",""," return this._doRecast(objectsLists, objects);"," }",""," /**"," * @param objectsLists {Hashtable<gdjs.RuntimeObject[]>}"," * @param objects {gdjs.RuntimeObject[]}"," */"," _doRecast(objectsLists, objects) {"," const raycastResults = this.raycastResults;"," let distanceMin = Number.MAX_VALUE;"," let nearestObject = null;"," for (const object of objects) {"," raycastResults.length = 0;"," const threeObject = object.get3DRendererObject();"," if (!threeObject) {"," continue;"," }"," this.raycaster.intersectObject(threeObject, true, raycastResults);"," if (raycastResults.length > 0 && raycastResults[0].distance < distanceMin) {"," const raycastResult = raycastResults[0];"," distanceMin = raycastResult.distance;"," nearestObject = object;"," this.lastDistance = raycastResult.distance;"," this.lastPositionX = raycastResult.point.x;"," this.lastPositionY = -raycastResult.point.y;"," this.lastPositionZ = raycastResult.point.z;"," this.lastNormalX = raycastResult.normal.x;"," this.lastNormalY = raycastResult.normal.y;"," this.lastNormalZ = raycastResult.normal.z;"," }"," }"," if (!nearestObject) {"," return false;"," }"," raycastResults.length = 0;"," gdjs.evtTools.object.pickOnly("," objectsLists,"," nearestObject"," );"," return true;"," }","}","","gdjs.__raycaster3DExtension.Raycaster = Raycaster;","gdjs.__raycaster3DExtension.raycaster = new Raycaster();",""],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}]}],"parameters":[],"objectGroups":[]},{"description":"Sends a ray from the given source position and angle, intersecting the closest object. The intersected object will become the only one taken into account.","fullName":"Raycast","functionType":"Condition","group":"Collision","name":"RaycastWithAngle","sentence":"Cast a ray from _PARAM2_; _PARAM3_; _PARAM4_ toward a rotation of _PARAM5_°, an elevation of _PARAM6_° and max distance of _PARAM7_ against _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["eventsFunctionContext.returnValue ="," gdjs.__raycaster3DExtension.raycaster.recastWithAngle("," eventsFunctionContext.getObjectsLists(\"Object\"),"," objects,"," eventsFunctionContext.getArgument(\"OriginX\"),"," eventsFunctionContext.getArgument(\"OriginY\"),"," eventsFunctionContext.getArgument(\"OriginZ\"),"," eventsFunctionContext.getArgument(\"RotationAngle\"),"," eventsFunctionContext.getArgument(\"ElevationAngle\"),"," eventsFunctionContext.getArgument(\"DistanceMax\")"," );",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Objects to test against the ray","name":"Object","type":"objectList"},{"description":"Ray source X position","name":"OriginX","type":"expression"},{"description":"Ray source Y position","name":"OriginY","type":"expression"},{"description":"Ray source Z position","name":"OriginZ","type":"expression"},{"description":"Rotation angle (in degrees)","name":"RotationAngle","type":"expression"},{"description":"Elevation angle (in degrees)","name":"ElevationAngle","type":"expression"},{"description":"Ray maximum distance (in pixels)","name":"DistanceMax","type":"expression"}],"objectGroups":[]},{"description":"Sends a ray from the given source position to the final point, intersecting the closest object. The intersected object will become the only one taken into account.","fullName":"Raycast to a position","functionType":"Condition","group":"Collision","name":"RaycastBetweenPosition","sentence":"Cast a ray from _PARAM2_; _PARAM3_; _PARAM4_ to _PARAM5_; _PARAM6_; _PARAM7_ against _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["eventsFunctionContext.returnValue ="," gdjs.__raycaster3DExtension.raycaster.recastBetweenPosition("," eventsFunctionContext.getObjectsLists(\"Object\"),"," objects,"," eventsFunctionContext.getArgument(\"OriginX\"),"," eventsFunctionContext.getArgument(\"OriginY\"),"," eventsFunctionContext.getArgument(\"OriginZ\"),"," eventsFunctionContext.getArgument(\"TargetX\"),"," eventsFunctionContext.getArgument(\"TargetY\"),"," eventsFunctionContext.getArgument(\"TargetZ\")"," );",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Objects to test against the ray","name":"Object","type":"objectList"},{"description":"Ray source X position","name":"OriginX","type":"expression"},{"description":"Ray source Y position","name":"OriginY","type":"expression"},{"description":"Ray source Z position","name":"OriginZ","type":"expression"},{"description":"Ray target X position","name":"TargetX","type":"expression"},{"description":"Ray target Y position","name":"TargetY","type":"expression"},{"description":"Ray target Z position","name":"TargetZ","type":"expression"}],"objectGroups":[]},{"description":"Sends a ray from the center of the camera, intersecting the closest object. The intersected object will become the only one taken into account.","fullName":"Raycast from camera center","functionType":"Condition","group":"Collision","name":"RaycastFromCameraCenter","sentence":"Cast a ray from the camera center to a maximum distance of _PARAM2_ against _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["eventsFunctionContext.returnValue ="," gdjs.__raycaster3DExtension.raycaster.recastFromCamera("," eventsFunctionContext.getObjectsLists(\"Object\"),"," objects,"," 0.5,"," 0.5,"," eventsFunctionContext.getArgument(\"DistanceMax\")"," );",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Objects to test against the ray","name":"Object","type":"objectList"},{"description":"Ray maximum distance (in pixels)","name":"DistanceMax","type":"expression"}],"objectGroups":[]},{"description":"Sends a ray from the given source point on the camera screen, intersecting the closest object. The intersected object will become the only one taken into account.","fullName":"Raycast from a camera point","functionType":"Condition","group":"Collision","name":"RaycastFromCameraPoint","sentence":"Cast a ray from the camera point _PARAM2_; _PARAM3_ to a maximum distance of _PARAM4_ against _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["eventsFunctionContext.returnValue ="," gdjs.__raycaster3DExtension.raycaster.recastFromCamera("," eventsFunctionContext.getObjectsLists(\"Object\"),"," objects,"," eventsFunctionContext.getArgument(\"PointerX\"),"," eventsFunctionContext.getArgument(\"PointerY\"),"," eventsFunctionContext.getArgument(\"DistanceMax\")"," );",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Objects to test against the ray","name":"Object","type":"objectList"},{"description":"X position on the screen (from 0 to 1)","name":"PointerX","type":"expression"},{"description":"Y position on the screen (from 0 to 1)","name":"PointerY","type":"expression"},{"description":"Ray maximum distance (in pixels)","name":"DistanceMax","type":"expression"}],"objectGroups":[]},{"description":"the last recast intersection distance.","fullName":"Last recast distance","functionType":"ExpressionAndCondition","name":"Distance","sentence":"the last recast intersection distance","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = gdjs.__raycaster3DExtension.raycaster.lastDistance;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[],"objectGroups":[]},{"description":"Return the last recast intersection position on X axis.","fullName":"Last recast X intersection","functionType":"Expression","name":"IntersectionX","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = gdjs.__raycaster3DExtension.raycaster.lastPositionX;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[],"objectGroups":[]},{"description":"Return the last recast intersection position on Y axis.","fullName":"Last recast Y intersection","functionType":"Expression","name":"IntersectionY","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = gdjs.__raycaster3DExtension.raycaster.lastPositionY;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[],"objectGroups":[]},{"description":"Return the last recast intersection position on Z axis.","fullName":"Last recast Z intersection","functionType":"Expression","name":"IntersectionZ","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = gdjs.__raycaster3DExtension.raycaster.lastPositionZ;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[],"objectGroups":[]},{"description":"Return the last recast intersection normal on X axis.","fullName":"Last recast X normal","functionType":"Expression","name":"NormalX","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = gdjs.__raycaster3DExtension.raycaster.lastNormalX;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[],"objectGroups":[]},{"description":"Return the last recast intersection normal on X axis.","fullName":"Last recast X normal","functionType":"Expression","name":"NormalY","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = gdjs.__raycaster3DExtension.raycaster.lastNormalY;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[],"objectGroups":[]},{"description":"Return the last recast intersection normal on Z axis.","fullName":"Last recast Z normal","functionType":"Expression","name":"NormalZ","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = gdjs.__raycaster3DExtension.raycaster.lastNormalZ;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[],"objectGroups":[]}],"eventsBasedBehaviors":[],"eventsBasedObjects":[]},{"author":"","category":"Camera","extensionNamespace":"","fullName":"First person 3D camera","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO30NCjwvc3R5bGU+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjcsMTZjMCwwLTQuOSw3LTExLDdTNSwxNiw1LDE2czQuOS03LDExLTdTMjcsMTYsMjcsMTZ6Ii8+DQo8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSIxNiIgY3k9IjE2IiByPSIzIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIzLDkgMywzIDksMyAiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjksMjkgMywyOSAzLDIzICIvPg0KPHBvbHlsaW5lIGNsYXNzPSJzdDAiIHBvaW50cz0iMjksMjMgMjksMjkgMjMsMjkgIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIyMywzIDI5LDMgMjksOSAiLz4NCjwvc3ZnPg0K","name":"FirstPersonCamera","previewIconUrl":"https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Security and Protection/e8248ffd504c314e6a9d9d560c3a0fdad3398a5f125ae6a4c0654d4e68c86376_Security and Protection_security_protection_eye_scan_lock.svg","shortDescription":"Move the camera to look though objects eyes.","version":"1.0.1","description":["Move the camera to look though objects eyes.","","This extension can be used with the \"Mouse pointer lock\" or \"Gamepad\" extension to build a first person camera."],"origin":{"identifier":"FirstPersonCamera","name":"gdevelop-extension-store"},"tags":["3d","camera","fps"],"authorIds":["IWykYNRvhCZBN3vEgKEbBPOR3Oc2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"Move the camera to look though _PARAM1_ eyes. The object must look to the right when all its angles are 0 and the top of its head be toward Z+.","fullName":"Look through object eyes","functionType":"Action","group":"Layers and cameras","name":"LookFromObjectEyes","sentence":"Move the camera of _PARAM2_ to look though _PARAM1_ eyes","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"CentreCamera"},"parameters":["","Object","","GetArgumentAsString(\"Layer\")",""]},{"type":{"value":"Scene3D::SetCameraZ"},"parameters":["","=","Object.Z()","GetArgumentAsString(\"Layer\")",""]},{"type":{"value":"Scene3D::SetCameraZ"},"parameters":["","=","Object.Z()","GetArgumentAsString(\"Layer\")",""]},{"type":{"value":"Scene3D::SetCameraRotationX"},"parameters":["","=","- Object.RotationY() + 90","GetArgumentAsString(\"Layer\")",""]},{"type":{"value":"Scene3D::SetCameraRotationY"},"parameters":["","=","Object.RotationX()","GetArgumentAsString(\"Layer\")",""]},{"type":{"value":"SetCameraAngle"},"parameters":["","=","Object.Angle() + 90","GetArgumentAsString(\"Layer\")",""]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"Scene3D::Cube3DObject","type":"objectList"},{"description":"Layer","name":"Layer","type":"layer"}],"objectGroups":[]}],"eventsBasedBehaviors":[],"eventsBasedObjects":[]},{"author":"","category":"Movement","extensionNamespace":"","fullName":"3D jump","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTI3LDI4aC04LjFjLTEuMiwwLTIuMy0wLjUtMy4yLTEuM0wzLDE0bDctOHYwYzAsMy45LDQuMSw4LDgsOGgxdjBjLTAuMSw0LjUsMS42LDcuOCw2LDkuMg0KCWMwLjMsMC4xLDAuNSwwLjIsMC44LDAuMmwwLDBjMS4yLDAuMywyLDEuNiwxLjcsMi44TDI3LDI4eiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTEsMTZsMTMuNywxMy43YzAuOCwwLjgsMiwxLjMsMy4yLDEuM0gyNyIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMTAuNSIgY3k9IjE1LjUiIHI9IjEuNSIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjE1IiB5MT0iMTkiIHgyPSIxOS41IiB5Mj0iMTkiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIxNyIgeTE9IjIyIiB4Mj0iMjIuNSIgeTI9IjIyIi8+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjgsMWwtNy4zLDcuM0MxOSwxMCwxOC40LDEyLjQsMTksMTQuN2wwLDAiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMCw3TDEwLDdjMS45LTAuNiwzLjYtMiw0LjYtMy43TDE2LDEiLz4NCjwvc3ZnPg0K","name":"Jump3D","previewIconUrl":"https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Sports and Fitness/29b5c1893f81031cca98c9a1c447464b433717bdf3569ce5fac7c7cb0a8a2b82_Sports and Fitness_gym_running_foot_run.svg","shortDescription":"Jump and fall along Z axis.","version":"0.1.0","description":"It handles basic collisions with 3D boxes but rotations around X and Y axes are not supported.","origin":{"identifier":"Jump3D","name":"gdevelop-extension-store"},"tags":["3d","jump","platform","platformer","collision"],"authorIds":["IWykYNRvhCZBN3vEgKEbBPOR3Oc2","toILhIv6WWNwz59xMtlGMijOZ1t2","PEzPAaWHgYgk5UwIPppsL6f2ugp2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"the top of the object on Z axis","fullName":"Top on Z axis","functionType":"ExpressionAndCondition","group":"Position","name":"TopZ","private":true,"sentence":"the top on Z axis of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length === 0) {"," return;","}","const object = objects[0];","eventsFunctionContext.returnValue = object.getDrawableZ ? object.getDrawableZ() + object.getDepth() : 0;",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"objectList"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"TopZ","name":"SetTopZ","private":true,"sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length === 0) {"," return;","}","const object = objects[0];","if (!object.getDrawableZ) {"," return;","}","const newTop = eventsFunctionContext.getArgument(\"Value\");","const oldTop = object.getDrawableZ() + object.getDepth();","object.setZ(object.getZ() - oldTop + newTop);",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","type":"objectList"}],"objectGroups":[]},{"description":"the bottom of the object on Z axis","fullName":"Bottom on Z axis","functionType":"ExpressionAndCondition","group":"Position","name":"BottomZ","private":true,"sentence":"the bottom on Z axis of _PARAM1_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length === 0) {"," return;","}","const object = objects[0];","eventsFunctionContext.returnValue = object.getDrawableZ ? object.getDrawableZ() : 0;",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"objectList"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"BottomZ","name":"SetBottomZ","private":true,"sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["if (objects.length === 0) {"," return;","}","const object = objects[0];","if (!object.getDrawableZ) {"," return;","}","const newBottom = eventsFunctionContext.getArgument(\"Value\");","const oldBottom = object.getDrawableZ();","object.setZ(object.getZ() - oldBottom + newBottom);",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","type":"objectList"}],"objectGroups":[]},{"description":"Check if an object is overlapping a range on Z axis.","fullName":"Overlap Z range","functionType":"Condition","group":"Collision","name":"IsWithinZ","private":true,"sentence":"_PARAM1_ overlap the range from _PARAM3_ to _PARAM4_","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const bottom = eventsFunctionContext.getArgument(\"BottomZ\");","const top = eventsFunctionContext.getArgument(\"TopZ\");","","if (top <= bottom) {"," return false;","}","","let isAnyObjectPicked = false;","for (const object of objects) {"," object.pick = object.getZ() < top && object.getZ() + object.getDepth() > bottom;"," isAnyObjectPicked = isAnyObjectPicked || object.pick;","}","","const objectsLists = eventsFunctionContext.getObjectsLists(\"Object\");","for (const name in objectsLists.items) {"," if (objectsLists.items.hasOwnProperty(name)) {"," const objectsList = objectsLists.items[name];"," gdjs.evtTools.object.filterPickedObjectsList(objectsList);"," }","}","eventsFunctionContext.returnValue = isAnyObjectPicked;",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"3D capability","name":"Object3D","supplementaryInformation":"Scene3D::Base3DBehavior","type":"behavior"},{"description":"Bottom Z","name":"BottomZ","type":"expression"},{"description":"Top Z","name":"TopZ","type":"expression"}],"objectGroups":[]}],"eventsBasedBehaviors":[{"description":"Jump and fall along Z axis.","fullName":"3D jump","name":"Jump3D","objectType":"","eventsFunctions":[{"fullName":"","functionType":"Action","name":"onCreated","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetJumpHeight"},"parameters":["Object","Behavior","=","Object.Behavior::PropertyJumpHeight()",""]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"fullName":"Jump height","functionType":"ActionWithOperator","getterName":"JumpHeight","name":"SetJumpHeight","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyJumpHeight"},"parameters":["Object","Behavior","=","Value"]},{"type":{"value":"Jump3D::Jump3D::SetPropertyJumpSpeed"},"parameters":["Object","Behavior","=","Object.Behavior::JumpSpeedToReach(Value)"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"},{"description":"Jump height","name":"JumpHeight","type":"expression"}],"objectGroups":[]},{"description":"the jump height of the object. Its value is always positive.","fullName":"Jump height","functionType":"ExpressionAndCondition","group":"3D jump configuration","name":"JumpHeight","sentence":"the jump height","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["JumpHeight"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Return the jump speed to reach a given height.","fullName":"Jump height","functionType":"Expression","name":"JumpSpeedToReach","private":true,"sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["// Formulas used in this extension were generated from a math model.","// They are probably not understandable on their own.","// If you need to modify them or need to write new feature,","// please take a look to the platformer extension documentation:","// https://github.com/4ian/GDevelop/tree/master/Extensions/PlatformBehavior#readme","","const behaviorName = eventsFunctionContext.getBehaviorName(\"Behavior\");","const behavior = objects[0].getBehavior(behaviorName);","/** @type {float} */","const jumpHeight = -Math.abs(eventsFunctionContext.getArgument(\"JumpHeight\"));","","/** @type {float} */","const gravity = behavior._getGravity();","/** @type {float} */","const maxFallingSpeed = behavior._getMaxFallingSpeed();","/** @type {float} */","const jumpSustainTime = behavior._getJumpSustainDurationMax();","","const maxFallingSpeedReachedTime = maxFallingSpeed / gravity;","","// The implementation jumps from one quadratic resolution to another","// to find the right formula to use as the time is unknown.","","const sustainCase = (jumpHeight) => Math.sqrt(-jumpHeight * gravity * 2);","const maxFallingCase = (jumpHeight) => -gravity * jumpSustainTime + maxFallingSpeed"," + Math.sqrt(gravity * gravity * jumpSustainTime * jumpSustainTime - 2 * jumpHeight * gravity - maxFallingSpeed * maxFallingSpeed);","","let jumpSpeed = 0;","let peakTime = 0;","if (maxFallingSpeedReachedTime > jumpSustainTime) {"," // common case"," jumpSpeed = -gravity * jumpSustainTime + Math.sqrt(2 * gravity * gravity * jumpSustainTime * jumpSustainTime - 4 * jumpHeight * gravity);"," peakTime = (gravity * jumpSustainTime + jumpSpeed) / (2 * gravity);"," if (peakTime < jumpSustainTime) {"," jumpSpeed = sustainCase(jumpHeight);"," }"," else if (peakTime > maxFallingSpeedReachedTime) {"," jumpSpeed = maxFallingCase(jumpHeight);"," }","}","else {"," // affine case can't have a maximum",""," // sustain case"," jumpSpeed = sustainCase(jumpHeight);"," peakTime = jumpSpeed / gravity;"," if (peakTime > maxFallingSpeedReachedTime) {"," jumpSpeed = maxFallingCase(jumpHeight);"," }","}","","eventsFunctionContext.returnValue = jumpSpeed;",""],"parameterObjects":"Object","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"},{"description":"Jump height","name":"JumpHeight","type":"expression"}],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"doStepPreEvents","sentence":"","events":[{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Start to jump","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyHasPressedJumpKey"},"parameters":["Object","Behavior"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyCanJump"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentFallSpeed"},"parameters":["Object","Behavior","=","0"]},{"type":{"value":"ResetObjectTimer"},"parameters":["Object","\"_Jump3DExtension.SustainJump\""]},{"type":{"value":"Jump3D::Jump3D::SetPropertyState"},"parameters":["Object","Behavior","=","\"InTheAir\""]},{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentJumpSpeed"},"parameters":["Object","Behavior","=","JumpSpeed"]},{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentFallSpeed"},"parameters":["Object","Behavior","=","0"]},{"type":{"value":"Jump3D::Jump3D::SetPropertyCanJump"},"parameters":["Object","Behavior",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"CompareObjectTimer"},"parameters":["Object","\"_Jump3DExtension.SustainJump\"",">","JumpSustainDurationMax"]}],"actions":[{"type":{"value":"RemoveObjectTimer"},"parameters":["Object","\"_Jump3DExtension.SustainJump\""]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Jump3D::Jump3D::PropertyHasPressedJumpKey"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"RemoveObjectTimer"},"parameters":["Object","\"_Jump3DExtension.SustainJump\""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyHasPressedJumpKey"},"parameters":["Object","Behavior","no"]}]}],"parameters":[]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyPreviousJumpSpeed"},"parameters":["Object","Behavior","=","CurrentJumpSpeed"]},{"type":{"value":"Jump3D::Jump3D::SetPropertyPreviousFallSpeed"},"parameters":["Object","Behavior","=","CurrentFallSpeed"]},{"type":{"value":"Jump3D::Jump3D::SetPropertyPreviousState"},"parameters":["Object","Behavior","=","State"]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Make the object fall every frame to check the floor."},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::CurrentVerticalSpeed"},"parameters":["Object","Behavior","=","0",""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::Fall"},"parameters":["Object","Behavior",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyState"},"parameters":["Object","Behavior","!=","\"Idle\""]}],"actions":[],"events":[{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Jump speed","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"CompareObjectTimer"},"parameters":["Object","\"_Jump3DExtension.SustainJump\"",">=","0"]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentJumpSpeed"},"parameters":["Object","Behavior","=","max(0, CurrentJumpSpeed - Gravity * TimeDelta())"]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Verlet integration"},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Scene3D::Base3DBehavior::SetZ"},"parameters":["Object","Object3D","+","(PreviousJumpSpeed + CurrentJumpSpeed) / 2 * TimeDelta()"]}]}],"parameters":[]},{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Fall speed","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Verlet integration"},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentFallSpeed"},"parameters":["Object","Behavior","=","min(CurrentFallSpeed + Gravity * TimeDelta(), MaxFallingSpeed)"]},{"type":{"value":"Scene3D::Base3DBehavior::SetZ"},"parameters":["Object","Object3D","-","(PreviousFallSpeed + CurrentFallSpeed) / 2 * TimeDelta()"]}]}],"parameters":[]}]},{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Fall on the floor","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyShouldStopAtZero"},"parameters":["Object","Behavior"]},{"type":{"value":"Jump3D::BottomZ"},"parameters":["Object","<","0","Object",""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::Land"},"parameters":["Object","Behavior",""]},{"type":{"value":"Jump3D::SetBottomZ"},"parameters":["Object","=","0","Object",""]}]}],"parameters":[]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Simulate a press of the jump key.","fullName":"Simulate jump key press","functionType":"Action","group":"3D jump state","name":"SimulateJumpKey","sentence":"Simulate pressing Jump key for _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyHasPressedJumpKey"},"parameters":["Object","Behavior","yes"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Separate from walls and land on platforms. 3D boxes rotated around X and Y axes are not supported.","fullName":"Separate from platforms","functionType":"Action","group":"3D jump state","name":"SeparateFromPlatforms","sentence":"Separate _PARAM0_ from platform _PARAM2_","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Check platforms to land on."},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"CollisionNP"},"parameters":["Object","Platform","","",""]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::ForEach","object":"Platform","conditions":[{"type":{"value":"Jump3D::TopZ"},"parameters":["Object",">","Jump3D::BottomZ(Platform)","Object",""]},{"type":{"value":"Jump3D::TopZ"},"parameters":["Object","<","Jump3D::BottomZ(Platform) + Object.Behavior::VerticalSpeed() * TimeDelta()","Object",""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::AbortJump"},"parameters":["Object","Behavior",""]},{"type":{"value":"Jump3D::SetTopZ"},"parameters":["Object","=","Jump3D::BottomZ(Platform)","Object",""]}]},{"type":"BuiltinCommonInstructions::ForEach","object":"Platform","conditions":[{"type":{"value":"Jump3D::BottomZ"},"parameters":["Object","<","Jump3D::TopZ(Platform)","Object",""]},{"type":{"value":"Jump3D::BottomZ"},"parameters":["Object",">","Jump3D::TopZ(Platform) + Object.Behavior::VerticalSpeed() * TimeDelta()","Object",""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::Land"},"parameters":["Object","Behavior",""]},{"type":{"value":"Jump3D::SetBottomZ"},"parameters":["Object","=","Jump3D::TopZ(Platform)","Object",""]}]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Separate from walls"},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::IsWithinZ"},"parameters":["","Platform","Object3D","Jump3D::BottomZ(Object)","Jump3D::TopZ(Object)",""]}],"actions":[{"type":{"value":"SeparateFromObjects"},"parameters":["Object","Platform",""]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"},{"description":"Platform","name":"Platform","type":"objectList"},{"description":"3D capability","name":"Object3D","supplementaryInformation":"Scene3D::Base3DBehavior","type":"behavior"}],"objectGroups":[]},{"description":"Stop the object from falling and land on the floor. The object will start falling again the next frame.","fullName":"Land on the floor","functionType":"Action","group":"3D jump state","name":"Land","sentence":"Make _PARAM0_ land on the floor","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyState"},"parameters":["Object","Behavior","=","\"Idle\""]},{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentJumpSpeed"},"parameters":["Object","Behavior","=","0"]},{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentFallSpeed"},"parameters":["Object","Behavior","=","0"]},{"type":{"value":"Jump3D::Jump3D::SetPropertyCanJump"},"parameters":["Object","Behavior","yes"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Make the object fall from the floor.","fullName":"Fall from the floor","functionType":"Action","group":"3D jump state","name":"Fall","private":true,"sentence":"Make _PARAM0_ fall from the floor","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Add a 1-frame delay in case collision checks are done after the simulate jump action."},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyState"},"parameters":["Object","Behavior","!=","\"Idle\""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyCanJump"},"parameters":["Object","Behavior",""]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyState"},"parameters":["Object","Behavior","=","\"InTheAir\""]},{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentJumpSpeed"},"parameters":["Object","Behavior","=","0"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Abort the current jump and stop the object vertically. This action doesn't have any effect when the character is not jumping.","fullName":"Abort jump","functionType":"Action","group":"3D jump state","name":"AbortJump","sentence":"Abort the current jump of _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentJumpSpeed"},"parameters":["Object","Behavior","=","0"]},{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentFallSpeed"},"parameters":["Object","Behavior","=","0"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"When this action is executed, the object is able to jump again, even if it is in the air: this can be useful to allow a double jump for example. This is not a permanent effect: you must call again this action everytime you want to allow the object to jump (apart if it's on the floor).","fullName":"Allow jumping again","functionType":"Action","group":"3D jump state","name":"SetCanJump","sentence":"Allow _PARAM0_ to jump again","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyCanJump"},"parameters":["Object","Behavior","yes"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Check if the object can jump.","fullName":"Can jump","functionType":"Condition","group":"3D jump state","name":"CanJump","sentence":"_PARAM0_ can jump","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyCanJump"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Check if the object is falling.\\nNote that the object can be flagged as jumping and falling at the same time: at the end of a jump, the fall speed becomes higher than the jump speed.","fullName":"Is falling","functionType":"Condition","group":"3D jump state","name":"IsFalling","sentence":"_PARAM0_ is falling","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::CurrentVerticalSpeed"},"parameters":["Object","Behavior","<","0",""]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Check if the object is jumping.","fullName":"Is jumping","functionType":"Condition","group":"3D jump state","name":"IsJumping","sentence":"_PARAM0_ is jumping","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyCurrentJumpSpeed"},"parameters":["Object","Behavior",">","0"]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Check if the object is on a platform.","fullName":"Is on floor","functionType":"Condition","group":"3D jump state","name":"IsOnFloor","sentence":"_PARAM0_ is on floor","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Return the state from the previous frame because the actual state may change during the current frame according to collision."},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyPreviousState"},"parameters":["Object","Behavior","=","\"Idle\""]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"the current jump speed of the object. Its value is always positive.","fullName":"Current jump speed","functionType":"ExpressionAndCondition","group":"3D jump state","name":"CurrentJumpSpeed","sentence":"the current jump speed","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Return the speed from the previous frame because the actual speed may change during the current frame according to collision."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["PreviousJumpSpeed"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"CurrentJumpSpeed","name":"SetCurrentJumpSpeed","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyState"},"parameters":["Object","Behavior","!=","\"Idle\""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentJumpSpeed"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"the current falling speed of the object. Its value is always positive.","fullName":"Current falling speed","functionType":"ExpressionAndCondition","group":"3D jump state","name":"CurrentFallSpeed","sentence":"the current falling speed","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Return the speed from the previous frame because the actual speed may change during the current frame according to collision."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["PreviousFallSpeed"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"CurrentFallSpeed","name":"SetCurrentFallSpeed","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyState"},"parameters":["Object","Behavior","!=","\"Idle\""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyCurrentFallSpeed"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"the current speed of the object on Z axis. Its value is negative when the object falls.","fullName":"Current vertical speed","functionType":"ExpressionAndCondition","group":"3D jump state","name":"CurrentVerticalSpeed","sentence":"the current vertical speed","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Return the speed from the previous frame because the actual speed may change during the current frame according to collision."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["PreviousJumpSpeed - PreviousFallSpeed"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"the current speed of the object on Z axis. Its value is negative when the object falls.","fullName":"Actual current vertical speed","functionType":"ExpressionAndCondition","group":"3D jump state","name":"VerticalSpeed","private":true,"sentence":"the actual current vertical speed","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["CurrentJumpSpeed - CurrentFallSpeed"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"the maximum falling speed of the object. Its value is always positive.","fullName":"Maximum falling speed","functionType":"ExpressionAndCondition","group":"3D jump configuration","name":"MaxFallingSpeed","sentence":"the maximum falling speed","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["MaxFallingSpeed"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"MaxFallingSpeed","name":"SetMaxFallingSpeed","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyMaxFallingSpeed"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"the gavity of the object. Its value is always positive.","fullName":"Gavity","functionType":"ExpressionAndCondition","group":"3D jump configuration","name":"Gravity","sentence":"the gavity","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["Gravity"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"Gravity","name":"SetGravity","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyGravity"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"the jump sustain time of the object. Maximum time (in seconds) during which the jump strength is sustained if the jump key is held - allowing variable height jumps.","fullName":"Jump sustain time","functionType":"ExpressionAndCondition","group":"3D jump configuration","name":"JumpSustainDurationMax","sentence":"the jump sustain time","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["JumpSustainDurationMax"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"JumpSustainDurationMax","name":"SetJumpSustainDurationMax","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyJumpSustainDurationMax"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Check if stop falling when Z equals 0.","fullName":"Stop falling when Z equals 0","functionType":"Condition","group":"3D jump configuration","name":"ShouldStopAtZero","sentence":"_PARAM0_ stop falling when Z equals 0","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Jump3D::Jump3D::PropertyShouldStopAtZero"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"}],"objectGroups":[]},{"description":"Change if stop falling when Z equals 0.","fullName":"Stop falling when Z equals 0","functionType":"Action","group":"3D jump configuration","name":"SetShouldStopAtZero","sentence":"_PARAM0_ stop falling when Z equals 0: _PARAM2_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"GetArgumentAsBoolean"},"parameters":["\"Value\""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyShouldStopAtZero"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"GetArgumentAsBoolean"},"parameters":["\"Value\""]}],"actions":[{"type":{"value":"Jump3D::Jump3D::SetPropertyShouldStopAtZero"},"parameters":["Object","Behavior","yes"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Jump3D::Jump3D","type":"behavior"},{"defaultValue":"yes","description":"StopAtZero","name":"Value","optional":true,"type":"yesorno"}],"objectGroups":[]}],"propertyDescriptors":[{"value":"","type":"Behavior","label":"3D capability","description":"","group":"","extraInformation":["Scene3D::Base3DBehavior"],"name":"Object3D"},{"value":"150","type":"Number","label":"Jump height","description":"Its value is always positive.","group":"","extraInformation":[],"name":"JumpHeight"},{"value":"700","type":"Number","unit":"PixelSpeed","label":"Maximum falling speed","description":"Its value is always positive.","group":"","extraInformation":[],"name":"MaxFallingSpeed"},{"value":"1000","type":"Number","unit":"PixelAcceleration","label":"Gavity","description":"Its value is always positive.","group":"","extraInformation":[],"name":"Gravity"},{"value":"600","type":"Number","label":"Jump speed","description":"Its value is always positive.","group":"","extraInformation":[],"hidden":true,"name":"JumpSpeed"},{"value":"0.2","type":"Number","unit":"Second","label":"Jump sustain time","description":"Maximum time (in seconds) during which the jump strength is sustained if the jump key is held - allowing variable height jumps.","group":"","extraInformation":[],"name":"JumpSustainDurationMax"},{"value":"Idle","type":"Choice","label":"","description":"","group":"","extraInformation":["Idle","SustainJump","InTheAir"],"hidden":true,"name":"State"},{"value":"","type":"Number","unit":"PixelSpeed","label":"Current jump speed","description":"Its value is always positive.","group":"","extraInformation":[],"hidden":true,"name":"CurrentJumpSpeed"},{"value":"","type":"Number","unit":"PixelSpeed","label":"Current falling speed","description":"Its value is always positive.","group":"","extraInformation":[],"hidden":true,"name":"CurrentFallSpeed"},{"value":"","type":"Number","unit":"PixelSpeed","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"PreviousJumpSpeed"},{"value":"","type":"Number","unit":"PixelSpeed","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"PreviousFallSpeed"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HasPressedJumpKey"},{"value":"true","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"CanJump"},{"value":"true","type":"Boolean","label":"Stop falling when Z equals 0","description":"","group":"","extraInformation":[],"name":"ShouldStopAtZero"},{"value":"Idle","type":"String","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"PreviousState"}],"sharedPropertyDescriptors":[]}],"eventsBasedObjects":[]},{"author":"","category":"Movement","extensionNamespace":"","fullName":"3D walk","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXdhbGsiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTQuMTIsMTBIMTlWOC4ySDE1LjM4TDEzLjM4LDQuODdDMTMuMDgsNC4zNyAxMi41NCw0LjAzIDExLjkyLDQuMDNDMTEuNzQsNC4wMyAxMS41OCw0LjA2IDExLjQyLDQuMTFMNiw1LjhWMTFINy44VjcuMzNMOS45MSw2LjY3TDYsMjJINy44TDEwLjY3LDEzLjg5TDEzLDE3VjIySDE0LjhWMTUuNTlMMTIuMzEsMTEuMDVMMTMuMDQsOC4xOE0xNCwzLjhDMTUsMy44IDE1LjgsMyAxNS44LDJDMTUuOCwxIDE1LDAuMiAxNCwwLjJDMTMsMC4yIDEyLjIsMSAxMi4yLDJDMTIuMiwzIDEzLDMuOCAxNCwzLjhaIiAvPjwvc3ZnPg==","name":"Walk3D","previewIconUrl":"https://asset-resources.gdevelop.io/public-resources/Icons/941323cf01b837b2eb512ecbf0a95add8a195b3696eb6f5865dc090e526dc9b3_walk.svg","shortDescription":"Turn and move objects forward and sideways.","version":"0.1.0","description":"Move objects forward and sideways arrording to the direction they're facing.","origin":{"identifier":"Walk3D","name":"gdevelop-extension-store"},"tags":["3d"],"authorIds":["IWykYNRvhCZBN3vEgKEbBPOR3Oc2","oc974hW1zSYZfAnRbpKoXizqc1D3","3qThSVKAPdP03MXTWNpe2QaNxpv1"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[],"eventsBasedBehaviors":[{"description":"Turn and move objects forward and sideways.","fullName":"3D walk","name":"Walk3D","objectType":"","eventsFunctions":[{"fullName":"","functionType":"Action","name":"doStepPreEvents","sentence":"","events":[{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Rotation","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyPreviousRotationSpeed"},"parameters":["Object","Behavior","=","CurrentRotationSpeed"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedTurnLeft"},"parameters":["Object","Behavior"]},{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedTurnRight"},"parameters":["Object","Behavior"]},{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedTurnLeftLast"},"parameters":["Object","Behavior"]}]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedRotationSpeed"},"parameters":["Object","Behavior","=","-RotationSpeedMax"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedTurnRight"},"parameters":["Object","Behavior"]},{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedTurnLeft"},"parameters":["Object","Behavior"]},{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedTurnLeftLast"},"parameters":["Object","Behavior"]}]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedRotationSpeed"},"parameters":["Object","Behavior","=","RotationSpeedMax"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyTargetedRotationSpeed"},"parameters":["Object","Behavior","<","0"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousRotationSpeed"},"parameters":["Object","Behavior","<=","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentRotationSpeed"},"parameters":["Object","Behavior","=","max(CurrentRotationSpeed - RotationAcceleration * TimeDelta(), TargetedRotationSpeed)"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousRotationSpeed"},"parameters":["Object","Behavior",">","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentRotationSpeed"},"parameters":["Object","Behavior","=","max(CurrentRotationSpeed - (RotationAcceleration + RotationDeceleration) * TimeDelta(), TargetedRotationSpeed)"]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyTargetedRotationSpeed"},"parameters":["Object","Behavior",">","0"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousRotationSpeed"},"parameters":["Object","Behavior",">=","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentRotationSpeed"},"parameters":["Object","Behavior","=","min(CurrentRotationSpeed + RotationAcceleration * TimeDelta(), TargetedRotationSpeed)"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousRotationSpeed"},"parameters":["Object","Behavior","<","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentRotationSpeed"},"parameters":["Object","Behavior","=","min(CurrentRotationSpeed + (RotationAcceleration + RotationDeceleration) * TimeDelta(), TargetedRotationSpeed)"]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyTargetedRotationSpeed"},"parameters":["Object","Behavior","=","0"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousRotationSpeed"},"parameters":["Object","Behavior",">=","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentRotationSpeed"},"parameters":["Object","Behavior","=","max(CurrentRotationSpeed - RotationDeceleration * TimeDelta(), 0)"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousRotationSpeed"},"parameters":["Object","Behavior","<","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentRotationSpeed"},"parameters":["Object","Behavior","=","min(CurrentRotationSpeed + RotationDeceleration * TimeDelta(), 0)"]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetAngle"},"parameters":["Object","+","(PreviousRotationSpeed + CurrentRotationSpeed) / 2 * TimeDelta()"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedTurnLeft"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedTurnLeft"},"parameters":["Object","Behavior","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedTurnLeft"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedTurnLeft"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedTurnRight"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedTurnRight"},"parameters":["Object","Behavior","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedTurnRight"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedTurnRight"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedTurnLeft"},"parameters":["Object","Behavior","no"]},{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedTurnRight"},"parameters":["Object","Behavior","no"]},{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedRotationSpeed"},"parameters":["Object","Behavior","=","0"]}]}],"parameters":[]},{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Translation","source":"","type":"BuiltinCommonInstructions::Group","events":[{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Forward","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyPreviousForwardSpeed"},"parameters":["Object","Behavior","=","CurrentForwardSpeed"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedMoveBackward"},"parameters":["Object","Behavior"]},{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedMoveForward"},"parameters":["Object","Behavior"]},{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedMoveBackwardLast"},"parameters":["Object","Behavior"]}]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedForwardSpeed"},"parameters":["Object","Behavior","=","-TranslationSpeedMax"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedMoveForward"},"parameters":["Object","Behavior"]},{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedMoveBackward"},"parameters":["Object","Behavior"]},{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedMoveBackwardLast"},"parameters":["Object","Behavior"]}]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedForwardSpeed"},"parameters":["Object","Behavior","=","TranslationSpeedMax"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyTargetedForwardSpeed"},"parameters":["Object","Behavior","<","0"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousForwardSpeed"},"parameters":["Object","Behavior","<=","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentForwardSpeed"},"parameters":["Object","Behavior","=","max(CurrentForwardSpeed - TranslationAcceleration * TimeDelta(), TargetedForwardSpeed)"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousForwardSpeed"},"parameters":["Object","Behavior",">","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentForwardSpeed"},"parameters":["Object","Behavior","=","max(CurrentForwardSpeed - (TranslationAcceleration + TranslationDeceleration) * TimeDelta(), TargetedForwardSpeed)"]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyTargetedForwardSpeed"},"parameters":["Object","Behavior",">","0"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousForwardSpeed"},"parameters":["Object","Behavior",">=","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentForwardSpeed"},"parameters":["Object","Behavior","=","min(CurrentForwardSpeed + TranslationAcceleration * TimeDelta(), TargetedForwardSpeed)"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousForwardSpeed"},"parameters":["Object","Behavior","<","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentForwardSpeed"},"parameters":["Object","Behavior","=","min(CurrentForwardSpeed + (TranslationAcceleration + TranslationDeceleration) * TimeDelta(), TargetedForwardSpeed)"]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyTargetedForwardSpeed"},"parameters":["Object","Behavior","=","0"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousForwardSpeed"},"parameters":["Object","Behavior",">=","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentForwardSpeed"},"parameters":["Object","Behavior","=","max(CurrentForwardSpeed - TranslationDeceleration * TimeDelta(), 0)"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousForwardSpeed"},"parameters":["Object","Behavior","<","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentForwardSpeed"},"parameters":["Object","Behavior","=","min(CurrentForwardSpeed + TranslationDeceleration * TimeDelta(), 0)"]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHadPressedMoveBackward"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedMoveBackward"},"parameters":["Object","Behavior","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHadPressedMoveBackward"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedMoveBackward"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedMoveForward"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedMoveForward"},"parameters":["Object","Behavior","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedMoveForward"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedMoveForward"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveBackward"},"parameters":["Object","Behavior","no"]},{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveForward"},"parameters":["Object","Behavior","no"]},{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedForwardSpeed"},"parameters":["Object","Behavior","=","0"]}]}],"parameters":[]},{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Sideways","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyPreviousSidewaysSpeed"},"parameters":["Object","Behavior","=","CurrentSidewaysSpeed"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedMoveLeft"},"parameters":["Object","Behavior"]},{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedMoveRight"},"parameters":["Object","Behavior"]},{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedMoveLeftLast"},"parameters":["Object","Behavior"]}]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedSidewaysSpeed"},"parameters":["Object","Behavior","=","-TranslationSpeedMax"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedMoveRight"},"parameters":["Object","Behavior"]},{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedMoveLeft"},"parameters":["Object","Behavior"]},{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedMoveLeftLast"},"parameters":["Object","Behavior"]}]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedSidewaysSpeed"},"parameters":["Object","Behavior","=","TranslationSpeedMax"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyTargetedSidewaysSpeed"},"parameters":["Object","Behavior","<","0"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousSidewaysSpeed"},"parameters":["Object","Behavior","<=","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentSidewaysSpeed"},"parameters":["Object","Behavior","=","max(CurrentSidewaysSpeed - TranslationAcceleration * TimeDelta(), TargetedSidewaysSpeed)"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousSidewaysSpeed"},"parameters":["Object","Behavior",">","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentSidewaysSpeed"},"parameters":["Object","Behavior","=","max(CurrentSidewaysSpeed - (TranslationAcceleration + TranslationDeceleration) * TimeDelta(), TargetedSidewaysSpeed)"]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyTargetedSidewaysSpeed"},"parameters":["Object","Behavior",">","0"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousSidewaysSpeed"},"parameters":["Object","Behavior",">=","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentSidewaysSpeed"},"parameters":["Object","Behavior","=","min(CurrentSidewaysSpeed + TranslationAcceleration * TimeDelta(), TargetedSidewaysSpeed)"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousSidewaysSpeed"},"parameters":["Object","Behavior","<","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentSidewaysSpeed"},"parameters":["Object","Behavior","=","min(CurrentSidewaysSpeed + (TranslationAcceleration + TranslationDeceleration) * TimeDelta(), TargetedSidewaysSpeed)"]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyTargetedSidewaysSpeed"},"parameters":["Object","Behavior","=","0"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousSidewaysSpeed"},"parameters":["Object","Behavior",">=","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentSidewaysSpeed"},"parameters":["Object","Behavior","=","max(CurrentSidewaysSpeed - TranslationDeceleration * TimeDelta(), 0)"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyPreviousSidewaysSpeed"},"parameters":["Object","Behavior","<","0"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentSidewaysSpeed"},"parameters":["Object","Behavior","=","min(CurrentSidewaysSpeed + TranslationDeceleration * TimeDelta(), 0)"]}]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHadPressedMoveLeft"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedMoveLeft"},"parameters":["Object","Behavior","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHadPressedMoveLeft"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedMoveLeft"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Walk3D::Walk3D::PropertyHasPressedMoveRight"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedMoveRight"},"parameters":["Object","Behavior","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHasPressedMoveRight"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHadPressedMoveRight"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveLeft"},"parameters":["Object","Behavior","no"]},{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveRight"},"parameters":["Object","Behavior","no"]},{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedSidewaysSpeed"},"parameters":["Object","Behavior","=","0"]}]}],"parameters":[]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreAutour"},"parameters":["Object","Object","(PreviousForwardSpeed + CurrentForwardSpeed) / 2 * TimeDelta()","Object.Angle()"]},{"type":{"value":"MettreAutour"},"parameters":["Object","Object","(PreviousSidewaysSpeed + CurrentSidewaysSpeed) / 2 * TimeDelta()","Object.Angle() + 90"]}]}],"parameters":[]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"Simulate a press of the turn left key.","fullName":"Simulate turn left key press","functionType":"Action","group":"Top-down walk state","name":"SimulateTurnLeftKey","sentence":"Simulate pressing turn left key for _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHadPressedTurnLeft"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedTurnLeftLast"},"parameters":["Object","Behavior","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedTurnLeft"},"parameters":["Object","Behavior","yes"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"Simulate a press of the turn right key.","fullName":"Simulate turn right key press","functionType":"Action","group":"Top-down walk state","name":"SimulateTurnRightKey","sentence":"Simulate pressing turn right key for _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHadPressedTurnRight"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedTurnLeftLast"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedTurnRight"},"parameters":["Object","Behavior","yes"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"Simulate a press of the move backward key.","fullName":"Simulate move backward key press","functionType":"Action","group":"Top-down walk state","name":"SimulateMoveBackwardKey","sentence":"Simulate pressing move backward key for _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHadPressedMoveBackward"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveBackwardLast"},"parameters":["Object","Behavior","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveBackward"},"parameters":["Object","Behavior","yes"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"Simulate a press of the move forward key.","fullName":"Simulate move forward key press","functionType":"Action","group":"Top-down walk state","name":"SimulateMoveForwardKey","sentence":"Simulate pressing move forward key for _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHadPressedMoveForward"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveBackwardLast"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveForward"},"parameters":["Object","Behavior","yes"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"Simulate a press of the move left key.","fullName":"Simulate move left key press","functionType":"Action","group":"Top-down walk state","name":"SimulateMoveLeftKey","sentence":"Simulate pressing move left key for _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHadPressedMoveLeft"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveLeftLast"},"parameters":["Object","Behavior","yes"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveLeft"},"parameters":["Object","Behavior","yes"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"Simulate a press of the move right key.","fullName":"Simulate move right key press","functionType":"Action","group":"Top-down walk state","name":"SimulateMoveRightKey","sentence":"Simulate pressing move right key for _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"inverted":true,"value":"Walk3D::Walk3D::PropertyHadPressedMoveRight"},"parameters":["Object","Behavior"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveLeftLast"},"parameters":["Object","Behavior","no"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyHasPressedMoveRight"},"parameters":["Object","Behavior","yes"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"Simulate a stick control.","fullName":"Simulate stick control","functionType":"Action","group":"Top-down walk state","name":"SimulateMoveStick","sentence":"Simulate a stick control for _PARAM0_ with a _PARAM2_ angle and a _PARAM3_ force","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Denormilize the targeted speed.\nIt projects the circle on a square with sides length of the circle diameter."},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetSharedPropertyCos"},"parameters":["Object","Behavior","=","cos(ToRad(-Angle))"]},{"type":{"value":"Walk3D::Walk3D::SetSharedPropertySin"},"parameters":["Object","Behavior","=","sin(ToRad(-Angle))"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::CompareNumbers"},"parameters":["abs(Cos)",">=","abs(Sin)"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedSidewaysSpeed"},"parameters":["Object","Behavior","=","Force * TranslationSpeedMax * sign(Cos)"]},{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedForwardSpeed"},"parameters":["Object","Behavior","=","Force * TranslationSpeedMax * Sin / abs(Cos)"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::CompareNumbers"},"parameters":["abs(Cos)","<=","abs(Sin)"]}],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedSidewaysSpeed"},"parameters":["Object","Behavior","=","Force * TranslationSpeedMax * Cos / abs(Sin)"]},{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedForwardSpeed"},"parameters":["Object","Behavior","=","Force * TranslationSpeedMax * sign(Sin)"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"},{"description":"Stick angle (in degrees)","name":"Angle","type":"expression"},{"description":"Stick force (between 0 and 1)","name":"Force","type":"expression"}],"objectGroups":[]},{"description":"Simulate a stick control for rotation.","fullName":"Simulate stick control for rotation","functionType":"Action","group":"Top-down walk state","name":"SimulateRotationStick","sentence":"Simulate a stick control for rotation of _PARAM0_ with an axis value of _PARAM2_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTargetedRotationSpeed"},"parameters":["Object","Behavior","=","Value * RotationSpeedMax"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"},{"description":"Axis value (between -1 and 1)","name":"Value","type":"expression"}],"objectGroups":[]},{"description":"the current rotation speed of the object.","fullName":"Current rotation speed","functionType":"ExpressionAndCondition","group":"Top-down walk state","name":"CurrentRotationSpeed","sentence":"the current rotation speed","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["CurrentRotationSpeed"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"CurrentRotationSpeed","name":"SetCurrentRotationSpeed","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentRotationSpeed"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"the current forward speed of the object.","fullName":"Current forward speed","functionType":"ExpressionAndCondition","group":"Top-down walk state","name":"CurrentForwardSpeed","sentence":"the current forward speed","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["CurrentForwardSpeed"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"CurrentForwardSpeed","name":"SetCurrentForwardSpeed","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentForwardSpeed"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"the current sideways speed of the object.","fullName":"Current sideways speed","functionType":"ExpressionAndCondition","group":"Top-down walk state","name":"CurrentSidewaysSpeed","sentence":"the current sideways speed","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["CurrentSidewaysSpeed"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"CurrentSidewaysSpeed","name":"SetCurrentSidewaysSpeed","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyCurrentSidewaysSpeed"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"the maximum rotation speed of the object.","fullName":"Maximum rotation speed","functionType":"ExpressionAndCondition","group":"Top-down walk configuration","name":"RotationSpeedMax","sentence":"the maximum rotation speed","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["RotationSpeedMax"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"RotationSpeedMax","name":"SetRotationSpeedMax","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyRotationSpeedMax"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"the rotation acceleration of the object.","fullName":"Rotation acceleration","functionType":"ExpressionAndCondition","group":"Top-down walk configuration","name":"RotationAcceleration","sentence":"the rotation acceleration","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["RotationAcceleration"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"RotationAcceleration","name":"SetRotationAcceleration","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyRotationAcceleration"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"the rotation deceleration of the object.","fullName":"Rotation deceleration","functionType":"ExpressionAndCondition","group":"Top-down walk configuration","name":"RotationDeceleration","sentence":"the rotation deceleration","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["RotationDeceleration"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"RotationDeceleration","name":"SetRotationDeceleration","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyRotationDeceleration"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"the maximum speed of the object.","fullName":"Maximum speed","functionType":"ExpressionAndCondition","group":"Top-down walk configuration","name":"TranslationSpeedMax","sentence":"the maximum speed","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["TranslationSpeedMax"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"TranslationSpeedMax","name":"SetTranslationSpeedMax","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTranslationSpeedMax"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"the acceleration of the object.","fullName":"Acceleration","functionType":"ExpressionAndCondition","group":"Top-down walk configuration","name":"TranslationAcceleration","sentence":"the acceleration","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["TranslationAcceleration"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"TranslationAcceleration","name":"SetTranslationAcceleration","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTranslationAcceleration"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"description":"the deceleration of the object.","fullName":"Deceleration","functionType":"ExpressionAndCondition","group":"Top-down walk configuration","name":"TranslationDeceleration","sentence":"the deceleration","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["TranslationDeceleration"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]},{"fullName":"","functionType":"ActionWithOperator","getterName":"TranslationDeceleration","name":"SetTranslationDeceleration","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"Walk3D::Walk3D::SetPropertyTranslationDeceleration"},"parameters":["Object","Behavior","=","Value"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"Walk3D::Walk3D","type":"behavior"}],"objectGroups":[]}],"propertyDescriptors":[{"value":"180","type":"Number","unit":"AngularSpeed","label":"Maximum rotation speed","description":"","group":"Rotation","extraInformation":[],"name":"RotationSpeedMax"},{"value":"720","type":"Number","label":"Rotation acceleration","description":"","group":"Rotation","extraInformation":[],"name":"RotationAcceleration"},{"value":"720","type":"Number","label":"Rotation deceleration","description":"","group":"Rotation","extraInformation":[],"name":"RotationDeceleration"},{"value":"400","type":"Number","unit":"PixelSpeed","label":"Maximum speed","description":"","group":"","extraInformation":[],"name":"TranslationSpeedMax"},{"value":"1600","type":"Number","unit":"PixelAcceleration","label":"Acceleration","description":"","group":"","extraInformation":[],"name":"TranslationAcceleration"},{"value":"1600","type":"Number","unit":"PixelAcceleration","label":"Deceleration","description":"","group":"","extraInformation":[],"name":"TranslationDeceleration"},{"value":"0","type":"Number","unit":"AngularSpeed","label":"Current rotation speed","description":"","group":"","extraInformation":[],"hidden":true,"name":"CurrentRotationSpeed"},{"value":"0","type":"Number","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"PreviousRotationSpeed"},{"value":"0","type":"Number","unit":"PixelSpeed","label":"Current forward speed","description":"","group":"","extraInformation":[],"hidden":true,"name":"CurrentForwardSpeed"},{"value":"0","type":"Number","unit":"PixelSpeed","label":"Current sideways speed","description":"","group":"","extraInformation":[],"hidden":true,"name":"CurrentSidewaysSpeed"},{"value":"0","type":"Number","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"PreviousForwardSpeed"},{"value":"0","type":"Number","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"PreviousSidewaysSpeed"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HasPressedTurnLeft"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HasPressedTurnRight"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HasPressedTurnLeftLast"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HadPressedTurnLeft"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HadPressedTurnRight"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HasPressedMoveForward"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HasPressedMoveBackward"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HadPressedMoveForward"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HadPressedMoveBackward"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HasPressedMoveBackwardLast"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HasPressedMoveLeft"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HasPressedMoveRight"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HadPressedMoveLeft"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HadPressedMoveRight"},{"value":"","type":"Boolean","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"HasPressedMoveLeftLast"},{"value":"0","type":"Number","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"TargetedForwardSpeed"},{"value":"0","type":"Number","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"TargetedSidewaysSpeed"},{"value":"0","type":"Number","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"TargetedRotationSpeed"}],"sharedPropertyDescriptors":[{"value":"0","type":"Number","label":"","description":"","group":"","extraInformation":[],"hidden":true,"name":"Cos"},{"value":"0","type":"Number","label":"","description":"","group":"","extraInformation":[],"name":"Sin"}]}],"eventsBasedObjects":[]},{"author":"","category":"Camera","extensionNamespace":"","fullName":"Third person camera","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBvbHlnb24gY2xhc3M9InN0MCIgcG9pbnRzPSI3LDEwIDEsMTMgNywxNiAxMywxMyAiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjEsMTMgMSwyMCA3LDIzIDEzLDIwIDEzLDEzICIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjciIHkxPSIxNiIgeDI9IjciIHkyPSIyMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMxIiB5MT0iMTYiIHgyPSIyMSIgeTI9IjgiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyMSIgeTE9IjI0IiB4Mj0iMzEiIHkyPSIxNiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTIyLjcsMjIuNkMyMCwyMS43LDE4LDE5LjEsMTgsMTZjMC0zLjEsMi01LjcsNC43LTYuNiIvPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTE5LjgsMTEuM2MxLjQsMS4xLDIuMiwyLjgsMi4yLDQuN2MwLDEuOS0wLjksMy42LTIuMiw0LjciLz4NCjwvc3ZnPg0K","name":"ThirdPersonCamera","previewIconUrl":"https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/Virtual Reality/94e95d2c318e1f3dc7151a351024e13c574e1e44669c6696aa107d60230073f6_Virtual Reality_3d_vision_eye_vr.svg","shortDescription":"Move the camera to look at an object from a given distance.","version":"1.1.1","description":["Move the camera to look at an object from a given distance with a rotation and an elevation angles.","","It can be useful for:","- Third person camera","- Isometric-like point of view",""],"origin":{"identifier":"ThirdPersonCamera","name":"gdevelop-extension-store"},"tags":["3d","camera"],"authorIds":["IWykYNRvhCZBN3vEgKEbBPOR3Oc2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"Move the camera to look at a position from a distance.","fullName":"Look at a position from a distance (deprecated)","functionType":"Action","name":"LookFromDistanceAtPosition","private":true,"sentence":"Move the camera of _PARAM6_ to look at _PARAM1_; _PARAM2_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetCameraCenterX"},"parameters":["","=","GetArgumentAsNumber(\"PositionX\") + GetArgumentAsNumber(\"Distance\") * cos(ToRad(GetArgumentAsNumber(\"RotationAngle\") + 90)) * cos(ToRad(GetArgumentAsNumber(\"ElevationAngle\")))","GetArgumentAsString(\"Layer\")",""]},{"type":{"value":"SetCameraCenterY"},"parameters":["","=","GetArgumentAsNumber(\"PositionY\") + GetArgumentAsNumber(\"Distance\") * sin(ToRad(GetArgumentAsNumber(\"RotationAngle\") + 90)) * cos(ToRad(GetArgumentAsNumber(\"ElevationAngle\")))","GetArgumentAsString(\"Layer\")",""]},{"type":{"value":"Scene3D::SetCameraZ"},"parameters":["","=","GetArgumentAsNumber(\"Distance\") * sin(ToRad(GetArgumentAsNumber(\"ElevationAngle\")))","GetArgumentAsString(\"Layer\")",""]},{"type":{"value":"Scene3D::TurnCameraTowardPosition"},"parameters":["","GetArgumentAsNumber(\"PositionX\")","GetArgumentAsNumber(\"PositionY\")","0","GetArgumentAsString(\"Layer\")","",""]}]}],"parameters":[{"description":"Position on X axis","name":"PositionX","type":"expression"},{"description":"Position on Y axis","name":"PositionY","type":"expression"},{"description":"Distance","name":"Distance","type":"expression"},{"description":"Rotation angle (around Z axis)","name":"RotationAngle","type":"expression"},{"description":"Elevation angle (around Y axis)","name":"ElevationAngle","type":"expression"},{"description":"Layer","name":"Layer","type":"layer"}],"objectGroups":[]},{"description":"Move the camera to look at an object from a distance.","fullName":"Look at an object from a distance (deprecated)","functionType":"Action","name":"LookFromDistanceAtObject","private":true,"sentence":"Move the camera of _PARAM5_ to look at _PARAM1_ from _PARAM2_ pixels with a rotation of _PARAM3_° and an elevation of _PARAM4_°","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"ThirdPersonCamera::LookFromDistanceAtPosition"},"parameters":["","Object.CenterX()","Object.CenterY()","GetArgumentAsNumber(\"Distance\")","GetArgumentAsNumber(\"RotationAngle\")","GetArgumentAsNumber(\"ElevationAngle\")","GetArgumentAsString(\"Layer\")",""]}]}],"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"Distance","name":"Distance","type":"expression"},{"description":"Rotation angle (around Z axis)","name":"RotationAngle","type":"expression"},{"description":"Elevation angle (around Y axis)","name":"ElevationAngle","type":"expression"},{"description":"Layer","name":"Layer","type":"layer"}],"objectGroups":[]},{"description":"Move the camera to look at a position from a distance.","fullName":"Look at a position from a distance","functionType":"Action","name":"LookFromDistanceAtPosition3D","sentence":"Move the camera of _PARAM7_ to look at _PARAM1_; _PARAM2_; _PARAM3_ from _PARAM4_ pixels with a rotation of _PARAM5_° and an elevation of _PARAM6_°","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetCameraCenterX"},"parameters":["","=","PositionX + Distance * cos(ToRad(RotationAngle + 90)) * cos(ToRad(ElevationAngle))","Layer",""]},{"type":{"value":"SetCameraCenterY"},"parameters":["","=","PositionY + Distance * sin(ToRad(RotationAngle + 90)) * cos(ToRad(ElevationAngle))","Layer",""]},{"type":{"value":"Scene3D::SetCameraZ"},"parameters":["","=","PositionZ + Distance * sin(ToRad(ElevationAngle))","Layer",""]},{"type":{"value":"Scene3D::SetCameraRotationX"},"parameters":["","=","90 - ElevationAngle","Layer",""]},{"type":{"value":"Scene3D::SetCameraRotationY"},"parameters":["","=","0","Layer",""]},{"type":{"value":"SetCameraAngle"},"parameters":["","=","RotationAngle","Layer",""]}]}],"parameters":[{"description":"Position on X axis","name":"PositionX","type":"expression"},{"description":"Position on Y axis","name":"PositionY","type":"expression"},{"description":"Position on Z axis","name":"PositionZ","type":"expression"},{"description":"Distance","name":"Distance","type":"expression"},{"description":"Rotation angle (around Z axis)","name":"RotationAngle","type":"expression"},{"description":"Elevation angle (around Y axis)","name":"ElevationAngle","type":"expression"},{"description":"Layer","name":"Layer","type":"layer"}],"objectGroups":[]},{"description":"Move the camera to look at an object from a distance.","fullName":"Look at an object from a distance","functionType":"Action","group":"Layers and cameras","name":"LookFromDistanceAtObject3D","sentence":"Move the camera of _PARAM6_ to look at _PARAM1_ from _PARAM3_ pixels with a rotation of _PARAM4_° and an elevation of _PARAM5_°","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"ThirdPersonCamera::LookFromDistanceAtPosition3D"},"parameters":["","Object.CenterX()","Object.CenterY()","Object.Object3D::CenterZ()","Distance","RotationAngle","ElevationAngle","Layer",""]}]}],"parameters":[{"description":"Object","name":"Object","type":"objectList"},{"description":"3D capability","name":"Object3D","supplementaryInformation":"Scene3D::Base3DBehavior","type":"behavior"},{"description":"Distance","name":"Distance","type":"expression"},{"description":"Rotation angle (around Z axis)","name":"RotationAngle","type":"expression"},{"description":"Elevation angle (around Y axis)","name":"ElevationAngle","type":"expression"},{"description":"Layer","name":"Layer","type":"layer"}],"objectGroups":[]}],"eventsBasedBehaviors":[],"eventsBasedObjects":[]},{"author":"Ahnaf30e","category":"Advanced","extensionNamespace":"","fullName":"Frames per second (FPS)","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8cGF0aCBkPSJNMzAsM2gtMkg0SDJDMS40LDMsMSwzLjQsMSw0czAuNCwxLDEsMWgxdjE2YzAsMC42LDAuNCwxLDEsMWg5LjhsLTUuNSw2LjNjLTAuNCwwLjQtMC4zLDEsMC4xLDEuNEM4LjUsMjkuOSw4LjgsMzAsOSwzMA0KCWMwLjMsMCwwLjYtMC4xLDAuOC0wLjNsNS4yLTZWMjhjMCwwLjYsMC40LDEsMSwxczEtMC40LDEtMXYtNC4zbDUuMiw2YzAuMiwwLjIsMC41LDAuMywwLjgsMC4zYzAuMiwwLDAuNS0wLjEsMC43LTAuMg0KCWMwLjQtMC40LDAuNS0xLDAuMS0xLjRMMTguMiwyMkgyOGMwLjYsMCwxLTAuNCwxLTFWNWgxYzAuNiwwLDEtMC40LDEtMVMzMC42LDMsMzAsM3ogTTI0LjgsOC42bC00LDZjLTAuMywwLjQtMC44LDAuNi0xLjMsMC4zDQoJTDE1LjgsMTNoLTMuNGwtMy43LDMuN0M4LjUsMTYuOSw4LjMsMTcsOCwxN3MtMC41LTAuMS0wLjctMC4zYy0wLjQtMC40LTAuNC0xLDAtMS40bDQtNGMwLjItMC4yLDAuNC0wLjMsMC43LTAuM2g0DQoJYzAuMiwwLDAuMywwLDAuNCwwLjFsMy4yLDEuNmwzLjUtNS4zYzAuMy0wLjUsMC45LTAuNiwxLjQtMC4zQzI1LDcuNSwyNS4xLDguMSwyNC44LDguNnoiLz4NCjwvc3ZnPg0K","name":"FPS","previewIconUrl":"https://resources.gdevelop-app.com/assets/Icons/Glyphster Pack/Master/SVG/SEO/SEO_board_performance_profit.svg","shortDescription":"Calculate and display the frames per second (FPS) of the game.","version":"1.1.0","description":["Provides an expression to get the current FPS and a text object behavior to display the current FPS.","","Frames Per Second (FPS) describes how many times in the last second your game logic was executed. ","This includes running behaviors and events, and then rendering the new game state into the game window. The higher the FPS, the more fluid and performant your game looks.","","Note: Use the Performance Profiler (inside in the Debugger) for detailed performance information about your game."],"origin":{"identifier":"FPS","name":"gdevelop-extension-store"},"tags":["fps","frames","per","second","performance","speed"],"authorIds":["onPsboRtDkUHNOsx7OPr8R8G1oj2","gqDaZjCfevOOxBYkK6zlhtZnXCg1"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"fullName":"","functionType":"Action","name":"onSceneLoaded","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SceneVariablePushNumber"},"parameters":["__FPS.FrameTimestamps","Time(\"timestamp\")"]}]}],"parameters":[],"objectGroups":[]},{"fullName":"","functionType":"Action","name":"onScenePostEvents","sentence":"","events":[{"colorB":228,"colorG":176,"colorR":74,"creationTime":0,"name":"Keep timestamps for every frame inside the lookback period","source":"","type":"BuiltinCommonInstructions::Group","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Record how much time has elapsed"},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"ModVarScene"},"parameters":["__FPS.TimeElapsed","=","Time(\"timestamp\") - Variable(__FPS.FrameTimestamps[0])"]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Remove any data before the last second from the beginning of the array"},{"infiniteLoopWarning":true,"type":"BuiltinCommonInstructions::While","whileConditions":[{"type":{"value":"SceneVariableChildCount"},"parameters":["__FPS.FrameTimestamps",">","0"]},{"type":{"value":"VarScene"},"parameters":["__FPS.FrameTimestamps[0]","<","Time(\"timestamp\") - 1000"]}],"conditions":[],"actions":[{"type":{"value":"SceneVariableRemoveAt"},"parameters":["__FPS.FrameTimestamps","0"]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Add the current timestamp to the end of the array"},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SceneVariablePushNumber"},"parameters":["__FPS.FrameTimestamps","Time(\"timestamp\")"]}]}],"parameters":[]}],"parameters":[],"objectGroups":[]},{"description":"Frames per second (FPS) during the last second.","fullName":"Frames Per Second (FPS)","functionType":"Expression","name":"FPS","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["VariableChildCount(__FPS.FrameTimestamps) / (Variable(__FPS.TimeElapsed) / 1000)"]}]}],"expressionType":{"type":"expression"},"parameters":[],"objectGroups":[]},{"description":"Frames per second (FPS) during the last second. [Deprecated]","fullName":"Frames Per Second (FPS) [Deprecated]","functionType":"Expression","name":"PreciseFPS","private":true,"sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"SetReturnNumber"},"parameters":["FPS::FPS()"]}]}],"expressionType":{"type":"expression"},"parameters":[{"description":"The accuracy of the FPS","longDescription":"This tells how many numbers after the period should be shown.","name":"accuracy","type":"expression"}],"objectGroups":[]}],"eventsBasedBehaviors":[{"description":"Makes a text object display the current FPS.","fullName":"FPS Displayer","name":"FPSDisplayer","objectType":"TextObject::Text","eventsFunctions":[{"fullName":"","functionType":"Action","name":"doStepPreEvents","sentence":"","events":[{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Generate the raw FPS text"},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"ModVarSceneTxt"},"parameters":["__FPS.UnformattedFPS","=","ToString(roundTo(FPS::FPS(), Object.Behavior::PropertyDecimalDigits()))"]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Add trailing zeroes, if needed"},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::CompareNumbers"},"parameters":["Object.Behavior::PropertyDecimalDigits()",">","0"]},{"type":{"value":"BuiltinCommonInstructions::CompareNumbers"},"parameters":["StrFind(VariableString(__FPS.UnformattedFPS),\".\")","=","-1"]}],"actions":[],"events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"ModVarSceneTxt"},"parameters":["__FPS.UnformattedFPS","+","\".\""]}]},{"type":"BuiltinCommonInstructions::Repeat","repeatExpression":"Object.Behavior::PropertyDecimalDigits()","conditions":[],"actions":[{"type":{"value":"ModVarSceneTxt"},"parameters":["__FPS.UnformattedFPS","+","\"0\""]}]}]},{"type":"BuiltinCommonInstructions::Comment","color":{"b":109,"g":230,"r":255,"textB":0,"textG":0,"textR":0},"comment":"Show the formatted FPS text including the prefix"},{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"TextObject::String"},"parameters":["Object","=","Object.Behavior::Propertyprefix() + VariableString(__FPS.UnformattedFPS)"]}]}],"parameters":[{"description":"Object","name":"Object","supplementaryInformation":"TextObject::Text","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"FPS::FPSDisplayer","type":"behavior"}],"objectGroups":[]}],"propertyDescriptors":[{"value":"FPS: ","type":"String","label":"The prefix before the FPS count","description":"","group":"","extraInformation":[],"name":"prefix"},{"value":"0","type":"Number","unit":"Dimensionless","label":"Number of decimal digits to display","description":"","group":"","extraInformation":[],"name":"DecimalDigits"}],"sharedPropertyDescriptors":[]}],"eventsBasedObjects":[]},{"author":"Add00, AlanPH, Tristan (Victris Games)","category":"Advanced","extensionNamespace":"","fullName":"Color Conversion","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWludmVydC1jb2xvcnMiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTIsMTkuNThWMTkuNThDMTAuNCwxOS41OCA4Ljg5LDE4Ljk2IDcuNzYsMTcuODNDNi42MiwxNi42OSA2LDE1LjE5IDYsMTMuNThDNiwxMiA2LjYyLDEwLjQ3IDcuNzYsOS4zNEwxMiw1LjFNMTcuNjYsNy45M0wxMiwyLjI3VjIuMjdMNi4zNCw3LjkzQzMuMjIsMTEuMDUgMy4yMiwxNi4xMiA2LjM0LDE5LjI0QzcuOSwyMC44IDkuOTUsMjEuNTggMTIsMjEuNThDMTQuMDUsMjEuNTggMTYuMSwyMC44IDE3LjY2LDE5LjI0QzIwLjc4LDE2LjEyIDIwLjc4LDExLjA1IDE3LjY2LDcuOTNaIiAvPjwvc3ZnPg==","name":"ColorConversion","previewIconUrl":"https://resources.gdevelop-app.com/assets/Icons/invert-colors.svg","shortDescription":"Expressions to convert color values between various formats (RGB, HSV, HSL, named colors), calculate luminance according to WCAG 2.0 standards, and to blend two colors.","version":"1.3.1","description":"Expressions to convert color values between various formats (RGB, HSV, HSL, named colors), calculate luminance according to WCAG 2.0 standards, and to blend two colors.","origin":{"identifier":"ColorConversion","name":"gdevelop-extension-store"},"tags":["color","conversion","hexadecimal","rgb","hsl","hsv","hsb","luminance","wcag","blend"],"authorIds":["gqDaZjCfevOOxBYkK6zlhtZnXCg1","AlZ3D1xkH0QDao7T37VZZUeYNpn1","IWykYNRvhCZBN3vEgKEbBPOR3Oc2","onPsboRtDkUHNOsx7OPr8R8G1oj2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"Converts a hexadecimal string into a RGB string. Example input: \"0459AF\".","fullName":"Hexadecimal to RGB","functionType":"StringExpression","name":"HexToRgb","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["try {"," let n = eventsFunctionContext.getArgument(\"n\");",""," //input validation"," let v = parseInt(n, 16);"," if (v.toString(16) === n.toUpperCase()) throw 'input is not hexadecimal'; ",""," let shorthandRegex = /^#?([a-f\\d])([a-f\\d])([a-f\\d])$/i;"," n = n.replace(shorthandRegex, function (m, r, g, b) {"," return r + r + g + g + b + b;"," });"," let result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(n);",""," let r = parseInt(result[1], 16),"," g = parseInt(result[2], 16),"," b = parseInt(result[3], 16);",""," eventsFunctionContext.returnValue = r + ';' + g + ';' + b;","} catch(e) {"," console.error(\"Unable to convert a color: \", e);"," eventsFunctionContext.returnValue = \"0;0;0\";","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"string"},"parameters":[{"description":"Hex value","name":"n","type":"color"}],"objectGroups":[]},{"description":"Calculate luminance of a RGB color. Example input: \"0;128;255\".","fullName":"Luminance from RGB","functionType":"Expression","name":"RgbToLuminance","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["function toLuminance(color) {"," // Convert the color string to an array of RGB values"," let [r, g, b] = color.split(\";\");"," let luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;"," return luminance;","}","","const color = eventsFunctionContext.getArgument(\"color\");","eventsFunctionContext.returnValue = toLuminance(color);"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"expression"},"parameters":[{"description":"RGB color","name":"color","type":"color"}],"objectGroups":[]},{"description":"Calculate luminance of a hexadecimal color. Example input: \"0459AF\".","fullName":"Luminance from hexadecimal","functionType":"Expression","name":"HexToLuminance","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["function hexToLuminance(color) {"," // Convert the color string to an array of RGB values"," let [r, g, b] = color.slice(1).match(/.{2}/g).map(x => parseInt(x, 16));"," let luminance = 0.2126 * r + 0.7152 * g + 0.0722 * b;"," return luminance;","}","","const color = eventsFunctionContext.getArgument(\"color\");","eventsFunctionContext.returnValue = hexToLuminance(color);"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"expression"},"parameters":[{"description":"Hex value","name":"color","type":"string"}],"objectGroups":[]},{"description":"Blend two RGB colors by applying a weighted mean.","fullName":"Blend RGB colors","functionType":"StringExpression","name":"RgbMean","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["try {"," // split do allocations, but the code a lot simpler this way."," const components1 = eventsFunctionContext.getArgument(\"Color1\").split(\";\");"," const r1 = gdjs.evtTools.common.clamp(parseFloat(components1[0]), 0, 255);"," const g1 = gdjs.evtTools.common.clamp(parseFloat(components1[1]), 0, 255);"," const b1 = gdjs.evtTools.common.clamp(parseFloat(components1[2]), 0, 255);",""," const components2 = eventsFunctionContext.getArgument(\"Color2\").split(\";\");"," const r2 = gdjs.evtTools.common.clamp(parseFloat(components2[0]), 0, 255);"," const g2 = gdjs.evtTools.common.clamp(parseFloat(components2[1]), 0, 255);"," const b2 = gdjs.evtTools.common.clamp(parseFloat(components2[2]), 0, 255);",""," const ratio = eventsFunctionContext.getArgument(\"Ratio\");"," const r = gdjs.evtTools.common.clamp(Math.round((1 - ratio) * r1 + ratio * r2), 0, 255);"," const g = gdjs.evtTools.common.clamp(Math.round((1 - ratio) * g1 + ratio * g2), 0, 255);"," const b = gdjs.evtTools.common.clamp(Math.round((1 - ratio) * b1 + ratio * b2), 0, 255);",""," eventsFunctionContext.returnValue = r + \";\" + g + \";\" + b;","} catch (e) {"," console.error(\"Unable to convert a color: \", e);"," eventsFunctionContext.returnValue = \"0;0;0\";","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"string"},"parameters":[{"description":"First RGB color","name":"Color1","type":"color"},{"description":"Second RGB color","name":"Color2","type":"color"},{"description":"Ratio","longDescription":"Range: 0 to 1, where 0 gives the first color and 1 gives the second color","name":"Ratio","type":"expression"}],"objectGroups":[]},{"description":"Converts a RGB string into a hexadecimal string. Example input: \"0;128;255\".","fullName":"RGB to hexadecimal","functionType":"StringExpression","name":"RgbToHex","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["try {"," const n = eventsFunctionContext.getArgument(\"n\");"," const col = n.split(\";\");"," "," let r = parseFloat(col[0]),"," g = parseFloat(col[1]),"," b = parseFloat(col[2]);",""," r = gdjs.evtTools.common.clamp(r, 0, 255);"," g = gdjs.evtTools.common.clamp(g, 0, 255);"," b = gdjs.evtTools.common.clamp(b, 0, 255);",""," eventsFunctionContext.returnValue = \"#\" + gdjs.rgbToHex(r, g, b).toUpperCase();","} catch (e) {"," console.error(\"Unable to convert a color: \", e);"," eventsFunctionContext.returnValue = \"#000000\";","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"string"},"parameters":[{"description":"RGB value","name":"n","type":"color"}],"objectGroups":[]},{"description":"Converts a RGB string into a HSL string. Example input: \"0;128;255\"\".","fullName":"RGB to HSL","functionType":"StringExpression","name":"RgbToHsl","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["const n = eventsFunctionContext.getArgument(\"n\");","const col = n.split(\";\");","","let r = parseFloat(col[0]),"," g = parseFloat(col[1]),"," b = parseFloat(col[2]);",""," r = gdjs.evtTools.common.clamp(r, 0, 255);"," g = gdjs.evtTools.common.clamp(g, 0, 255);"," b = gdjs.evtTools.common.clamp(b, 0, 255);","","r /= 255;","g /= 255;","b /= 255;","","let v = Math.max(r, g, b), c = v - Math.min(r, g, b), f = (1 - Math.abs(v + v - c - 1));","let h = c && ((v === r) ? (g - b) / c: ((v === g) ? 2 + (b - r) / c: 4 + (r - g) / c)); ","","eventsFunctionContext.returnValue = Math.round(60 * (h < 0 ? h + 6: h)) + ';' + Math.round((f ? c / f: 0) * 100) + ';' + Math.round(((v + v - c) / 2) * 100);",""],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"string"},"parameters":[{"description":"RGB value","name":"n","type":"color"}],"objectGroups":[]},{"description":"Converts HSV color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), V(0 to 100).","fullName":"HSV to RGB","functionType":"StringExpression","name":"HsvToRgb","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["try {",""," let h = parseFloat(eventsFunctionContext.getArgument(\"h\")),"," s = parseFloat(eventsFunctionContext.getArgument(\"s\")),"," v = parseFloat(eventsFunctionContext.getArgument(\"v\"));"," "," s = gdjs.evtTools.common.clamp(s, 0, 100);"," v = gdjs.evtTools.common.clamp(v, 0, 100);",""," h %= 360;"," if (h < 0) {"," h += 360;"," }",""," s /= 100;"," v /= 100;",""," let f = (n , k = (n + h / 60) % 6) => v - v * s * Math.max(Math.min(k, 4 - k, 1), 0);",""," eventsFunctionContext.returnValue = Math.round(f(5) * 255) + ';' + Math.round(f(3) * 255) + ';' + Math.round(f(1) * 255);","} catch(e) {"," console.error(\"Unable to convert a color: \", e);"," eventsFunctionContext.returnValue = \"0;0;0\";","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"string"},"parameters":[{"description":"Hue 0-360","name":"h","type":"expression"},{"description":"Saturation 0-100","name":"s","type":"expression"},{"description":"Value 0-100","name":"v","type":"expression"}],"objectGroups":[]},{"description":"Converts a RGB string into a HSV string. Example input: \"0;128;255\".","fullName":"RGB to HSV","functionType":"StringExpression","name":"RgbToHsv","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["try {"," const n = eventsFunctionContext.getArgument(\"n\");"," const col = n.split(\";\");",""," let r = parseFloat(col[0]),"," g = parseFloat(col[1]),"," b = parseFloat(col[2]);",""," r = gdjs.evtTools.common.clamp(r, 0, 255);"," g = gdjs.evtTools.common.clamp(g, 0, 255);"," b = gdjs.evtTools.common.clamp(b, 0, 255);",""," r /= 255;"," g /= 255;"," b /= 255;",""," let v = Math.max(r, g, b), "," c = v - Math.min(r, g, b);",""," let h = c && ((v == r) ? (g - b) / c: ((v == g) ? 2 + (b - r) / c: 4 + (r - g) / c)); ",""," eventsFunctionContext.returnValue = Math.round(60 * (h < 0 ? h + 6: h)) + ';' + Math.round((v && c / v) * 100) + ';' + Math.round(v * 100);","} catch (e) {"," console.error(\"Unable to convert a color: \", e);"," eventsFunctionContext.returnValue = \"0;0;0\";","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"string"},"parameters":[{"description":"RGB value","name":"n","type":"color"}],"objectGroups":[]},{"description":"Converts a color name into a RGB string. (Examples: black, gray, white, red, purple, green, yellow, blue) \nFull list of colors: https://www.w3schools.com/colors/colors_names.asp.","fullName":"Color name to RGB","functionType":"StringExpression","name":"NameToRgb","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["let n = eventsFunctionContext.getArgument(\"n\");","","n = n.toLowerCase();","","switch (n) {"," case 'black':"," eventsFunctionContext.returnValue = '0;0;0';"," break;"," case 'silver':"," eventsFunctionContext.returnValue = '192;192;192';"," break;"," case 'gray':"," eventsFunctionContext.returnValue = '128;128;128';"," break;"," case 'white':"," eventsFunctionContext.returnValue = '255;255;255';"," break;"," case 'maroon':"," eventsFunctionContext.returnValue = '128;0;0';"," break;"," case 'red':"," eventsFunctionContext.returnValue = '255;0;0';"," break;"," case 'purple':"," eventsFunctionContext.returnValue = '128;0;128';"," break;"," case 'fuchsia':"," eventsFunctionContext.returnValue = '255;0;255';"," break;"," case 'green':"," eventsFunctionContext.returnValue = '0;128;0';"," break;"," case 'lime':"," eventsFunctionContext.returnValue = '0;255;0';"," break;"," case 'olive':"," eventsFunctionContext.returnValue = '128;128;0';"," break;"," case 'yellow':"," eventsFunctionContext.returnValue = '255;255;0';"," break;"," case 'navy':"," eventsFunctionContext.returnValue = '0;0;128';"," break;"," case 'blue':"," eventsFunctionContext.returnValue = '0;0;255';"," break;"," case 'teal':"," eventsFunctionContext.returnValue = '0;128;128';"," break;"," case 'aqua':"," eventsFunctionContext.returnValue = '0;255;255';"," break;"," case 'orange':"," eventsFunctionContext.returnValue = '255;165;0';"," break;"," case 'aliceblue':"," eventsFunctionContext.returnValue = '240;248;255';"," break;"," case 'antiquewhite':"," eventsFunctionContext.returnValue = '250;235;215';"," break;"," case 'aquamarine':"," eventsFunctionContext.returnValue = '127;255;212';"," break;"," case 'azure':"," eventsFunctionContext.returnValue = '240;255;255';"," break;"," case 'beige':"," eventsFunctionContext.returnValue = '245;245;220';"," break;"," case 'bisque':"," eventsFunctionContext.returnValue = '255;228;196';"," break;"," case 'blanchedalmond':"," eventsFunctionContext.returnValue = '255;235;205';"," break;"," case 'blueviolet':"," eventsFunctionContext.returnValue = '128;43;226';"," break;"," case 'brown':"," eventsFunctionContext.returnValue = '165;42;42';"," break;"," case 'burlywood':"," eventsFunctionContext.returnValue = '222;184;135';"," break;"," case 'cadetblue':"," eventsFunctionContext.returnValue = '95;158;160';"," break;"," case 'chartreuse':"," eventsFunctionContext.returnValue = '127;255;0';"," break;"," case 'chocolate':"," eventsFunctionContext.returnValue = '210;105;30';"," break;"," case 'coral':"," eventsFunctionContext.returnValue = '255;127;80';"," break;"," case 'cornflowerblue':"," eventsFunctionContext.returnValue = '100;149;237';"," break;"," case 'cornsilk':"," eventsFunctionContext.returnValue = '255;248;220';"," break;"," case 'crimson':"," eventsFunctionContext.returnValue = '220;20;60';"," break;"," case 'cyan':"," eventsFunctionContext.returnValue = '220;20;60';"," break;"," case 'darkblue':"," eventsFunctionContext.returnValue = '0;0;139';"," break;"," case 'darkcyan':"," eventsFunctionContext.returnValue = '0;139;139';"," break;"," case 'darkgoldenrod':"," eventsFunctionContext.returnValue = '184;134;11';"," break;"," case 'darkgray':"," case 'darkgrey':"," eventsFunctionContext.returnValue = '169;169;169';"," break;"," case 'darkgreen':"," eventsFunctionContext.returnValue = '0;100;0';"," break;"," case 'darkkhaki':"," eventsFunctionContext.returnValue = '189;183;107';"," break;"," case 'darkmagenta':"," eventsFunctionContext.returnValue = '139;0;139';"," break;"," case 'darkolivegreen':"," eventsFunctionContext.returnValue = '85;107;47';"," break;"," case 'darkorange':"," eventsFunctionContext.returnValue = '255;140;0';"," break;"," case 'darkorchid':"," eventsFunctionContext.returnValue = '153;50;204';"," break;"," case 'darkred':"," eventsFunctionContext.returnValue = '139;0;0';"," break;"," case 'darksalmon':"," eventsFunctionContext.returnValue = '233;150;122';"," break;"," case 'darkseagreen':"," eventsFunctionContext.returnValue = '143;188;143';"," break;"," case 'darkslateblue':"," eventsFunctionContext.returnValue = '72;61;139';"," break;"," case 'darkslategray':"," case 'darkslategrey':"," eventsFunctionContext.returnValue = '47;79;79';"," break;"," case 'darkturquoise':"," eventsFunctionContext.returnValue = '0;206;209';"," break;"," case 'darkviolet':"," eventsFunctionContext.returnValue = '148;0;211';"," break;"," case 'deeppink':"," eventsFunctionContext.returnValue = '255;20;147';"," break;"," case 'deepskyblue':"," eventsFunctionContext.returnValue = '0;191;255';"," break;"," case 'dimgray':"," case 'dimgrey':"," eventsFunctionContext.returnValue = '105;105;105';"," break;"," case 'dodgerblue':"," eventsFunctionContext.returnValue = '30;144;255';"," break;"," case 'firebrick':"," eventsFunctionContext.returnValue = '178;34;34';"," break;"," case 'floralwhite':"," eventsFunctionContext.returnValue = '255;250;240';"," break;"," case 'forestgreen':"," eventsFunctionContext.returnValue = '32;139;34';"," break;"," case 'gainsboro':"," eventsFunctionContext.returnValue = '220;220;220';"," break;"," case 'ghostwhite':"," eventsFunctionContext.returnValue = '248;248;255';"," break;"," case 'gold':"," eventsFunctionContext.returnValue = '255;215;0';"," break;"," case 'goldenrod':"," eventsFunctionContext.returnValue = '218;165;32';"," break;"," case 'greenyellow':"," eventsFunctionContext.returnValue = '173;255;47';"," break;"," case 'grey':"," eventsFunctionContext.returnValue = '128;128;128';"," break;"," case 'honeydew':"," eventsFunctionContext.returnValue = '240;255;240';"," break;"," case 'hotpink':"," eventsFunctionContext.returnValue = '255;105;180';"," break;"," case 'indianred':"," eventsFunctionContext.returnValue = '205;92;92';"," break;"," case 'indigo':"," eventsFunctionContext.returnValue = '75;0;130';"," break;"," case 'ivory':"," eventsFunctionContext.returnValue = '255;255;240';"," break;"," case 'khaki':"," eventsFunctionContext.returnValue = '240;230;140';"," break;"," case 'lavender':"," eventsFunctionContext.returnValue = '230;230;250';"," break;"," case 'lavenderblush':"," eventsFunctionContext.returnValue = '255;240;245';"," break;"," case 'lawngreen':"," eventsFunctionContext.returnValue = '124;252;0';"," break;"," case 'lemonchiffon':"," eventsFunctionContext.returnValue = '255;250;205';"," break;"," case 'lightblue':"," eventsFunctionContext.returnValue = '173;216;230';"," break;"," case 'lightcoral':"," eventsFunctionContext.returnValue = '240;128;128';"," break;"," case 'lightcyan':"," eventsFunctionContext.returnValue = '224;255;255';"," break;"," case 'lightgoldenrodyellow':"," eventsFunctionContext.returnValue = '250;250;210';"," break;"," case 'lightgray':"," case 'lightgrey':"," eventsFunctionContext.returnValue = '211;211;211';"," break;"," case 'lightgreen':"," eventsFunctionContext.returnValue = '144;238;144';"," break;"," case 'lightpink':"," eventsFunctionContext.returnValue = '255;182;193';"," break;"," case 'lightsalmon':"," eventsFunctionContext.returnValue = '255;160;122';"," break;"," case 'lightseagreen':"," eventsFunctionContext.returnValue = '32;178;170';"," break;"," case 'lightskyblue':"," eventsFunctionContext.returnValue = '135;206;250';"," break;"," case 'lightslategray':"," case 'lightslategrey':"," eventsFunctionContext.returnValue = '119;136;153';"," break;"," case 'lightsteelblue':"," eventsFunctionContext.returnValue = '176;196;222';"," break;"," case 'lightyellow':"," eventsFunctionContext.returnValue = '255;255;224';"," break;"," case 'limegreen':"," eventsFunctionContext.returnValue = '50;205;50';"," break;"," case 'linen':"," eventsFunctionContext.returnValue = '250;240;230';"," break;"," case 'magenta':"," eventsFunctionContext.returnValue = '255;0;255';"," break;"," case 'mediumaquamarine':"," eventsFunctionContext.returnValue = '102;205;170';"," break;"," case 'mediumblue':"," eventsFunctionContext.returnValue = '0;0;205';"," break;"," case 'mediumorchid':"," eventsFunctionContext.returnValue = '186;85;211';"," break;"," case 'mediumpurple':"," eventsFunctionContext.returnValue = '147;112;219';"," break;"," case 'mediumseagreen':"," eventsFunctionContext.returnValue = '60;179;113';"," break;"," case 'mediumslateblue':"," eventsFunctionContext.returnValue = '123;104;238';"," break;"," case 'mediumspringgreen':"," eventsFunctionContext.returnValue = '0;250;154';"," break;"," case 'mediumturquoise':"," eventsFunctionContext.returnValue = '72;209;204';"," break;"," case 'mediumvioletred':"," eventsFunctionContext.returnValue = '199;21;133';"," break;"," case 'midnightblue':"," eventsFunctionContext.returnValue = '25;25;112';"," break;"," case 'mintcream':"," eventsFunctionContext.returnValue = '245;255;250';"," break;"," case 'mistyrose':"," eventsFunctionContext.returnValue = '255;228;225';"," break;"," case 'moccasin':"," eventsFunctionContext.returnValue = '255;228;181';"," break;"," case 'navajowhite':"," eventsFunctionContext.returnValue = '255;222;173';"," break;"," case 'oldlace':"," eventsFunctionContext.returnValue = '253;245;230';"," break;"," case 'olivedrab':"," eventsFunctionContext.returnValue = '107;142;35';"," break;"," case 'orangered':"," eventsFunctionContext.returnValue = '255;69;0';"," break;"," case 'orchid':"," eventsFunctionContext.returnValue = '218;112;214';"," break;"," case 'palegoldenrod':"," eventsFunctionContext.returnValue = '238;232;170';"," break;"," case 'palegreen':"," eventsFunctionContext.returnValue = '152;251;152';"," break;"," case 'paleturquoise':"," eventsFunctionContext.returnValue = '175;238;238';"," break;"," case 'palevioletred':"," eventsFunctionContext.returnValue = '219;112;147';"," break;"," case 'papayawhip':"," eventsFunctionContext.returnValue = '255;239;213';"," break;"," case 'peachpuff':"," eventsFunctionContext.returnValue = '255;218;185';"," break;"," case 'peru':"," eventsFunctionContext.returnValue = '205;133;63';"," break;"," case 'pink':"," eventsFunctionContext.returnValue = '255;192;203';"," break;"," case 'plum':"," eventsFunctionContext.returnValue = '221;160;221';"," break;"," case 'powderblue':"," eventsFunctionContext.returnValue = '176;224;230';"," break;"," case 'rosybrown':"," eventsFunctionContext.returnValue = '188;143;143';"," break;"," case 'royalblue':"," eventsFunctionContext.returnValue = '65;105;225';"," break;"," case 'saddlebrown':"," eventsFunctionContext.returnValue = '139;69;19';"," break;"," case 'salmon':"," eventsFunctionContext.returnValue = '150;128;114';"," break;"," case 'sandybrown':"," eventsFunctionContext.returnValue = '244;164;96';"," break;"," case 'seagreen':"," eventsFunctionContext.returnValue = '46;139;87';"," break;"," case 'seashell':"," eventsFunctionContext.returnValue = '255;245;238';"," break;"," case 'sienna':"," eventsFunctionContext.returnValue = '160;82;45';"," break;"," case 'skyblue':"," eventsFunctionContext.returnValue = '135;206;235';"," break;"," case 'slateblue':"," eventsFunctionContext.returnValue = '106;90;205';"," break;"," case 'slategray':"," case 'slategrey':"," eventsFunctionContext.returnValue = '112;128;144';"," break;"," case 'snow':"," eventsFunctionContext.returnValue = '255;250;250';"," break;"," case 'springgreen':"," eventsFunctionContext.returnValue = '0;255;127';"," break;"," case 'steelblue':"," eventsFunctionContext.returnValue = '70;130;180';"," break;"," case 'tan':"," eventsFunctionContext.returnValue = '210;180;140';"," break;"," case 'thistle':"," eventsFunctionContext.returnValue = '216;191;216';"," break;"," case 'tomato':"," eventsFunctionContext.returnValue = '255;99;71';"," break;"," case 'turquoise':"," eventsFunctionContext.returnValue = '64;224;208';"," break;"," case 'violet':"," eventsFunctionContext.returnValue = '238;130;238';"," break;"," case 'wheat':"," eventsFunctionContext.returnValue = '245;222;179';"," break;"," case 'whitesmoke':"," eventsFunctionContext.returnValue = '245;245;245';"," break;"," case 'yellowgreen':"," eventsFunctionContext.returnValue = '154;205;50';"," break;"," case 'rebeccapurple':"," eventsFunctionContext.returnValue = '102;51;153';"," break;"," default:"," eventsFunctionContext.returnValue = '0;0;0';"," console.error(\"Not a vaild color name\"); ","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"string"},"parameters":[{"description":"Name of a color","name":"n","type":"color"}],"objectGroups":[]},{"description":"Converts HSL color values into a RGB string. Valid input ranges: H(0 to 360), S(0 to 100), L(0 to 100).","fullName":"HSL to RGB","functionType":"StringExpression","name":"HslToRgb","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["try {"," let h = parseFloat(eventsFunctionContext.getArgument(\"Hue\")),"," s = parseFloat(eventsFunctionContext.getArgument(\"Saturation\")),"," l = parseFloat(eventsFunctionContext.getArgument(\"Lightness\"));",""," s = gdjs.evtTools.common.clamp(s, 0, 100);"," l = gdjs.evtTools.common.clamp(l, 0, 100);",""," h %= 360;"," if (h < 0) {"," h += 360;"," }",""," s /= 100;"," l /= 100;",""," let a = s * Math.min(l, 1 - l);"," let f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k , 1), - 1); ",""," eventsFunctionContext.returnValue = Math.round(f(0) * 255) + ';' + Math.round(f(8) * 255) + ';' + Math.round(f(4) * 255);","} catch(e) {"," console.error(\"Unable to convert a color: \", e);"," eventsFunctionContext.returnValue = \"0;0;0\";","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"string"},"parameters":[{"description":"Hue 0-360","name":"Hue","type":"expression"},{"description":"Saturation 0-100","name":"Saturation","type":"expression"},{"description":"Lightness 0-100","name":"Lightness","type":"expression"}],"objectGroups":[]},{"description":"Converts a color hue (range: 0 to 360) into an RGB color string with 100% saturation and 50% lightness.","fullName":"Hue to RGB","functionType":"StringExpression","name":"HueToRgb","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":["try {"," let h = parseFloat(eventsFunctionContext.getArgument(\"Hue\")),"," s = 100,"," l = 50;",""," s /= 100;"," l /= 100;",""," h %= 360;"," if (h < 0) {"," h += 360;"," }",""," let a = s * Math.min(l, 1 - l);"," let f = (n, k = (n + h / 30) % 12) => l - a * Math.max(Math.min(k - 3, 9 - k , 1), - 1); ",""," eventsFunctionContext.returnValue = Math.round(f(0) * 255) + ';' + Math.round(f(8) * 255) + ';' + Math.round(f(4) * 255);","} catch(e) {"," console.error(\"Unable to convert a color: \", e);"," eventsFunctionContext.returnValue = \"0;0;0\";","}"],"parameterObjects":"","useStrict":true,"eventsSheetExpanded":true}],"expressionType":{"type":"string"},"parameters":[{"description":"Hue 0-360","name":"Hue","type":"expression"}],"objectGroups":[]}],"eventsBasedBehaviors":[],"eventsBasedObjects":[]},{"author":"VegeTato, arthuro555","category":"General","extensionNamespace":"","fullName":"Repeat every X seconds","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXJlcGVhdCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNywxN0g3VjE0TDMsMThMNywyMlYxOUgxOVYxM0gxN003LDdIMTdWMTBMMjEsNkwxNywyVjVINVYxMUg3VjdaIiAvPjwvc3ZnPg==","name":"RepeatEveryXSeconds","previewIconUrl":"https://resources.gdevelop-app.com/assets/Icons/repeat.svg","shortDescription":"This allows to trigger an event every X seconds.","version":"0.1.0","description":"Convenience conditions, actions and behaviors for timers to trigger a condition every X seconds.","origin":{"identifier":"RepeatEveryXSeconds","name":"gdevelop-extension-store"},"tags":["repeat","timer","time","convenience"],"authorIds":["ZgrsWuRTAkXgeuPV9bo0zuEcA2w1","IRIhkkTTl2UHhfjrLTTH5GYwkYu1"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"Triggers every X seconds.","fullName":"Repeat every X seconds","functionType":"Condition","name":"Repeat","sentence":"Repeat timer _PARAM1_ every _PARAM2_ seconds","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"ResetTimer"},"parameters":["player","GetArgumentAsString(\"timerName\")"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Timer"},"parameters":["player","GetArgumentAsNumber(\"time\")","GetArgumentAsString(\"timerName\")"]}],"actions":[{"type":{"value":"ResetTimer"},"parameters":["player","GetArgumentAsString(\"timerName\")"]},{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"The name of the timer to loop","name":"timerName","type":"string"},{"description":"The time in seconds between each trigger","name":"time","type":"expression"}],"objectGroups":[]},{"description":"Triggers every X seconds X amount of times.","fullName":"Repeat every X seconds in X number","functionType":"Condition","name":"RepeatXTimes","sentence":"Repeat timer _PARAM1_ every _PARAM2_ seconds _PARAM3_ times","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"BuiltinCommonInstructions::Once"},"parameters":[]}],"actions":[{"type":{"value":"ResetTimer"},"parameters":["player","GetArgumentAsString(\"timerName\")"]},{"type":{"value":"ModVarScene"},"parameters":["__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]","=","0"]}]},{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"Timer"},"parameters":["player","GetArgumentAsNumber(\"time\")","GetArgumentAsString(\"timerName\")"]},{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"Egal"},"parameters":["GetArgumentAsNumber(\"limit\")","=","-1"]},{"type":{"value":"VarScene"},"parameters":["__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]","<","GetArgumentAsNumber(\"limit\")"]}]}],"actions":[{"type":{"value":"ResetTimer"},"parameters":["player","GetArgumentAsString(\"timerName\")"]},{"type":{"value":"ModVarScene"},"parameters":["__RepeatEveryXSeconds_.Counter[GetArgumentAsString(\"timerName\")]","+","1"]},{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"The name of the timer to loop","name":"timerName","type":"string"},{"description":"The time in seconds between each trigger","name":"time","type":"expression"},{"description":"The limit of loops","longDescription":"The condition will trigger at most this amount of times. Make it -1 for looping forever.","name":"limit","type":"expression"}],"objectGroups":[]}],"eventsBasedBehaviors":[{"description":"Allows to repeat an object timer every X seconds.","fullName":"Repeat every X seconds","name":"RepeatTimer","objectType":"","eventsFunctions":[{"fullName":"","functionType":"Action","name":"onCreated","sentence":"","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"ResetObjectTimer"},"parameters":["Object","Object.Behavior::PropertyTimerName()"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"RepeatEveryXSeconds::RepeatTimer","type":"behavior"}],"objectGroups":[]},{"description":"Triggers every X seconds, where X is defined in the behavior properties.","fullName":"Repeat every X seconds","functionType":"Condition","name":"Repeat","sentence":"Recurring timer _PARAM1_ of _PARAM0_ has triggered","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[{"type":{"value":"ObjectTimer"},"parameters":["Object","Object.Behavior::PropertyTimerName()","Object.Behavior::PropertyTimerLength()"]},{"type":{"value":"BuiltinCommonInstructions::Or"},"parameters":[],"subInstructions":[{"type":{"value":"RepeatEveryXSeconds::RepeatTimer::PropertyLimit"},"parameters":["Object","Behavior","=","-1"]},{"type":{"value":"RepeatEveryXSeconds::RepeatTimer::PropertyCounter"},"parameters":["Object","Behavior","<","Object.Behavior::PropertyLimit()"]}]}],"actions":[{"type":{"value":"ResetObjectTimer"},"parameters":["Object","Object.Behavior::PropertyTimerName()"]},{"type":{"value":"RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter"},"parameters":["Object","Behavior","+","1"]},{"type":{"value":"SetReturnBoolean"},"parameters":["True"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"RepeatEveryXSeconds::RepeatTimer","type":"behavior"}],"objectGroups":[]},{"description":"Pauses a recurring timer.","fullName":"Pause a recurring timer","functionType":"Action","name":"Pause","sentence":"Pause recurring timer _PARAM1_ of _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"PauseObjectTimer"},"parameters":["Object","Object.Behavior::PropertyTimerName()"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"RepeatEveryXSeconds::RepeatTimer","type":"behavior"}],"objectGroups":[]},{"description":"Resumes a paused recurring timer.","fullName":"Resume a recurring timer","functionType":"Action","name":"Resume","sentence":"Resume recurring timer _PARAM1_ of _PARAM0_","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"UnPauseObjectTimer"},"parameters":["Object","Object.Behavior::PropertyTimerName()"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"RepeatEveryXSeconds::RepeatTimer","type":"behavior"}],"objectGroups":[]},{"description":"Allows to trigger the recurring timer X times again.","fullName":"Reset the limit","functionType":"Action","name":"ResetLimit","sentence":"Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter"},"parameters":["Object","Behavior","=","0"]}]}],"parameters":[{"description":"Object","name":"Object","type":"object"},{"description":"Behavior","name":"Behavior","supplementaryInformation":"RepeatEveryXSeconds::RepeatTimer","type":"behavior"}],"objectGroups":[]}],"propertyDescriptors":[{"value":"MyTimer","type":"String","label":"The name of the timer to repeat","description":"","group":"","extraInformation":[],"name":"TimerName"},{"value":"1","type":"Number","label":"The time between each trigger (in seconds)","description":"","group":"","extraInformation":[],"name":"TimerLength"},{"value":"-1","type":"Number","label":"How many times should the timer trigger? -1 for forever.","description":"","group":"","extraInformation":[],"name":"Limit"},{"value":"0","type":"Number","label":"An internal counter","description":"","group":"","extraInformation":[],"hidden":true,"name":"Counter"}],"sharedPropertyDescriptors":[]}],"eventsBasedObjects":[]},{"author":"UlisesFreitas","category":"Advanced","extensionNamespace":"","fullName":"Current game version","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLW51bWVyaWMiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNNCwxN1Y5SDJWN0g2VjE3SDRNMjIsMTVDMjIsMTYuMTEgMjEuMSwxNyAyMCwxN0gxNlYxNUgyMFYxM0gxOFYxMUgyMFY5SDE2VjdIMjBBMiwyIDAgMCwxIDIyLDlWMTAuNUExLjUsMS41IDAgMCwxIDIwLjUsMTJBMS41LDEuNSAwIDAsMSAyMiwxMy41VjE1TTE0LDE1VjE3SDhWMTNDOCwxMS44OSA4LjksMTEgMTAsMTFIMTJWOUg4VjdIMTJBMiwyIDAgMCwxIDE0LDlWMTFDMTQsMTIuMTEgMTMuMSwxMyAxMiwxM0gxMFYxNUgxNFoiIC8+PC9zdmc+","name":"CurrentGameVersion","previewIconUrl":"https://resources.gdevelop-app.com/assets/Icons/numeric.svg","shortDescription":"Get the current game version from GDevelop game properties.","version":"1.0.0","description":"Add an string expression that returns the current game version from game properties tab.","origin":{"identifier":"CurrentGameVersion","name":"gdevelop-extension-store"},"tags":["version"],"authorIds":["ZShmW1xkW7WWl9AkB78VITJMiTw1"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"Return the current game version.","fullName":"Return current game version","functionType":"StringExpression","name":"ReturnCurrentGameVersion","sentence":"","events":[{"type":"BuiltinCommonInstructions::JsCode","inlineCode":"eventsFunctionContext.returnValue = runtimeScene.getGame().getGameData().properties.version;","parameterObjects":"","useStrict":true,"eventsSheetExpanded":false}],"expressionType":{"type":"string"},"parameters":[],"objectGroups":[]}],"eventsBasedBehaviors":[],"eventsBasedObjects":[]},{"author":"grymmjack","category":"User interface","extensionNamespace":"","fullName":"Align object on the screen","helpPath":"","iconUrl":"data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWZvcm1hdC12ZXJ0aWNhbC1hbGlnbi1jZW50ZXIiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNOCwxOUgxMVYyM0gxM1YxOUgxNkwxMiwxNUw4LDE5TTE2LDVIMTNWMUgxMVY1SDhMMTIsOUwxNiw1TTQsMTFWMTNIMjBWMTFINFoiIC8+PC9zdmc+","name":"AlignObject","previewIconUrl":"https://resources.gdevelop-app.com/assets/Icons/format-vertical-align-center.svg","shortDescription":"Align objects on the scene relatively to the window (or screen size).","version":"1.0.0","description":["Align objects on the scene relatively to the window (or screen size).","","**Be sure to put your object on a layer for which the camera position was not moved.**","","Actions provided are:","","* ToSceneCentered: horizontally and vertically centered in scene","* ToSceneTop: vertically to the top in scene","* ToSceneMiddle: vertically to the middle in scene","* ToSceneBottom: vertically to the bottom in scene","* ToSceneLeft: horizontally to the left in scene","* ToSceneRight: horizontally to the right in scene","* ToSceneCenter: horizontally to the center in scene","* ToScreenCentered: horizontally and vertically centered in screen","* ToScreenTop: vertically to the top in screen","* ToScreenMiddle: vertically to the middle in screen","* ToScreenBottom: vertically to the bottom in screen","* ToScreenLeft: horizontally to the left in screen","* ToScreenRight: horizontally to the right in screen","* ToScreenCenter: horizontally to the center in screen"],"origin":{"identifier":"AlignObject","name":"gdevelop-extension-store"},"tags":["align","alignment","center"],"authorIds":["I0kdjvsICFML0APq45CZjZ6PyEQ2"],"dependencies":[],"globalVariables":[],"sceneVariables":[],"eventsFunctions":[{"description":"Align object to horizontal center in screen.","fullName":"Align object to horizontal center in screen","functionType":"Action","name":"ToScreenCenter","sentence":"Align _PARAM1_ horizontally center on the screen","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreX"},"parameters":["ObjectToAlign","=","ScreenWidth()/2 - ObjectToAlign.Width()/2"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Align object to horizontal center in scene.","fullName":"Align object to horizontal center in scene","functionType":"Action","name":"ToSceneCenter","sentence":"Align _PARAM1_ horizontally center in the scene","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreX"},"parameters":["ObjectToAlign","=","SceneWindowWidth()/2 - ObjectToAlign.Width()/2"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Align object to horizontal right in screen.","fullName":"Align object to horizontal right in screen","functionType":"Action","name":"ToScreenRight","sentence":"Align _PARAM1_ horizontally right in the screen","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreX"},"parameters":["ObjectToAlign","=","ScreenWidth() - ObjectToAlign.Width()"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Align object to horizontal right in scene.","fullName":"Align object to horizontal right in scene","functionType":"Action","name":"ToSceneRight","sentence":"Align _PARAM1_ horizontally right in the scene","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreX"},"parameters":["ObjectToAlign","=","SceneWindowWidth() - ObjectToAlign.Width()"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Align object to horizontal left in screen.","fullName":"Align object to horizontal left in screen","functionType":"Action","name":"ToScreenLeft","sentence":"Align _PARAM1_ horizontally left in screen","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreX"},"parameters":["ObjectToAlign","=","0"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Align object to horizontal left in scene.","fullName":"Align object to horizontal left in scene","functionType":"Action","name":"ToSceneLeft","sentence":"Align _PARAM1_ horizontally left in scene","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreX"},"parameters":["ObjectToAlign","=","0"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Center object in screen horizontally and vertically.","fullName":"Center object in screen horizontally and vertically","functionType":"Action","name":"ToScreenCentered","sentence":"Center _PARAM1_ in screen horizontally and vertically","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreXY"},"parameters":["ObjectToCenter","=","ScreenWidth()/2 - ObjectToCenter.Width()/2","=","ScreenHeight()/2 - ObjectToCenter.Height()/2"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToCenter","type":"objectList"}],"objectGroups":[]},{"description":"Center object in scene horizontally and vertically.","fullName":"Center object in scene horizontally and vertically","functionType":"Action","name":"ToSceneCentered","sentence":"Center _PARAM1_ in scene horizontally and vertically","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreXY"},"parameters":["ObjectToCenter","=","SceneWindowWidth()/2 - ObjectToCenter.Width()/2","=","SceneWindowHeight()/2 - ObjectToCenter.Height()/2"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToCenter","type":"objectList"}],"objectGroups":[]},{"description":"Align object to vertical bottom of screen.","fullName":"Align object to bottom of screen","functionType":"Action","name":"ToScreenBottom","sentence":"Align _PARAM1_ to vertical bottom of screen","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreY"},"parameters":["ObjectToAlign","=","ScreenHeight() - ObjectToAlign.Height()"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Align object to vertical bottom of scene.","fullName":"Align object to bottom of scene","functionType":"Action","name":"ToSceneBottom","sentence":"Align _PARAM1_ to vertical bottom of scene","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreY"},"parameters":["ObjectToAlign","=","SceneWindowHeight() - ObjectToAlign.Height()"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Align object to vertical middle of screen.","fullName":"Align object to vertical middle of screen","functionType":"Action","name":"ToScreenMiddle","sentence":"Align _PARAM1_ to vertical middle of screen","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreY"},"parameters":["ObjectToAlign","=","ScreenHeight()/2 - ObjectToAlign.Height()/2"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Align object to vertical middle of scene.","fullName":"Align object to vertical middle of scene","functionType":"Action","name":"ToSceneMiddle","sentence":"Align _PARAM1_ to vertical middle of scene","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreY"},"parameters":["ObjectToAlign","=","SceneWindowHeight()/2 - ObjectToAlign.Height()/2"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Align object to vertical top of screen.","fullName":"Align object to vertical top of screen","functionType":"Action","name":"ToScreenTop","sentence":"Align _PARAM1_ to top of screen","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreY"},"parameters":["ObjectToAlign","=","0"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]},{"description":"Align object to vertical top of scene.","fullName":"Align object to vertical top of scene","functionType":"Action","name":"ToSceneTop","sentence":"Align _PARAM1_ to top of scene","events":[{"type":"BuiltinCommonInstructions::Standard","conditions":[],"actions":[{"type":{"value":"MettreY"},"parameters":["ObjectToAlign","=","0"]}]}],"parameters":[{"description":"Object to align","name":"ObjectToAlign","type":"objectList"}],"objectGroups":[]}],"eventsBasedBehaviors":[],"eventsBasedObjects":[]}],"externalLayouts":[{"associatedLayout":"game","name":"testArena","instances":[{"angle":0.0,"customSize":true,"depth":1.0,"height":1847.0,"layer":"","name":"ground","persistentUuid":"415daef6-cfab-43f6-bf51-0afd49a1736f","width":3133.0,"x":-663.0,"y":-564.0,"z":-5.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":10.0,"height":100.0,"layer":"","name":"platform","persistentUuid":"8ecd19b2-ebe7-4f13-8d80-377f05a45830","width":100.0,"x":1145.0,"y":514.0,"z":10.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"8e71fdc8-1474-49af-bbcd-cd3ed50e2fae","width":0.0,"x":1371.0,"y":423.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"af25a734-5545-427c-85ae-efda9960301b","width":0.0,"x":691.0,"y":717.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"0d7f5c19-e574-4a08-a88e-c4d5f15f71fb","width":0.0,"x":1654.0,"y":1025.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"25a7abb3-6ed4-4476-8cf5-ee85a67509ae","width":0.0,"x":65.0,"y":-152.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"bc5affec-24a4-4e05-9cbd-b03421a2ed6d","width":0.0,"x":-237.0,"y":1015.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"beachTable","persistentUuid":"0d72f714-e988-4a72-b719-2da67dc324f5","width":0.0,"x":1705.0,"y":683.0,"z":50.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"beachTable","persistentUuid":"11bb3d0d-4858-45b2-8fa5-9d41fa8aa543","width":0.0,"x":100.0,"y":512.0,"z":50.0,"zOrder":9,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"beachTable","persistentUuid":"f163561f-3e5c-4b0a-85d2-12691a811b3f","width":0.0,"x":1473.0,"y":-16.0,"z":50.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"beachTable","persistentUuid":"2396e71c-b108-4a18-a5e4-6bf44438e742","width":0.0,"x":356.0,"y":1196.0,"z":50.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":5.0,"height":814.0,"layer":"","name":"curvedPath","persistentUuid":"ecf91bf4-02cc-4886-8da2-e660fb3a32f1","width":814.0,"x":1091.0,"y":577.0,"zOrder":12,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":89.0,"customSize":true,"depth":5.0,"height":814.0,"layer":"","name":"curvedPath","persistentUuid":"4868a212-cc62-4697-b6da-dece9e11ec17","width":814.0,"x":1091.0,"y":-153.0,"zOrder":12,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":270.0,"customSize":true,"depth":5.0,"height":814.0,"layer":"","name":"curvedPath","persistentUuid":"d99c63f1-fcaf-4f62-8a4f-3ae51c51c045","width":814.0,"x":1865.0,"y":577.0,"zOrder":12,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":180.0,"customSize":true,"depth":5.0,"height":814.0,"layer":"","name":"curvedPath","persistentUuid":"07d21982-0742-4409-a4c6-167c0aaaa9e3","width":814.0,"x":1872.0,"y":-153.0,"zOrder":12,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"grayClimbPole","persistentUuid":"545673c9-6127-4e82-8961-a1ce333ca458","width":0.0,"x":422.0,"y":529.0,"zOrder":13,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":712.0,"height":53.0,"keepRatio":true,"layer":"","name":"grayClimbPole","persistentUuid":"c4e4bdbb-3630-451b-bff8-68f8aa88b69a","width":53.0,"x":315.0,"y":703.0,"zOrder":14,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":144.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"099080bc-e85e-4f9d-a55a-6b78d39a9ae2","rotationX":90.0,"width":0.0,"x":-353.0,"y":106.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":192.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"8fef3cab-6a6d-4fa9-bf69-2e0e60538068","rotationX":90.0,"width":0.0,"x":-263.0,"y":614.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":25.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"764a6bb1-c399-46b8-9560-6107d1b1813b","rotationX":90.0,"width":0.0,"x":-198.0,"y":458.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"editionSettings":{"grid":false,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":false,"zoomFactor":0.19879047210043755,"windowMask":false}},{"associatedLayout":"game","name":"urbanPark","instances":[{"angle":325.0,"customSize":true,"depth":629.0,"height":1258.0,"keepRatio":true,"layer":"","locked":true,"name":"parkDome","persistentUuid":"d9420bc0-54c3-4e8f-9bfd-0240b7c618d3","sealed":true,"width":1258.0,"x":3486.0,"y":2306.0,"z":312.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":4161.0,"layer":"","locked":true,"name":"ground","persistentUuid":"e351bb18-d8d7-4ee2-af21-e27081673872","sealed":true,"width":11597.0,"x":-5621.0,"y":-205.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":225.46017041210963,"height":1258.0,"keepRatio":true,"layer":"","locked":true,"name":"parkDomeRoof","persistentUuid":"300e167b-71c5-40be-a76d-20e32c37ef4d","sealed":true,"width":1258.0,"x":3486.0,"y":2306.0,"z":460.0,"zOrder":2,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":777.0,"height":111.0,"layer":"","name":"grayClimbPole","persistentUuid":"ce8a2dd2-bce7-4f74-9601-e5eddd92b4ef","width":111.0,"x":3635.0,"y":2320.0,"zOrder":3,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"77ba7a56-2c9d-443a-937b-f159f3de702e","width":30.000000000000005,"x":4093.0,"y":2131.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":90.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"d02e1620-294c-48d5-a90a-138508af4391","width":30.000000000000005,"x":3463.0,"y":2749.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":90.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"dc6dd622-fef2-486a-a05f-4de661562cd8","width":30.000000000000005,"x":3466.0,"y":1520.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"4feda569-327f-495c-9184-b719e3dac06c","width":30.000000000000005,"x":2848.0,"y":2120.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":118.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"35644e1d-206f-4859-8aed-a3aa38511151","width":30.000000000000005,"x":3801.0,"y":1595.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":149.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"04d6b1c4-b2bb-4956-a94f-5bee0662ce5e","width":30.000000000000005,"x":4008.0,"y":1801.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":206.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"e13c334a-8ffe-4461-8002-c7133589bd0b","width":30.000000000000005,"x":4028.0,"y":2456.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":247.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"5263a7fc-0830-42b8-a765-c50ce16f77d4","width":30.000000000000005,"x":3814.0,"y":2667.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":120.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"994da66c-e0ad-4182-949e-b0fc05ac8375","width":30.000000000000005,"x":3141.0,"y":2665.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":157.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"32ec58c9-777e-47f6-89cc-b5ed2cd94cd1","width":30.000000000000005,"x":2918.0,"y":2417.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":209.0,"customSize":true,"depth":1000.0,"height":348.00000000000008,"layer":"collisions","name":"collision","persistentUuid":"14bd614e-04b7-40df-9b6a-29696b27d6e8","width":30.000000000000005,"x":2890.0,"y":1862.0,"zOrder":4,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":20.0,"height":422.0,"layer":"collisions","name":"collision","persistentUuid":"af92ecab-0574-4fca-88fc-3459ccbabdfe","width":160.0,"x":3671.0,"y":2096.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":20.0,"height":422.0,"layer":"collisions","name":"collision","persistentUuid":"20adbedc-49f6-4ff0-9e3f-0e47348882ca","width":160.0,"x":3125.0,"y":2078.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":313.0,"customSize":true,"depth":20.0,"height":422.0,"layer":"collisions","name":"collision","persistentUuid":"8aa744e3-1b40-45cc-9ad9-6e1c8ae693bd","width":160.0,"x":3234.0,"y":2341.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":313.0,"customSize":true,"depth":20.0,"height":422.0,"layer":"collisions","name":"collision","persistentUuid":"207a3825-f3e8-4862-8a01-5e580a174c85","width":160.0,"x":3561.0,"y":1823.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":230.0,"customSize":true,"depth":20.0,"height":422.0,"layer":"collisions","name":"collision","persistentUuid":"5240d0fa-a0ea-4cba-93db-1e7d290c9dfc","width":160.0,"x":3277.0,"y":1791.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":230.0,"customSize":true,"depth":20.0,"height":422.0,"layer":"collisions","name":"collision","persistentUuid":"2a273c6f-9f7b-4cf0-8392-304a996f6b46","width":160.0,"x":3563.0,"y":2352.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":27.0,"height":579.0,"layer":"collisions","name":"collision","persistentUuid":"17d6b587-0557-4942-a919-2d9de0128b64","width":220.0,"x":3729.0,"y":2083.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":230.0,"customSize":true,"depth":27.0,"height":579.0,"layer":"collisions","name":"collision","persistentUuid":"7598841d-0bcd-4387-9a2a-95703833cd0d","width":220.0,"x":3581.0,"y":2435.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":313.0,"customSize":true,"depth":27.0,"height":579.0,"layer":"collisions","name":"collision","persistentUuid":"06351bdb-ae9c-437f-8cff-28044ed38a85","width":220.0,"x":3129.0,"y":2420.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":27.0,"height":579.0,"layer":"collisions","name":"collision","persistentUuid":"c83c4d15-070e-40a0-ab69-73f63c01bb11","width":220.0,"x":2979.0,"y":2059.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":230.0,"customSize":true,"depth":27.0,"height":579.0,"layer":"collisions","name":"collision","persistentUuid":"5e8fe8bc-7965-4cf8-af84-6fa904a11c1c","width":220.0,"x":3188.0,"y":1665.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":313.0,"customSize":true,"depth":27.0,"height":579.0,"layer":"collisions","name":"collision","persistentUuid":"8b0b540a-c7d7-4210-a161-7174b83d4c1c","width":220.0,"x":3578.0,"y":1709.0,"z":670.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":230.0,"customSize":true,"depth":35.0,"height":736.0,"layer":"collisions","name":"collision","persistentUuid":"2f324e10-04f3-43c5-9928-75919460f618","width":280.0,"x":3589.0,"y":2388.0,"z":600.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":313.0,"customSize":true,"depth":35.0,"height":736.0,"layer":"collisions","name":"collision","persistentUuid":"94d3eb4d-018c-4f7b-bae4-302395d91c48","width":280.0,"x":3015.0,"y":2369.0,"z":600.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":35.0,"height":736.0,"layer":"collisions","name":"collision","persistentUuid":"74b2bb0c-e084-482e-92c6-3ca1aba45635","width":280.0,"x":3777.0,"y":1940.0,"z":600.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":313.0,"customSize":true,"depth":35.0,"height":736.0,"layer":"collisions","name":"collision","persistentUuid":"a7332671-fb4c-4cd2-a8a9-f2e36c70a1a0","width":280.0,"x":3585.0,"y":1465.0,"z":600.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":230.0,"customSize":true,"depth":35.0,"height":736.0,"layer":"collisions","name":"collision","persistentUuid":"2ff774bb-88dc-4d28-b535-5bcf9f6137e3","width":280.0,"x":3089.0,"y":1409.0,"z":600.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":35.0,"height":736.0,"layer":"collisions","name":"collision","persistentUuid":"175cd2d3-3f40-4455-ab49-d07c396c4cbb","width":280.0,"x":2824.0,"y":1910.0,"z":600.0,"zOrder":5,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":-90.0,"customSize":true,"depth":32.0,"height":4887.0,"layer":"","locked":true,"name":"curvedPath","persistentUuid":"577132b8-cff1-46f3-970d-1738e98fd160","sealed":true,"width":4887.0,"x":2608.0,"y":-44.0,"z":5.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":8006.0,"layer":"","name":"path","persistentUuid":"f77fb64f-9e66-4df2-b7df-92cd71b3047d","width":487.0,"x":-211.0,"y":-2774.0,"z":5.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"56a7e463-10c5-4bc4-8b75-497d67847966","width":0.0,"x":-532.0,"y":695.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"ca95d061-b044-4271-bae7-f3025a884f38","width":0.0,"x":720.0,"y":733.0,"zOrder":9,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"circularBox","persistentUuid":"0e341581-7bc2-4e84-abee-b4be5080bc8d","width":0.0,"x":-982.0,"y":747.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"circularBox","persistentUuid":"81283946-3d0e-4afd-8d76-1aca6809810b","width":0.0,"x":-1440.0,"y":747.0,"zOrder":10,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"ee0fdd4d-c33b-4e2b-953a-7e593a94e48f","width":0.0,"x":-1989.0,"y":696.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":32.0,"height":4887.0,"layer":"","locked":true,"name":"curvedPath","persistentUuid":"a056bde9-fc27-4441-aade-ccac25f9a6a8","sealed":true,"width":4887.0,"x":-2603.0,"y":-44.0,"z":5.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":302.0,"customSize":true,"depth":264.901,"height":500.0,"layer":"","name":"bush","persistentUuid":"bdabd63e-8127-4d42-86a4-b0162ac9c94b","width":99.95289112138356,"x":-2162.0,"y":853.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":302.0,"customSize":true,"depth":264.901,"height":500.0,"layer":"","name":"bush","persistentUuid":"7ec872f4-20be-4048-89d1-89f317e1f23f","width":99.95289112138356,"x":-2751.0,"y":480.0,"zOrder":11,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"bf82a91d-68cd-4504-87c1-068df583b03d","width":0.0,"x":-2549.0,"y":342.0,"zOrder":8,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":90.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"Streetlight","persistentUuid":"b2f67e06-3492-4f17-ab1a-9b70121ec6be","width":0.0,"x":-489.0,"y":1207.0,"zOrder":12,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"0d564f2e-a2fa-48bc-8bbf-82a325660259","width":0.0,"x":4076.0,"y":1540.0,"zOrder":13,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"b61a5ed7-6fa6-45a5-8a9e-e99189164be1","width":0.0,"x":4488.0,"y":605.0,"zOrder":14,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"tree","persistentUuid":"9c447d17-9d37-44c4-bba1-1e8f1d0499a9","width":0.0,"x":2375.0,"y":157.0,"zOrder":15,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":487.0,"layer":"","name":"path","persistentUuid":"8877fd7c-4eb5-4b0f-bbc7-33ff5c124389","width":9706.0,"x":-4821.0,"y":-2743.0,"z":5.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":false,"height":0.0,"keepRatio":true,"layer":"","name":"parkBench","persistentUuid":"2b07d862-2b70-4316-ba4e-f750b85eebc6","width":0.0,"x":1534.0,"y":506.0,"zOrder":16,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":105.0,"height":926.0,"layer":"","name":"parkCenter","persistentUuid":"b2e569c4-1506-4d91-90b0-05f54c6c7688","width":926.0,"x":48.0,"y":-2509.0,"zOrder":17,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":90.0,"customSize":true,"depth":32.0,"height":4887.0,"layer":"","locked":true,"name":"curvedPath","persistentUuid":"1056fd46-921f-4c44-9efd-246a70a44fee","sealed":true,"width":4887.0,"x":-2603.0,"y":-5147.0,"z":5.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":180.0,"customSize":true,"depth":32.0,"height":4887.0,"layer":"","locked":true,"name":"curvedPath","persistentUuid":"e0663b34-141b-4024-8b9e-b947f2aa39a1","sealed":true,"width":4887.0,"x":2608.0,"y":-5147.0,"z":5.0,"zOrder":6,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":832.0,"layer":"","name":"path","persistentUuid":"17129d93-1d1b-4df3-ace5-9998ecd72c84","width":487.0,"x":-242.0,"y":-7391.0,"z":5.0,"zOrder":7,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":4127.0,"layer":"","locked":true,"name":"ground","persistentUuid":"a5343a91-63fa-4880-9255-a27d1db729ee","sealed":true,"width":11597.0,"x":-5621.0,"y":-9282.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":9786.0,"layer":"","locked":true,"name":"ground","persistentUuid":"efaa8dce-f0bd-4873-8a99-4dd074931a04","sealed":true,"width":2527.0,"x":-5621.0,"y":-8379.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":1.0,"height":9786.0,"layer":"","locked":true,"name":"ground","persistentUuid":"99c56232-470f-45b0-b699-41909d7896f0","sealed":true,"width":2870.0,"x":3100.0,"y":-7683.0,"zOrder":1,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":5.0,"height":5217.0,"layer":"","locked":true,"name":"dirt","persistentUuid":"b2decd5b-fcb8-4054-8e5d-e348b837188f","sealed":true,"width":6326.0,"x":-3184.0,"y":-5285.0,"z":-100.0,"zOrder":18,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":99.0,"height":5074.0,"layer":"","locked":true,"name":"dirt","persistentUuid":"dfaf94e8-4090-49bf-aaaa-51fd5cdbe442","sealed":true,"width":100.0,"x":3055.0,"y":-5186.0,"z":-100.0,"zOrder":19,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":99.0,"height":5074.0,"layer":"","locked":true,"name":"dirt","persistentUuid":"3f521d8b-198d-4e8c-a537-cd29877bab5f","sealed":true,"width":100.0,"x":-3127.0,"y":-5223.0,"z":-100.0,"zOrder":19,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":99.0,"height":170.0,"layer":"","locked":true,"name":"dirt","persistentUuid":"dc9f874d-dd79-4925-ab54-cec92637efb0","sealed":true,"width":6277.0,"x":-3117.0,"y":-309.0,"z":-100.0,"zOrder":19,"numberProperties":[],"stringProperties":[],"initialVariables":[]},{"angle":0.0,"customSize":true,"depth":99.0,"height":170.0,"layer":"","locked":true,"name":"dirt","persistentUuid":"66541ebf-12d7-4855-9cdc-b4274cfad7d4","sealed":true,"width":6277.0,"x":-3170.0,"y":-5234.0,"z":-100.0,"zOrder":19,"numberProperties":[],"stringProperties":[],"initialVariables":[]}],"editionSettings":{"grid":false,"gridType":"rectangular","gridWidth":32.0,"gridHeight":32.0,"gridOffsetX":0.0,"gridOffsetY":0.0,"gridColor":10401023.0,"gridAlpha":0.8,"snap":false,"zoomFactor":0.06362699297165819,"windowMask":false}}],"externalSourceFiles":[]}