From 85a106f72bfcbd2cfe3046ecd950084ab3d5aaea Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Wed, 9 Aug 2023 01:51:19 +0200 Subject: [PATCH 01/11] Add a tween action. --- examples/test-stretch/BlueBunny.glb | Bin 0 -> 1027532 bytes examples/test-stretch/Unable Rest.json | 5465 +++++++++++++++++ .../assets/Square White Slider Border.png | Bin 0 -> 210 bytes .../assets/Square White Slider Fill Bar.png | Bin 0 -> 132 bytes .../assets/Square White Slider Thumb.png | Bin 0 -> 107 bytes 5 files changed, 5465 insertions(+) create mode 100644 examples/test-stretch/BlueBunny.glb create mode 100644 examples/test-stretch/Unable Rest.json create mode 100644 examples/test-stretch/assets/Square White Slider Border.png create mode 100644 examples/test-stretch/assets/Square White Slider Fill Bar.png create mode 100644 examples/test-stretch/assets/Square White Slider Thumb.png diff --git a/examples/test-stretch/BlueBunny.glb b/examples/test-stretch/BlueBunny.glb new file mode 100644 index 0000000000000000000000000000000000000000..61c0b0094575ab15d4d9575a148f282cdb69e0ec GIT binary patch literal 1027532 zcmeFad9ZKURUX!Z5Hk{D2w)t`H^>Nh{rH{voMwnxjfO@|OVt{{v^(vm?%Ul@di`Ge z4MK9KZ2<|9pfDr`0x2_u!ho4Vk>JAEI5Nf*1{^3SF#&=jFvgT!xSU`JNn9b{{=Iwe zIqRPF+iQJmt2+OjX4LK9-fP(3S$kODUi+ylZ+Y!qcieHuFaGdL?)bOg@L_j+@tfcH z&~rzZZrnJ&d35h{M^7DJJ-&YF=C$ib_a43B>Fd|7Uc2$~r_ki(ufB48^@-!_FMr^3 z-}v%(H5c(;_0ff+cO759arxR+{J6fjJ9_@Y(eb-)9$!s=y7AT<$4?yH`^eE7UjOi8 zPh7wB__fELIll4qV~<~Z=Gp7VH}{ZtQK`cqZa&CoWxZm7H6G+r1k4t?F#P2UW4 zRkc;0+CuJ)$1h!hT8~s{G~NEE-8EC!bX~3d2`z43zjXD+l~a{=7rS<-o35#LyJ6`2 zA+_4oZQs}9(Du!=Yub9aa1Z|2b~|)B?5e55Z=1S(^!W>C=Dz0A_2#^}Xw-IX)%0Dx z>ucx?3HzR=ajIa{&ZsTy1v@=)!0q=)7ZB#r0d49X?H_6Ev$9f>M_5% zSXDze4!aR98@r*c;nxu@`>E}dChgQsZB_Lb>WlSQ4e;%57&K?wdjwt{$8N;1)#EhuZM*+#m0U3l7@fZB z>uEor_|1@jF;(5z)Scp#G3mD(s$F}by13i_Q&m&Fo6vQCA!#Tfa1Xw$cAR!o-?tU; zi7`HL0{q_Zc4IYS9QvwFPMF4B-PCn64zQ!C_U=0GgjzVEI`0HPDdB%t@9;l>(gg4B z@ik5j`UNs}ZB zm+%Pd`Vmg6ny!V-UDB{>sZ2PGi`VPa>*66>}K7dw?eSLB5k&_PqD93k)z?ZzeyN&-I zabg;qrXI$m{cewcz^`sG+77eKMm&^U2;HKm^b*)=dLLlRmdUhZX=C zfWY+W4#3V1;Or&@?q;k<{Bk<~IV6zIF`+u|lKtl}rZ_m%h{P3wJ^s|<6Tw&6)?Gie zEkYCih>rmy)xu{x%nJA?IRxJWLc@fQF^!iIBrEOnPago}SHR+Kng*zWeh=Wkf!+8v zd&F&k;=HBJg)}9d*!ue8OHatpp}7dP@udOg2)f;r{5tJFeSA;@V21e(@peGG#h(*0 z`xWQt^%B>S#K{J_Kq{Si3(i|{L4H{!3DL3h(0 zQm_%90IVszp>y z!K}e&i-`rZH6$ljj*xs}(aAWy_VSI@LM45B`0_E0B-I8i1=56!Se1g zPoP?l(HzsEsmb#!rGCWi zMSQ)85t#J>#~!Q7WDB}ZtHuW53n2;4z;rrZ#8?ejpfwo!5ew$@X`KIt@s~5B-~9Bo zTUW64&_*9C;Sr&E!X$}R2_o?x^7yo{n!*w!1?*ja+irYwSkqy(IQ3PH4`d&n5$WI{ z%yL*W;Zs_TC8AJ`#X*f>ni@oL$bwB+;8$rC0F%)@A};>6!H7|YFShpDz}Qs*gP;Ui8l0&76TkG=Mo4qn)=I4vv@b+Ft>-|$p5 zI{+8UnF@;q6}!o!=Re|eZaDjhDHZId!Se5gPjBTVy&rcD=N%+_0a4P^w2Q^qx@j8 zn#2T$-DR5UvD-!L8h3y@);vSnR;<=h)nXxa_Q|e|PMg=Xbgnv#H#SbwK47OW7W;(> zpK;e?{Q(pA-)jn+!=-?+A3fMBPB#q}OW2-dLno)O0>&;g5i z96?}Ra(hjSt>4rlTx0)(T`<%+nf?cF%x4+R5$R` z1@w$1B9=&4Jp#~4`{6=&5sq##>tkh(fo=Eul>K0Jh$L8eB8p>0gpoQMTg*78(@<_> z&|buRf@6yvRy6(oY~;k|2DUbcAP6rwuSlx_KpNhhu3aF{ zvp1y0DR5!M+K(fA3Zq+05f?CIJtjePjAH?;EcQc&V-<|YfDI->B^=-3t2_DH()t6Q zNsh-X(<)2J6#c6f>o+WAuv)`dVk@zq$g$~!5e*C))58DuPBrbvU=>#KScJio%UNi@ zj(YI;sq-@_X6bawgb5OH2hhS^6As6!zwNMu#l(oU1rD3i-zrS*h`N|u5eP7hX<*=U z{0#FSngVHJJ*kS zA*Kl3099!THcDS$=7CewKlsqFZ^W`_J>HmeaM%QcaL|M>fjvPQYq+^l$) z_J6|}6IKXVQ>8;Vz(XDCa}oG#sBu<+rr5unoN(>OI_*&h{0kgK?PuWqXs7ZjIwg_Z662+&AXncESJ{en#3uZ!m5h)-p zBa~xoAu*j5V%LlXFx-E#&^bJ~Ksvsww3@yB9WP_kbfK;;)QbhytFJxro^uhZxwt

<=%E57}Cd%twWlz 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%0DD`Z86v3FKl7`aqMt1iDE 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πV=8BfPiU)iPIhN6{;g>dp(ER>r?3C%kg_`+) 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�iQiFWB;v{@i5)AYXT457&13wW<_AxczvK= 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%0DNf55O3TIv2(7d{} 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 z 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�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 MJKrAP{&U5@0DO_!-v9sr literal 0 HcmV?d00001 diff --git a/examples/test-stretch/Unable Rest.json b/examples/test-stretch/Unable Rest.json new file mode 100644 index 000000000..d1704947c --- /dev/null +++ b/examples/test-stretch/Unable Rest.json @@ -0,0 +1,5465 @@ +{ + "firstLayout": "", + "gdVersion": { + "build": 99, + "major": 4, + "minor": 0, + "revision": 0 + }, + "properties": { + "adaptGameResolutionAtRuntime": true, + "antialiasingMode": "MSAA", + "antialisingEnabledOnMobile": false, + "folderProject": false, + "orientation": "landscape", + "packageName": "com.example.gamename", + "pixelsRounding": false, + "projectUuid": "e32da5a1-b495-45eb-8378-1301cf343b3d", + "scaleMode": "linear", + "sizeOnStartupMode": "adaptWidth", + "templateSlug": "", + "useExternalSourceFiles": false, + "version": "1.0.0", + "name": "test-stretch", + "description": "", + "author": "", + "windowWidth": 1280, + "windowHeight": 720, + "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, + "progressBarMaxWidth": 200, + "progressBarMinWidth": 40, + "progressBarWidthPercent": 30, + "showGDevelopSplash": true, + "showProgressBar": true + }, + "watermark": { + "placement": "bottom-left", + "showWatermark": true + }, + "authorIds": [], + "authorUsernames": [], + "categories": [], + "playableDevices": [], + "extensionProperties": [], + "platforms": [ + { + "name": "GDevelop JS platform" + } + ], + "currentPlatform": "GDevelop JS platform" + }, + "resources": { + "resources": [ + { + "file": "BlueBunny.glb", + "kind": "model3D", + "metadata": "", + "name": "BlueBunny.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" + } + } + ], + "resourceFolders": [] + }, + "objects": [], + "objectsGroups": [], + "variables": [], + "layouts": [ + { + "b": 70, + "disableInputWhenNotFocused": true, + "mangledName": "Untitled_32scene", + "name": "Untitled scene", + "r": 70, + "standardSortMethod": true, + "stopSoundsOnStartup": true, + "title": "", + "v": 70, + "uiSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.546875, + "windowMask": false + }, + "objectsGroups": [], + "variables": [], + "instances": [ + { + "angle": 135, + "customSize": false, + "height": 0, + "layer": "", + "name": "New3DModel", + "persistentUuid": "fc25c1db-8b36-472e-852f-4dfa9b11ae8d", + "width": 0, + "x": 637, + "y": 424, + "zOrder": 1, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": -90, + "customSize": true, + "depth": 32, + "height": 28, + "layer": "UI", + "name": "Slider", + "persistentUuid": "001b8826-856d-42bb-a35e-72b83dec1a6d", + "width": 596, + "x": -239, + "y": 348, + "zOrder": 2, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "UI", + "name": "Volume", + "persistentUuid": "fce73bb8-ebc4-4acc-b722-6d9a15c5db32", + "width": 0, + "x": 725, + "y": 18, + "zOrder": 3, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": false, + "height": 0, + "layer": "UI", + "name": "Stretch", + "persistentUuid": "8a2071e1-f0fa-44d0-9aae-f8b10389306d", + "width": 0, + "x": 725, + "y": 75, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "objects": [ + { + "assetStoreId": "", + "name": "New3DModel", + "tags": "", + "type": "Scene3D::Model3DObject", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "StretchTween3D", + "type": "SquashAndStretch3D::StretchTween3D", + "Duration": 0, + "Easing": "", + "InitialValue": 0, + "TargetedValue": 0 + }, + { + "name": "Tween", + "type": "Tween::TweenBehavior" + } + ], + "content": { + "centerLocation": "ModelOrigin", + "depth": 300, + "height": 270, + "keepAspectRatio": false, + "materialType": "StandardWithoutMetalness", + "modelResourceName": "BlueBunny.glb", + "originLocation": "ModelOrigin", + "rotationX": 90, + "rotationY": 0, + "rotationZ": 90, + "width": 120, + "animations": [ + { + "loop": true, + "name": "Idle", + "source": "Idle" + }, + { + "loop": false, + "name": "Death", + "source": "Death" + }, + { + "loop": false, + "name": "Duck", + "source": "Duck" + }, + { + "loop": false, + "name": "HitReact", + "source": "HitReact" + }, + { + "loop": false, + "name": "Idle_Gun", + "source": "Idle_Gun" + }, + { + "loop": false, + "name": "Idle_Shoot", + "source": "Idle_Shoot" + }, + { + "loop": false, + "name": "Jump", + "source": "Jump" + }, + { + "loop": false, + "name": "Jump_Idle", + "source": "Jump_Idle" + }, + { + "loop": false, + "name": "Jump_Land", + "source": "Jump_Land" + }, + { + "loop": false, + "name": "No", + "source": "No" + }, + { + "loop": false, + "name": "Punch", + "source": "Punch" + }, + { + "loop": false, + "name": "Run", + "source": "Run" + }, + { + "loop": false, + "name": "Run_Gun", + "source": "Run_Gun" + }, + { + "loop": false, + "name": "Run_Shoot", + "source": "Run_Shoot" + }, + { + "loop": false, + "name": "Walk", + "source": "Walk" + }, + { + "loop": false, + "name": "Walk_Gun", + "source": "Walk_Gun" + }, + { + "loop": false, + "name": "Wave", + "source": "Wave" + }, + { + "loop": false, + "name": "Yes", + "source": "Yes" + } + ] + } + }, + { + "assetStoreId": "bfeeb465a4a164b560a2215e3ff9e78e66123af43cbf7ef1f22d56fca4271c80", + "name": "Slider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "BarTopPadding": 6, + "BarLeftPadding": 6, + "BarRightPadding": 6, + "BarBottomPadding": 6, + "LabelMargin": -80, + "MinValue": 0, + "MaxValue": 4, + "InitialValue": 1, + "StepSize": 0.01 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 28, + "leftMargin": 2, + "rightMargin": 2, + "texture": "Square White Slider Border.png", + "tiled": false, + "topMargin": 4, + "width": 265 + }, + "FillBar": { + "bottomMargin": 2, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "Square White Slider Fill Bar.png", + "tiled": false, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 2, + "height": 36, + "leftMargin": 1, + "rightMargin": 1, + "texture": "Square White Slider Thumb.png", + "tiled": false, + "topMargin": 2, + "width": 22 + } + } + }, + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Volume", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Volume: ", + "font": "", + "textAlignment": "left", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + }, + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Stretch", + "smoothed": true, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Stretch: ", + "font": "", + "textAlignment": "left", + "characterSize": 30, + "color": { + "b": 255, + "g": 255, + "r": 255 + } + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Scene3D::SetCameraRotationX" + }, + "parameters": [ + "", + "=", + "60", + "", + "" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::SetStretchZ" + }, + "parameters": [ + "", + "=", + "2", + "New3DModel", + "" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::SetStretchZ" + }, + "parameters": [ + "", + "=", + "2", + "New3DModel", + "" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::SetStretchZ" + }, + "parameters": [ + "", + "=", + "2", + "New3DModel", + "" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::SetStretchZ" + }, + "parameters": [ + "", + "=", + "2", + "New3DModel", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::IsBeingDragged" + }, + "parameters": [ + "Slider", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::SetStretchZ" + }, + "parameters": [ + "", + "=", + "Slider.Value()", + "New3DModel", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteSlider::PanelSpriteSlider::IsBeingDragged" + }, + "parameters": [ + "Slider", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::Value" + }, + "parameters": [ + "Slider", + "!=", + "1", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::SetStretchZ" + }, + "parameters": [ + "", + "=", + "Slider.Value()", + "New3DModel", + "" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::TweenStretch" + }, + "parameters": [ + "New3DModel", + "StretchTween3D", + "1", + "4", + "\"elastic\"", + "" + ] + } + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Camera rotation", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DepartScene" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "CameraElevationAngle", + "=", + "30" + ] + }, + { + "type": { + "value": "ThirdPersonCamera::LookFromDistanceAtPosition" + }, + "parameters": [ + "", + "New3DModel.X()", + "New3DModel.Y()", + "1200", + "0", + "30", + "", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteSlider::PanelSpriteSlider::IsBeingDragged" + }, + "parameters": [ + "Slider", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "MousePointerLock::RequestPointerLock" + }, + "parameters": [ + "", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonReleased" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "MousePointerLock::ExitPointerLock" + }, + "parameters": [ + "", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "MouseButtonPressed" + }, + "parameters": [ + "", + "Left" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "CameraElevationAngle", + "=", + "clamp(Variable(CameraElevationAngle) + MousePointerLock::MovementY() / 5, 15, 89)" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "CameraRotationAngle", + "+", + "MousePointerLock::MovementX() / 5" + ] + }, + { + "type": { + "value": "ThirdPersonCamera::LookFromDistanceAtPosition" + }, + "parameters": [ + "", + "New3DModel.X()", + "New3DModel.Y()", + "1200", + "Variable(CameraRotationAngle)", + "Variable(CameraElevationAngle)", + "", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::String" + }, + "parameters": [ + "Volume", + "=", + "\"Volume: \" + ToString(New3DModel.ScaleX() * New3DModel.ScaleY() * New3DModel.ScaleZ())" + ] + }, + { + "type": { + "value": "TextObject::String" + }, + "parameters": [ + "Stretch", + "=", + "\"Stretch: \" + ToString(SquashAndStretch3D::StretchZ(New3DModel))" + ] + } + ] + } + ], + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [ + { + "effectType": "Scene3D::HemisphereLight", + "name": "Effect", + "doubleParameters": { + "elevation": 90, + "intensity": 1, + "rotation": 0 + }, + "stringParameters": { + "groundColor": "127;127;127", + "skyColor": "255;255;255", + "top": "Y-" + }, + "booleanParameters": {} + } + ] + }, + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 0.1, + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "UI", + "renderingType": "", + "visibility": true, + "cameras": [], + "effects": [] + } + ], + "behaviorsSharedData": [ + { + "name": "StretchTween3D", + "type": "SquashAndStretch3D::StretchTween3D" + }, + { + "name": "Tween", + "type": "Tween::TweenBehavior" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "", + "category": "", + "extensionNamespace": "", + "fullName": "Squash and stretch 3D", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXRlbm5pcy1iYWxsIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyLDJDMTQuNSwyIDE2Ljc1LDIuOSAxOC41LDQuNEMxNi4zNiw2LjIzIDE1LDguOTYgMTUsMTJDMTUsMTUuMDQgMTYuMzYsMTcuNzcgMTguNSwxOS42QzE2Ljc1LDIxLjEgMTQuNSwyMiAxMiwyMkM5LjUsMjIgNy4yNSwyMS4xIDUuNSwxOS42QzcuNjQsMTcuNzcgOSwxNS4wNCA5LDEyQzksOC45NiA3LjY0LDYuMjMgNS41LDQuNEM3LjI1LDIuOSA5LjUsMiAxMiwyTTIyLDEyQzIyLDE0LjMyIDIxLjIxLDE2LjQ1IDE5Ljg4LDE4LjE1QzE4LjEyLDE2LjY4IDE3LDE0LjQ3IDE3LDEyQzE3LDkuNTMgMTguMTIsNy4zMiAxOS44OCw1Ljg1QzIxLjIxLDcuNTUgMjIsOS42OCAyMiwxMk0yLDEyQzIsOS42OCAyLjc5LDcuNTUgNC4xMiw1Ljg1QzUuODgsNy4zMiA3LDkuNTMgNywxMkM3LDE0LjQ3IDUuODgsMTYuNjggNC4xMiwxOC4xNUMyLjc5LDE2LjQ1IDIsMTQuMzIgMiwxMloiIC8+PC9zdmc+", + "name": "SquashAndStretch3D", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/30bc03f9cf5f2f42960246a605352a6937ae6b603f0177396a83193849a4724a_tennis-ball.svg", + "shortDescription": "", + "version": "", + "description": "", + "tags": [], + "authorIds": [], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Change the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", + "fullName": "Stretch on Z axis", + "functionType": "ActionWithOperator", + "getterName": "StretchZ", + "name": "SetStretchZ", + "sentence": "Change the stretch on Z axis of ", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareArgumentAsNumber" + }, + "parameters": [ + "\"Value\"", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "Volume", + "=", + "Object.ScaleX() * Object.ScaleY() * Object.ScaleZ()" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleZ" + }, + "parameters": [ + "Object", + "=", + "sqrt(Variable(Volume) * GetArgumentAsNumber(\"Value\"))" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "SurfaceRatio", + "=", + "sqrt(sqrt(Variable(Volume) / GetArgumentAsNumber(\"Value\")) / (Object.ScaleX() * Object.ScaleY()))" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleX" + }, + "parameters": [ + "Object", + "*", + "Variable(SurfaceRatio)" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleY" + }, + "parameters": [ + "Object", + "*", + "Variable(SurfaceRatio)" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "objectList" + }, + { + "description": "Stretch ratio", + "name": "StretchRatio", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", + "fullName": "Stretch on Z axis", + "functionType": "ExpressionAndCondition", + "name": "StretchZ", + "sentence": "Change the stretch on Z axis of _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.ScaleZ() / (Object.ScaleX() * Object.ScaleY())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "objectList" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "", + "fullName": "", + "name": "StretchTween3D", + "objectType": "Scene3D::Model3DObject", + "eventsFunctions": [ + { + "fullName": "Tween stretch", + "functionType": "Action", + "name": "TweenStretch", + "sentence": "Tween the stretch of object _PARAM0_ to _PARAM2_ over _PARAM3_ seconds with _PARAM4_ easing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "\"_StretchTween3D.Time\"" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetPropertyDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Duration\")" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetPropertyEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Easing\")" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetPropertyInitialValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "SquashAndStretch3D::StretchZ(Object)" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetPropertyTargetedValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Stretch\")" + ] + }, + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "ToString(SquashAndStretch3D::StretchZ(Object))", + "", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Stretch", + "name": "Stretch", + "type": "expression" + }, + { + "description": "Duration (in seconds)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[\"linear\",\"elastic\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"_StretchTween3D.Time\"", + ">", + "Object.Behavior::PropertyDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "RemoveObjectTimer" + }, + "parameters": [ + "Object", + "\"_StretchTween3D.Time\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "\"_StretchTween3D.Time\"", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::SetStretchZ" + }, + "parameters": [ + "", + "=", + "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::PropertyInitialValue(), Object.Behavior::PropertyTargetedValue(), Object.ObjectTimerElapsedTime(\"_StretchTween3D.Time\") / Object.Behavior::PropertyDuration())", + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Number", + "unit": "Second", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Duration" + }, + { + "value": "", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Easing" + }, + { + "value": "", + "type": "Number", + "unit": "Dimensionless", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "InitialValue" + }, + { + "value": "", + "type": "Number", + "unit": "Dimensionless", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TargetedValue" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "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.0.0", + "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 view", + "" + ], + "origin": { + "identifier": "ThirdPersonCamera", + "name": "gdevelop-extension-store" + }, + "tags": [ + "3d", + "camera" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Move the camera to look at a position from a distance.", + "fullName": "Look at a position from a distance", + "functionType": "Action", + "name": "LookFromDistanceAtPosition", + "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", + "functionType": "Action", + "name": "LookFromDistanceAtObject", + "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": [] + } + ], + "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.4", + "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 `MouseX()` and `MouseY()` expressions.", + "Use `MovementX()` and `MovementY()` instead.", + "" + ], + "origin": { + "identifier": "MousePointerLock", + "name": "gdevelop-extension-store" + }, + "tags": [ + "mouse", + "lock", + "cursor", + "pointer" + ], + "authorIds": [ + "Zu55H5hcb9YmZTltIVOTAFDJQyB2" + ], + "dependencies": [], + "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(\"mousemove\", (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", + "canvas.requestPointerLock({ unadjustedMovement: true });" + ], + "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": "document.exitPointerLock();", + "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": "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": [], + "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": [], + "hidden": false, + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MinValue" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" + }, + { + "value": "0", + "type": "Number", + "label": "Step size", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "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" + ], + "hidden": false, + "name": "BarLeftPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Bar top margin", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "FillBar" + ], + "hidden": false, + "name": "BarTopPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Bar right margin", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "FillBar" + ], + "hidden": false, + "name": "BarRightPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Bar bottom margin", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "FillBar" + ], + "hidden": false, + "name": "BarBottomPadding" + }, + { + "value": "true", + "type": "Boolean", + "label": "Show the label when the value is changed", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "ShowLabelAtChanges" + }, + { + "value": "8", + "type": "Number", + "label": "Label margin", + "description": "", + "group": "Label", + "extraInformation": [], + "hidden": false, + "name": "LabelMargin" + }, + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "MinValue" + }, + { + "value": "100", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "MaxValue" + }, + { + "value": "1", + "type": "Number", + "label": "Step size", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "name": "StepSize" + }, + { + "value": "50", + "type": "Number", + "label": "Initial value", + "description": "", + "group": "Value", + "extraInformation": [], + "hidden": false, + "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, + "tags": "", + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + } + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Thumb", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Draggable", + "type": "DraggableBehavior::Draggable", + "checkCollisionMask": false + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "FillBar", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Slider", + "type": "PanelSpriteSlider::Slider", + "Value": 0, + "MinValue": 0, + "MaxValue": 1, + "StepSize": 1 + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Background", + "rightMargin": 0, + "tags": "", + "texture": "", + "tiled": true, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "ButtonFSM", + "type": "PanelSpriteSlider::ButtonFSM", + "ShouldCheckHovering": true, + "State": "Idle", + "TouchId": 0, + "TouchIsInside": false, + "MouseIsInside": false, + "Index": 0 + } + ] + } + ] + } + ] + } + ], + "externalLayouts": [], + "externalSourceFiles": [] +} \ No newline at end of file diff --git a/examples/test-stretch/assets/Square White Slider Border.png b/examples/test-stretch/assets/Square White Slider Border.png new file mode 100644 index 0000000000000000000000000000000000000000..804271b3caf874530dec884dc4aa7d59fc399012 GIT binary patch literal 210 zcmeAS@N?(olHy`uVBq!ia0y~yVB`d{l{nadq)&;CDv+A#>EaktaqI2fjhqbzBCZ!* zWE>sYFKFt{y~L^`^XN8rlf)6F=TkK63oCETP*xH;(0h!NVIqSI(+{`mT8ZB`Ll-3d z-WVz5aBz}`rtUeW&}d!G2ZkVd0Zs=MutF#Uoexq0me-j2ms?~5MC}hpxm_pCIS))? cxM#^YVKZ;vj&;V%fR1GFboFyt=akR{0F=)?-T(jq literal 0 HcmV?d00001 diff --git a/examples/test-stretch/assets/Square White Slider Fill Bar.png b/examples/test-stretch/assets/Square White Slider Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..c5ed083397c5f4e842681d5c5be6d1a06a365a26 GIT binary patch literal 132 zcmeAS@N?(olHy`uVBq!ia0vp^e}PzlgAGXDeP6i%NO^m@IEG~0dwbiFmqCGt#j%S` zPU67+Bd>+|4U`w2d=|G>Me>08GU0|7j2D>~vAghh$O+ggR5^Ts3&d=_{xOw(np{OF Z^JQz+>;w8?EI?x!JYD@<);T3K0RY&=DSiL| literal 0 HcmV?d00001 diff --git a/examples/test-stretch/assets/Square White Slider Thumb.png b/examples/test-stretch/assets/Square White Slider Thumb.png new file mode 100644 index 0000000000000000000000000000000000000000..5307d8c6804de1de23182244f3b2d96a6deb0249 GIT binary patch literal 107 zcmeAS@N?(olHy`uVBq!ia0vp^Vj#@H1|*Mc$*~4fMxHK?Ar_~TCkO=6fLgRBoL4lZWvm$Csdo-m5B0fA@W)`gFg7$(RDp8PmxQ#?>NgQu&X%Q~loCIIP9 BAyohX literal 0 HcmV?d00001 From caae3ea0a11aefebebcc6c5686c4bdbfa410139b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 12 Aug 2023 18:00:24 +0200 Subject: [PATCH 02/11] Make the extension work like Tween. --- examples/test-stretch/Unable Rest.json | 3088 ++++++++++++++++++++++-- 1 file changed, 2916 insertions(+), 172 deletions(-) diff --git a/examples/test-stretch/Unable Rest.json b/examples/test-stretch/Unable Rest.json index d1704947c..24a464128 100644 --- a/examples/test-stretch/Unable Rest.json +++ b/examples/test-stretch/Unable Rest.json @@ -615,6 +615,7 @@ "parameters": [ "New3DModel", "StretchTween3D", + "\"Unstretch\"", "1", "4", "\"elastic\"", @@ -905,92 +906,266 @@ "externalEvents": [], "eventsFunctionsExtensions": [ { - "author": "", - "category": "", + "author": "@Bouh, D8H", + "category": "General", "extensionNamespace": "", - "fullName": "Squash and stretch 3D", + "fullName": "Extended variables support", "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXRlbm5pcy1iYWxsIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyLDJDMTQuNSwyIDE2Ljc1LDIuOSAxOC41LDQuNEMxNi4zNiw2LjIzIDE1LDguOTYgMTUsMTJDMTUsMTUuMDQgMTYuMzYsMTcuNzcgMTguNSwxOS42QzE2Ljc1LDIxLjEgMTQuNSwyMiAxMiwyMkM5LjUsMjIgNy4yNSwyMS4xIDUuNSwxOS42QzcuNjQsMTcuNzcgOSwxNS4wNCA5LDEyQzksOC45NiA3LjY0LDYuMjMgNS41LDQuNEM3LjI1LDIuOSA5LjUsMiAxMiwyTTIyLDEyQzIyLDE0LjMyIDIxLjIxLDE2LjQ1IDE5Ljg4LDE4LjE1QzE4LjEyLDE2LjY4IDE3LDE0LjQ3IDE3LDEyQzE3LDkuNTMgMTguMTIsNy4zMiAxOS44OCw1Ljg1QzIxLjIxLDcuNTUgMjIsOS42OCAyMiwxMk0yLDEyQzIsOS42OCAyLjc5LDcuNTUgNC4xMiw1Ljg1QzUuODgsNy4zMiA3LDkuNTMgNywxMkM3LDE0LjQ3IDUuODgsMTYuNjggNC4xMiwxOC4xNUMyLjc5LDE2LjQ1IDIsMTQuMzIgMiwxMloiIC8+PC9zdmc+", - "name": "SquashAndStretch3D", - "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/30bc03f9cf5f2f42960246a605352a6937ae6b603f0177396a83193849a4724a_tennis-ball.svg", - "shortDescription": "", - "version": "", - "description": "", - "tags": [], - "authorIds": [], + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXZhcmlhYmxlLWJveCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xOSAzSDVDMy45IDMgMyAzLjkgMyA1VjE5QzMgMjAuMSAzLjkgMjEgNSAyMUgxOUMyMC4xIDIxIDIxIDIwLjEgMjEgMTlWNUMyMSAzLjkgMjAuMSAzIDE5IDNNNy40IDE4QzUuOSAxNi41IDUgMTQuMyA1IDEyUzUuOSA3LjUgNy40IDZMOSA2LjdDNy43IDcuOSA3IDkuOSA3IDEyUzcuNyAxNi4xIDkgMTcuM0w3LjQgMThNMTIuNyAxNUwxMS45IDEzTDEwLjUgMTVIOUwxMS4zIDExLjlMMTAgOUgxMS4zTDEyLjEgMTFMMTMuNSA5SDE1TDEyLjggMTJMMTQuMSAxNUgxMi43TTE2LjYgMThMMTUgMTcuM0MxNi4zIDE2IDE3IDE0LjEgMTcgMTJTMTYuMyA3LjkgMTUgNi43TDE2LjYgNkMxOC4xIDcuNSAxOSA5LjcgMTkgMTJTMTguMSAxNi41IDE2LjYgMThaIiAvPjwvc3ZnPg==", + "name": "ExtendedVariables", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/variable-box.svg", + "shortDescription": "Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.", + "version": "1.0.2", + "description": [ + "This extension provides: ", + "- Conditions to check if a global/scene/object variable exists.", + "- Actions to copy object variables, global and scene variables.", + "- Actions to delete an existing global/scene variable from memory.", + "- Actions to create a global/scene variable using a text expression, rather than a variable name input.", + "- Expressions to get the value or text from a global/scene variable using a text expression, rather than a variable name.", + "", + "Text expressions allows to enter the name of the variable with an expression like `\"MyVar\"+ ToString(Variable(Health))`" + ], + "origin": { + "identifier": "ExtendedVariables", + "name": "gdevelop-extension-store" + }, + "tags": [ + "variable", + "scene", + "global", + "object", + "remove", + "expression", + "copy", + "structure", + "array", + "boolean", + "duplication" + ], + "authorIds": [ + "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], "dependencies": [], "eventsFunctions": [ { - "description": "Change the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", - "fullName": "Stretch on Z axis", - "functionType": "ActionWithOperator", - "getterName": "StretchZ", - "name": "SetStretchZ", - "sentence": "Change the stretch on Z axis of ", + "description": "Check if a global variable exists.", + "fullName": "Global variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_global_variable_exist", + "private": true, + "sentence": "If the global variable _PARAM1_ exist", "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "False" + ] + } + ] + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "CompareArgumentAsNumber" + "value": "ExtendedVariables::GlobalVariableExist" }, "parameters": [ - "\"Value\"", - ">", - "0" + "", + "GetArgumentAsString(\"GlobalVariableName\")", + "" ] } ], "actions": [ { "type": { - "value": "ModVarScene" + "value": "SetReturnBoolean" }, "parameters": [ - "Volume", - "=", - "Object.ScaleX() * Object.ScaleY() * Object.ScaleZ()" + "True" ] - }, + } + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the global variable exists.", + "fullName": "Global variable exists", + "functionType": "Condition", + "group": "Global variables", + "name": "GlobalVariableExist", + "sentence": "If the global variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const globalVariables = runtimeScene.getGame().getVariables();\r", + "eventsFunctionContext.returnValue = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if a scene variable exists.", + "fullName": "Scene variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_scene_variable_exist", + "private": true, + "sentence": "If the scene variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "Scene3D::Model3DObject::SetScaleZ" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "=", - "sqrt(Variable(Volume) * GetArgumentAsNumber(\"Value\"))" + "False" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "ModVarScene" + "value": "ExtendedVariables::SceneVariableExist" }, "parameters": [ - "SurfaceRatio", - "=", - "sqrt(sqrt(Variable(Volume) / GetArgumentAsNumber(\"Value\")) / (Object.ScaleX() * Object.ScaleY()))" + "", + "GetArgumentAsString(\"SceneVariableName\")", + "" ] - }, + } + ], + "actions": [ { "type": { - "value": "Scene3D::Model3DObject::SetScaleX" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "*", - "Variable(SurfaceRatio)" + "True" ] - }, + } + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the scene variable exists.", + "fullName": "Scene variable exists", + "functionType": "Condition", + "group": "Scene variables", + "name": "SceneVariableExist", + "sentence": "If the scene variable _PARAM1_ exist", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const sceneVariables = runtimeScene.getVariables();\r", + "eventsFunctionContext.returnValue = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Check if an object variable exists.", + "fullName": "Object variable exists", + "functionType": "Condition", + "group": "Deprecated", + "name": "C_object_variable_exist", + "private": true, + "sentence": "Object _PARAM1_ has object variable _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "Scene3D::Model3DObject::SetScaleY" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "*", - "Variable(SurfaceRatio)" + "False" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ExtendedVariables::ObjectVariableExist" + }, + "parameters": [ + "", + "ObjectToCheck", + "GetArgumentAsString(\"ObjectVariableName\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" ] } ] @@ -999,24 +1174,71 @@ "parameters": [ { "description": "Object", - "name": "Object", - "supplementaryInformation": "Scene3D::Model3DObject", + "name": "ObjectToCheck", "type": "objectList" }, { - "description": "Stretch ratio", - "name": "StretchRatio", - "type": "expression" + "description": "Name of object variable", + "name": "ObjectVariableName", + "type": "string" } ], "objectGroups": [] }, { - "description": "the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", - "fullName": "Stretch on Z axis", - "functionType": "ExpressionAndCondition", - "name": "StretchZ", - "sentence": "Change the stretch on Z axis of _PARAM1_", + "description": "Check if an object variable exists.", + "fullName": "Object variable exists", + "functionType": "Condition", + "group": "Object variables", + "name": "ObjectVariableExist", + "sentence": "Object _PARAM1_ has object variable _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "let returnValue = true;\r", + "if (!objects.length) {\r", + " returnValue = false;\r", + "} else {\r", + " const objectVariableName = eventsFunctionContext.getArgument(\"ObjectVariableName\");\r", + " for (let i = 0; i < objects.length; i++) {\r", + " if (!objects[i].hasVariable(objectVariableName)) {\r", + " // If any object does NOT have the variable, return false.\r", + " returnValue = false;\r", + " break;\r", + " }\r", + " }\r", + "}\r", + "\r", + "eventsFunctionContext.returnValue = returnValue;" + ], + "parameterObjects": "ObjectToCheck", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Object", + "name": "ObjectToCheck", + "type": "objectList" + }, + { + "description": "Name of object variable", + "name": "ObjectVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Delete a global variable, removing it from memory.", + "fullName": "Delete global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Delete_global_variable", + "private": true, + "sentence": "Delete global variable _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -1024,109 +1246,2558 @@ "actions": [ { "type": { - "value": "SetReturnNumber" + "value": "ExtendedVariables::DeleteGlobalVariable" }, "parameters": [ - "Object.ScaleZ() / (Object.ScaleX() * Object.ScaleY())" + "", + "GetArgumentAsString(\"GlobalVariableName\")", + "" ] } ] } ], - "expressionType": { - "type": "expression" - }, "parameters": [ { - "description": "Object", - "name": "Object", - "supplementaryInformation": "Scene3D::Model3DObject", - "type": "objectList" + "description": "Name of the global variable to delete", + "name": "GlobalVariableName", + "type": "string" } ], "objectGroups": [] - } - ], - "eventsBasedBehaviors": [ + }, { - "description": "", - "fullName": "", - "name": "StretchTween3D", - "objectType": "Scene3D::Model3DObject", - "eventsFunctions": [ + "description": "Delete the global variable, removing it from memory.", + "fullName": "Delete global variable", + "functionType": "Action", + "group": "Global variables", + "name": "DeleteGlobalVariable", + "sentence": "Delete the global variable _PARAM1_ from memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "runtimeScene.getGame().getVariables().remove(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable to delete", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a scene variable.", + "fullName": "String of a scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_scene_variable_string", + "private": true, + "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::ModifySceneVariableString" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a scene variable.", + "fullName": "String of a scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "ModifySceneVariableString", + "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r", + "variable.setString(eventsFunctionContext.getArgument(\"SceneVariableValue\"));" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a global variable.", + "fullName": "String of a global variable", + "functionType": "Action", + "group": "Global variables", + "name": "ModifyGlobalVariableString", + "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r", + "variable.setString(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "GlobalVariableValue", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_global_variable", + "private": true, + "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::ModifyGlobalVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the text of a global variable.", + "fullName": "String of a global variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_global_variable_string", + "private": true, + "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::ModifyGlobalVariableString" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Action", + "group": "Global variables", + "name": "ModifyGlobalVariable", + "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r", + "variable.setNumber(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "GlobalVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Modify_scene_variable", + "private": true, + "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::ModifySceneVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "GetArgumentAsNumber(\"SceneVariableValue\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Modify the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "ModifySceneVariable", + "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r", + "variable.setNumber(eventsFunctionContext.getArgument(\"SceneVariableValue\"));" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + }, + { + "description": "Value", + "name": "SceneVariableValue", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Delete scene variable, the variable will be deleted from the memory.", + "fullName": "Delete scene variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_Delete_scene_variable", + "private": true, + "sentence": "Delete the scene variable _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::DeleteSceneVariable" + }, + "parameters": [ + "", + "GetArgumentAsString(\"SceneVariableName\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Name of the scene variable to delete", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Delete the scene variable, the variable will be deleted from the memory.", + "fullName": "Delete scene variable", + "functionType": "Action", + "group": "Scene variables", + "name": "DeleteSceneVariable", + "sentence": "Delete the scene variable _PARAM1_ from memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": "runtimeScene.getVariables().remove(eventsFunctionContext.getArgument(\"SceneVariableName\"));", + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Name of the scene variable to delete", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy an object variable from one object to another.", + "fullName": "Copy an object variable", + "functionType": "Action", + "group": "Deprecated", + "name": "A_CopyObjectVariable", + "private": true, + "sentence": "Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::CopyObjectVariable" + }, + "parameters": [ + "", + "SourceObject", + "GetArgumentAsString(\"SourceVariableName\")", + "TargetObject", + "GetArgumentAsString(\"TargetVariableName\")", + "no", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Variable to copy", + "name": "SourceVariableName", + "type": "string" + }, + { + "description": "Destination object", + "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", + "name": "TargetObject", + "type": "objectList" + }, + { + "description": "Destination variable", + "name": "TargetVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the object variable from one object to another.", + "fullName": "Copy an object variable", + "functionType": "Action", + "group": "Object variables", + "name": "CopyObjectVariable", + "sentence": "Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];", + "const targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];", + "const sourceVariableName = eventsFunctionContext.getArgument(\"SourceVariableName\");", + "const targetVariableName = eventsFunctionContext.getArgument(\"TargetVariableName\");", + "const isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");", + "", + "const sourceVariables = sourceObject.getVariables();", + "const targetVariables = targetObject.getVariables();", + "", + "if (sourceVariables.has(sourceVariableName))", + "{", + " gdjs.Variable.copy", + " (", + " sourceVariables.get(sourceVariableName),", + " targetVariables.get(targetVariableName),", + " isExactCopy", + " );", + "}" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Variable to copy", + "name": "SourceVariableName", + "type": "string" + }, + { + "description": "Destination object", + "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", + "name": "TargetObject", + "type": "objectList" + }, + { + "description": "Destination variable", + "name": "TargetVariableName", + "type": "string" + }, + { + "defaultValue": "yes", + "description": "Clear the destination variable before copying", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Copy all object variables from one object to another.", + "fullName": "Copy all object variables", + "functionType": "Action", + "group": "Deprecated", + "name": "A_CopyAllObjectVariables", + "private": true, + "sentence": "Copy all variables from _PARAM1_ to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ExtendedVariables::CopyAllObjectVariables" + }, + "parameters": [ + "", + "SourceObject", + "TargetObject", + "no", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Destination object", + "name": "TargetObject", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Copy all object variables from one object to another.", + "fullName": "Copy all object variables", + "functionType": "Action", + "group": "Object variables", + "name": "CopyAllObjectVariables", + "sentence": "Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "// This JS event use private scope from the API, this can be borken at anytime.", + "", + "const sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];", + "const targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];", + "const isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");", + "", + "const targetVariables = targetObject.getVariables();", + "const sourceVariables = sourceObject.getVariables()._variables.items;", + "for (const variableName in sourceVariables)", + "{", + " if (sourceVariables.hasOwnProperty(variableName))", + " {", + " gdjs.Variable.copy(sourceVariables[variableName], targetVariables.get(variableName), isExactCopy);", + " }", + "}" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Source object", + "name": "SourceObject", + "type": "objectList" + }, + { + "description": "Destination object", + "name": "TargetObject", + "type": "objectList" + }, + { + "defaultValue": "yes", + "description": "Clear the destination variable before copying", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Delete an object variable, removing it from memory.", + "fullName": "Delete object variable", + "functionType": "Action", + "group": "Object variables", + "name": "DeleteObjectVariable", + "sentence": "Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const object = eventsFunctionContext.getObjects(\"Object\")[0];\r", + "const objectVariables = object.getVariables();\r", + "\r", + "objectVariables.remove(eventsFunctionContext.getArgument(\"VariableName\"));" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "objectList" + }, + { + "description": "Name of object variable", + "name": "VariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the text of a global variable.", + "fullName": "Text of a global variable", + "functionType": "StringExpression", + "group": "Global variables", + "name": "GlobalVariableString", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const globalVariables = runtimeScene.getGame().getVariables();\r", + "const variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r", + "\r", + "if (variableExist) {\r", + " eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsString();\r", + "}" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the text of a scene variable.", + "fullName": "Text of a scene variable", + "functionType": "StringExpression", + "group": "Scene variables", + "name": "VariableString", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const sceneVariables = runtimeScene.getVariables();\r", + "const variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r", + "\r", + "if (variableExist) {\r", + " eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsString();\r", + "}" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the value of a global variable.", + "fullName": "Value of a global variable", + "functionType": "Expression", + "group": "Global variables", + "name": "GlobalVariable", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const globalVariables = runtimeScene.getGame().getVariables();\r", + "const variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r", + "\r", + "if (variableExist) {\r", + " eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsNumber();\r", + "}" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Name of the global variable", + "name": "GlobalVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the value of a scene variable.", + "fullName": "Value of a scene variable", + "functionType": "Expression", + "group": "Scene variables", + "name": "Variable", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const sceneVariables = runtimeScene.getVariables();\r", + "const variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r", + "\r", + "if (variableExist) {\r", + " eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsNumber();\r", + "}" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Name of the scene variable", + "name": "SceneVariableName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the global variable to scene. This copy everything from the types to the values.", + "fullName": "Copy a global variable to scene", + "functionType": "Action", + "group": "Convert", + "name": "CopyGlobalVariableToScene", + "sentence": "Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));", + "const sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));", + "const isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");", + "", + "gdjs.Variable.copy(globalVariable, sceneVariable, isExactCopy);", + "" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Global variable to copy", + "name": "globalVariableName", + "type": "string" + }, + { + "description": "Scene variable destination", + "name": "sceneVariableName", + "type": "string" + }, + { + "defaultValue": "yes", + "description": "Clear the destination variable before copying", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Copy the scene variable to global. This copy everything from the types to the values.", + "fullName": "Copy a scene variable to global ", + "functionType": "Action", + "group": "Copy variables", + "name": "CopySceneVariableToGlobal", + "sentence": "Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));", + "const globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));", + "const isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");", + "", + "gdjs.Variable.copy(sceneVariable, globalVariable, isExactCopy);" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Scene variable to copy", + "name": "sceneVariableName", + "type": "string" + }, + { + "description": "Global variable destination", + "name": "globalVariableName", + "type": "string" + }, + { + "defaultValue": "yes", + "description": "Clear the destination variable before copying", + "name": "isExactCopy", + "optional": true, + "type": "yesorno" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [], + "eventsBasedObjects": [] + }, + { + "author": "", + "category": "", + "extensionNamespace": "", + "fullName": "Squash and stretch 3D", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXRlbm5pcy1iYWxsIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyLDJDMTQuNSwyIDE2Ljc1LDIuOSAxOC41LDQuNEMxNi4zNiw2LjIzIDE1LDguOTYgMTUsMTJDMTUsMTUuMDQgMTYuMzYsMTcuNzcgMTguNSwxOS42QzE2Ljc1LDIxLjEgMTQuNSwyMiAxMiwyMkM5LjUsMjIgNy4yNSwyMS4xIDUuNSwxOS42QzcuNjQsMTcuNzcgOSwxNS4wNCA5LDEyQzksOC45NiA3LjY0LDYuMjMgNS41LDQuNEM3LjI1LDIuOSA5LjUsMiAxMiwyTTIyLDEyQzIyLDE0LjMyIDIxLjIxLDE2LjQ1IDE5Ljg4LDE4LjE1QzE4LjEyLDE2LjY4IDE3LDE0LjQ3IDE3LDEyQzE3LDkuNTMgMTguMTIsNy4zMiAxOS44OCw1Ljg1QzIxLjIxLDcuNTUgMjIsOS42OCAyMiwxMk0yLDEyQzIsOS42OCAyLjc5LDcuNTUgNC4xMiw1Ljg1QzUuODgsNy4zMiA3LDkuNTMgNywxMkM3LDE0LjQ3IDUuODgsMTYuNjggNC4xMiwxOC4xNUMyLjc5LDE2LjQ1IDIsMTQuMzIgMiwxMloiIC8+PC9zdmc+", + "name": "SquashAndStretch3D", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/30bc03f9cf5f2f42960246a605352a6937ae6b603f0177396a83193849a4724a_tennis-ball.svg", + "shortDescription": "", + "version": "", + "description": "", + "tags": [], + "authorIds": [], + "dependencies": [], + "eventsFunctions": [ + { + "description": "Change the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", + "fullName": "Stretch on Z axis", + "functionType": "ActionWithOperator", + "getterName": "StretchZ", + "name": "SetStretchZ", + "sentence": "Change the stretch on Z axis of ", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareArgumentAsNumber" + }, + "parameters": [ + "\"Value\"", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "Volume", + "=", + "Object.ScaleX() * Object.ScaleY() * Object.ScaleZ()" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleZ" + }, + "parameters": [ + "Object", + "=", + "sqrt(Variable(Volume) * GetArgumentAsNumber(\"Value\"))" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "SurfaceRatio", + "=", + "sqrt(sqrt(Variable(Volume) / GetArgumentAsNumber(\"Value\")) / (Object.ScaleX() * Object.ScaleY()))" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleX" + }, + "parameters": [ + "Object", + "*", + "Variable(SurfaceRatio)" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleY" + }, + "parameters": [ + "Object", + "*", + "Variable(SurfaceRatio)" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "objectList" + }, + { + "description": "Stretch ratio", + "name": "StretchRatio", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", + "fullName": "Stretch on Z axis", + "functionType": "ExpressionAndCondition", + "name": "StretchZ", + "sentence": "Change the stretch on Z axis of _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.ScaleZ() / (Object.ScaleX() * Object.ScaleY())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "objectList" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "", + "fullName": "", + "name": "StretchTween3D", + "objectType": "Scene3D::Model3DObject", + "eventsFunctions": [ + { + "description": "Tweens an object stretch from its current value to a new one. The stretch can never be 0 or less.", + "fullName": "Tween stretch", + "functionType": "Action", + "group": "Size", + "name": "TweenStretch", + "sentence": "Tween the stretch of object _PARAM0_ to _PARAM3_ over _PARAM4_ seconds with _PARAM5_ easing as _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::StartTween" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "GetArgumentAsNumber(\"TargetedValue\")", + "GetArgumentAsNumber(\"Duration\")", + "GetArgumentAsString(\"Easing\")", + "\"Stretch\"", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + }, + { + "description": "Stretch", + "name": "TargetedValue", + "type": "expression" + }, + { + "description": "Duration (in seconds)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[\"linear\",\"elastic\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "_Tween3D.Index", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.VariableChildCount(_Tween3D.Tweens)", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarSceneTxt" + }, + "parameters": [ + "_Tween3D.Identifier", + "=", + "Object.Behavior::TweenIdentifier(Variable(_Tween3D.Index))" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::IsPlaying" + }, + "parameters": [ + "Object", + "Behavior", + "VariableString(_Tween3D.Identifier)", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetTime" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(Object.Behavior::Time(VariableString(_Tween3D.Identifier)) + TimeDelta() * LayerTimeScale(Object.Layer()), Object.Behavior::Duration(VariableString(_Tween3D.Identifier)))", + "VariableString(_Tween3D.Identifier)", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::Type" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Stretch\"", + "VariableString(_Tween3D.Identifier)", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::SetStretchZ" + }, + "parameters": [ + "", + "=", + "Object.Behavior::TweenedValue(VariableString(_Tween3D.Identifier))", + "Object", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "_Tween3D.Index", + "+", + "1" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the tweened value", + "fullName": "Tweened value", + "functionType": "ExpressionAndCondition", + "name": "TweenedValue", + "private": true, + "sentence": "the value of tween _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Tween::Ease(Object.Behavior::Easing(VariableString(_Tween3D.Identifier)), Object.Behavior::InitialValue(VariableString(_Tween3D.Identifier)), Object.Behavior::TargetedValue(VariableString(_Tween3D.Identifier)), Object.Behavior::Progress(VariableString(_Tween3D.Identifier)))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "fullName": "Start tween", + "functionType": "Action", + "name": "StartTween", + "private": true, + "sentence": "Tween the _PARAM6_ of object _PARAM0_ to _PARAM3_ over _PARAM4_ seconds with _PARAM5_ easing as _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SquashAndStretch3D::StretchTween3D::Exists" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::InvalidateTweenIdentifiers" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetTime" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetType" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Type\")", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Duration\")", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Easing\")", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetInitialValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "SquashAndStretch3D::StretchZ(Object)", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + }, + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetTargetedValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TargetedValue\")", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + }, + { + "description": "Stretch", + "name": "TargetedValue", + "type": "expression" + }, + { + "description": "Duration (in seconds)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[\"linear\",\"elastic\"]", + "type": "stringWithSelector" + }, + { + "description": "Type", + "name": "Type", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "the tween type", + "fullName": "Type", + "functionType": "ExpressionAndCondition", + "name": "Type", + "private": true, + "sentence": "the type of tween _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Object.VariableString(_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].Type)" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Type", + "name": "SetType", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjetTxt" + }, + "parameters": [ + "Object", + "_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].Type", + "=", + "GetArgumentAsString(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "the elapsed time", + "fullName": "Time", + "functionType": "ExpressionAndCondition", + "name": "Time", + "private": true, + "sentence": "the elapsed time of tween _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Variable(_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].Time)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Time", + "name": "SetTime", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].Time", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "the tween duration", + "fullName": "Duration", + "functionType": "ExpressionAndCondition", + "name": "Duration", + "private": true, + "sentence": "the duration of tween _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Variable(_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].Duration)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Duration", + "name": "SetDuration", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].Duration", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "the tween easing", + "fullName": "Easing", + "functionType": "ExpressionAndCondition", + "name": "Easing", + "private": true, + "sentence": "the easing of tween _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Object.VariableString(_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].Easing)" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Easing", + "name": "SetEasing", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjetTxt" + }, + "parameters": [ + "Object", + "_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].Easing", + "=", + "GetArgumentAsString(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "the tween initial value", + "fullName": "Initial value", + "functionType": "ExpressionAndCondition", + "name": "InitialValue", + "private": true, + "sentence": "the initial value of tween _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Variable(_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].InitialValue)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "InitialValue", + "name": "SetInitialValue", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].InitialValue", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "the tween targeted value", + "fullName": "Targeted value", + "functionType": "ExpressionAndCondition", + "name": "TargetedValue", + "private": true, + "sentence": "the targeted value of tween _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Variable(_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].TargetedValue)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the tween is paused", + "fullName": "Paused", + "functionType": "Condition", + "name": "IsPaused", + "private": true, + "sentence": "The tween _PARAM2_ of _PARAM0_ is paused", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].IsPaused", + "True" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "Change if the tween is paused", + "fullName": "Paused", + "functionType": "Action", + "name": "SetPaused", + "private": true, + "sentence": "The tween _PARAM2_ of _PARAM0_ is paused: _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"IsPaused\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].IsPaused", + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"IsPaused\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetObjectVariableAsBoolean" + }, + "parameters": [ + "Object", + "_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].IsPaused", + "False" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + }, + { + "description": "Paused", + "name": "IsPaused", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "TargetedValue", + "name": "SetTargetedValue", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "_Tween3D.Tweens[GetArgumentAsString(\"TweenIdentifier\")].TargetedValue", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "Stop the running tween animation.", + "fullName": "Stop a tween", + "functionType": "Action", + "name": "StopTween", + "sentence": "Stop the tween _PARAM2_ on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::Exists" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetTime" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::Duration(GetArgumentAsString(\"TweenIdentifier\"))", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"JumpToEnd\"" + ] + } + ], + "actions": [] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + }, + { + "description": "Jump to end", + "name": "JumpToEnd", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Pause the running tween animation.", + "fullName": "Pause a tween", + "functionType": "Action", + "name": "PauseTween", + "sentence": "Pause the tween _PARAM2_ on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::Exists" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetPaused" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "yes", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "Resume the tween animation.", + "fullName": "Resume a tween", + "functionType": "Action", + "name": "ResumeTween", + "sentence": "Resume the tween _PARAM2_ on _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::Exists" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::SetPaused" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "no", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, { - "fullName": "Tween stretch", + "description": "Remove the tween animation from the object.", + "fullName": "Remove a tween", "functionType": "Action", - "name": "TweenStretch", - "sentence": "Tween the stretch of object _PARAM0_ to _PARAM2_ over _PARAM3_ seconds with _PARAM4_ easing", + "name": "RemoveTween", + "sentence": "Remove the tween _PARAM2_ from _PARAM0_", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::Exists" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ], "actions": [ { "type": { - "value": "ResetObjectTimer" + "value": "ObjectVariableRemoveChild" }, "parameters": [ "Object", - "\"_StretchTween3D.Time\"" + "_Tween3D.Tweens", + "GetArgumentAsString(\"TweenIdentifier\")" ] }, { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetPropertyDuration" + "value": "SquashAndStretch3D::StretchTween3D::InvalidateTweenIdentifiers" }, "parameters": [ "Object", "Behavior", - "=", - "GetArgumentAsNumber(\"Duration\")" + "" ] - }, + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the tween animation exists.", + "fullName": "Tween exists", + "functionType": "Condition", + "name": "Exists", + "sentence": "Tween _PARAM2_ on _PARAM0_ exists", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetPropertyEasing" + "value": "ObjectVariableChildExists" }, "parameters": [ "Object", - "Behavior", - "=", - "GetArgumentAsString(\"Easing\")" + "_Tween3D.Tweens", + "GetArgumentAsString(\"TweenIdentifier\")" ] - }, + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the tween animation is currently playing.", + "fullName": "Tween is playing", + "functionType": "Condition", + "name": "IsPlaying", + "sentence": "Tween _PARAM2_ on _PARAM0_ is playing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetPropertyInitialValue" + "value": "SquashAndStretch3D::StretchTween3D::Exists" }, "parameters": [ "Object", "Behavior", - "=", - "SquashAndStretch3D::StretchZ(Object)" + "GetArgumentAsString(\"TweenIdentifier\")", + "" ] }, { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetPropertyTargetedValue" + "inverted": true, + "value": "SquashAndStretch3D::StretchTween3D::HasFinished" }, "parameters": [ "Object", "Behavior", - "=", - "GetArgumentAsNumber(\"Stretch\")" + "GetArgumentAsString(\"TweenIdentifier\")", + "" ] }, { "type": { - "value": "DebuggerTools::ConsoleLog" + "inverted": true, + "value": "SquashAndStretch3D::StretchTween3D::IsPaused" }, "parameters": [ - "ToString(SquashAndStretch3D::StretchZ(Object))", - "", + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", "" ] } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } ] } ], @@ -1144,88 +3815,109 @@ "type": "behavior" }, { - "description": "Stretch", - "name": "Stretch", - "type": "expression" - }, - { - "description": "Duration (in seconds)", - "name": "Duration", - "type": "expression" - }, - { - "description": "Easing", - "name": "Easing", - "supplementaryInformation": "[\"linear\",\"elastic\"]", - "type": "stringWithSelector" + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" } ], "objectGroups": [] }, { - "fullName": "", - "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", + "description": "Check if the tween animation has finished playing.", + "fullName": "Tween finished playing", + "functionType": "Condition", + "name": "HasFinished", + "sentence": "Tween _PARAM2_ on _PARAM0_ has finished playing", "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "CompareObjectTimer" + "value": "SquashAndStretch3D::StretchTween3D::Progress" }, "parameters": [ "Object", - "\"_StretchTween3D.Time\"", - ">", - "Object.Behavior::PropertyDuration()" + "Behavior", + ">=", + "1", + "GetArgumentAsString(\"TweenIdentifier\")", + "" ] } ], "actions": [ { "type": { - "value": "RemoveObjectTimer" + "value": "SetReturnBoolean" }, "parameters": [ - "Object", - "\"_StretchTween3D.Time\"" + "True" ] } ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, + { + "description": "Progress of a tween (between 0.0 and 1.0)", + "fullName": "Progress of a tween", + "functionType": "ExpressionAndCondition", + "name": "Progress", + "sentence": "The progress of tween _PARAM2_", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "CompareObjectTimer" + "value": "SquashAndStretch3D::StretchTween3D::Exists" }, "parameters": [ "Object", - "\"_StretchTween3D.Time\"", - ">", - "0" + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "" ] } ], "actions": [ { "type": { - "value": "SquashAndStretch3D::SetStretchZ" + "value": "SetReturnNumber" }, "parameters": [ - "", - "=", - "Tween::Ease(Object.Behavior::PropertyEasing(), Object.Behavior::PropertyInitialValue(), Object.Behavior::PropertyTargetedValue(), Object.ObjectTimerElapsedTime(\"_StretchTween3D.Time\") / Object.Behavior::PropertyDuration())", - "Object", - "" + "Object.Behavior::Time(GetArgumentAsString(\"TweenIdentifier\")) / Object.Behavior::Duration(GetArgumentAsString(\"TweenIdentifier\"))" ] } ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { "description": "Object", @@ -1238,56 +3930,108 @@ "name": "Behavior", "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" } ], "objectGroups": [] - } - ], - "propertyDescriptors": [ - { - "value": "", - "type": "Number", - "unit": "Second", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Duration" - }, - { - "value": "", - "type": "String", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "Easing" }, { - "value": "", - "type": "Number", - "unit": "Dimensionless", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "InitialValue" + "description": "Return the tween identifier for a given index.", + "fullName": "Tween identifier", + "functionType": "StringExpression", + "name": "TweenIdentifier", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const object = objects[0];", + "", + "const childIndex = eventsFunctionContext.getArgument(\"ChildIndex\");", + "", + "object.__Tween3D = object.__Tween3D || {};", + "object.__Tween3D.variableIdentifiers =", + " object.__Tween3D.variableIdentifiers", + " || Object.keys(object.getVariables().get(\"_Tween3D\").getChild(\"Tweens\").getAllChildren());", + "", + "eventsFunctionContext.returnValue = object.__Tween3D.variableIdentifiers[childIndex];", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Child index", + "name": "ChildIndex", + "type": "expression" + } + ], + "objectGroups": [] }, { - "value": "", - "type": "Number", - "unit": "Dimensionless", - "label": "", - "description": "", - "group": "", - "extraInformation": [], - "hidden": true, - "name": "TargetedValue" + "description": "Invalidate tween identifiers.", + "fullName": "Invalidate tween identifiers", + "functionType": "Action", + "name": "InvalidateTweenIdentifiers", + "private": true, + "sentence": "Invalidate tween identifiers of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const object = objects[0];", + "", + "object.__Tween3D = object.__Tween3D || {};", + "object.__Tween3D.variableIdentifiers = null;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + } + ], + "objectGroups": [] } ], + "propertyDescriptors": [], "sharedPropertyDescriptors": [] } ], From 3f1b17071dc06e0400c4d150bffeaa475bc05ccf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 12 Aug 2023 18:09:31 +0200 Subject: [PATCH 03/11] Tween in log values. --- examples/test-stretch/Unable Rest.json | 50 +++++++++++++++++++++++++- 1 file changed, 49 insertions(+), 1 deletion(-) diff --git a/examples/test-stretch/Unable Rest.json b/examples/test-stretch/Unable Rest.json index 24a464128..b785f61ef 100644 --- a/examples/test-stretch/Unable Rest.json +++ b/examples/test-stretch/Unable Rest.json @@ -2443,7 +2443,7 @@ "parameters": [ "", "=", - "Object.Behavior::TweenedValue(VariableString(_Tween3D.Identifier))", + "Object.Behavior::ExponentTweenedValue(VariableString(_Tween3D.Identifier))", "Object", "" ] @@ -2535,6 +2535,54 @@ ], "objectGroups": [] }, + { + "description": "the exponent-tweened value", + "fullName": "Tweened value (exponent)", + "functionType": "ExpressionAndCondition", + "name": "ExponentTweenedValue", + "private": true, + "sentence": "the exponent-tweened value of tween _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "exp(Tween::Ease(Object.Behavior::Easing(VariableString(_Tween3D.Identifier)), log(Object.Behavior::InitialValue(VariableString(_Tween3D.Identifier))), log(Object.Behavior::TargetedValue(VariableString(_Tween3D.Identifier))), Object.Behavior::Progress(VariableString(_Tween3D.Identifier))))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + } + ], + "objectGroups": [] + }, { "fullName": "Start tween", "functionType": "Action", From a861733a697c812a5ec2511eef8d290d987d8615 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 12 Aug 2023 18:51:42 +0200 Subject: [PATCH 04/11] Add a volume action. --- examples/test-stretch/Unable Rest.json | 1632 ++++++------------------ 1 file changed, 372 insertions(+), 1260 deletions(-) diff --git a/examples/test-stretch/Unable Rest.json b/examples/test-stretch/Unable Rest.json index b785f61ef..03a1bf0fe 100644 --- a/examples/test-stretch/Unable Rest.json +++ b/examples/test-stretch/Unable Rest.json @@ -16,7 +16,7 @@ "pixelsRounding": false, "projectUuid": "e32da5a1-b495-45eb-8378-1301cf343b3d", "scaleMode": "linear", - "sizeOnStartupMode": "adaptWidth", + "sizeOnStartupMode": "", "templateSlug": "", "useExternalSourceFiles": false, "version": "1.0.0", @@ -120,8 +120,8 @@ { "b": 70, "disableInputWhenNotFocused": true, - "mangledName": "Untitled_32scene", - "name": "Untitled scene", + "mangledName": "Stretch", + "name": "Stretch", "r": 70, "standardSortMethod": true, "stopSoundsOnStartup": true, @@ -164,9 +164,9 @@ "depth": 32, "height": 28, "layer": "UI", - "name": "Slider", + "name": "StretchSlider", "persistentUuid": "001b8826-856d-42bb-a35e-72b83dec1a6d", - "width": 596, + "width": 600, "x": -239, "y": 348, "zOrder": 2, @@ -203,6 +203,22 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] + }, + { + "angle": -90, + "customSize": true, + "depth": 32, + "height": 28, + "layer": "UI", + "name": "VolumeSlider", + "persistentUuid": "117a8f2c-a8e7-41d1-b259-883b5155a8b7", + "width": 600, + "x": 919, + "y": 342, + "zOrder": 5, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] } ], "objects": [ @@ -335,7 +351,7 @@ }, { "assetStoreId": "bfeeb465a4a164b560a2215e3ff9e78e66123af43cbf7ef1f22d56fca4271c80", - "name": "Slider", + "name": "StretchSlider", "tags": "", "type": "PanelSpriteSlider::PanelSpriteSlider", "variables": [], @@ -400,6 +416,73 @@ } } }, + { + "assetStoreId": "bfeeb465a4a164b560a2215e3ff9e78e66123af43cbf7ef1f22d56fca4271c80", + "name": "VolumeSlider", + "tags": "", + "type": "PanelSpriteSlider::PanelSpriteSlider", + "variables": [], + "effects": [], + "behaviors": [], + "content": { + "BarTopPadding": 6, + "BarLeftPadding": 6, + "BarRightPadding": 6, + "BarBottomPadding": 6, + "LabelMargin": 0, + "MinValue": 0, + "MaxValue": 4, + "InitialValue": 1, + "StepSize": 0.01 + }, + "childrenContent": { + "Background": { + "bottomMargin": 4, + "height": 28, + "leftMargin": 2, + "rightMargin": 2, + "texture": "Square White Slider Border.png", + "tiled": false, + "topMargin": 4, + "width": 265 + }, + "FillBar": { + "bottomMargin": 2, + "height": 16, + "leftMargin": 0, + "rightMargin": 0, + "texture": "Square White Slider Fill Bar.png", + "tiled": false, + "topMargin": 0, + "width": 16 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 221, + "g": 221, + "r": 221 + } + }, + "Thumb": { + "bottomMargin": 2, + "height": 36, + "leftMargin": 1, + "rightMargin": 1, + "texture": "Square White Slider Thumb.png", + "tiled": false, + "topMargin": 2, + "width": 22 + } + } + }, { "assetStoreId": "", "bold": false, @@ -538,7 +621,35 @@ "value": "PanelSpriteSlider::PanelSpriteSlider::IsBeingDragged" }, "parameters": [ - "Slider", + "VolumeSlider", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::SetScaleVolume" + }, + "parameters": [ + "", + "=", + "VolumeSlider.Value()", + "New3DModel", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::IsBeingDragged" + }, + "parameters": [ + "StretchSlider", "" ] } @@ -551,7 +662,7 @@ "parameters": [ "", "=", - "Slider.Value()", + "StretchSlider.Value()", "New3DModel", "" ] @@ -567,7 +678,7 @@ "value": "PanelSpriteSlider::PanelSpriteSlider::IsBeingDragged" }, "parameters": [ - "Slider", + "StretchSlider", "" ] }, @@ -588,7 +699,7 @@ "value": "PanelSpriteSlider::PanelSpriteSlider::Value" }, "parameters": [ - "Slider", + "StretchSlider", "!=", "1", "" @@ -603,7 +714,7 @@ "parameters": [ "", "=", - "Slider.Value()", + "StretchSlider.Value()", "New3DModel", "" ] @@ -684,7 +795,17 @@ "value": "PanelSpriteSlider::PanelSpriteSlider::IsBeingDragged" }, "parameters": [ - "Slider", + "StretchSlider", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteSlider::PanelSpriteSlider::IsBeingDragged" + }, + "parameters": [ + "VolumeSlider", "" ] } @@ -906,57 +1027,27 @@ "externalEvents": [], "eventsFunctionsExtensions": [ { - "author": "@Bouh, D8H", - "category": "General", + "author": "", + "category": "", "extensionNamespace": "", - "fullName": "Extended variables support", + "fullName": "Squash and stretch 3D", "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXZhcmlhYmxlLWJveCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xOSAzSDVDMy45IDMgMyAzLjkgMyA1VjE5QzMgMjAuMSAzLjkgMjEgNSAyMUgxOUMyMC4xIDIxIDIxIDIwLjEgMjEgMTlWNUMyMSAzLjkgMjAuMSAzIDE5IDNNNy40IDE4QzUuOSAxNi41IDUgMTQuMyA1IDEyUzUuOSA3LjUgNy40IDZMOSA2LjdDNy43IDcuOSA3IDkuOSA3IDEyUzcuNyAxNi4xIDkgMTcuM0w3LjQgMThNMTIuNyAxNUwxMS45IDEzTDEwLjUgMTVIOUwxMS4zIDExLjlMMTAgOUgxMS4zTDEyLjEgMTFMMTMuNSA5SDE1TDEyLjggMTJMMTQuMSAxNUgxMi43TTE2LjYgMThMMTUgMTcuM0MxNi4zIDE2IDE3IDE0LjEgMTcgMTJTMTYuMyA3LjkgMTUgNi43TDE2LjYgNkMxOC4xIDcuNSAxOSA5LjcgMTkgMTJTMTguMSAxNi41IDE2LjYgMThaIiAvPjwvc3ZnPg==", - "name": "ExtendedVariables", - "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/variable-box.svg", - "shortDescription": "Add conditions, actions and expressions to check for the existence of a variable, copy variables, delete existing ones from memory, and create dynamic variables.", - "version": "1.0.2", - "description": [ - "This extension provides: ", - "- Conditions to check if a global/scene/object variable exists.", - "- Actions to copy object variables, global and scene variables.", - "- Actions to delete an existing global/scene variable from memory.", - "- Actions to create a global/scene variable using a text expression, rather than a variable name input.", - "- Expressions to get the value or text from a global/scene variable using a text expression, rather than a variable name.", - "", - "Text expressions allows to enter the name of the variable with an expression like `\"MyVar\"+ ToString(Variable(Health))`" - ], - "origin": { - "identifier": "ExtendedVariables", - "name": "gdevelop-extension-store" - }, - "tags": [ - "variable", - "scene", - "global", - "object", - "remove", - "expression", - "copy", - "structure", - "array", - "boolean", - "duplication" - ], - "authorIds": [ - "2OwwM8ToR9dx9RJ2sAKTcrLmCB92", - "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" - ], + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXRlbm5pcy1iYWxsIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyLDJDMTQuNSwyIDE2Ljc1LDIuOSAxOC41LDQuNEMxNi4zNiw2LjIzIDE1LDguOTYgMTUsMTJDMTUsMTUuMDQgMTYuMzYsMTcuNzcgMTguNSwxOS42QzE2Ljc1LDIxLjEgMTQuNSwyMiAxMiwyMkM5LjUsMjIgNy4yNSwyMS4xIDUuNSwxOS42QzcuNjQsMTcuNzcgOSwxNS4wNCA5LDEyQzksOC45NiA3LjY0LDYuMjMgNS41LDQuNEM3LjI1LDIuOSA5LjUsMiAxMiwyTTIyLDEyQzIyLDE0LjMyIDIxLjIxLDE2LjQ1IDE5Ljg4LDE4LjE1QzE4LjEyLDE2LjY4IDE3LDE0LjQ3IDE3LDEyQzE3LDkuNTMgMTguMTIsNy4zMiAxOS44OCw1Ljg1QzIxLjIxLDcuNTUgMjIsOS42OCAyMiwxMk0yLDEyQzIsOS42OCAyLjc5LDcuNTUgNC4xMiw1Ljg1QzUuODgsNy4zMiA3LDkuNTMgNywxMkM3LDE0LjQ3IDUuODgsMTYuNjggNC4xMiwxOC4xNUMyLjc5LDE2LjQ1IDIsMTQuMzIgMiwxMloiIC8+PC9zdmc+", + "name": "SquashAndStretch3D", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/30bc03f9cf5f2f42960246a605352a6937ae6b603f0177396a83193849a4724a_tennis-ball.svg", + "shortDescription": "", + "version": "", + "description": "", + "tags": [], + "authorIds": [], "dependencies": [], "eventsFunctions": [ { - "description": "Check if a global variable exists.", - "fullName": "Global variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_global_variable_exist", - "private": true, - "sentence": "If the global variable _PARAM1_ exist", + "description": "the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", + "fullName": "Stretch on Z axis", + "functionType": "ExpressionAndCondition", + "name": "StretchZ", + "sentence": "the stretch on Z axis of _PARAM1_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -964,35 +1055,99 @@ "actions": [ { "type": { - "value": "SetReturnBoolean" + "value": "SetReturnNumber" }, "parameters": [ - "False" + "Object.ScaleZ() / (Object.ScaleX() * Object.ScaleY())" ] } ] - }, + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Change the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", + "fullName": "Stretch on Z axis", + "functionType": "ActionWithOperator", + "getterName": "StretchZ", + "name": "SetStretchZ", + "sentence": "Change the stretch on Z axis of ", + "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "ExtendedVariables::GlobalVariableExist" + "value": "CompareArgumentAsNumber" }, "parameters": [ - "", - "GetArgumentAsString(\"GlobalVariableName\")", - "" + "\"Value\"", + ">", + "0" ] } ], "actions": [ { "type": { - "value": "SetReturnBoolean" + "value": "ModVarScene" + }, + "parameters": [ + "_Tween3D.Volume", + "=", + "SquashAndStretch3D::ScaleVolume(Object)" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleZ" + }, + "parameters": [ + "Object", + "=", + "sqrt(Variable(_Tween3D.Volume) * GetArgumentAsNumber(\"Value\"))" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "_Tween3D.SurfaceRatio", + "=", + "sqrt(sqrt(Variable(_Tween3D.Volume) / GetArgumentAsNumber(\"Value\")) / (Object.ScaleX() * Object.ScaleY()))" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleX" + }, + "parameters": [ + "Object", + "*", + "Variable(_Tween3D.SurfaceRatio)" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleY" }, "parameters": [ - "True" + "Object", + "*", + "Variable(_Tween3D.SurfaceRatio)" ] } ] @@ -1000,1171 +1155,73 @@ ], "parameters": [ { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "objectList" + }, + { + "description": "Stretch ratio", + "name": "StretchRatio", + "type": "expression" } ], "objectGroups": [] }, { - "description": "Check if the global variable exists.", - "fullName": "Global variable exists", - "functionType": "Condition", - "group": "Global variables", - "name": "GlobalVariableExist", - "sentence": "If the global variable _PARAM1_ exist", + "description": "the scale volume.", + "fullName": "Scale volume", + "functionType": "ExpressionAndCondition", + "name": "ScaleVolume", + "sentence": "the scale volume of _PARAM1_", "events": [ { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const globalVariables = runtimeScene.getGame().getVariables();\r", - "eventsFunctionContext.returnValue = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.ScaleZ() * Object.ScaleX() * Object.ScaleY()" + ] + } + ] } ], + "expressionType": { + "type": "expression" + }, "parameters": [ { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "objectList" } ], "objectGroups": [] }, { - "description": "Check if a scene variable exists.", - "fullName": "Scene variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_scene_variable_exist", - "private": true, - "sentence": "If the scene variable _PARAM1_ exist", + "description": "Change the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", + "fullName": "Stretch on Z axis", + "functionType": "ActionWithOperator", + "getterName": "ScaleVolume", + "name": "SetScaleVolume", + "sentence": "Change the stretch on Z axis of ", "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ + "conditions": [ { "type": { - "value": "SetReturnBoolean" + "value": "CompareArgumentAsNumber" }, "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ExtendedVariables::SceneVariableExist" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if the scene variable exists.", - "fullName": "Scene variable exists", - "functionType": "Condition", - "group": "Scene variables", - "name": "SceneVariableExist", - "sentence": "If the scene variable _PARAM1_ exist", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const sceneVariables = runtimeScene.getVariables();\r", - "eventsFunctionContext.returnValue = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object variable exists.", - "fullName": "Object variable exists", - "functionType": "Condition", - "group": "Deprecated", - "name": "C_object_variable_exist", - "private": true, - "sentence": "Object _PARAM1_ has object variable _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "False" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "ExtendedVariables::ObjectVariableExist" - }, - "parameters": [ - "", - "ObjectToCheck", - "GetArgumentAsString(\"ObjectVariableName\")", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetReturnBoolean" - }, - "parameters": [ - "True" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Object", - "name": "ObjectToCheck", - "type": "objectList" - }, - { - "description": "Name of object variable", - "name": "ObjectVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Check if an object variable exists.", - "fullName": "Object variable exists", - "functionType": "Condition", - "group": "Object variables", - "name": "ObjectVariableExist", - "sentence": "Object _PARAM1_ has object variable _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "let returnValue = true;\r", - "if (!objects.length) {\r", - " returnValue = false;\r", - "} else {\r", - " const objectVariableName = eventsFunctionContext.getArgument(\"ObjectVariableName\");\r", - " for (let i = 0; i < objects.length; i++) {\r", - " if (!objects[i].hasVariable(objectVariableName)) {\r", - " // If any object does NOT have the variable, return false.\r", - " returnValue = false;\r", - " break;\r", - " }\r", - " }\r", - "}\r", - "\r", - "eventsFunctionContext.returnValue = returnValue;" - ], - "parameterObjects": "ObjectToCheck", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Object", - "name": "ObjectToCheck", - "type": "objectList" - }, - { - "description": "Name of object variable", - "name": "ObjectVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete a global variable, removing it from memory.", - "fullName": "Delete global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Delete_global_variable", - "private": true, - "sentence": "Delete global variable _PARAM1_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::DeleteGlobalVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"GlobalVariableName\")", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable to delete", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete the global variable, removing it from memory.", - "fullName": "Delete global variable", - "functionType": "Action", - "group": "Global variables", - "name": "DeleteGlobalVariable", - "sentence": "Delete the global variable _PARAM1_ from memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "runtimeScene.getGame().getVariables().remove(eventsFunctionContext.getArgument(\"GlobalVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable to delete", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a scene variable.", - "fullName": "String of a scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_scene_variable_string", - "private": true, - "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::ModifySceneVariableString" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a scene variable.", - "fullName": "String of a scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "ModifySceneVariableString", - "sentence": "Change the text of scene variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r", - "variable.setString(eventsFunctionContext.getArgument(\"SceneVariableValue\"));" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a global variable.", - "fullName": "String of a global variable", - "functionType": "Action", - "group": "Global variables", - "name": "ModifyGlobalVariableString", - "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r", - "variable.setString(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "GlobalVariableValue", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_global_variable", - "private": true, - "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::ModifyGlobalVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the text of a global variable.", - "fullName": "String of a global variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_global_variable_string", - "private": true, - "sentence": "Change the text of global variable _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::ModifyGlobalVariableString" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Action", - "group": "Global variables", - "name": "ModifyGlobalVariable", - "sentence": "Change the global variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const variable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r", - "variable.setNumber(eventsFunctionContext.getArgument(\"GlobalVariableValue\"));" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "GlobalVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Modify_scene_variable", - "private": true, - "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::ModifySceneVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "GetArgumentAsNumber(\"SceneVariableValue\")", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Modify the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "ModifySceneVariable", - "sentence": "Change the scene variable _PARAM1_ with value: _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const variable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r", - "variable.setNumber(eventsFunctionContext.getArgument(\"SceneVariableValue\"));" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - }, - { - "description": "Value", - "name": "SceneVariableValue", - "type": "expression" - } - ], - "objectGroups": [] - }, - { - "description": "Delete scene variable, the variable will be deleted from the memory.", - "fullName": "Delete scene variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_Delete_scene_variable", - "private": true, - "sentence": "Delete the scene variable _PARAM1_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::DeleteSceneVariable" - }, - "parameters": [ - "", - "GetArgumentAsString(\"SceneVariableName\")", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Name of the scene variable to delete", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Delete the scene variable, the variable will be deleted from the memory.", - "fullName": "Delete scene variable", - "functionType": "Action", - "group": "Scene variables", - "name": "DeleteSceneVariable", - "sentence": "Delete the scene variable _PARAM1_ from memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": "runtimeScene.getVariables().remove(eventsFunctionContext.getArgument(\"SceneVariableName\"));", - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "parameters": [ - { - "description": "Name of the scene variable to delete", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Copy an object variable from one object to another.", - "fullName": "Copy an object variable", - "functionType": "Action", - "group": "Deprecated", - "name": "A_CopyObjectVariable", - "private": true, - "sentence": "Copy the variable _PARAM1_ of _PARAM2_ to the variable _PARAM3_ of _PARAM4_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::CopyObjectVariable" - }, - "parameters": [ - "", - "SourceObject", - "GetArgumentAsString(\"SourceVariableName\")", - "TargetObject", - "GetArgumentAsString(\"TargetVariableName\")", - "no", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Variable to copy", - "name": "SourceVariableName", - "type": "string" - }, - { - "description": "Destination object", - "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", - "name": "TargetObject", - "type": "objectList" - }, - { - "description": "Destination variable", - "name": "TargetVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Copy the object variable from one object to another.", - "fullName": "Copy an object variable", - "functionType": "Action", - "group": "Object variables", - "name": "CopyObjectVariable", - "sentence": "Copy the variable _PARAM2_ of _PARAM1_ to the variable _PARAM4_ of _PARAM3_ (clear destination first: _PARAM5_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];", - "const targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];", - "const sourceVariableName = eventsFunctionContext.getArgument(\"SourceVariableName\");", - "const targetVariableName = eventsFunctionContext.getArgument(\"TargetVariableName\");", - "const isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");", - "", - "const sourceVariables = sourceObject.getVariables();", - "const targetVariables = targetObject.getVariables();", - "", - "if (sourceVariables.has(sourceVariableName))", - "{", - " gdjs.Variable.copy", - " (", - " sourceVariables.get(sourceVariableName),", - " targetVariables.get(targetVariableName),", - " isExactCopy", - " );", - "}" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Variable to copy", - "name": "SourceVariableName", - "type": "string" - }, - { - "description": "Destination object", - "longDescription": "To copy the variable between 2 instances of the same object, the variable has to be copied to another object first.", - "name": "TargetObject", - "type": "objectList" - }, - { - "description": "Destination variable", - "name": "TargetVariableName", - "type": "string" - }, - { - "defaultValue": "yes", - "description": "Clear the destination variable before copying", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Copy all object variables from one object to another.", - "fullName": "Copy all object variables", - "functionType": "Action", - "group": "Deprecated", - "name": "A_CopyAllObjectVariables", - "private": true, - "sentence": "Copy all variables from _PARAM1_ to _PARAM2_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ExtendedVariables::CopyAllObjectVariables" - }, - "parameters": [ - "", - "SourceObject", - "TargetObject", - "no", - "" - ] - } - ] - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Destination object", - "name": "TargetObject", - "type": "objectList" - } - ], - "objectGroups": [] - }, - { - "description": "Copy all object variables from one object to another.", - "fullName": "Copy all object variables", - "functionType": "Action", - "group": "Object variables", - "name": "CopyAllObjectVariables", - "sentence": "Copy all variables from object _PARAM1_ to object _PARAM2_ (clear destination first: _PARAM3_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "// This JS event use private scope from the API, this can be borken at anytime.", - "", - "const sourceObject = eventsFunctionContext.getObjects(\"SourceObject\")[0];", - "const targetObject = eventsFunctionContext.getObjects(\"TargetObject\")[0];", - "const isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");", - "", - "const targetVariables = targetObject.getVariables();", - "const sourceVariables = sourceObject.getVariables()._variables.items;", - "for (const variableName in sourceVariables)", - "{", - " if (sourceVariables.hasOwnProperty(variableName))", - " {", - " gdjs.Variable.copy(sourceVariables[variableName], targetVariables.get(variableName), isExactCopy);", - " }", - "}" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Source object", - "name": "SourceObject", - "type": "objectList" - }, - { - "description": "Destination object", - "name": "TargetObject", - "type": "objectList" - }, - { - "defaultValue": "yes", - "description": "Clear the destination variable before copying", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Delete an object variable, removing it from memory.", - "fullName": "Delete object variable", - "functionType": "Action", - "group": "Object variables", - "name": "DeleteObjectVariable", - "sentence": "Delete for the object _PARAM1_ the object variable _PARAM2_ from the memory", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const object = eventsFunctionContext.getObjects(\"Object\")[0];\r", - "const objectVariables = object.getVariables();\r", - "\r", - "objectVariables.remove(eventsFunctionContext.getArgument(\"VariableName\"));" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Object", - "name": "Object", - "type": "objectList" - }, - { - "description": "Name of object variable", - "name": "VariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the text of a global variable.", - "fullName": "Text of a global variable", - "functionType": "StringExpression", - "group": "Global variables", - "name": "GlobalVariableString", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const globalVariables = runtimeScene.getGame().getVariables();\r", - "const variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r", - "\r", - "if (variableExist) {\r", - " eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsString();\r", - "}" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "string" - }, - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the text of a scene variable.", - "fullName": "Text of a scene variable", - "functionType": "StringExpression", - "group": "Scene variables", - "name": "VariableString", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const sceneVariables = runtimeScene.getVariables();\r", - "const variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r", - "\r", - "if (variableExist) {\r", - " eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsString();\r", - "}" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "string" - }, - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the value of a global variable.", - "fullName": "Value of a global variable", - "functionType": "Expression", - "group": "Global variables", - "name": "GlobalVariable", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const globalVariables = runtimeScene.getGame().getVariables();\r", - "const variableExist = globalVariables.has(eventsFunctionContext.getArgument(\"GlobalVariableName\"));\r", - "\r", - "if (variableExist) {\r", - " eventsFunctionContext.returnValue = globalVariables.get(eventsFunctionContext.getArgument(\"GlobalVariableName\")).getAsNumber();\r", - "}" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Name of the global variable", - "name": "GlobalVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Return the value of a scene variable.", - "fullName": "Value of a scene variable", - "functionType": "Expression", - "group": "Scene variables", - "name": "Variable", - "sentence": "", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const sceneVariables = runtimeScene.getVariables();\r", - "const variableExist = sceneVariables.has(eventsFunctionContext.getArgument(\"SceneVariableName\"));\r", - "\r", - "if (variableExist) {\r", - " eventsFunctionContext.returnValue = sceneVariables.get(eventsFunctionContext.getArgument(\"SceneVariableName\")).getAsNumber();\r", - "}" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": false - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Name of the scene variable", - "name": "SceneVariableName", - "type": "string" - } - ], - "objectGroups": [] - }, - { - "description": "Copy the global variable to scene. This copy everything from the types to the values.", - "fullName": "Copy a global variable to scene", - "functionType": "Action", - "group": "Convert", - "name": "CopyGlobalVariableToScene", - "sentence": "Copy the global variable:_PARAM1_ to a scene variable:_PARAM2_ (clear destination first: _PARAM3_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));", - "const sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));", - "const isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");", - "", - "gdjs.Variable.copy(globalVariable, sceneVariable, isExactCopy);", - "" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Global variable to copy", - "name": "globalVariableName", - "type": "string" - }, - { - "description": "Scene variable destination", - "name": "sceneVariableName", - "type": "string" - }, - { - "defaultValue": "yes", - "description": "Clear the destination variable before copying", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - }, - { - "description": "Copy the scene variable to global. This copy everything from the types to the values.", - "fullName": "Copy a scene variable to global ", - "functionType": "Action", - "group": "Copy variables", - "name": "CopySceneVariableToGlobal", - "sentence": "Copy the scene variable:_PARAM1_ to a global variable:_PARAM2_ (clear destination first: _PARAM3_)", - "events": [ - { - "type": "BuiltinCommonInstructions::JsCode", - "inlineCode": [ - "const sceneVariable = runtimeScene.getVariables().get(eventsFunctionContext.getArgument(\"sceneVariableName\"));", - "const globalVariable = runtimeScene.getGame().getVariables().get(eventsFunctionContext.getArgument(\"globalVariableName\"));", - "const isExactCopy = eventsFunctionContext.getArgument(\"isExactCopy\");", - "", - "gdjs.Variable.copy(sceneVariable, globalVariable, isExactCopy);" - ], - "parameterObjects": "", - "useStrict": true, - "eventsSheetExpanded": true - } - ], - "parameters": [ - { - "description": "Scene variable to copy", - "name": "sceneVariableName", - "type": "string" - }, - { - "description": "Global variable destination", - "name": "globalVariableName", - "type": "string" - }, - { - "defaultValue": "yes", - "description": "Clear the destination variable before copying", - "name": "isExactCopy", - "optional": true, - "type": "yesorno" - } - ], - "objectGroups": [] - } - ], - "eventsBasedBehaviors": [], - "eventsBasedObjects": [] - }, - { - "author": "", - "category": "", - "extensionNamespace": "", - "fullName": "Squash and stretch 3D", - "helpPath": "", - "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXRlbm5pcy1iYWxsIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyLDJDMTQuNSwyIDE2Ljc1LDIuOSAxOC41LDQuNEMxNi4zNiw2LjIzIDE1LDguOTYgMTUsMTJDMTUsMTUuMDQgMTYuMzYsMTcuNzcgMTguNSwxOS42QzE2Ljc1LDIxLjEgMTQuNSwyMiAxMiwyMkM5LjUsMjIgNy4yNSwyMS4xIDUuNSwxOS42QzcuNjQsMTcuNzcgOSwxNS4wNCA5LDEyQzksOC45NiA3LjY0LDYuMjMgNS41LDQuNEM3LjI1LDIuOSA5LjUsMiAxMiwyTTIyLDEyQzIyLDE0LjMyIDIxLjIxLDE2LjQ1IDE5Ljg4LDE4LjE1QzE4LjEyLDE2LjY4IDE3LDE0LjQ3IDE3LDEyQzE3LDkuNTMgMTguMTIsNy4zMiAxOS44OCw1Ljg1QzIxLjIxLDcuNTUgMjIsOS42OCAyMiwxMk0yLDEyQzIsOS42OCAyLjc5LDcuNTUgNC4xMiw1Ljg1QzUuODgsNy4zMiA3LDkuNTMgNywxMkM3LDE0LjQ3IDUuODgsMTYuNjggNC4xMiwxOC4xNUMyLjc5LDE2LjQ1IDIsMTQuMzIgMiwxMloiIC8+PC9zdmc+", - "name": "SquashAndStretch3D", - "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/30bc03f9cf5f2f42960246a605352a6937ae6b603f0177396a83193849a4724a_tennis-ball.svg", - "shortDescription": "", - "version": "", - "description": "", - "tags": [], - "authorIds": [], - "dependencies": [], - "eventsFunctions": [ - { - "description": "Change the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", - "fullName": "Stretch on Z axis", - "functionType": "ActionWithOperator", - "getterName": "StretchZ", - "name": "SetStretchZ", - "sentence": "Change the stretch on Z axis of ", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CompareArgumentAsNumber" - }, - "parameters": [ - "\"Value\"", - ">", - "0" + "\"Value\"", + ">", + "0" ] } ], @@ -2174,9 +1231,9 @@ "value": "ModVarScene" }, "parameters": [ - "Volume", + "_Tween3D.Ratio", "=", - "Object.ScaleX() * Object.ScaleY() * Object.ScaleZ()" + "pow(GetArgumentAsNumber(\"Value\") / SquashAndStretch3D::ScaleVolume(Object), 1/3)" ] }, { @@ -2185,18 +1242,8 @@ }, "parameters": [ "Object", - "=", - "sqrt(Variable(Volume) * GetArgumentAsNumber(\"Value\"))" - ] - }, - { - "type": { - "value": "ModVarScene" - }, - "parameters": [ - "SurfaceRatio", - "=", - "sqrt(sqrt(Variable(Volume) / GetArgumentAsNumber(\"Value\")) / (Object.ScaleX() * Object.ScaleY()))" + "*", + "Variable(_Tween3D.Ratio)" ] }, { @@ -2206,7 +1253,7 @@ "parameters": [ "Object", "*", - "Variable(SurfaceRatio)" + "Variable(_Tween3D.Ratio)" ] }, { @@ -2216,7 +1263,7 @@ "parameters": [ "Object", "*", - "Variable(SurfaceRatio)" + "Variable(_Tween3D.Ratio)" ] } ] @@ -2236,41 +1283,6 @@ } ], "objectGroups": [] - }, - { - "description": "the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", - "fullName": "Stretch on Z axis", - "functionType": "ExpressionAndCondition", - "name": "StretchZ", - "sentence": "Change the stretch on Z axis of _PARAM1_", - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "SetReturnNumber" - }, - "parameters": [ - "Object.ScaleZ() / (Object.ScaleX() * Object.ScaleY())" - ] - } - ] - } - ], - "expressionType": { - "type": "expression" - }, - "parameters": [ - { - "description": "Object", - "name": "Object", - "supplementaryInformation": "Scene3D::Model3DObject", - "type": "objectList" - } - ], - "objectGroups": [] } ], "eventsBasedBehaviors": [ @@ -2348,6 +1360,74 @@ ], "objectGroups": [] }, + { + "description": "Tweens an object scale volume from its current value to a new one. The scale volume can never be 0 or less.", + "fullName": "Tween scale volume", + "functionType": "Action", + "group": "Size", + "name": "TweenScaleVolume", + "sentence": "Tween the scale volume of object _PARAM0_ to _PARAM3_ over _PARAM4_ seconds with _PARAM5_ easing as _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::StartTween" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "GetArgumentAsNumber(\"TargetedValue\")", + "GetArgumentAsNumber(\"Duration\")", + "GetArgumentAsString(\"Easing\")", + "\"ScaleVolume\"", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + }, + { + "description": "Stretch", + "name": "TargetedValue", + "type": "expression" + }, + { + "description": "Duration (in seconds)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[\"linear\",\"elastic\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, { "fullName": "", "functionType": "Action", @@ -2449,6 +1529,38 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SquashAndStretch3D::StretchTween3D::Type" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"ScaleVolume\"", + "VariableString(_Tween3D.Identifier)", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SquashAndStretch3D::SetScaleVolume" + }, + "parameters": [ + "", + "=", + "Object.Behavior::ExponentTweenedValue(VariableString(_Tween3D.Identifier))", + "Object", + "" + ] + } + ] } ] }, From 5c4d4d97939e73b912b677863bafbfb3a34b35e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 12 Aug 2023 20:11:35 +0200 Subject: [PATCH 05/11] Fix stretch formulas. --- examples/test-stretch/Unable Rest.json | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/examples/test-stretch/Unable Rest.json b/examples/test-stretch/Unable Rest.json index 03a1bf0fe..ee0643d21 100644 --- a/examples/test-stretch/Unable Rest.json +++ b/examples/test-stretch/Unable Rest.json @@ -1058,7 +1058,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.ScaleZ() / (Object.ScaleX() * Object.ScaleY())" + "Object.ScaleZ() / sqrt(Object.ScaleX() * Object.ScaleY())" ] } ] @@ -1117,7 +1117,7 @@ "parameters": [ "Object", "=", - "sqrt(Variable(_Tween3D.Volume) * GetArgumentAsNumber(\"Value\"))" + "pow(Variable(_Tween3D.Volume) * GetArgumentAsNumber(\"Value\") * GetArgumentAsNumber(\"Value\"), 1/3)" ] }, { @@ -1127,7 +1127,7 @@ "parameters": [ "_Tween3D.SurfaceRatio", "=", - "sqrt(sqrt(Variable(_Tween3D.Volume) / GetArgumentAsNumber(\"Value\")) / (Object.ScaleX() * Object.ScaleY()))" + "sqrt((Variable(_Tween3D.Volume) / Object.ScaleZ()) / (Object.ScaleX() * Object.ScaleY()))" ] }, { @@ -1184,7 +1184,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "Object.ScaleZ() * Object.ScaleX() * Object.ScaleY()" + "Object.ScaleX() * Object.ScaleY() * Object.ScaleZ()" ] } ] From 2e64368a6d1986e943435ec1640c935d7a1556e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sun, 13 Aug 2023 00:43:18 +0200 Subject: [PATCH 06/11] Add rotation actions. --- examples/test-stretch/Unable Rest.json | 843 ++++++++++++++++++++++--- 1 file changed, 738 insertions(+), 105 deletions(-) diff --git a/examples/test-stretch/Unable Rest.json b/examples/test-stretch/Unable Rest.json index ee0643d21..cdc0d56da 100644 --- a/examples/test-stretch/Unable Rest.json +++ b/examples/test-stretch/Unable Rest.json @@ -232,7 +232,7 @@ "behaviors": [ { "name": "StretchTween3D", - "type": "SquashAndStretch3D::StretchTween3D", + "type": "Tween3D::Tween3D", "Duration": 0, "Easing": "", "InitialValue": 0, @@ -363,7 +363,7 @@ "BarRightPadding": 6, "BarBottomPadding": 6, "LabelMargin": -80, - "MinValue": 0, + "MinValue": 0.01, "MaxValue": 4, "InitialValue": 1, "StepSize": 0.01 @@ -429,8 +429,8 @@ "BarLeftPadding": 6, "BarRightPadding": 6, "BarBottomPadding": 6, - "LabelMargin": 0, - "MinValue": 0, + "LabelMargin": 20, + "MinValue": 0.01, "MaxValue": 4, "InitialValue": 1, "StepSize": 0.01 @@ -563,7 +563,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::SetStretchZ" + "value": "Tween3D::SetStretchZ" }, "parameters": [ "", @@ -575,7 +575,7 @@ }, { "type": { - "value": "SquashAndStretch3D::SetStretchZ" + "value": "Tween3D::SetStretchZ" }, "parameters": [ "", @@ -587,7 +587,7 @@ }, { "type": { - "value": "SquashAndStretch3D::SetStretchZ" + "value": "Tween3D::SetStretchZ" }, "parameters": [ "", @@ -599,7 +599,7 @@ }, { "type": { - "value": "SquashAndStretch3D::SetStretchZ" + "value": "Tween3D::SetStretchZ" }, "parameters": [ "", @@ -629,7 +629,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::SetScaleVolume" + "value": "Tween3D::SetScaleVolume" }, "parameters": [ "", @@ -641,6 +641,74 @@ } ] }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteSlider::PanelSpriteSlider::IsBeingDragged" + }, + "parameters": [ + "VolumeSlider", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::Value" + }, + "parameters": [ + "VolumeSlider", + "!=", + "1", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::SetScaleVolume" + }, + "parameters": [ + "", + "=", + "VolumeSlider.Value()", + "New3DModel", + "" + ] + }, + { + "type": { + "value": "Tween3D::Tween3D::TweenScaleVolume" + }, + "parameters": [ + "New3DModel", + "StretchTween3D", + "\"Unscale\"", + "1", + "4", + "\"linear\"", + "" + ] + } + ] + } + ] + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ @@ -657,7 +725,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::SetStretchZ" + "value": "Tween3D::SetStretchZ" }, "parameters": [ "", @@ -709,7 +777,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::SetStretchZ" + "value": "Tween3D::SetStretchZ" }, "parameters": [ "", @@ -721,7 +789,7 @@ }, { "type": { - "value": "SquashAndStretch3D::StretchTween3D::TweenStretch" + "value": "Tween3D::Tween3D::TweenStretchZ" }, "parameters": [ "New3DModel", @@ -945,7 +1013,7 @@ "parameters": [ "Stretch", "=", - "\"Stretch: \" + ToString(SquashAndStretch3D::StretchZ(New3DModel))" + "\"Stretch: \" + ToString(Tween3D::StretchZ(New3DModel))" ] } ] @@ -1015,7 +1083,7 @@ "behaviorsSharedData": [ { "name": "StretchTween3D", - "type": "SquashAndStretch3D::StretchTween3D" + "type": "Tween3D::Tween3D" }, { "name": "Tween", @@ -1028,18 +1096,24 @@ "eventsFunctionsExtensions": [ { "author": "", - "category": "", + "category": "Visual effect", "extensionNamespace": "", "fullName": "Squash and stretch 3D", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXRlbm5pcy1iYWxsIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyLDJDMTQuNSwyIDE2Ljc1LDIuOSAxOC41LDQuNEMxNi4zNiw2LjIzIDE1LDguOTYgMTUsMTJDMTUsMTUuMDQgMTYuMzYsMTcuNzcgMTguNSwxOS42QzE2Ljc1LDIxLjEgMTQuNSwyMiAxMiwyMkM5LjUsMjIgNy4yNSwyMS4xIDUuNSwxOS42QzcuNjQsMTcuNzcgOSwxNS4wNCA5LDEyQzksOC45NiA3LjY0LDYuMjMgNS41LDQuNEM3LjI1LDIuOSA5LjUsMiAxMiwyTTIyLDEyQzIyLDE0LjMyIDIxLjIxLDE2LjQ1IDE5Ljg4LDE4LjE1QzE4LjEyLDE2LjY4IDE3LDE0LjQ3IDE3LDEyQzE3LDkuNTMgMTguMTIsNy4zMiAxOS44OCw1Ljg1QzIxLjIxLDcuNTUgMjIsOS42OCAyMiwxMk0yLDEyQzIsOS42OCAyLjc5LDcuNTUgNC4xMiw1Ljg1QzUuODgsNy4zMiA3LDkuNTMgNywxMkM3LDE0LjQ3IDUuODgsMTYuNjggNC4xMiwxOC4xNUMyLjc5LDE2LjQ1IDIsMTQuMzIgMiwxMloiIC8+PC9zdmc+", - "name": "SquashAndStretch3D", + "name": "Tween3D", "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/30bc03f9cf5f2f42960246a605352a6937ae6b603f0177396a83193849a4724a_tennis-ball.svg", - "shortDescription": "", - "version": "", - "description": "", - "tags": [], - "authorIds": [], + "shortDescription": "Smoothly animate scale and rotation of 3d models.", + "version": "0.0.1", + "description": "Change models proportions and orientation over time to make smooth animations.", + "tags": [ + "tween", + "smooth", + "interpolation" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], "dependencies": [], "eventsFunctions": [ { @@ -1107,7 +1181,7 @@ "parameters": [ "_Tween3D.Volume", "=", - "SquashAndStretch3D::ScaleVolume(Object)" + "Tween3D::ScaleVolume(Object)" ] }, { @@ -1168,6 +1242,132 @@ ], "objectGroups": [] }, + { + "description": "the stretch on Y axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Y in proportion to the dimension on X and Z.", + "fullName": "Stretch on Y axis", + "functionType": "ExpressionAndCondition", + "name": "StretchY", + "sentence": "the stretch on Y axis of _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.ScaleY() / sqrt(Object.ScaleX() * Object.ScaleZ())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Change the stretch on Z axis. The object volume is conseved. A stretch of 2 make the object apear 2 time longer on Z in proportion to the dimension on X and Y.", + "fullName": "Stretch on Z axis", + "functionType": "ActionWithOperator", + "getterName": "StretchY", + "name": "SetStretchY", + "sentence": "Change the stretch on Z axis of ", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareArgumentAsNumber" + }, + "parameters": [ + "\"Value\"", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "_Tween3D.Volume", + "=", + "Tween3D::ScaleVolume(Object)" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleY" + }, + "parameters": [ + "Object", + "=", + "pow(Variable(_Tween3D.Volume) * GetArgumentAsNumber(\"Value\") * GetArgumentAsNumber(\"Value\"), 1/3)" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "_Tween3D.SurfaceRatio", + "=", + "sqrt((Variable(_Tween3D.Volume) / Object.ScaleZ()) / (Object.ScaleX() * Object.ScaleY()))" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleX" + }, + "parameters": [ + "Object", + "*", + "Variable(_Tween3D.SurfaceRatio)" + ] + }, + { + "type": { + "value": "Scene3D::Model3DObject::SetScaleZ" + }, + "parameters": [ + "Object", + "*", + "Variable(_Tween3D.SurfaceRatio)" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "objectList" + }, + { + "description": "Stretch ratio", + "name": "StretchRatio", + "type": "expression" + } + ], + "objectGroups": [] + }, { "description": "the scale volume.", "fullName": "Scale volume", @@ -1233,7 +1433,7 @@ "parameters": [ "_Tween3D.Ratio", "=", - "pow(GetArgumentAsNumber(\"Value\") / SquashAndStretch3D::ScaleVolume(Object), 1/3)" + "pow(GetArgumentAsNumber(\"Value\") / Tween3D::ScaleVolume(Object), 1 / 3)" ] }, { @@ -1287,18 +1487,18 @@ ], "eventsBasedBehaviors": [ { - "description": "", - "fullName": "", - "name": "StretchTween3D", + "description": "Smoothly animate scale and rotation of 3d models.", + "fullName": "3D Tween", + "name": "Tween3D", "objectType": "Scene3D::Model3DObject", "eventsFunctions": [ { - "description": "Tweens an object stretch from its current value to a new one. The stretch can never be 0 or less.", - "fullName": "Tween stretch", + "description": "Tweens an object stretch Z from its current value to a new one. The stretch can never be 0 or less.", + "fullName": "Tween stretch Z", "functionType": "Action", "group": "Size", - "name": "TweenStretch", - "sentence": "Tween the stretch of object _PARAM0_ to _PARAM3_ over _PARAM4_ seconds with _PARAM5_ easing as _PARAM2_", + "name": "TweenStretchZ", + "sentence": "Tween the stretch Z of object _PARAM0_ to _PARAM3_ over _PARAM4_ seconds with _PARAM5_ easing as _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -1306,7 +1506,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::StartTween" + "value": "Tween3D::Tween3D::StartTween" }, "parameters": [ "Object", @@ -1315,7 +1515,7 @@ "GetArgumentAsNumber(\"TargetedValue\")", "GetArgumentAsNumber(\"Duration\")", "GetArgumentAsString(\"Easing\")", - "\"Stretch\"", + "\"StretchZ\"", "" ] } @@ -1332,7 +1532,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -1342,7 +1542,75 @@ "type": "identifier" }, { - "description": "Stretch", + "description": "Stretch on Z axis", + "name": "TargetedValue", + "type": "expression" + }, + { + "description": "Duration (in seconds)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Tweens an object stretch Y from its current value to a new one. The stretch can never be 0 or less.", + "fullName": "Tween stretch Y", + "functionType": "Action", + "group": "Size", + "name": "TweenStretchY", + "sentence": "Tween the stretch Y of object _PARAM0_ to _PARAM3_ over _PARAM4_ seconds with _PARAM5_ easing as _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Tween3D::StartTween" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "GetArgumentAsNumber(\"TargetedValue\")", + "GetArgumentAsNumber(\"Duration\")", + "GetArgumentAsString(\"Easing\")", + "\"StretchY\"", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Tween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + }, + { + "description": "Stretch on Y axis", "name": "TargetedValue", "type": "expression" }, @@ -1354,7 +1622,7 @@ { "description": "Easing", "name": "Easing", - "supplementaryInformation": "[\"linear\",\"elastic\"]", + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", "type": "stringWithSelector" } ], @@ -1374,7 +1642,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::StartTween" + "value": "Tween3D::Tween3D::StartTween" }, "parameters": [ "Object", @@ -1400,7 +1668,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -1422,17 +1690,19 @@ { "description": "Easing", "name": "Easing", - "supplementaryInformation": "[\"linear\",\"elastic\"]", + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", "type": "stringWithSelector" } ], "objectGroups": [] }, { - "fullName": "", + "description": "Tweens an object rotation X from its current value to a new one.", + "fullName": "Tween rotation X", "functionType": "Action", - "name": "doStepPreEvents", - "sentence": "", + "group": "Size", + "name": "TweenRotationX", + "sentence": "Tween the rotation X of object _PARAM0_ to _PARAM3_ over _PARAM4_ seconds with _PARAM5_ easing as _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", @@ -1440,12 +1710,146 @@ "actions": [ { "type": { - "value": "ModVarScene" + "value": "Tween3D::Tween3D::StartTween" }, "parameters": [ - "_Tween3D.Index", - "=", - "0" + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "GetArgumentAsNumber(\"TargetedValue\")", + "GetArgumentAsNumber(\"Duration\")", + "GetArgumentAsString(\"Easing\")", + "\"RotationX\"", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Tween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + }, + { + "description": "Rotation X in degree", + "name": "TargetedValue", + "type": "expression" + }, + { + "description": "Duration (in seconds)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Tweens an object rotation Y from its current value to a new one.", + "fullName": "Tween rotation Y", + "functionType": "Action", + "group": "Size", + "name": "TweenRotationY", + "sentence": "Tween the rotation Y of object _PARAM0_ to _PARAM3_ over _PARAM4_ seconds with _PARAM5_ easing as _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Tween3D::StartTween" + }, + "parameters": [ + "Object", + "Behavior", + "GetArgumentAsString(\"TweenIdentifier\")", + "GetArgumentAsNumber(\"TargetedValue\")", + "GetArgumentAsNumber(\"Duration\")", + "GetArgumentAsString(\"Easing\")", + "\"RotationY\"", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Tween3D", + "type": "behavior" + }, + { + "description": "Tween identifier", + "name": "TweenIdentifier", + "supplementaryInformation": "objectTween3D", + "type": "identifier" + }, + { + "description": "Rotation Y in degree", + "name": "TargetedValue", + "type": "expression" + }, + { + "description": "Duration (in seconds)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "_Tween3D.Index", + "=", + "0" ] } ] @@ -1472,7 +1876,7 @@ "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::IsPlaying" + "value": "Tween3D::Tween3D::IsPlaying" }, "parameters": [ "Object", @@ -1485,7 +1889,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetTime" + "value": "Tween3D::Tween3D::SetTime" }, "parameters": [ "Object", @@ -1503,13 +1907,45 @@ "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::Type" + "value": "Tween3D::Tween3D::Type" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"StretchZ\"", + "VariableString(_Tween3D.Identifier)", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::SetStretchZ" + }, + "parameters": [ + "", + "=", + "Object.Behavior::ExponentTweenedValue(VariableString(_Tween3D.Identifier))", + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Tween3D::Tween3D::Type" }, "parameters": [ "Object", "Behavior", "=", - "\"Stretch\"", + "\"StretchY\"", "VariableString(_Tween3D.Identifier)", "" ] @@ -1518,7 +1954,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::SetStretchZ" + "value": "Tween3D::SetStretchY" }, "parameters": [ "", @@ -1535,7 +1971,7 @@ "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::Type" + "value": "Tween3D::Tween3D::Type" }, "parameters": [ "Object", @@ -1550,7 +1986,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::SetScaleVolume" + "value": "Tween3D::SetScaleVolume" }, "parameters": [ "", @@ -1561,6 +1997,66 @@ ] } ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Tween3D::Tween3D::Type" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"RotationX\"", + "VariableString(_Tween3D.Identifier)", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Scene3D::Model3DObject::SetRotationX" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::TweenedValue(VariableString(_Tween3D.Identifier))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Tween3D::Tween3D::Type" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"RotationY\"", + "VariableString(_Tween3D.Identifier)", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Scene3D::Model3DObject::SetRotationY" + }, + "parameters": [ + "Object", + "=", + "Object.Behavior::TweenedValue(VariableString(_Tween3D.Identifier))" + ] + } + ] } ] }, @@ -1593,7 +2089,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" } ], @@ -1635,7 +2131,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -1683,7 +2179,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -1708,7 +2204,7 @@ { "type": { "inverted": true, - "value": "SquashAndStretch3D::StretchTween3D::Exists" + "value": "Tween3D::Tween3D::Exists" }, "parameters": [ "Object", @@ -1721,7 +2217,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::InvalidateTweenIdentifiers" + "value": "Tween3D::Tween3D::InvalidateTweenIdentifiers" }, "parameters": [ "Object", @@ -1737,7 +2233,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetTime" + "value": "Tween3D::Tween3D::SetTime" }, "parameters": [ "Object", @@ -1750,7 +2246,7 @@ }, { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetType" + "value": "Tween3D::Tween3D::SetType" }, "parameters": [ "Object", @@ -1763,7 +2259,7 @@ }, { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetDuration" + "value": "Tween3D::Tween3D::SetDuration" }, "parameters": [ "Object", @@ -1776,7 +2272,7 @@ }, { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetEasing" + "value": "Tween3D::Tween3D::SetEasing" }, "parameters": [ "Object", @@ -1789,26 +2285,163 @@ }, { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetInitialValue" + "value": "Tween3D::Tween3D::SetTargetedValue" }, "parameters": [ "Object", "Behavior", "=", - "SquashAndStretch3D::StretchZ(Object)", + "GetArgumentAsNumber(\"TargetedValue\")", "GetArgumentAsString(\"TweenIdentifier\")", "" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetTargetedValue" + "value": "CompareArgumentAsString" + }, + "parameters": [ + "\"Type\"", + "=", + "\"StretchZ\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::Tween3D::SetInitialValue" }, "parameters": [ "Object", "Behavior", "=", - "GetArgumentAsNumber(\"TargetedValue\")", + "Tween3D::StretchZ(Object)", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareArgumentAsString" + }, + "parameters": [ + "\"Type\"", + "=", + "\"StretchY\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::Tween3D::SetInitialValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Tween3D::StretchY(Object)", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareArgumentAsString" + }, + "parameters": [ + "\"Type\"", + "=", + "\"ScaleVolume\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::Tween3D::SetInitialValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Tween3D::ScaleVolume(Object)", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareArgumentAsString" + }, + "parameters": [ + "\"Type\"", + "=", + "\"RotationX\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::Tween3D::SetInitialValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.RotationX()", + "GetArgumentAsString(\"TweenIdentifier\")", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareArgumentAsString" + }, + "parameters": [ + "\"Type\"", + "=", + "\"RotationY\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::Tween3D::SetInitialValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.RotationY()", "GetArgumentAsString(\"TweenIdentifier\")", "" ] @@ -1826,7 +2459,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -1848,7 +2481,7 @@ { "description": "Easing", "name": "Easing", - "supplementaryInformation": "[\"linear\",\"elastic\"]", + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", "type": "stringWithSelector" }, { @@ -1895,7 +2528,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -1943,7 +2576,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -1991,7 +2624,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2039,7 +2672,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2087,7 +2720,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2135,7 +2768,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2183,7 +2816,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2231,7 +2864,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2279,7 +2912,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2327,7 +2960,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2375,7 +3008,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2431,7 +3064,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2513,7 +3146,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2566,7 +3199,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2590,7 +3223,7 @@ "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::Exists" + "value": "Tween3D::Tween3D::Exists" }, "parameters": [ "Object", @@ -2603,7 +3236,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetTime" + "value": "Tween3D::Tween3D::SetTime" }, "parameters": [ "Object", @@ -2643,7 +3276,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2672,7 +3305,7 @@ "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::Exists" + "value": "Tween3D::Tween3D::Exists" }, "parameters": [ "Object", @@ -2685,7 +3318,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetPaused" + "value": "Tween3D::Tween3D::SetPaused" }, "parameters": [ "Object", @@ -2708,7 +3341,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2732,7 +3365,7 @@ "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::Exists" + "value": "Tween3D::Tween3D::Exists" }, "parameters": [ "Object", @@ -2745,7 +3378,7 @@ "actions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::SetPaused" + "value": "Tween3D::Tween3D::SetPaused" }, "parameters": [ "Object", @@ -2768,7 +3401,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2792,7 +3425,7 @@ "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::Exists" + "value": "Tween3D::Tween3D::Exists" }, "parameters": [ "Object", @@ -2815,7 +3448,7 @@ }, { "type": { - "value": "SquashAndStretch3D::StretchTween3D::InvalidateTweenIdentifiers" + "value": "Tween3D::Tween3D::InvalidateTweenIdentifiers" }, "parameters": [ "Object", @@ -2836,7 +3469,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2891,7 +3524,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2915,7 +3548,7 @@ "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::Exists" + "value": "Tween3D::Tween3D::Exists" }, "parameters": [ "Object", @@ -2927,7 +3560,7 @@ { "type": { "inverted": true, - "value": "SquashAndStretch3D::StretchTween3D::HasFinished" + "value": "Tween3D::Tween3D::HasFinished" }, "parameters": [ "Object", @@ -2939,7 +3572,7 @@ { "type": { "inverted": true, - "value": "SquashAndStretch3D::StretchTween3D::IsPaused" + "value": "Tween3D::Tween3D::IsPaused" }, "parameters": [ "Object", @@ -2971,7 +3604,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -2995,7 +3628,7 @@ "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::Progress" + "value": "Tween3D::Tween3D::Progress" }, "parameters": [ "Object", @@ -3029,7 +3662,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -3053,7 +3686,7 @@ "conditions": [ { "type": { - "value": "SquashAndStretch3D::StretchTween3D::Exists" + "value": "Tween3D::Tween3D::Exists" }, "parameters": [ "Object", @@ -3088,7 +3721,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -3141,7 +3774,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" }, { @@ -3184,7 +3817,7 @@ { "description": "Behavior", "name": "Behavior", - "supplementaryInformation": "SquashAndStretch3D::StretchTween3D", + "supplementaryInformation": "Tween3D::Tween3D", "type": "behavior" } ], From 9499f230ee5d24de8399370ee621ce4d9e5af60e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sun, 13 Aug 2023 00:45:59 +0200 Subject: [PATCH 07/11] Mark the extension as experimental. --- examples/test-stretch/Unable Rest.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/test-stretch/Unable Rest.json b/examples/test-stretch/Unable Rest.json index cdc0d56da..40da64ee4 100644 --- a/examples/test-stretch/Unable Rest.json +++ b/examples/test-stretch/Unable Rest.json @@ -1098,7 +1098,7 @@ "author": "", "category": "Visual effect", "extensionNamespace": "", - "fullName": "Squash and stretch 3D", + "fullName": "3D tween (experimental)", "helpPath": "", "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXRlbm5pcy1iYWxsIiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTEyLDJDMTQuNSwyIDE2Ljc1LDIuOSAxOC41LDQuNEMxNi4zNiw2LjIzIDE1LDguOTYgMTUsMTJDMTUsMTUuMDQgMTYuMzYsMTcuNzcgMTguNSwxOS42QzE2Ljc1LDIxLjEgMTQuNSwyMiAxMiwyMkM5LjUsMjIgNy4yNSwyMS4xIDUuNSwxOS42QzcuNjQsMTcuNzcgOSwxNS4wNCA5LDEyQzksOC45NiA3LjY0LDYuMjMgNS41LDQuNEM3LjI1LDIuOSA5LjUsMiAxMiwyTTIyLDEyQzIyLDE0LjMyIDIxLjIxLDE2LjQ1IDE5Ljg4LDE4LjE1QzE4LjEyLDE2LjY4IDE3LDE0LjQ3IDE3LDEyQzE3LDkuNTMgMTguMTIsNy4zMiAxOS44OCw1Ljg1QzIxLjIxLDcuNTUgMjIsOS42OCAyMiwxMk0yLDEyQzIsOS42OCAyLjc5LDcuNTUgNC4xMiw1Ljg1QzUuODgsNy4zMiA3LDkuNTMgNywxMkM3LDE0LjQ3IDUuODgsMTYuNjggNC4xMiwxOC4xNUMyLjc5LDE2LjQ1IDIsMTQuMzIgMiwxMloiIC8+PC9zdmc+", "name": "Tween3D", @@ -1488,7 +1488,7 @@ "eventsBasedBehaviors": [ { "description": "Smoothly animate scale and rotation of 3d models.", - "fullName": "3D Tween", + "fullName": "3D tween (experimental)", "name": "Tween3D", "objectType": "Scene3D::Model3DObject", "eventsFunctions": [ From ea3670ae3b6d5ab4c8e21403c4d4ecc01784cc8a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sun, 13 Aug 2023 00:47:13 +0200 Subject: [PATCH 08/11] Rename project file. --- examples/test-stretch/{Unable Rest.json => game.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/test-stretch/{Unable Rest.json => game.json} (100%) diff --git a/examples/test-stretch/Unable Rest.json b/examples/test-stretch/game.json similarity index 100% rename from examples/test-stretch/Unable Rest.json rename to examples/test-stretch/game.json From 10a5902320816eba01f756561811ac5d6eb9f098 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sun, 13 Aug 2023 00:57:44 +0200 Subject: [PATCH 09/11] Remove spaces in resources. --- ...lider Border.png => SquareWhiteSliderBorder.png} | Bin ...er Fill Bar.png => SquareWhiteSliderFillBar.png} | Bin ... Slider Thumb.png => SquareWhiteSliderThumb.png} | Bin examples/test-stretch/game.json | 6 +++--- 4 files changed, 3 insertions(+), 3 deletions(-) rename examples/test-stretch/assets/{Square White Slider Border.png => SquareWhiteSliderBorder.png} (100%) rename examples/test-stretch/assets/{Square White Slider Fill Bar.png => SquareWhiteSliderFillBar.png} (100%) rename examples/test-stretch/assets/{Square White Slider Thumb.png => SquareWhiteSliderThumb.png} (100%) diff --git a/examples/test-stretch/assets/Square White Slider Border.png b/examples/test-stretch/assets/SquareWhiteSliderBorder.png similarity index 100% rename from examples/test-stretch/assets/Square White Slider Border.png rename to examples/test-stretch/assets/SquareWhiteSliderBorder.png diff --git a/examples/test-stretch/assets/Square White Slider Fill Bar.png b/examples/test-stretch/assets/SquareWhiteSliderFillBar.png similarity index 100% rename from examples/test-stretch/assets/Square White Slider Fill Bar.png rename to examples/test-stretch/assets/SquareWhiteSliderFillBar.png diff --git a/examples/test-stretch/assets/Square White Slider Thumb.png b/examples/test-stretch/assets/SquareWhiteSliderThumb.png similarity index 100% rename from examples/test-stretch/assets/Square White Slider Thumb.png rename to examples/test-stretch/assets/SquareWhiteSliderThumb.png diff --git a/examples/test-stretch/game.json b/examples/test-stretch/game.json index 40da64ee4..26cbb57e2 100644 --- a/examples/test-stretch/game.json +++ b/examples/test-stretch/game.json @@ -73,7 +73,7 @@ }, { "alwaysLoaded": false, - "file": "assets/Square White Slider Border.png", + "file": "assets/SquareWhiteSliderBorder.png", "kind": "image", "metadata": "", "name": "Square White Slider Border.png", @@ -86,7 +86,7 @@ }, { "alwaysLoaded": false, - "file": "assets/Square White Slider Fill Bar.png", + "file": "assets/SquareWhiteSliderFillBar.png", "kind": "image", "metadata": "", "name": "Square White Slider Fill Bar.png", @@ -99,7 +99,7 @@ }, { "alwaysLoaded": false, - "file": "assets/Square White Slider Thumb.png", + "file": "assets/SquareWhiteSliderThumb.png", "kind": "image", "metadata": "", "name": "Square White Slider Thumb.png", From 5de35634f4548b7abfd55b17cdd56b708ca17880 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sun, 13 Aug 2023 01:13:15 +0200 Subject: [PATCH 10/11] Add missing dot. --- examples/test-stretch/game.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/test-stretch/game.json b/examples/test-stretch/game.json index 26cbb57e2..bc39c4c2c 100644 --- a/examples/test-stretch/game.json +++ b/examples/test-stretch/game.json @@ -3675,11 +3675,11 @@ "objectGroups": [] }, { - "description": "Progress of a tween (between 0.0 and 1.0)", + "description": "the progress of a tween (between 0.0 and 1.0).", "fullName": "Progress of a tween", "functionType": "ExpressionAndCondition", "name": "Progress", - "sentence": "The progress of tween _PARAM2_", + "sentence": "the progress of tween _PARAM2_", "events": [ { "type": "BuiltinCommonInstructions::Standard", From ce8027f7084c90a32d7b2ca761187b46193b9d17 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Sat, 26 Aug 2023 19:16:51 +0200 Subject: [PATCH 11/11] Update the extension. --- examples/test-stretch/game.json | 1454 ++++++++++++++++++++++++++++++- 1 file changed, 1451 insertions(+), 3 deletions(-) diff --git a/examples/test-stretch/game.json b/examples/test-stretch/game.json index bc39c4c2c..18ac683a4 100644 --- a/examples/test-stretch/game.json +++ b/examples/test-stretch/game.json @@ -1107,9 +1107,11 @@ "version": "0.0.1", "description": "Change models proportions and orientation over time to make smooth animations.", "tags": [ + "3d", "tween", "smooth", - "interpolation" + "interpolation", + "wobble" ], "authorIds": [ "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" @@ -1483,6 +1485,56 @@ } ], "objectGroups": [] + }, + { + "description": "Exponentially tween bewteen 2 values according to an easing function.", + "fullName": "Ease exponentially", + "functionType": "Expression", + "name": "EaseExp", + "private": true, + "sentence": "the exponent-tweened value of tween _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "exp(Tween::Ease(GetArgumentAsString(\"Easing\"), log(GetArgumentAsNumber(\"InitialValue\")), log(GetArgumentAsNumber(\"TargetedValue\")), GetArgumentAsNumber(\"Weighting\")))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Easing", + "name": "Easing", + "type": "string" + }, + { + "description": "Initial value", + "name": "InitialValue", + "type": "expression" + }, + { + "description": "Targeted value", + "name": "TargetedValue", + "type": "expression" + }, + { + "description": "Weighting", + "name": "Weighting", + "type": "expression" + } + ], + "objectGroups": [] } ], "eventsBasedBehaviors": [ @@ -1678,7 +1730,7 @@ "type": "identifier" }, { - "description": "Stretch", + "description": "Scale volume", "name": "TargetedValue", "type": "expression" }, @@ -2160,7 +2212,7 @@ "value": "SetReturnNumber" }, "parameters": [ - "exp(Tween::Ease(Object.Behavior::Easing(VariableString(_Tween3D.Identifier)), log(Object.Behavior::InitialValue(VariableString(_Tween3D.Identifier))), log(Object.Behavior::TargetedValue(VariableString(_Tween3D.Identifier))), Object.Behavior::Progress(VariableString(_Tween3D.Identifier))))" + "Tween3D::EaseExp(Object.Behavior::Easing(VariableString(_Tween3D.Identifier)), Object.Behavior::InitialValue(VariableString(_Tween3D.Identifier)), Object.Behavior::TargetedValue(VariableString(_Tween3D.Identifier)), Object.Behavior::Progress(VariableString(_Tween3D.Identifier)))" ] } ] @@ -3826,6 +3878,1402 @@ ], "propertyDescriptors": [], "sharedPropertyDescriptors": [] + }, + { + "description": "Squash and stretch a 3D model in loop.", + "fullName": "3D wobble", + "name": "Wobble", + "objectType": "Scene3D::Model3DObject", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::UpdateScaleVolume" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::UpdateStretch" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tween", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Tween3D::Wobble::PropertyScaleMinTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyScaleMinTweenDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMinTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::TimeDelta()" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Tween3D::EaseExp(Object.Behavior::PropertyScaleMinTweenEasing(), Object.Behavior::PropertyScaleMinTweenInitialValue(), Object.Behavior::PropertyScaleMinTweenTarget(), Object.Behavior::PropertyScaleMinTweenTime() / Object.Behavior::PropertyScaleMinTweenDuration())" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Tween3D::Wobble::PropertyScaleMinTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "Object.Behavior::PropertyScaleMinTweenDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyScaleMinTweenTarget()" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Tween3D::Wobble::PropertyScaleMaxTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Object.Behavior::PropertyScaleMaxTweenDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMaxTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::TimeDelta()" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Tween3D::EaseExp(Object.Behavior::PropertyScaleMaxTweenEasing(), Object.Behavior::PropertyScaleMaxTweenInitialValue(), Object.Behavior::PropertyScaleMaxTweenTarget(), Object.Behavior::PropertyScaleMaxTweenTime() / Object.Behavior::PropertyScaleMaxTweenDuration())" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Tween3D::Wobble::PropertyScaleMaxTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "Object.Behavior::PropertyScaleMaxTweenDuration()" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyScaleMinTweenTarget()" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Wobble", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::UpdateScaleVolume" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::UpdateStretch" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyAngle" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "mod(Object.Behavior::TimeDelta() * 2 * Pi()\n / Object.Behavior::PropertyPeriodDuration(), 2 * Pi())" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the minimum scale volume of the object.", + "fullName": "Minimum scale volume", + "functionType": "ExpressionAndCondition", + "group": "3D wobble scale configuration", + "name": "ScaleMin", + "sentence": "the minimum scale volume", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyScaleMin()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ScaleMin", + "name": "SetScaleMin", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum scale volume of the object.", + "fullName": "Maximum scale volume", + "functionType": "ExpressionAndCondition", + "group": "3D wobble scale configuration", + "name": "ScaleMax", + "sentence": "the maximum scale volume", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyScaleMax()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ScaleMax", + "name": "SetScaleMax", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Tweens the minimum scale volume from its current value to a new one. The scale volume can never be 0 or less.", + "fullName": "Tween minimum scale volume", + "functionType": "Action", + "group": "3D wobble scale configuration", + "name": "TweenScaleMin", + "sentence": "Tween the minimum scale volume of object _PARAM0_ to _PARAM2_ over _PARAM3_ seconds with _PARAM4_ easing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMinTweenInitialValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::ScaleMin()" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMinTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMinTweenTarget" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TargetedValue\")" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMinTweenDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Duration\")" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMinTweenEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Easing\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + }, + { + "description": "Minimum scale volume", + "name": "TargetedValue", + "type": "expression" + }, + { + "description": "Duration (in seconds)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "description": "Tweens the maximum scale volume from its current value to a new one. The scale volume can never be 0 or less.", + "fullName": "Tween maximum scale volume", + "functionType": "Action", + "group": "3D wobble scale configuration", + "name": "TweenScaleMax", + "sentence": "Tween the maximum scale volume of object _PARAM0_ to _PARAM2_ over _PARAM3_ seconds with _PARAM4_ easing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMaxTweenInitialValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::ScaleMax()" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMaxTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMaxTweenTarget" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"TargetedValue\")" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMaxTweenDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Duration\")" + ] + }, + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScaleMaxTweenEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsString(\"Easing\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + }, + { + "description": "Maximum scale volume", + "name": "TargetedValue", + "type": "expression" + }, + { + "description": "Duration (in seconds)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + } + ], + "objectGroups": [] + }, + { + "fullName": "Time delta", + "functionType": "Expression", + "name": "TimeDelta", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "TimeDelta() * LayerTimeScale(Object.Layer())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Update scale volume", + "functionType": "Action", + "name": "UpdateScaleVolume", + "private": true, + "sentence": "Update scale volume of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::SetScaleVolume" + }, + "parameters": [ + "", + "=", + "exp(log(Object.Behavior::PropertyScaleMin()) + (log(Object.Behavior::PropertyScaleMax()) - log(Object.Behavior::PropertyScaleMin())) * sin(Object.Behavior:: PropertyAngle() + Object.Behavior::PropertyScalePeriodOffset() / Object.Behavior::PropertyPeriodDuration() * 2 * Pi()))", + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Update stretch", + "functionType": "Action", + "name": "UpdateStretch", + "private": true, + "sentence": "Update stretch of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::SetStretchZ" + }, + "parameters": [ + "", + "=", + "exp(log(Object.Behavior::PropertyStretchMin()) + (log(Object.Behavior::PropertyStretchMax()) - log(Object.Behavior::PropertyStretchMin())) * sin(Object.Behavior:: PropertyAngle() + Object.Behavior::PropertyStretchPeriodOffset() / Object.Behavior::PropertyPeriodDuration() * 2 * Pi()))", + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the cycle duration of the object.", + "fullName": "Cycle duration", + "functionType": "ExpressionAndCondition", + "group": "3D wobble configuration", + "name": "PeriodDuration", + "sentence": "the cycle duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyPeriodDuration()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PeriodDuration", + "name": "SetPeriodDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyPeriodDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the scale cycle offset of the object.", + "fullName": "Scale cycle offset", + "functionType": "ExpressionAndCondition", + "group": "3D wobble scale configuration", + "name": "ScalePeriodOffset", + "sentence": "the scale cycle offset", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyScalePeriodOffset()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ScalePeriodOffset", + "name": "SetScalePeriodOffset", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyScalePeriodOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the minimum stretch of the object.", + "fullName": "Minimum stretch", + "functionType": "ExpressionAndCondition", + "group": "3D wobble stretch configuration", + "name": "StretchMin", + "sentence": "the minimum stretch", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyStretchMin()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "StretchMin", + "name": "SetStretchMin", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyStretchMin" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum stretch of the object.", + "fullName": "Maximum stretch", + "functionType": "ExpressionAndCondition", + "group": "3D wobble stretch configuration", + "name": "StretchMax", + "sentence": "the maximum stretch", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyStretchMax()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "StretchMax", + "name": "SetStretchMax", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyStretchMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the stretch cycle offset of the object.", + "fullName": "Stretch cycle offset", + "functionType": "ExpressionAndCondition", + "group": "3D wobble stretch configuration", + "name": "StretchPeriodOffset", + "sentence": "the stretch cycle offset", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyStretchPeriodOffset()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "StretchPeriodOffset", + "name": "SetStretchPeriodOffset", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween3D::Wobble::SetPropertyStretchPeriodOffset" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Scene3D::Model3DObject", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Tween3D::Wobble", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0.75", + "type": "Number", + "unit": "Dimensionless", + "label": "Minimum scale volume", + "description": "", + "group": "Scale", + "extraInformation": [], + "hidden": false, + "name": "ScaleMin" + }, + { + "value": "1", + "type": "Number", + "unit": "Dimensionless", + "label": "Maximum scale volume", + "description": "", + "group": "Scale", + "extraInformation": [], + "hidden": false, + "name": "ScaleMax" + }, + { + "value": "1", + "type": "Number", + "unit": "Second", + "label": "Cycle duration", + "description": "", + "group": "", + "extraInformation": [], + "hidden": false, + "name": "PeriodDuration" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "Scale cycle offset", + "description": "", + "group": "Scale", + "extraInformation": [], + "hidden": false, + "name": "ScalePeriodOffset" + }, + { + "value": "1", + "type": "Number", + "unit": "Dimensionless", + "label": "Minimum stretch", + "description": "", + "group": "Stretch", + "extraInformation": [], + "hidden": false, + "name": "StretchMin" + }, + { + "value": "1.25", + "type": "Number", + "unit": "Dimensionless", + "label": "Maximum stretch", + "description": "", + "group": "Stretch", + "extraInformation": [], + "hidden": false, + "name": "StretchMax" + }, + { + "value": "-0.25", + "type": "Number", + "unit": "Second", + "label": "Stretch cycle offset", + "description": "", + "group": "Stretch", + "extraInformation": [], + "hidden": false, + "name": "StretchPeriodOffset" + }, + { + "value": "0", + "type": "Number", + "unit": "DegreeAngle", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Angle" + }, + { + "value": "0", + "type": "Number", + "unit": "Dimensionless", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ScaleMinTweenTarget" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ScaleMinTweenDuration" + }, + { + "value": "", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ScaleMinTweenEasing" + }, + { + "value": "0", + "type": "Number", + "unit": "Dimensionless", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ScaleMaxTweenTarget" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ScaleMaxTweenDuration" + }, + { + "value": "", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ScaleMaxTweenEasing" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ScaleMinTweenTime" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ScaleMaxTweenTime" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ScaleMinTweenInitialValue" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ScaleMaxTweenInitialValue" + } + ], + "sharedPropertyDescriptors": [] } ], "eventsBasedObjects": []