From 575f4f1ed0837f1604d552361aca0e134054900d Mon Sep 17 00:00:00 2001 From: Yaroslav Nazarenko <64281856+Jurfix@users.noreply.github.com> Date: Fri, 25 Oct 2024 17:39:19 +0300 Subject: [PATCH 01/10] [3D truck extreme] --- examples/3d-truck-extreme/Black.png | Bin 0 -> 198 bytes examples/3d-truck-extreme/Car2.glb | Bin 0 -> 95964 bytes examples/3d-truck-extreme/Truck Extreme.json | 40992 ++++++++++++++++ ...icle_Car_Door_Opening_Interior_Mono_02.wav | Bin 0 -> 63168 bytes .../Vehicle_Car_Stop_Engine_Exterior_Mono.wav | Bin 0 -> 332470 bytes examples/3d-truck-extreme/Wheel4.glb | Bin 0 -> 41716 bytes .../3d-truck-extreme/assets/Arrow Side.glb | Bin 0 -> 6604 bytes .../assets/Building C Without Base.glb | Bin 0 -> 64856 bytes .../assets/Building D Without Base.glb | Bin 0 -> 76988 bytes .../assets/Building H Without Base.glb | Bin 0 -> 108188 bytes .../assets/Car pedal round button.png | Bin 0 -> 1042 bytes .../assets/Construction Barrier.glb | Bin 0 -> 4668 bytes .../3d-truck-extreme/assets/Goal Flag.glb | Bin 0 -> 9048 bytes .../assets/Hazard Spike Trap.glb | Bin 0 -> 31016 bytes .../assets/Launch round button.png | Bin 0 -> 1117 bytes .../3d-truck-extreme/assets/Road Side.glb | Bin 0 -> 6192 bytes .../assets/Road Slant Curve.glb | Bin 0 -> 35472 bytes .../assets/Square Green Slider Border.png | Bin 0 -> 217 bytes .../assets/Square Green Slider Fill Bar.png | Bin 0 -> 170 bytes .../assets/Square Green Slider Thumb.png | Bin 0 -> 161 bytes .../3d-truck-extreme/assets/Tile High.glb | Bin 0 -> 1968 bytes .../assets/Tile Slant High.glb | Bin 0 -> 1992 bytes .../3d-truck-extreme/assets/Tile Slant.glb | Bin 0 -> 1984 bytes .../3d-truck-extreme/assets/Transperent.png | Bin 0 -> 198 bytes .../assets/Yellow Button_Hovered.png | Bin 0 -> 2270 bytes .../assets/Yellow Button_Idle.png | Bin 0 -> 2285 bytes .../assets/Yellow Button_Pressed.png | Bin 0 -> 2187 bytes .../3d-truck-extreme/assets/spikesLarge.glb | Bin 0 -> 19304 bytes .../assets/tiled_Sky Background.png | Bin 0 -> 13628 bytes examples/3d-truck-extreme/motor sound.wav | Bin 0 -> 453714 bytes 30 files changed, 40992 insertions(+) create mode 100644 examples/3d-truck-extreme/Black.png create mode 100644 examples/3d-truck-extreme/Car2.glb create mode 100644 examples/3d-truck-extreme/Truck Extreme.json create mode 100644 examples/3d-truck-extreme/Vehicle_Car_Door_Opening_Interior_Mono_02.wav create mode 100644 examples/3d-truck-extreme/Vehicle_Car_Stop_Engine_Exterior_Mono.wav create mode 100644 examples/3d-truck-extreme/Wheel4.glb create mode 100644 examples/3d-truck-extreme/assets/Arrow Side.glb create mode 100644 examples/3d-truck-extreme/assets/Building C Without Base.glb create mode 100644 examples/3d-truck-extreme/assets/Building D Without Base.glb create mode 100644 examples/3d-truck-extreme/assets/Building H Without Base.glb create mode 100644 examples/3d-truck-extreme/assets/Car pedal round button.png create mode 100644 examples/3d-truck-extreme/assets/Construction Barrier.glb create mode 100644 examples/3d-truck-extreme/assets/Goal Flag.glb create mode 100644 examples/3d-truck-extreme/assets/Hazard Spike Trap.glb create mode 100644 examples/3d-truck-extreme/assets/Launch round button.png create mode 100644 examples/3d-truck-extreme/assets/Road Side.glb create mode 100644 examples/3d-truck-extreme/assets/Road Slant Curve.glb create mode 100644 examples/3d-truck-extreme/assets/Square Green Slider Border.png create mode 100644 examples/3d-truck-extreme/assets/Square Green Slider Fill Bar.png create mode 100644 examples/3d-truck-extreme/assets/Square Green Slider Thumb.png create mode 100644 examples/3d-truck-extreme/assets/Tile High.glb create mode 100644 examples/3d-truck-extreme/assets/Tile Slant High.glb create mode 100644 examples/3d-truck-extreme/assets/Tile Slant.glb create mode 100644 examples/3d-truck-extreme/assets/Transperent.png create mode 100644 examples/3d-truck-extreme/assets/Yellow Button_Hovered.png create mode 100644 examples/3d-truck-extreme/assets/Yellow Button_Idle.png create mode 100644 examples/3d-truck-extreme/assets/Yellow Button_Pressed.png create mode 100644 examples/3d-truck-extreme/assets/spikesLarge.glb create mode 100644 examples/3d-truck-extreme/assets/tiled_Sky Background.png create mode 100644 examples/3d-truck-extreme/motor sound.wav diff --git a/examples/3d-truck-extreme/Black.png b/examples/3d-truck-extreme/Black.png new file mode 100644 index 0000000000000000000000000000000000000000..21dd22d69303ae38ab4d286f8b99fca62a382f4c GIT binary patch literal 198 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 y^lm%yZ-Mu3hV=", + "270" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetAngle" + }, + "parameters": [ + "CarBody", + "=", + "-90" + ] + } + ] + } + ], + "variables": [ + { + "folded": true, + "name": "MotorIsUsed", + "type": "boolean", + "value": false + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Dangers", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Periodic activation/deactivation of spikes" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "TimerPaused" + }, + "parameters": [ + "", + "\"SpikesTimerText\"" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"Spikes\"", + "3.0", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "AnimatableCapability::AnimatableBehavior::SetName" + }, + "parameters": [ + "HazardSpikeTrap", + "Animation", + "=", + "\"Activate\"" + ] + }, + { + "type": { + "value": "PauseTimer" + }, + "parameters": [ + "", + "\"SpikesTimerText\"" + ] + }, + { + "type": { + "value": "Wait" + }, + "parameters": [ + "0.4" + ] + }, + { + "type": { + "value": "UnPauseTimer" + }, + "parameters": [ + "", + "\"SpikesTimerText\"" + ] + }, + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "", + "\"SpikesTimerText\"" + ] + }, + { + "type": { + "value": "AnimatableCapability::AnimatableBehavior::SetName" + }, + "parameters": [ + "HazardSpikeTrap", + "Animation", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "SpikesTimerText", + "Text", + "=", + "ToString(roundTo(3-TimerElapsedTime(\"SpikesTimerText\"),2))" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::And" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "Physics2::Collision" + }, + "parameters": [ + "CarBody", + "Physics2", + "Obstacles", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "abs(CarBody.Angle())", + ">", + "90" + ] + } + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::And" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "Wheels", + "HazardSpikeTrap", + "", + "", + "yes" + ] + }, + { + "type": { + "value": "AnimatableCapability::AnimatableBehavior::Name" + }, + "parameters": [ + "HazardSpikeTrap", + "Animation", + "=", + "\"Activate\"" + ] + } + ] + }, + { + "type": { + "value": "CollisionNP" + }, + "parameters": [ + "CarBody", + "SpikesLarge", + "Obstacles", + "", + "" + ] + } + ] + }, + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "GameOver", + "False", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "GameOver", + "True", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TimerPaused" + }, + "parameters": [ + "", + "\"SpikesTimerText\"" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "TimerPaused" + }, + "parameters": [ + "", + "\"TimeCounter\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "SpikesTimerText", + "Text", + "=", + "\"0.00\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TimerPaused" + }, + "parameters": [ + "", + "\"TimeCounter\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "SpikesTimerText", + "Text", + "=", + "\"3.00\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareTimer" + }, + "parameters": [ + "", + "\"SpikesTimerText\"", + "<=", + "1.5" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetOutlineColor" + }, + "parameters": [ + "SpikesTimerText", + "=", + "\"38;187;32\"", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareTimer" + }, + "parameters": [ + "", + "\"SpikesTimerText\"", + ">", + "1.5" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetOutlineColor" + }, + "parameters": [ + "SpikesTimerText", + "=", + "\"208;2;27\"", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Game Over", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "GameOver", + "True", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "StopSoundCanal" + }, + "parameters": [ + "", + "0" + ] + }, + { + "type": { + "value": "PlaySound" + }, + "parameters": [ + "", + "Vehicle_Car_Door_Opening_Interior_Mono_02.wav", + "1", + "50", + "1" + ] + }, + { + "type": { + "value": "PlaySound" + }, + "parameters": [ + "", + "Vehicle_Car_Stop_Engine_Exterior_Mono.wav", + "", + "30", + "1" + ] + }, + { + "type": { + "value": "Physics2::Remove joint" + }, + "parameters": [ + "CarBody", + "Physics2", + "WheelJoint1" + ] + }, + { + "type": { + "value": "Physics2::Remove joint" + }, + "parameters": [ + "CarBody", + "Physics2", + "WheelJoint2" + ] + }, + { + "type": { + "value": "Physics2::Remove joint" + }, + "parameters": [ + "CarBody", + "Physics2", + "WheelJoint3" + ] + }, + { + "type": { + "value": "Physics2::Remove joint" + }, + "parameters": [ + "CarBody", + "Physics2", + "WheelJoint4" + ] + }, + { + "type": { + "value": "Wait" + }, + "parameters": [ + "2" + ] + }, + { + "type": { + "value": "ShowLayer" + }, + "parameters": [ + "", + "\"Game Over\"" + ] + }, + { + "type": { + "value": "HideLayer" + }, + "parameters": [ + "", + "\"UI\"" + ] + }, + { + "type": { + "value": "HideLayer" + }, + "parameters": [ + "", + "\"Mobile Controls\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "\"Game Over\"" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResizableCapability::ResizableBehavior::SetSize" + }, + "parameters": [ + "Black", + "Resizable", + "SceneWindowWidth()", + "SceneWindowHeight()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "RetryButton", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Scene" + }, + "parameters": [ + "", + "\"Game\"", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "MenuButton", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Scene" + }, + "parameters": [ + "", + "\"Menu\"", + "" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Level Complete", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Crossing the finish line" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PosX" + }, + "parameters": [ + "CarBody", + ">", + "GoalFlag.X()" + ] + }, + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "GameOver", + "False", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetBooleanVariable" + }, + "parameters": [ + "LevelComplete", + "True", + "" + ] + }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "Time", + "=", + "TimerElapsedTime(\"TimeCounter\")" + ] + }, + { + "type": { + "value": "Wait" + }, + "parameters": [ + "2" + ] + }, + { + "type": { + "value": "ShowLayer" + }, + "parameters": [ + "", + "\"Level Complete\"" + ] + }, + { + "type": { + "value": "HideLayer" + }, + "parameters": [ + "", + "\"UI\"" + ] + }, + { + "type": { + "value": "HideLayer" + }, + "parameters": [ + "", + "\"Mobile Controls\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LayerVisible" + }, + "parameters": [ + "", + "\"Level Complete\"" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "LevelCompleteText", + "Text", + "=", + "\"Level \" + SelectedLevel + \" Complete!\"" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::Activate" + }, + "parameters": [ + "SubmitTimeButton", + "no", + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "BestTime", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "BestTime", + "=", + "Time" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "LevelCompleteTimeText", + "Text", + "=", + "\"Time: \" + TimeText.Text::Value()" + ] + }, + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "LevelCompleteBestTimeText", + "Text", + "=", + "\"Best time: \" + TimeFormatter::SecondsToHHMMSS000(BestTime)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "Time", + "<=", + "BestTime" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::Activate" + }, + "parameters": [ + "SubmitTimeButton", + "yes", + "" + ] + }, + { + "type": { + "value": "PlayerAuthentication::DisplayAuthenticationBanner" + }, + "parameters": [ + "" + ] + }, + { + "type": { + "value": "EcrireFichierExp" + }, + "parameters": [ + "\"Save\"", + "\"BestTimeLevel\"+SelectedLevel", + "Time" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResizableCapability::ResizableBehavior::SetSize" + }, + "parameters": [ + "Black", + "Resizable", + "SceneWindowWidth()", + "SceneWindowHeight()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "MenuButton", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Scene" + }, + "parameters": [ + "", + "\"Menu\"", + "" + ] + }, + { + "type": { + "value": "PlayerAuthentication::HideAuthenticationBanner" + }, + "parameters": [ + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "SubmitTimeButton", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlayerAuthentication::IsPlayerAuthenticated" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "await": true, + "value": "Leaderboards::SaveConnectedPlayerScore" + }, + "parameters": [ + "", + "Leaderboard[SelectedLevel]", + "Time" + ] + }, + { + "type": { + "value": "Leaderboards::DisplayLeaderboard" + }, + "parameters": [ + "", + "Leaderboard[SelectedLevel]", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlayerAuthentication::IsPlayerAuthenticated" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "await": true, + "value": "PlayerAuthentication::OpenAuthenticationWindow" + }, + "parameters": [ + "" + ] + }, + { + "type": { + "await": true, + "value": "Leaderboards::SaveConnectedPlayerScore" + }, + "parameters": [ + "", + "Leaderboard[SelectedLevel]", + "Time" + ] + }, + { + "type": { + "value": "Leaderboards::DisplayLeaderboard" + }, + "parameters": [ + "", + "Leaderboard[SelectedLevel]", + "yes" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Leaderboards::HasLastSaveErrored" + }, + "parameters": [ + "Leaderboard[SelectedLevel]" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PlayerAuthentication::DisplayAuthenticationBanner" + }, + "parameters": [ + "" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::SetLabelText" + }, + "parameters": [ + "SubmitTimeButton", + "\"ERROR!\"", + "" + ] + }, + { + "type": { + "value": "Wait" + }, + "parameters": [ + "5" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::SetLabelText" + }, + "parameters": [ + "SubmitTimeButton", + "\"SUBMIT TIME\"", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "NextButton", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Scene" + }, + "parameters": [ + "", + "\"Game\"", + "" + ] + }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "SelectedLevel", + "+", + "1" + ] + }, + { + "type": { + "value": "PlayerAuthentication::HideAuthenticationBanner" + }, + "parameters": [ + "" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "SelectedLevel", + ">", + "6" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "SelectedLevel", + "=", + "1" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "Background", + "renderingType": "", + "visibility": true, + "cameras": [], + "effects": [ + { + "effectType": "Scene3D::HemisphereLight", + "name": "3D Light", + "doubleParameters": { + "elevation": 45, + "intensity": 1, + "rotation": 0 + }, + "stringParameters": { + "groundColor": "64;64;64", + "skyColor": "255;255;255", + "top": "Z+" + }, + "booleanParameters": {} + } + ] + }, + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [ + { + "effectType": "Scene3D::HemisphereLight", + "name": "3D Light", + "doubleParameters": { + "elevation": 45, + "intensity": 1, + "rotation": 0 + }, + "stringParameters": { + "groundColor": "64;64;64", + "skyColor": "255;255;255", + "top": "Y-" + }, + "booleanParameters": {} + } + ] + }, + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "Mobile Controls", + "renderingType": "", + "visibility": false, + "cameras": [], + "effects": [ + { + "effectType": "Scene3D::HemisphereLight", + "name": "3D Light", + "doubleParameters": { + "elevation": 45, + "intensity": 1, + "rotation": 0 + }, + "stringParameters": { + "groundColor": "64;64;64", + "skyColor": "255;255;255", + "top": "Y-" + }, + "booleanParameters": {} + } + ] + }, + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "UI", + "renderingType": "", + "visibility": true, + "cameras": [], + "effects": [ + { + "effectType": "Scene3D::HemisphereLight", + "name": "3D Light", + "doubleParameters": { + "elevation": 45, + "intensity": 1, + "rotation": 0 + }, + "stringParameters": { + "groundColor": "64;64;64", + "skyColor": "255;255;255", + "top": "Y-" + }, + "booleanParameters": {} + } + ] + }, + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "Game Over", + "renderingType": "", + "visibility": false, + "cameras": [], + "effects": [ + { + "effectType": "Scene3D::HemisphereLight", + "name": "3D Light", + "doubleParameters": { + "elevation": 45, + "intensity": 1, + "rotation": 0 + }, + "stringParameters": { + "groundColor": "64;64;64", + "skyColor": "255;255;255", + "top": "Y-" + }, + "booleanParameters": {} + } + ] + }, + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "Level Complete", + "renderingType": "", + "visibility": false, + "cameras": [], + "effects": [ + { + "effectType": "Scene3D::HemisphereLight", + "name": "3D Light", + "doubleParameters": { + "elevation": 45, + "intensity": 1, + "rotation": 0 + }, + "stringParameters": { + "groundColor": "64;64;64", + "skyColor": "255;255;255", + "top": "Y-" + }, + "booleanParameters": {} + } + ] + } + ], + "behaviorsSharedData": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior" + }, + { + "name": "Animation", + "type": "AnimatableCapability::AnimatableBehavior" + }, + { + "name": "ButtonFSM", + "type": "ButtonStates::ButtonFSM" + }, + { + "name": "Effect", + "type": "EffectCapability::EffectBehavior" + }, + { + "name": "Flippable", + "type": "FlippableCapability::FlippableBehavior" + }, + { + "name": "HorizontalTiledSpriteParallax", + "type": "Parallax::HorizontalTiledSpriteParallax" + }, + { + "name": "Object3D", + "type": "Scene3D::Base3DBehavior" + }, + { + "name": "Opacity", + "type": "OpacityCapability::OpacityBehavior" + }, + { + "name": "Physics2", + "type": "Physics2::Physics2Behavior", + "gravityX": 0, + "gravityY": 8, + "worldScale": 300, + "scaleX": 300, + "scaleY": 300 + }, + { + "name": "Resizable", + "type": "ResizableCapability::ResizableBehavior" + }, + { + "name": "Scale", + "type": "ScalableCapability::ScalableBehavior" + }, + { + "name": "SmoothCamera", + "type": "SmoothCamera::SmoothCamera" + }, + { + "name": "Text", + "type": "TextContainerCapability::TextContainerBehavior" + } + ] + } + ], + "externalEvents": [], + "eventsFunctionsExtensions": [ + { + "author": "", + "category": "Text", + "extensionNamespace": "", + "fullName": "3D text", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWZvcm1hdC10ZXh0IiB3aWR0aD0iMjQiIGhlaWdodD0iMjQiIHZpZXdCb3g9IjAgMCAyNCAyNCI+PHBhdGggZD0iTTE4LjUsNEwxOS42Niw4LjM1TDE4LjcsOC42MUMxOC4yNSw3Ljc0IDE3Ljc5LDYuODcgMTcuMjYsNi40M0MxNi43Myw2IDE2LjExLDYgMTUuNSw2SDEzVjE2LjVDMTMsMTcgMTMsMTcuNSAxMy4zMywxNy43NUMxMy42NywxOCAxNC4zMywxOCAxNSwxOFYxOUg5VjE4QzkuNjcsMTggMTAuMzMsMTggMTAuNjcsMTcuNzVDMTEsMTcuNSAxMSwxNyAxMSwxNi41VjZIOC41QzcuODksNiA3LjI3LDYgNi43NCw2LjQzQzYuMjEsNi44NyA1Ljc1LDcuNzQgNS4zLDguNjFMNC4zNCw4LjM1TDUuNSw0SDE4LjVaIiAvPjwvc3ZnPg==", + "name": "Text3D", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/0b4ef00ba832f327e84d09b036d18f3fc8d4805e3020f95b034a23f558e17a6c_format-text.svg", + "shortDescription": "Display texts in 3D scenes.", + "version": "0.1.1", + "description": "Display texts with 3D position and rotation.", + "origin": { + "identifier": "Text3D", + "name": "gdevelop-extension-store" + }, + "tags": [ + "3d" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [ + { + "description": "Define helper classes JavaScript code.", + "fullName": "Define helper classes", + "functionType": "Action", + "name": "DefineHelperClasses", + "private": true, + "sentence": "Define helper classes JavaScript code", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "if (gdjs.__text3DExtension) {", + " return;", + "}", + "", + "class Text3DRenderer extends gdjs.CustomRuntimeObject3DRenderer {", + " constructor(", + " object,", + " instanceContainer,", + " parent", + " ) {", + " super(object, instanceContainer, parent);", + " }", + "", + " _updateThreeGroup() {", + " this._object.setScaleX(1);", + " this._object.setScaleY(1);", + " this._object.setScaleZ(1);", + "", + " super._updateThreeGroup();", + " }", + "}", + "", + "", + "// troika-THREE-text 0.49.0", + "// https://github.com/protectwise/troika/tree/main/packages/troika-THREE-text", + "", + " /**", + " * Main content for the worker that handles the loading and execution of", + " * modules within it.", + " */", + " function workerBootstrap() {", + " var modules = Object.create(null);", + "", + " // Handle messages for registering a module", + " function registerModule(ref, callback) {", + " var id = ref.id;", + " var name = ref.name;", + " var dependencies = ref.dependencies; if ( dependencies === void 0 ) dependencies = [];", + " var init = ref.init; if ( init === void 0 ) init = function(){};", + " var getTransferables = ref.getTransferables; if ( getTransferables === void 0 ) getTransferables = null;", + "", + " // Only register once", + " if (modules[id]) { return }", + "", + " try {", + " // If any dependencies are modules, ensure they're registered and grab their value", + " dependencies = dependencies.map(function (dep) {", + " if (dep && dep.isWorkerModule) {", + " registerModule(dep, function (depResult) {", + " if (depResult instanceof Error) { throw depResult }", + " });", + " dep = modules[dep.id].value;", + " }", + " return dep", + " });", + "", + " // Rehydrate functions", + " init = rehydrate((\"<\" + name + \">.init\"), init);", + " if (getTransferables) {", + " getTransferables = rehydrate((\"<\" + name + \">.getTransferables\"), getTransferables);", + " }", + "", + " // Initialize the module and store its value", + " var value = null;", + " if (typeof init === 'function') {", + " value = init.apply(void 0, dependencies);", + " } else {", + " console.error('worker module init function failed to rehydrate');", + " }", + " modules[id] = {", + " id: id,", + " value: value,", + " getTransferables: getTransferables", + " };", + " callback(value);", + " } catch(err) {", + " if (!(err && err.noLog)) {", + " console.error(err);", + " }", + " callback(err);", + " }", + " }", + "", + " // Handle messages for calling a registered module's result function", + " function callModule(ref, callback) {", + " var ref$1;", + "", + " var id = ref.id;", + " var args = ref.args;", + " if (!modules[id] || typeof modules[id].value !== 'function') {", + " callback(new Error((\"Worker module \" + id + \": not found or its 'init' did not return a function\")));", + " }", + " try {", + " var result = (ref$1 = modules[id]).value.apply(ref$1, args);", + " if (result && typeof result.then === 'function') {", + " result.then(handleResult, function (rej) { return callback(rej instanceof Error ? rej : new Error('' + rej)); });", + " } else {", + " handleResult(result);", + " }", + " } catch(err) {", + " callback(err);", + " }", + " function handleResult(result) {", + " try {", + " var tx = modules[id].getTransferables && modules[id].getTransferables(result);", + " if (!tx || !Array.isArray(tx) || !tx.length) {", + " tx = undefined; //postMessage is very picky about not passing null or empty transferables", + " }", + " callback(result, tx);", + " } catch(err) {", + " console.error(err);", + " callback(err);", + " }", + " }", + " }", + "", + " function rehydrate(name, str) {", + " var result = void 0;", + " self.troikaDefine = function (r) { return result = r; };", + " var url = URL.createObjectURL(", + " new Blob(", + " [(\"/** \" + (name.replace(/\\*/g, '')) + \" **/\\n\\ntroikaDefine(\\n\" + str + \"\\n)\")],", + " {type: 'application/javascript'}", + " )", + " );", + " try {", + " importScripts(url);", + " } catch(err) {", + " console.error(err);", + " }", + " URL.revokeObjectURL(url);", + " delete self.troikaDefine;", + " return result", + " }", + "", + " // Handler for all messages within the worker", + " self.addEventListener('message', function (e) {", + " var ref = e.data;", + " var messageId = ref.messageId;", + " var action = ref.action;", + " var data = ref.data;", + " try {", + " // Module registration", + " if (action === 'registerModule') {", + " registerModule(data, function (result) {", + " if (result instanceof Error) {", + " postMessage({", + " messageId: messageId,", + " success: false,", + " error: result.message", + " });", + " } else {", + " postMessage({", + " messageId: messageId,", + " success: true,", + " result: {isCallable: typeof result === 'function'}", + " });", + " }", + " });", + " }", + " // Invocation", + " if (action === 'callModule') {", + " callModule(data, function (result, transferables) {", + " if (result instanceof Error) {", + " postMessage({", + " messageId: messageId,", + " success: false,", + " error: result.message", + " });", + " } else {", + " postMessage({", + " messageId: messageId,", + " success: true,", + " result: result", + " }, transferables || undefined);", + " }", + " });", + " }", + " } catch(err) {", + " postMessage({", + " messageId: messageId,", + " success: false,", + " error: err.stack", + " });", + " }", + " });", + " }", + "", + " /**", + " * Fallback for `defineWorkerModule` that behaves identically but runs in the main", + " * thread, for when the execution environment doesn't support web workers or they", + " * are disallowed due to e.g. CSP security restrictions.", + " */", + " function defineMainThreadModule(options) {", + " var moduleFunc = function() {", + " var args = [], len = arguments.length;", + " while ( len-- ) args[ len ] = arguments[ len ];", + "", + " return moduleFunc._getInitResult().then(function (initResult) {", + " if (typeof initResult === 'function') {", + " return initResult.apply(void 0, args)", + " } else {", + " throw new Error('Worker module function was called but `init` did not return a callable function')", + " }", + " })", + " };", + " moduleFunc._getInitResult = function() {", + " // We can ignore getTransferables in main thread. TODO workerId?", + " var dependencies = options.dependencies;", + " var init = options.init;", + "", + " // Resolve dependencies", + " dependencies = Array.isArray(dependencies) ? dependencies.map(function (dep) { return dep && dep._getInitResult ? dep._getInitResult() : dep; }", + " ) : [];", + "", + " // Invoke init with the resolved dependencies", + " var initPromise = Promise.all(dependencies).then(function (deps) {", + " return init.apply(null, deps)", + " });", + "", + " // Cache the resolved promise for subsequent calls", + " moduleFunc._getInitResult = function () { return initPromise; };", + "", + " return initPromise", + " };", + " return moduleFunc", + " }", + "", + " var supportsWorkers = function () {", + " var supported = false;", + "", + " // Only attempt worker initialization in browsers; elsewhere it would just be", + " // noise e.g. loading into a Node environment for SSR.", + " if (typeof window !== 'undefined' && typeof window.document !== 'undefined') {", + " try {", + " // TODO additional checks for things like importScripts within the worker?", + " // Would need to be an async check.", + " var worker = new Worker(", + " URL.createObjectURL(new Blob([''], { type: 'application/javascript' }))", + " );", + " worker.terminate();", + " supported = true;", + " } catch (err) {", + " if (typeof process !== 'undefined' && process.env.NODE_ENV === 'test') ; else {", + " console.log(", + " (\"Troika createWorkerModule: web workers not allowed; falling back to main thread execution. Cause: [\" + (err.message) + \"]\")", + " );", + " }", + " }", + " }", + "", + " // Cached result", + " supportsWorkers = function () { return supported; };", + " return supported", + " };", + "", + " var _workerModuleId = 0;", + " var _messageId = 0;", + " var _allowInitAsString = false;", + " var workers = Object.create(null);", + " var registeredModules = Object.create(null); //workerId -> Set", + " var openRequests = Object.create(null);", + "", + "", + " /**", + " * Define a module of code that will be executed with a web worker. This provides a simple", + " * interface for moving chunks of logic off the main thread, and managing their dependencies", + " * among one another.", + " *", + " * @param {object} options", + " * @param {function} options.init", + " * @param {array} [options.dependencies]", + " * @param {function} [options.getTransferables]", + " * @param {string} [options.name]", + " * @param {string} [options.workerId]", + " * @return {function(...[*]): {then}}", + " */", + " function defineWorkerModule(options) {", + " if ((!options || typeof options.init !== 'function') && !_allowInitAsString) {", + " throw new Error('requires `options.init` function')", + " }", + " var dependencies = options.dependencies;", + " var init = options.init;", + " var getTransferables = options.getTransferables;", + " var workerId = options.workerId;", + "", + " if (!supportsWorkers()) {", + " return defineMainThreadModule(options)", + " }", + "", + " if (workerId == null) {", + " workerId = '#default';", + " }", + " var id = \"workerModule\" + (++_workerModuleId);", + " var name = options.name || id;", + " var registrationPromise = null;", + "", + " dependencies = dependencies && dependencies.map(function (dep) {", + " // Wrap raw functions as worker modules with no dependencies", + " if (typeof dep === 'function' && !dep.workerModuleData) {", + " _allowInitAsString = true;", + " dep = defineWorkerModule({", + " workerId: workerId,", + " name: (\"<\" + name + \"> function dependency: \" + (dep.name)),", + " init: (\"function(){return (\\n\" + (stringifyFunction(dep)) + \"\\n)}\")", + " });", + " _allowInitAsString = false;", + " }", + " // Grab postable data for worker modules", + " if (dep && dep.workerModuleData) {", + " dep = dep.workerModuleData;", + " }", + " return dep", + " });", + "", + " function moduleFunc() {", + " var args = [], len = arguments.length;", + " while ( len-- ) args[ len ] = arguments[ len ];", + "", + " // Register this module if needed", + " if (!registrationPromise) {", + " registrationPromise = callWorker(workerId,'registerModule', moduleFunc.workerModuleData);", + " var unregister = function () {", + " registrationPromise = null;", + " registeredModules[workerId].delete(unregister);", + " }", + " ;(registeredModules[workerId] || (registeredModules[workerId] = new Set())).add(unregister);", + " }", + "", + " // Invoke the module, returning a promise", + " return registrationPromise.then(function (ref) {", + " var isCallable = ref.isCallable;", + "", + " if (isCallable) {", + " return callWorker(workerId,'callModule', {id: id, args: args})", + " } else {", + " throw new Error('Worker module function was called but `init` did not return a callable function')", + " }", + " })", + " }", + " moduleFunc.workerModuleData = {", + " isWorkerModule: true,", + " id: id,", + " name: name,", + " dependencies: dependencies,", + " init: stringifyFunction(init),", + " getTransferables: getTransferables && stringifyFunction(getTransferables)", + " };", + " return moduleFunc", + " }", + "", + " /**", + " * Terminate an active Worker by a workerId that was passed to defineWorkerModule.", + " * This only terminates the Worker itself; the worker module will remain available", + " * and if you call it again its Worker will be respawned.", + " * @param {string} workerId", + " */", + " function terminateWorker(workerId) {", + " // Unregister all modules that were registered in that worker", + " if (registeredModules[workerId]) {", + " registeredModules[workerId].forEach(function (unregister) {", + " unregister();", + " });", + " }", + " // Terminate the Worker object", + " if (workers[workerId]) {", + " workers[workerId].terminate();", + " delete workers[workerId];", + " }", + " }", + "", + " /**", + " * Stringifies a function into a form that can be deserialized in the worker", + " * @param fn", + " */", + " function stringifyFunction(fn) {", + " var str = fn.toString();", + " // If it was defined in object method/property format, it needs to be modified", + " if (!/^function/.test(str) && /^\\w+\\s*\\(/.test(str)) {", + " str = 'function ' + str;", + " }", + " return str", + " }", + "", + "", + " function getWorker(workerId) {", + " var worker = workers[workerId];", + " if (!worker) {", + " // Bootstrap the worker's content", + " var bootstrap = stringifyFunction(workerBootstrap);", + "", + " // Create the worker from the bootstrap function content", + " worker = workers[workerId] = new Worker(", + " URL.createObjectURL(", + " new Blob(", + " [(\"/** Worker Module Bootstrap: \" + (workerId.replace(/\\*/g, '')) + \" **/\\n\\n;(\" + bootstrap + \")()\")],", + " {type: 'application/javascript'}", + " )", + " )", + " );", + "", + " // Single handler for response messages from the worker", + " worker.onmessage = function (e) {", + " var response = e.data;", + " var msgId = response.messageId;", + " var callback = openRequests[msgId];", + " if (!callback) {", + " throw new Error('WorkerModule response with empty or unknown messageId')", + " }", + " delete openRequests[msgId];", + " callback(response);", + " };", + " }", + " return worker", + " }", + "", + " // Issue a call to the worker with a callback to handle the response", + " function callWorker(workerId, action, data) {", + " return new Promise(function (resolve, reject) {", + " var messageId = ++_messageId;", + " openRequests[messageId] = function (response) {", + " if (response.success) {", + " resolve(response.result);", + " } else {", + " reject(new Error((\"Error in worker \" + action + \" call: \" + (response.error))));", + " }", + " };", + " getWorker(workerId).postMessage({", + " messageId: messageId,", + " action: action,", + " data: data", + " });", + " })", + " }", + "", + " /*!", + " Custom build of Typr.ts (https://github.com/fredli74/Typr.ts) for use in Troika text rendering.", + " Original MIT license applies: https://github.com/fredli74/Typr.ts/blob/master/LICENSE", + " */", + " function typrFactory(){return \"undefined\"==typeof window&&(self.window=self),function(r){var e={parse:function(r){var t=e._bin,a=new Uint8Array(r);if(\"ttcf\"==t.readASCII(a,0,4)){var n=4;t.readUshort(a,n),n+=2,t.readUshort(a,n),n+=2;var o=t.readUint(a,n);n+=4;for(var s=[],i=0;i>>t&1)&&e++;return e},e._lctf.readClassDef=function(r,t){var a=e._bin,n=[],o=a.readUshort(r,t);if(t+=2,1==o){var s=a.readUshort(r,t);t+=2;var i=a.readUshort(r,t);t+=2;for(var h=0;h0&&(o.featureParams=n+s);var i=a.readUshort(r,t);t+=2,o.tab=[];for(var h=0;h0&&(o.default=e._lctf.readLangSysTable(r,n+s));var i=a.readUshort(r,t);t+=2;for(var h=0;h255?-1:e.CFF.glyphByUnicode(r,e.CFF.tableSE[t])},e.CFF.readEncoding=function(r,t,a){e._bin;var n=[\".notdef\"],o=r[t];if(t++,0!=o)throw \"error: unknown encoding format: \"+o;var s=r[t];t++;for(var i=0;i>4,p=15&v;if(15!=c&&l.push(c),15!=p&&l.push(p),15==p)break}for(var U=\"\",g=[0,1,2,3,4,5,6,7,8,9,\".\",\"e\",\"e-\",\"reserved\",\"-\",\"endOfNumber\"],S=0;S=s.xMax||s.yMin>=s.yMax)return null;if(s.noc>0){s.endPts=[];for(var i=0;i=1&&i.fmt<=2){d=o.readUshort(r,a);a+=2;var f=o.readUshort(r,a);a+=2;var u=e._lctf.numOfOnes(d),l=e._lctf.numOfOnes(f);if(1==i.fmt){i.pairsets=[];var v=o.readUshort(r,a);a+=2;for(var c=0;c=1&&i.fmt<=2){if(1==i.fmt)i.delta=o.readShort(r,a),a+=2;else if(2==i.fmt){var d=o.readUshort(r,a);a+=2,i.newg=o.readUshorts(r,a,d),a+=2*i.newg.length;}}else if(2==t&&1==i.fmt){d=o.readUshort(r,a);a+=2,i.seqs=[];for(var f=0;f>>8;if(0!=(u&=15))throw \"unknown kern table format: \"+u;t=e.kern.readFormat0(r,t,h);}return h},e.kern.parseV1=function(r,t,a,n){var o=e._bin;o.readFixed(r,t),t+=4;var s=o.readUint(r,t);t+=4;for(var i={glyph1:[],rval:[]},h=0;h>>8;if(0!=(f&=15))throw \"unknown kern table format: \"+f;t=e.kern.readFormat0(r,t,i);}return i},e.kern.readFormat0=function(r,t,a){var n=e._bin,o=-1,s=n.readUshort(r,t);t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2,n.readUshort(r,t),t+=2;for(var i=0;i=n.map.length?0:n.map[e];if(4==n.format){for(var o=-1,s=0;se)return 0;return 65535&(0!=n.idRangeOffset[o]?n.glyphIdArray[e-n.startCount[o]+(n.idRangeOffset[o]>>1)-(n.idRangeOffset.length-o)]:e+n.idDelta[o])}if(12==n.format){if(e>n.groups[n.groups.length-1][1])return 0;for(s=0;s-1?e.U._simpleGlyph(n,a):e.U._compoGlyph(n,t,a));},e.U._simpleGlyph=function(r,t){for(var a=0;ao)){for(var v=!0,c=0,p=0;po)){for(v=!0,p=0;p>1,s.length=0,h=!0;else if(\"o3\"==P||\"o23\"==P){s.length%2!=0&&!h&&(d=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0;}else if(\"o4\"==P)s.length>1&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),f&&e.U.P.closePath(o),v+=s.pop(),e.U.P.moveTo(o,l,v),f=!0;else if(\"o5\"==P)for(;s.length>0;)l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v);else if(\"o6\"==P||\"o7\"==P)for(var x=s.length,I=\"o6\"==P,w=0;wMath.abs(y-v)?l=b+s.shift():v=y+s.shift(),e.U.P.curveTo(o,c,p,U,g,F,C),e.U.P.curveTo(o,S,m,b,y,l,v));else if(\"o14\"==P){if(s.length>0&&!h&&(d=s.shift()+a.nominalWidthX,h=!0),4==s.length){var O=s.shift(),T=s.shift(),D=s.shift(),B=s.shift(),A=e.CFF.glyphBySE(a,D),R=e.CFF.glyphBySE(a,B);e.U._drawCFF(a.CharStrings[A],t,a,n,o),t.x=O,t.y=T,e.U._drawCFF(a.CharStrings[R],t,a,n,o);}f&&(e.U.P.closePath(o),f=!1);}else if(\"o19\"==P||\"o20\"==P){s.length%2!=0&&!h&&(d=s.shift()+n.nominalWidthX),i+=s.length>>1,s.length=0,h=!0,u+=i+7>>3;}else if(\"o21\"==P)s.length>2&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),v+=s.pop(),l+=s.pop(),f&&e.U.P.closePath(o),e.U.P.moveTo(o,l,v),f=!0;else if(\"o22\"==P)s.length>1&&!h&&(d=s.shift()+n.nominalWidthX,h=!0),l+=s.pop(),f&&e.U.P.closePath(o),e.U.P.moveTo(o,l,v),f=!0;else if(\"o25\"==P){for(;s.length>6;)l+=s.shift(),v+=s.shift(),e.U.P.lineTo(o,l,v);c=l+s.shift(),p=v+s.shift(),U=c+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v);}else if(\"o26\"==P)for(s.length%2&&(l+=s.shift());s.length>0;)c=l,p=v+s.shift(),l=U=c+s.shift(),v=(g=p+s.shift())+s.shift(),e.U.P.curveTo(o,c,p,U,g,l,v);else if(\"o27\"==P)for(s.length%2&&(v+=s.shift());s.length>0;)p=v,U=(c=l+s.shift())+s.shift(),g=p+s.shift(),l=U+s.shift(),v=g,e.U.P.curveTo(o,c,p,U,g,l,v);else if(\"o10\"==P||\"o29\"==P){var L=\"o10\"==P?n:a;if(0==s.length)console.debug(\"error: empty stack\");else {var W=s.pop(),M=L.Subrs[W+L.Bias];t.x=l,t.y=v,t.nStems=i,t.haveWidth=h,t.width=d,t.open=f,e.U._drawCFF(M,t,a,n,o),l=t.x,v=t.y,i=t.nStems,h=t.haveWidth,d=t.width,f=t.open;}}else if(\"o30\"==P||\"o31\"==P){var V=s.length,E=(G=0,\"o31\"==P);for(G+=V-(x=-3&V);G>>1|(21845&g)<<1;h=(61680&(h=(52428&h)>>>2|(13107&h)<<2))>>>4|(3855&h)<<4,c[g]=((65280&h)>>>8|(255&h)<<8)>>>1;}var w=function(r,e,t){for(var a=r.length,i=0,o=new n(e);i>>v]=s;}else for(f=new n(a),i=0;i>>15-r[i]);return f},d=new e(288);for(g=0;g<144;++g)d[g]=8;for(g=144;g<256;++g)d[g]=9;for(g=256;g<280;++g)d[g]=7;for(g=280;g<288;++g)d[g]=8;var m=new e(32);for(g=0;g<32;++g)m[g]=5;var b=w(d,9,1),p=w(m,5,1),y=function(r){for(var e=r[0],n=1;ne&&(e=r[n]);return e},L=function(r,e,n){var t=e/8|0;return (r[t]|r[t+1]<<8)>>(7&e)&n},U=function(r,e){var n=e/8|0;return (r[n]|r[n+1]<<8|r[n+2]<<16)>>(7&e)},k=[\"unexpected EOF\",\"invalid block type\",\"invalid length/literal\",\"invalid distance\",\"stream finished\",\"no stream handler\",,\"no callback\",\"invalid UTF-8 data\",\"extra field too long\",\"date not in range 1980-2099\",\"filename too long\",\"stream finishing\",\"invalid zip data\"],T=function(r,e,n){var t=new Error(e||k[r]);if(t.code=r,Error.captureStackTrace&&Error.captureStackTrace(t,T),!n)throw t;return t},O=function(r,f,u){var s=r.length;if(!s||u&&!u.l&&s<5)return f||new e(0);var c=!f||u,g=!u||u.i;u||(u={}),f||(f=new e(3*s));var h,d=function(r){var n=f.length;if(r>n){var t=new e(Math.max(2*n,r));t.set(f),f=t;}},m=u.f||0,k=u.p||0,O=u.b||0,A=u.l,x=u.d,E=u.m,D=u.n,M=8*s;do{if(!A){u.f=m=L(r,k,1);var S=L(r,k+1,3);if(k+=3,!S){var V=r[(I=((h=k)/8|0)+(7&h&&1)+4)-4]|r[I-3]<<8,_=I+V;if(_>s){g&&T(0);break}c&&d(O+V),f.set(r.subarray(I,_),O),u.b=O+=V,u.p=k=8*_;continue}if(1==S)A=b,x=p,E=9,D=5;else if(2==S){var j=L(r,k,31)+257,z=L(r,k+10,15)+4,C=j+L(r,k+5,31)+1;k+=14;for(var F=new e(C),P=new e(19),q=0;q>>4)<16)F[q++]=I;else {var K=0,N=0;for(16==I?(N=3+L(r,k,3),k+=2,K=F[q-1]):17==I?(N=3+L(r,k,7),k+=3):18==I&&(N=11+L(r,k,127),k+=7);N--;)F[q++]=K;}}var Q=F.subarray(0,j),R=F.subarray(j);E=y(Q),D=y(R),A=w(Q,E,1),x=w(R,D,1);}else T(1);if(k>M){g&&T(0);break}}c&&d(O+131072);for(var W=(1<>>4;if((k+=15&K)>M){g&&T(0);break}if(K||T(2),Z<256)f[O++]=Z;else {if(256==Z){Y=k,A=null;break}var $=Z-254;if(Z>264){var rr=a[q=Z-257];$=L(r,k,(1<>>4;er||T(3),k+=15&er;R=l[nr];if(nr>3){rr=i[nr];R+=U(r,k)&(1<M){g&&T(0);break}c&&d(O+131072);for(var tr=O+$;Or.length)&&(i=r.length);var o=new(r instanceof n?n:r instanceof t?t:e)(i-a);return o.set(r.subarray(a,i)),o}(f,0,O)},A=new e(0);var x=\"undefined\"!=typeof TextDecoder&&new TextDecoder;try{x.decode(A,{stream:!0}),1;}catch(r){}return r.convert_streams=function(r){var e=new DataView(r),n=0;function t(){var r=e.getUint16(n);return n+=2,r}function a(){var r=e.getUint32(n);return n+=4,r}function i(r){m.setUint16(b,r),b+=2;}function o(r){m.setUint32(b,r),b+=4;}for(var f={signature:a(),flavor:a(),length:a(),numTables:t(),reserved:t(),totalSfntSize:a(),majorVersion:t(),minorVersion:t(),metaOffset:a(),metaLength:a(),metaOrigLength:a(),privOffset:a(),privLength:a()},u=0;Math.pow(2,u)<=f.numTables;)u++;u--;for(var v=16*Math.pow(2,u),s=16*f.numTables-v,l=12,c=[],g=0;g boolean} supportsCodePoint", + " * @property {(text:string, fontSize:number, letterSpacing:number, callback) => number} forEachGlyph", + " * @property {number} lineGap", + " * @property {number} capHeight", + " * @property {number} unitsPerEm", + " */", + "", + " /**", + " * @typedef {(buffer: ArrayBuffer) => ParsedFont} FontParser", + " */", + "", + " /**", + " * @returns {FontParser}", + " */", + " function parserFactory(Typr, woff2otf) {", + " const cmdArgLengths = {", + " M: 2,", + " L: 2,", + " Q: 4,", + " C: 6,", + " Z: 0", + " };", + "", + " // {joinType: \"skip+step,...\"}", + " const joiningTypeRawData = {\"C\":\"18g,ca,368,1kz\",\"D\":\"17k,6,2,2+4,5+c,2+6,2+1,10+1,9+f,j+11,2+1,a,2,2+1,15+2,3,j+2,6+3,2+8,2,2,2+1,w+a,4+e,3+3,2,3+2,3+5,23+w,2f+4,3,2+9,2,b,2+3,3,1k+9,6+1,3+1,2+2,2+d,30g,p+y,1,1+1g,f+x,2,sd2+1d,jf3+4,f+3,2+4,2+2,b+3,42,2,4+2,2+1,2,3,t+1,9f+w,2,el+2,2+g,d+2,2l,2+1,5,3+1,2+1,2,3,6,16wm+1v\",\"R\":\"17m+3,2,2,6+3,m,15+2,2+2,h+h,13,3+8,2,2,3+1,2,p+1,x,5+4,5,a,2,2,3,u,c+2,g+1,5,2+1,4+1,5j,6+1,2,b,2+2,f,2+1,1s+2,2,3+1,7,1ez0,2,2+1,4+4,b,4,3,b,42,2+2,4,3,2+1,2,o+3,ae,ep,x,2o+2,3+1,3,5+1,6\",\"L\":\"x9u,jff,a,fd,jv\",\"T\":\"4t,gj+33,7o+4,1+1,7c+18,2,2+1,2+1,2,21+a,2,1b+k,h,2u+6,3+5,3+1,2+3,y,2,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,3,7,6+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+d,1,1+1,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,ek,3+1,r+4,1e+4,6+5,2p+c,1+3,1,1+2,1+b,2db+2,3y,2p+v,ff+3,30+1,n9x,1+2,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,5s,6y+2,ea,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+9,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2,2b+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,470+8,at4+4,1o+6,t5,1s+3,2a,f5l+1,2+3,43o+2,a+7,1+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,1,gzau,v+2n,3l+6n\"};", + "", + " const JT_LEFT = 1, //indicates that a character joins with the subsequent character, but does not join with the preceding character.", + " JT_RIGHT = 2, //indicates that a character joins with the preceding character, but does not join with the subsequent character.", + " JT_DUAL = 4, //indicates that a character joins with the preceding character and joins with the subsequent character.", + " JT_TRANSPARENT = 8, //indicates that the character does not join with adjacent characters and that the character must be skipped over when the shaping engine is evaluating the joining positions in a sequence of characters. When a JT_TRANSPARENT character is encountered in a sequence, the JOINING_TYPE of the preceding character passes through. Diacritical marks are frequently assigned this value.", + " JT_JOIN_CAUSING = 16, //indicates that the character forces the use of joining forms with the preceding and subsequent characters. Kashidas and the Zero Width Joiner (U+200D) are both JOIN_CAUSING characters.", + " JT_NON_JOINING = 32; //indicates that a character does not join with the preceding or with the subsequent character.,", + "", + " let joiningTypeMap;", + " function getCharJoiningType(ch) {", + " if (!joiningTypeMap) {", + " const m = {", + " R: JT_RIGHT,", + " L: JT_LEFT,", + " D: JT_DUAL,", + " C: JT_JOIN_CAUSING,", + " U: JT_NON_JOINING,", + " T: JT_TRANSPARENT", + " };", + " joiningTypeMap = new Map();", + " for (let type in joiningTypeRawData) {", + " let lastCode = 0;", + " joiningTypeRawData[type].split(',').forEach(range => {", + " let [skip, step] = range.split('+');", + " skip = parseInt(skip,36);", + " step = step ? parseInt(step, 36) : 0;", + " joiningTypeMap.set(lastCode += skip, m[type]);", + " for (let i = step; i--;) {", + " joiningTypeMap.set(++lastCode, m[type]);", + " }", + " });", + " }", + " }", + " return joiningTypeMap.get(ch) || JT_NON_JOINING", + " }", + "", + " const ISOL = 1, INIT = 2, FINA = 3, MEDI = 4;", + " const formsToFeatures = [null, 'isol', 'init', 'fina', 'medi'];", + "", + " function detectJoiningForms(str) {", + " // This implements the algorithm described here:", + " // https://github.com/n8willis/opentype-shaping-documents/blob/master/opentype-shaping-arabic-general.md", + " const joiningForms = new Uint8Array(str.length);", + " let prevJoiningType = JT_NON_JOINING;", + " let prevForm = ISOL;", + " let prevIndex = -1;", + " for (let i = 0; i < str.length; i++) {", + " const code = str.codePointAt(i);", + " let joiningType = getCharJoiningType(code) | 0;", + " let form = ISOL;", + " if (joiningType & JT_TRANSPARENT) {", + " continue", + " }", + " if (prevJoiningType & (JT_LEFT | JT_DUAL | JT_JOIN_CAUSING)) {", + " if (joiningType & (JT_RIGHT | JT_DUAL | JT_JOIN_CAUSING)) {", + " form = FINA;", + " // isol->init, fina->medi", + " if (prevForm === ISOL || prevForm === FINA) {", + " joiningForms[prevIndex]++;", + " }", + " }", + " else if (joiningType & (JT_LEFT | JT_NON_JOINING)) {", + " // medi->fina, init->isol", + " if (prevForm === INIT || prevForm === MEDI) {", + " joiningForms[prevIndex]--;", + " }", + " }", + " }", + " else if (prevJoiningType & (JT_RIGHT | JT_NON_JOINING)) {", + " // medi->fina, init->isol", + " if (prevForm === INIT || prevForm === MEDI) {", + " joiningForms[prevIndex]--;", + " }", + " }", + " prevForm = joiningForms[i] = form;", + " prevJoiningType = joiningType;", + " prevIndex = i;", + " if (code > 0xffff) i++;", + " }", + " // console.log(str.split('').map(ch => ch.codePointAt(0).toString(16)))", + " // console.log(str.split('').map(ch => getCharJoiningType(ch.codePointAt(0))))", + " // console.log(Array.from(joiningForms).map(f => formsToFeatures[f] || 'none'))", + " return joiningForms", + " }", + "", + " function stringToGlyphs (font, str) {", + " const glyphIds = [];", + " for (let i = 0; i < str.length; i++) {", + " const cc = str.codePointAt(i);", + " if (cc > 0xffff) i++;", + " glyphIds.push(Typr.U.codeToGlyph(font, cc));", + " }", + "", + " const gsub = font['GSUB'];", + " if (gsub) {", + " const {lookupList, featureList} = gsub;", + " let joiningForms;", + " const supportedFeatures = /^(rlig|liga|mset|isol|init|fina|medi|half|pres|blws|ccmp)$/;", + " const usedLookups = [];", + " featureList.forEach(feature => {", + " if (supportedFeatures.test(feature.tag)) {", + " for (let ti = 0; ti < feature.tab.length; ti++) {", + " if (usedLookups[feature.tab[ti]]) continue", + " usedLookups[feature.tab[ti]] = true;", + " const tab = lookupList[feature.tab[ti]];", + " const isJoiningFeature = /^(isol|init|fina|medi)$/.test(feature.tag);", + " if (isJoiningFeature && !joiningForms) { //lazy", + " joiningForms = detectJoiningForms(str);", + " }", + " for (let ci = 0; ci < glyphIds.length; ci++) {", + " if (!joiningForms || !isJoiningFeature || formsToFeatures[joiningForms[ci]] === feature.tag) {", + " Typr.U._applySubs(glyphIds, ci, tab, lookupList);", + " }", + " }", + " }", + " }", + " });", + " }", + "", + " return glyphIds", + " }", + "", + " // Calculate advances and x/y offsets for each glyph, e.g. kerning and mark", + " // attachments. This is a more complete version of Typr.U.getPairAdjustment", + " // and should become an upstream replacement eventually.", + " function calcGlyphPositions(font, glyphIds) {", + " const positions = new Int16Array(glyphIds.length * 3); // [offsetX, offsetY, advanceX, ...]", + " let glyphIndex = 0;", + " for (; glyphIndex < glyphIds.length; glyphIndex++) {", + " const glyphId = glyphIds[glyphIndex];", + " if (glyphId === -1) continue;", + "", + " positions[glyphIndex * 3 + 2] = font.hmtx.aWidth[glyphId]; // populate advanceX in...advance.", + "", + " const gpos = font.GPOS;", + " if (gpos) {", + " const llist = gpos.lookupList;", + " for (let i = 0; i < llist.length; i++) {", + " const lookup = llist[i];", + " for (let j = 0; j < lookup.tabs.length; j++) {", + " const tab = lookup.tabs[j];", + " // Single char placement", + " if (lookup.ltype === 1) {", + " const ind = Typr._lctf.coverageIndex(tab.coverage, glyphId);", + " if (ind !== -1 && tab.pos) {", + " applyValueRecord(tab.pos, glyphIndex);", + " break", + " }", + " }", + " // Pairs (kerning)", + " else if (lookup.ltype === 2) {", + " let adj = null;", + " let prevGlyphIndex = getPrevGlyphIndex();", + " if (prevGlyphIndex !== -1) {", + " const coverageIndex = Typr._lctf.coverageIndex(tab.coverage, glyphIds[prevGlyphIndex]);", + " if (coverageIndex !== -1) {", + " if (tab.fmt === 1) {", + " const right = tab.pairsets[coverageIndex];", + " for (let k = 0; k < right.length; k++) {", + " if (right[k].gid2 === glyphId) adj = right[k];", + " }", + " } else if (tab.fmt === 2) {", + " const c1 = Typr.U._getGlyphClass(glyphIds[prevGlyphIndex], tab.classDef1);", + " const c2 = Typr.U._getGlyphClass(glyphId, tab.classDef2);", + " adj = tab.matrix[c1][c2];", + " }", + " if (adj) {", + " if (adj.val1) applyValueRecord(adj.val1, prevGlyphIndex);", + " if (adj.val2) applyValueRecord(adj.val2, glyphIndex);", + " break", + " }", + " }", + " }", + " }", + " // Mark to base", + " else if (lookup.ltype === 4) {", + " const markArrIndex = Typr._lctf.coverageIndex(tab.markCoverage, glyphId);", + " if (markArrIndex !== -1) {", + " const baseGlyphIndex = getPrevGlyphIndex(isBaseGlyph);", + " const baseArrIndex = baseGlyphIndex === -1 ? -1 : Typr._lctf.coverageIndex(tab.baseCoverage, glyphIds[baseGlyphIndex]);", + " if (baseArrIndex !== -1) {", + " const markRecord = tab.markArray[markArrIndex];", + " const baseAnchor = tab.baseArray[baseArrIndex][markRecord.markClass];", + " positions[glyphIndex * 3] = baseAnchor.x - markRecord.x + positions[baseGlyphIndex * 3] - positions[baseGlyphIndex * 3 + 2];", + " positions[glyphIndex * 3 + 1] = baseAnchor.y - markRecord.y + positions[baseGlyphIndex * 3 + 1];", + " break;", + " }", + " }", + " }", + " // Mark to mark", + " else if (lookup.ltype === 6) {", + " const mark1ArrIndex = Typr._lctf.coverageIndex(tab.mark1Coverage, glyphId);", + " if (mark1ArrIndex !== -1) {", + " const prevGlyphIndex = getPrevGlyphIndex();", + " if (prevGlyphIndex !== -1) {", + " const prevGlyphId = glyphIds[prevGlyphIndex];", + " if (getGlyphClass(font, prevGlyphId) === 3) { // only check mark glyphs", + " const mark2ArrIndex = Typr._lctf.coverageIndex(tab.mark2Coverage, prevGlyphId);", + " if (mark2ArrIndex !== -1) {", + " const mark1Record = tab.mark1Array[mark1ArrIndex];", + " const mark2Anchor = tab.mark2Array[mark2ArrIndex][mark1Record.markClass];", + " positions[glyphIndex * 3] = mark2Anchor.x - mark1Record.x + positions[prevGlyphIndex * 3] - positions[prevGlyphIndex * 3 + 2];", + " positions[glyphIndex * 3 + 1] = mark2Anchor.y - mark1Record.y + positions[prevGlyphIndex * 3 + 1];", + " break;", + " }", + " }", + " }", + " }", + " }", + " }", + " }", + " }", + " // Check kern table if no GPOS", + " else if (font.kern && !font.cff) {", + " const prevGlyphIndex = getPrevGlyphIndex();", + " if (prevGlyphIndex !== -1) {", + " const ind1 = font.kern.glyph1.indexOf(glyphIds[prevGlyphIndex]);", + " if (ind1 !== -1) {", + " const ind2 = font.kern.rval[ind1].glyph2.indexOf(glyphId);", + " if (ind2 !== -1) {", + " positions[prevGlyphIndex * 3 + 2] += font.kern.rval[ind1].vals[ind2];", + " }", + " }", + " }", + " }", + " }", + "", + " return positions;", + "", + " function getPrevGlyphIndex(filter) {", + " for (let i = glyphIndex - 1; i >=0; i--) {", + " if (glyphIds[i] !== -1 && (!filter || filter(glyphIds[i]))) {", + " return i", + " }", + " }", + " return -1;", + " }", + "", + " function isBaseGlyph(glyphId) {", + " return getGlyphClass(font, glyphId) === 1;", + " }", + "", + " function applyValueRecord(source, gi) {", + " for (let i = 0; i < 3; i++) {", + " positions[gi * 3 + i] += source[i] || 0;", + " }", + " }", + " }", + "", + " function getGlyphClass(font, glyphId) {", + " const classDef = font.GDEF && font.GDEF.glyphClassDef;", + " return classDef ? Typr.U._getGlyphClass(glyphId, classDef) : 0;", + " }", + "", + " function firstNum(...args) {", + " for (let i = 0; i < args.length; i++) {", + " if (typeof args[i] === 'number') {", + " return args[i]", + " }", + " }", + " }", + "", + " /**", + " * @returns ParsedFont", + " */", + " function wrapFontObj(typrFont) {", + " const glyphMap = Object.create(null);", + "", + " const os2 = typrFont['OS/2'];", + " const hhea = typrFont.hhea;", + " const unitsPerEm = typrFont.head.unitsPerEm;", + " const ascender = firstNum(os2 && os2.sTypoAscender, hhea && hhea.ascender, unitsPerEm);", + "", + " /** @type ParsedFont */", + " const fontObj = {", + " unitsPerEm,", + " ascender,", + " descender: firstNum(os2 && os2.sTypoDescender, hhea && hhea.descender, 0),", + " capHeight: firstNum(os2 && os2.sCapHeight, ascender),", + " xHeight: firstNum(os2 && os2.sxHeight, ascender),", + " lineGap: firstNum(os2 && os2.sTypoLineGap, hhea && hhea.lineGap),", + " supportsCodePoint(code) {", + " return Typr.U.codeToGlyph(typrFont, code) > 0", + " },", + " forEachGlyph(text, fontSize, letterSpacing, callback) {", + " let penX = 0;", + " const fontScale = 1 / fontObj.unitsPerEm * fontSize;", + "", + " const glyphIds = stringToGlyphs(typrFont, text);", + " let charIndex = 0;", + " const positions = calcGlyphPositions(typrFont, glyphIds);", + "", + " glyphIds.forEach((glyphId, i) => {", + " // Typr returns a glyph index per string codepoint, with -1s in place of those that", + " // were omitted due to ligature substitution. So we can track original index in the", + " // string via simple increment, and skip everything else when seeing a -1.", + " if (glyphId !== -1) {", + " let glyphObj = glyphMap[glyphId];", + " if (!glyphObj) {", + " const {cmds, crds} = Typr.U.glyphToPath(typrFont, glyphId);", + "", + " // Build path string", + " let path = '';", + " let crdsIdx = 0;", + " for (let i = 0, len = cmds.length; i < len; i++) {", + " const numArgs = cmdArgLengths[cmds[i]];", + " path += cmds[i];", + " for (let j = 1; j <= numArgs; j++) {", + " path += (j > 1 ? ',' : '') + crds[crdsIdx++];", + " }", + " }", + "", + " // Find extents - Glyf gives this in metadata but not CFF, and Typr doesn't", + " // normalize the two, so it's simplest just to iterate ourselves.", + " let xMin, yMin, xMax, yMax;", + " if (crds.length) {", + " xMin = yMin = Infinity;", + " xMax = yMax = -Infinity;", + " for (let i = 0, len = crds.length; i < len; i += 2) {", + " let x = crds[i];", + " let y = crds[i + 1];", + " if (x < xMin) xMin = x;", + " if (y < yMin) yMin = y;", + " if (x > xMax) xMax = x;", + " if (y > yMax) yMax = y;", + " }", + " } else {", + " xMin = xMax = yMin = yMax = 0;", + " }", + "", + " glyphObj = glyphMap[glyphId] = {", + " index: glyphId,", + " advanceWidth: typrFont.hmtx.aWidth[glyphId],", + " xMin,", + " yMin,", + " xMax,", + " yMax,", + " path,", + " };", + " }", + "", + " callback.call(", + " null,", + " glyphObj,", + " penX + positions[i * 3] * fontScale,", + " positions[i * 3 + 1] * fontScale,", + " charIndex", + " );", + "", + " penX += positions[i * 3 + 2] * fontScale;", + " if (letterSpacing) {", + " penX += letterSpacing * fontSize;", + " }", + " }", + " charIndex += (text.codePointAt(charIndex) > 0xffff ? 2 : 1);", + " });", + "", + " return penX", + " }", + " };", + "", + " return fontObj", + " }", + "", + " /**", + " * @type FontParser", + " */", + " return function parse(buffer) {", + " // Look to see if we have a WOFF file and convert it if so:", + " const peek = new Uint8Array(buffer, 0, 4);", + " const tag = Typr._bin.readASCII(peek, 0, 4);", + " if (tag === 'wOFF') {", + " buffer = woff2otf(buffer);", + " } else if (tag === 'wOF2') {", + " throw new Error('woff2 fonts not supported')", + " }", + " return wrapFontObj(Typr.parse(buffer)[0])", + " }", + " }", + "", + "", + " const workerModule = /*#__PURE__*/defineWorkerModule({", + " name: 'Typr Font Parser',", + " dependencies: [typrFactory, woff2otfFactory, parserFactory],", + " init(typrFactory, woff2otfFactory, parserFactory) {", + " const Typr = typrFactory();", + " const woff2otf = woff2otfFactory();", + " return parserFactory(Typr, woff2otf)", + " }", + " });", + "", + " /*!", + " Custom bundle of @unicode-font-resolver/client v1.0.2 (https://github.com/lojjic/unicode-font-resolver)", + " for use in Troika text rendering. ", + " Original MIT license applies", + " */", + " function unicodeFontResolverClientFactory(){return function(t){var n=function(){this.buckets=new Map;};n.prototype.add=function(t){var n=t>>5;this.buckets.set(n,(this.buckets.get(n)||0)|1<<(31&t));},n.prototype.has=function(t){var n=this.buckets.get(t>>5);return void 0!==n&&0!=(n&1<<(31&t))},n.prototype.serialize=function(){var t=[];return this.buckets.forEach((function(n,r){t.push((+r).toString(36)+\":\"+n.toString(36));})),t.join(\",\")},n.prototype.deserialize=function(t){var n=this;this.buckets.clear(),t.split(\",\").forEach((function(t){var r=t.split(\":\");n.buckets.set(parseInt(r[0],36),parseInt(r[1],36));}));};var r=Math.pow(2,8),e=r-1,o=~e;function a(t){var n=function(t){return t&o}(t).toString(16),e=function(t){return (t&o)+r-1}(t).toString(16);return \"codepoint-index/plane\"+(t>>16)+\"/\"+n+\"-\"+e+\".json\"}function i(t,n){var r=t&e,o=n.codePointAt(r/6|0);return 0!=((o=(o||48)-48)&1<65535&&(n++,E=n);},E=0;E65535&&(n++,r=n);},r=0;r65535&&(e++,y[e]=y[e-1]);}return {fontUrls:Array.from(h.keys()),chars:y}}))},Object.defineProperty(t,\"__esModule\",{value:!0}),t}({})}", + "", + " /**", + " * @typedef {string | {src:string, label?:string, unicodeRange?:string, lang?:string}} UserFont", + " */", + "", + " /**", + " * @typedef {ClientOptions} FontResolverOptions", + " * @property {Array|UserFont} [fonts]", + " * @property {'normal'|'italic'} [style]", + " * @property {'normal'|'bold'|number} [style]", + " * @property {string} [unicodeFontsURL]", + " */", + "", + " /**", + " * @typedef {Object} FontResolverResult", + " * @property {Uint8Array} chars", + " * @property {Array} fonts", + " */", + "", + " /**", + " * @typedef {function} FontResolver", + " * @param {string} text", + " * @param {(FontResolverResult) => void} callback", + " * @param {FontResolverOptions} [options]", + " */", + "", + " /**", + " * Factory for the FontResolver function.", + " * @param {FontParser} fontParser", + " * @param {{getFontsForString: function, CodePointSet: function}} unicodeFontResolverClient", + " * @return {FontResolver}", + " */", + " function createFontResolver(fontParser, unicodeFontResolverClient) {", + " /**", + " * @type {Record}", + " */", + " const parsedFonts = Object.create(null);", + "", + " /**", + " * @type {Record void>>}", + " */", + " const loadingFonts = Object.create(null);", + "", + " /**", + " * Load a given font url", + " */", + " function doLoadFont(url, callback) {", + " const onError = err => {", + " console.error(`Failure loading font ${url}`, err);", + " };", + " try {", + " const request = new XMLHttpRequest();", + " request.open('get', url, true);", + " request.responseType = 'arraybuffer';", + " request.onload = function () {", + " if (request.status >= 400) {", + " onError(new Error(request.statusText));", + " }", + " else if (request.status > 0) {", + " try {", + " const fontObj = fontParser(request.response);", + " fontObj.src = url;", + " callback(fontObj);", + " } catch (e) {", + " onError(e);", + " }", + " }", + " };", + " request.onerror = onError;", + " request.send();", + " } catch(err) {", + " onError(err);", + " }", + " }", + "", + "", + " /**", + " * Load a given font url if needed, invoking a callback when it's loaded. If already", + " * loaded, the callback will be called synchronously.", + " * @param {string} fontUrl", + " * @param {(font: ParsedFont) => void} callback", + " */", + " function loadFont(fontUrl, callback) {", + " let font = parsedFonts[fontUrl];", + " if (font) {", + " callback(font);", + " } else if (loadingFonts[fontUrl]) {", + " loadingFonts[fontUrl].push(callback);", + " } else {", + " loadingFonts[fontUrl] = [callback];", + " doLoadFont(fontUrl, fontObj => {", + " fontObj.src = fontUrl;", + " parsedFonts[fontUrl] = fontObj;", + " loadingFonts[fontUrl].forEach(cb => cb(fontObj));", + " delete loadingFonts[fontUrl];", + " });", + " }", + " }", + "", + " /**", + " * For a given string of text, determine which fonts are required to fully render it and", + " * ensure those fonts are loaded.", + " */", + " return function (text, callback, {", + " lang,", + " fonts: userFonts = [],", + " style = 'normal',", + " weight = 'normal',", + " unicodeFontsURL", + " } = {}) {", + " const charResolutions = new Uint8Array(text.length);", + " const fontResolutions = [];", + " if (!text.length) {", + " allDone();", + " }", + "", + " const fontIndices = new Map();", + " const fallbackRanges = []; // [[start, end], ...]", + "", + " if (style !== 'italic') style = 'normal';", + " if (typeof weight !== 'number') {", + " weight = weight === 'bold' ? 700 : 400;", + " }", + "", + " if (userFonts && !Array.isArray(userFonts)) {", + " userFonts = [userFonts];", + " }", + " userFonts = userFonts.slice()", + " // filter by language", + " .filter(def => !def.lang || def.lang.test(lang))", + " // switch order for easier iteration", + " .reverse();", + " if (userFonts.length) {", + " const UNKNOWN = 0;", + " const RESOLVED = 1;", + " const NEEDS_FALLBACK = 2;", + " let prevCharResult = UNKNOWN", + "", + " ;(function resolveUserFonts (startIndex = 0) {", + " for (let i = startIndex, iLen = text.length; i < iLen; i++) {", + " const codePoint = text.codePointAt(i);", + " // Carry previous character's result forward if:", + " // - it resolved to a font that also covers this character", + " // - this character is whitespace", + " if (", + " (prevCharResult === RESOLVED && fontResolutions[charResolutions[i - 1]].supportsCodePoint(codePoint)) ||", + " /\\s/.test(text[i])", + " ) {", + " charResolutions[i] = charResolutions[i - 1];", + " if (prevCharResult === NEEDS_FALLBACK) {", + " fallbackRanges[fallbackRanges.length - 1][1] = i;", + " }", + " } else {", + " for (let j = charResolutions[i], jLen = userFonts.length; j <= jLen; j++) {", + " if (j === jLen) {", + " // none of the user fonts matched; needs fallback", + " const range = prevCharResult === NEEDS_FALLBACK ?", + " fallbackRanges[fallbackRanges.length - 1] :", + " (fallbackRanges[fallbackRanges.length] = [i, i]);", + " range[1] = i;", + " prevCharResult = NEEDS_FALLBACK;", + " } else {", + " charResolutions[i] = j;", + " const { src, unicodeRange } = userFonts[j];", + " // filter by optional explicit unicode ranges", + " if (!unicodeRange || isCodeInRanges(codePoint, unicodeRange)) {", + " const fontObj = parsedFonts[src];", + " // font not yet loaded, load it and resume", + " if (!fontObj) {", + " loadFont(src, () => {", + " resolveUserFonts(i);", + " });", + " return;", + " }", + " // if the font actually contains a glyph for this char, lock it in", + " if (fontObj.supportsCodePoint(codePoint)) {", + " let fontIndex = fontIndices.get(fontObj);", + " if (typeof fontIndex !== 'number') {", + " fontIndex = fontResolutions.length;", + " fontResolutions.push(fontObj);", + " fontIndices.set(fontObj, fontIndex);", + " }", + " charResolutions[i] = fontIndex;", + " prevCharResult = RESOLVED;", + " break;", + " }", + " }", + " }", + " }", + " }", + "", + " if (codePoint > 0xffff && i + 1 < iLen) {", + " charResolutions[i + 1] = charResolutions[i];", + " i++;", + " if (prevCharResult === NEEDS_FALLBACK) {", + " fallbackRanges[fallbackRanges.length - 1][1] = i;", + " }", + " }", + " }", + " resolveFallbacks();", + " })();", + " } else {", + " fallbackRanges.push([0, text.length - 1]);", + " resolveFallbacks();", + " }", + "", + " function resolveFallbacks() {", + " if (fallbackRanges.length) {", + " // Combine all fallback substrings into a single string for querying", + " const fallbackString = fallbackRanges.map(range => text.substring(range[0], range[1] + 1)).join('\\n');", + " unicodeFontResolverClient.getFontsForString(fallbackString, {", + " lang: lang || undefined,", + " style,", + " weight,", + " dataUrl: unicodeFontsURL", + " }).then(({fontUrls, chars}) => {", + " // Extract results and put them back in the main array", + " const fontIndexOffset = fontResolutions.length;", + " let charIdx = 0;", + " fallbackRanges.forEach(range => {", + " for (let i = 0, endIdx = range[1] - range[0]; i <= endIdx; i++) {", + " charResolutions[range[0] + i] = chars[charIdx++] + fontIndexOffset;", + " }", + " charIdx++; //skip segment separator", + " });", + "", + " // Load and parse the fallback fonts - avoiding Promise here to prevent polyfills in the worker", + " let loadedCount = 0;", + " fontUrls.forEach((url, i) => {", + " loadFont(url, fontObj => {", + " fontResolutions[i + fontIndexOffset] = fontObj;", + " if (++loadedCount === fontUrls.length) {", + " allDone();", + " }", + " });", + " });", + " });", + " } else {", + " allDone();", + " }", + " }", + "", + " function allDone() {", + " callback({", + " chars: charResolutions,", + " fonts: fontResolutions", + " });", + " }", + "", + " function isCodeInRanges(code, ranges) {", + " // todo optimize search - CodePointSet from unicode-font-resolver?", + " for (let k = 0; k < ranges.length; k++) {", + " const [start, end = start] = ranges[k];", + " if (start <= code && code <= end) {", + " return true", + " }", + " }", + " return false", + " }", + " }", + " }", + "", + " const fontResolverWorkerModule = /*#__PURE__*/defineWorkerModule({", + " name: 'FontResolver',", + " dependencies: [", + " createFontResolver,", + " workerModule,", + " unicodeFontResolverClientFactory,", + " ],", + " init(createFontResolver, fontParser, unicodeFontResolverClientFactory) {", + " return createFontResolver(fontParser, unicodeFontResolverClientFactory());", + " }", + " });", + "", + " /**", + " * @typedef {number|'left'|'center'|'right'} AnchorXValue", + " */", + " /**", + " * @typedef {number|'top'|'top-baseline'|'top-cap'|'top-ex'|'middle'|'bottom-baseline'|'bottom'} AnchorYValue", + " */", + "", + " /**", + " * @typedef {object} TypesetParams", + " * @property {string} text", + " * @property {UserFont|UserFont[]} [font]", + " * @property {string} [lang]", + " * @property {number} [sdfGlyphSize=64]", + " * @property {number} [fontSize=1]", + " * @property {number|'normal'|'bold'} [fontWeight='normal']", + " * @property {'normal'|'italic'} [fontStyle='normal']", + " * @property {number} [letterSpacing=0]", + " * @property {'normal'|number} [lineHeight='normal']", + " * @property {number} [maxWidth]", + " * @property {'ltr'|'rtl'} [direction='ltr']", + " * @property {string} [textAlign='left']", + " * @property {number} [textIndent=0]", + " * @property {'normal'|'nowrap'} [whiteSpace='normal']", + " * @property {'normal'|'break-word'} [overflowWrap='normal']", + " * @property {AnchorXValue} [anchorX=0]", + " * @property {AnchorYValue} [anchorY=0]", + " * @property {boolean} [metricsOnly=false]", + " * @property {string} [unicodeFontsURL]", + " * @property {FontResolverResult} [preResolvedFonts]", + " * @property {boolean} [includeCaretPositions=false]", + " * @property {number} [chunkedBoundsSize=8192]", + " * @property {{[rangeStartIndex]: number}} [colorRanges]", + " */", + "", + " /**", + " * @typedef {object} TypesetResult", + " * @property {Uint16Array} glyphIds id for each glyph, specific to that glyph's font", + " * @property {Uint8Array} glyphFontIndices index into fontData for each glyph", + " * @property {Float32Array} glyphPositions x,y of each glyph's origin in layout", + " * @property {{[font]: {[glyphId]: {path: string, pathBounds: number[]}}}} glyphData data about each glyph appearing in the text", + " * @property {TypesetFontData[]} fontData data about each font used in the text", + " * @property {Float32Array} [caretPositions] startX,endX,bottomY caret positions for each char", + " * @property {Uint8Array} [glyphColors] color for each glyph, if color ranges supplied", + " * chunkedBounds, //total rects per (n=chunkedBoundsSize) consecutive glyphs", + " * fontSize, //calculated em height", + " * topBaseline: anchorYOffset + lines[0].baseline, //y coordinate of the top line's baseline", + " * blockBounds: [ //bounds for the whole block of text, including vertical padding for lineHeight", + " * anchorXOffset,", + " * anchorYOffset - totalHeight,", + " * anchorXOffset + maxLineWidth,", + " * anchorYOffset", + " * ],", + " * visibleBounds, //total bounds of visible text paths, may be larger or smaller than blockBounds", + " * timings", + " */", + "", + " /**", + " * @typedef {object} TypesetFontData", + " * @property src", + " * @property unitsPerEm", + " * @property ascender", + " * @property descender", + " * @property lineHeight", + " * @property capHeight", + " * @property xHeight", + " */", + "", + " /**", + " * @typedef {function} TypesetterTypesetFunction - compute fonts and layout for some text.", + " * @param {TypesetParams} params", + " * @param {(TypesetResult) => void} callback - function called when typesetting is complete.", + " * If the params included `preResolvedFonts`, this will be called synchronously.", + " */", + "", + " /**", + " * @typedef {function} TypesetterMeasureFunction - compute width/height for some text.", + " * @param {TypesetParams} params", + " * @param {(width:number, height:number) => void} callback - function called when measurement is complete.", + " * If the params included `preResolvedFonts`, this will be called synchronously.", + " */", + "", + "", + " /**", + " * Factory function that creates a self-contained environment for processing text typesetting requests.", + " *", + " * It is important that this function has no closure dependencies, so that it can be easily injected", + " * into the source for a Worker without requiring a build step or complex dependency loading. All its", + " * dependencies must be passed in at initialization.", + " *", + " * @param {FontResolver} resolveFonts - function to resolve a string to parsed fonts", + " * @param {object} bidi - the bidi.js implementation object", + " * @return {{typeset: TypesetterTypesetFunction, measure: TypesetterMeasureFunction}}", + " */", + " function createTypesetter(resolveFonts, bidi) {", + " const INF = Infinity;", + "", + " // Set of Unicode Default_Ignorable_Code_Point characters, these will not produce visible glyphs", + " // eslint-disable-next-line no-misleading-character-class", + " const DEFAULT_IGNORABLE_CHARS = /[\\u00AD\\u034F\\u061C\\u115F-\\u1160\\u17B4-\\u17B5\\u180B-\\u180E\\u200B-\\u200F\\u202A-\\u202E\\u2060-\\u206F\\u3164\\uFE00-\\uFE0F\\uFEFF\\uFFA0\\uFFF0-\\uFFF8]/;", + "", + " // This regex (instead of /\\s/) allows us to select all whitespace EXCEPT for non-breaking white spaces", + " const lineBreakingWhiteSpace = `[^\\\\S\\\\u00A0]`;", + "", + " // Incomplete set of characters that allow line breaking after them", + " // In the future we may consider a full Unicode line breaking algorithm impl: https://www.unicode.org/reports/tr14", + " const BREAK_AFTER_CHARS = new RegExp(`${lineBreakingWhiteSpace}|[\\\\-\\\\u007C\\\\u00AD\\\\u2010\\\\u2012-\\\\u2014\\\\u2027\\\\u2056\\\\u2E17\\\\u2E40]`);", + "", + " /**", + " * Load and parse all the necessary fonts to render a given string of text, then group", + " * them into consecutive runs of characters sharing a font.", + " */", + " function calculateFontRuns({text, lang, fonts, style, weight, preResolvedFonts, unicodeFontsURL}, onDone) {", + " const onResolved = ({chars, fonts: parsedFonts}) => {", + " let curRun, prevVal;", + " const runs = [];", + " for (let i = 0; i < chars.length; i++) {", + " if (chars[i] !== prevVal) {", + " prevVal = chars[i];", + " runs.push(curRun = { start: i, end: i, fontObj: parsedFonts[chars[i]]});", + " } else {", + " curRun.end = i;", + " }", + " }", + " onDone(runs);", + " };", + " if (preResolvedFonts) {", + " onResolved(preResolvedFonts);", + " } else {", + " resolveFonts(", + " text,", + " onResolved,", + " { lang, fonts, style, weight, unicodeFontsURL }", + " );", + " }", + " }", + "", + " /**", + " * Main entry point.", + " * Process a text string with given font and formatting parameters, and return all info", + " * necessary to render all its glyphs.", + " * @type TypesetterTypesetFunction", + " */", + " function typeset(", + " {", + " text='',", + " font,", + " lang,", + " sdfGlyphSize=64,", + " fontSize=400,", + " fontWeight=1,", + " fontStyle='normal',", + " letterSpacing=0,", + " lineHeight='normal',", + " maxWidth=INF,", + " direction,", + " textAlign='left',", + " textIndent=0,", + " whiteSpace='normal',", + " overflowWrap='normal',", + " anchorX = 0,", + " anchorY = 0,", + " metricsOnly=false,", + " unicodeFontsURL,", + " preResolvedFonts=null,", + " includeCaretPositions=false,", + " chunkedBoundsSize=8192,", + " colorRanges=null", + " },", + " callback", + " ) {", + " const mainStart = now();", + " const timings = {fontLoad: 0, typesetting: 0};", + "", + " // Ensure newlines are normalized", + " if (text.indexOf('\\r') > -1) {", + " console.info('Typesetter: got text with \\\\r chars; normalizing to \\\\n');", + " text = text.replace(/\\r\\n/g, '\\n').replace(/\\r/g, '\\n');", + " }", + "", + " // Ensure we've got numbers not strings", + " fontSize = +fontSize;", + " letterSpacing = +letterSpacing;", + " maxWidth = +maxWidth;", + " lineHeight = lineHeight || 'normal';", + " textIndent = +textIndent;", + "", + " calculateFontRuns({", + " text,", + " lang,", + " style: fontStyle,", + " weight: fontWeight,", + " fonts: typeof font === 'string' ? [{src: font}] : font,", + " unicodeFontsURL,", + " preResolvedFonts", + " }, runs => {", + " timings.fontLoad = now() - mainStart;", + " const hasMaxWidth = isFinite(maxWidth);", + " let glyphIds = null;", + " let glyphFontIndices = null;", + " let glyphPositions = null;", + " let glyphData = null;", + " let glyphColors = null;", + " let caretPositions = null;", + " let visibleBounds = null;", + " let chunkedBounds = null;", + " let maxLineWidth = 0;", + " let renderableGlyphCount = 0;", + " let canWrap = whiteSpace !== 'nowrap';", + " const metricsByFont = new Map(); // fontObj -> metrics", + " const typesetStart = now();", + "", + " // Distribute glyphs into lines based on wrapping", + " let lineXOffset = textIndent;", + " let prevRunEndX = 0;", + " let currentLine = new TextLine();", + " const lines = [currentLine];", + " runs.forEach(run => {", + " const { fontObj } = run;", + " const { ascender, descender, unitsPerEm, lineGap, capHeight, xHeight } = fontObj;", + "", + " // Calculate metrics for each font used", + " let fontData = metricsByFont.get(fontObj);", + " if (!fontData) {", + " // Find conversion between native font units and fontSize units", + " const fontSizeMult = fontSize / unitsPerEm;", + "", + " // Determine appropriate value for 'normal' line height based on the font's actual metrics", + " // This does not guarantee individual glyphs won't exceed the line height, e.g. Roboto; should we use yMin/Max instead?", + " const calcLineHeight = lineHeight === 'normal' ?", + " (ascender - descender + lineGap) * fontSizeMult : lineHeight * fontSize;", + "", + " // Determine line height and leading adjustments", + " const halfLeading = (calcLineHeight - (ascender - descender) * fontSizeMult) / 2;", + " const caretHeight = Math.min(calcLineHeight, (ascender - descender) * fontSizeMult);", + " const caretTop = (ascender + descender) / 2 * fontSizeMult + caretHeight / 2;", + " fontData = {", + " index: metricsByFont.size,", + " src: fontObj.src,", + " fontObj,", + " fontSizeMult,", + " unitsPerEm,", + " ascender: ascender * fontSizeMult,", + " descender: descender * fontSizeMult,", + " capHeight: capHeight * fontSizeMult,", + " xHeight: xHeight * fontSizeMult,", + " lineHeight: calcLineHeight,", + " baseline: -halfLeading - ascender * fontSizeMult, // baseline offset from top of line height", + " // cap: -halfLeading - capHeight * fontSizeMult, // cap from top of line height", + " // ex: -halfLeading - xHeight * fontSizeMult, // ex from top of line height", + " caretTop: (ascender + descender) / 2 * fontSizeMult + caretHeight / 2,", + " caretBottom: caretTop - caretHeight", + " };", + " metricsByFont.set(fontObj, fontData);", + " }", + " const { fontSizeMult } = fontData;", + "", + " const runText = text.slice(run.start, run.end + 1);", + " let prevGlyphX, prevGlyphObj;", + " fontObj.forEachGlyph(runText, fontSize, letterSpacing, (glyphObj, glyphX, glyphY, charIndex) => {", + " glyphX += prevRunEndX;", + " charIndex += run.start;", + " prevGlyphX = glyphX;", + " prevGlyphObj = glyphObj;", + " const char = text.charAt(charIndex);", + " const glyphWidth = glyphObj.advanceWidth * fontSizeMult;", + " const curLineCount = currentLine.count;", + " let nextLine;", + "", + " // Calc isWhitespace and isEmpty once per glyphObj", + " if (!('isEmpty' in glyphObj)) {", + " glyphObj.isWhitespace = !!char && new RegExp(lineBreakingWhiteSpace).test(char);", + " glyphObj.canBreakAfter = !!char && BREAK_AFTER_CHARS.test(char);", + " glyphObj.isEmpty = glyphObj.xMin === glyphObj.xMax || glyphObj.yMin === glyphObj.yMax || DEFAULT_IGNORABLE_CHARS.test(char);", + " }", + " if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {", + " renderableGlyphCount++;", + " }", + "", + " // If a non-whitespace character overflows the max width, we need to soft-wrap", + " if (canWrap && hasMaxWidth && !glyphObj.isWhitespace && glyphX + glyphWidth + lineXOffset > maxWidth && curLineCount) {", + " // If it's the first char after a whitespace, start a new line", + " if (currentLine.glyphAt(curLineCount - 1).glyphObj.canBreakAfter) {", + " nextLine = new TextLine();", + " lineXOffset = -glyphX;", + " } else {", + " // Back up looking for a whitespace character to wrap at", + " for (let i = curLineCount; i--;) {", + " // If we got the start of the line there's no soft break point; make hard break if overflowWrap='break-word'", + " if (i === 0 && overflowWrap === 'break-word') {", + " nextLine = new TextLine();", + " lineXOffset = -glyphX;", + " break", + " }", + " // Found a soft break point; move all chars since it to a new line", + " else if (currentLine.glyphAt(i).glyphObj.canBreakAfter) {", + " nextLine = currentLine.splitAt(i + 1);", + " const adjustX = nextLine.glyphAt(0).x;", + " lineXOffset -= adjustX;", + " for (let j = nextLine.count; j--;) {", + " nextLine.glyphAt(j).x -= adjustX;", + " }", + " break", + " }", + " }", + " }", + " if (nextLine) {", + " currentLine.isSoftWrapped = true;", + " currentLine = nextLine;", + " lines.push(currentLine);", + " maxLineWidth = maxWidth; //after soft wrapping use maxWidth as calculated width", + " }", + " }", + "", + " let fly = currentLine.glyphAt(currentLine.count);", + " fly.glyphObj = glyphObj;", + " fly.x = glyphX + lineXOffset;", + " fly.y = glyphY;", + " fly.width = glyphWidth;", + " fly.charIndex = charIndex;", + " fly.fontData = fontData;", + "", + " // Handle hard line breaks", + " if (char === '\\n') {", + " currentLine = new TextLine();", + " lines.push(currentLine);", + " lineXOffset = -(glyphX + glyphWidth + (letterSpacing * fontSize)) + textIndent;", + " }", + " });", + " // At the end of a run we must capture the x position as the starting point for the next run", + " prevRunEndX = prevGlyphX + prevGlyphObj.advanceWidth * fontSizeMult + letterSpacing * fontSize;", + " });", + "", + " // Calculate width/height/baseline of each line (excluding trailing whitespace) and maximum block width", + " let totalHeight = 0;", + " lines.forEach(line => {", + " let isTrailingWhitespace = true;", + " for (let i = line.count; i--;) {", + " const glyphInfo = line.glyphAt(i);", + " // omit trailing whitespace from width calculation", + " if (isTrailingWhitespace && !glyphInfo.glyphObj.isWhitespace) {", + " line.width = glyphInfo.x + glyphInfo.width;", + " if (line.width > maxLineWidth) {", + " maxLineWidth = line.width;", + " }", + " isTrailingWhitespace = false;", + " }", + " // use the tallest line height, lowest baseline, and highest cap/ex", + " let {lineHeight, capHeight, xHeight, baseline} = glyphInfo.fontData;", + " if (lineHeight > line.lineHeight) line.lineHeight = lineHeight;", + " const baselineDiff = baseline - line.baseline;", + " if (baselineDiff < 0) { //shift all metrics down", + " line.baseline += baselineDiff;", + " line.cap += baselineDiff;", + " line.ex += baselineDiff;", + " }", + " // compare cap/ex based on new lowest baseline", + " line.cap = Math.max(line.cap, line.baseline + capHeight);", + " line.ex = Math.max(line.ex, line.baseline + xHeight);", + " }", + " line.baseline -= totalHeight;", + " line.cap -= totalHeight;", + " line.ex -= totalHeight;", + " totalHeight += line.lineHeight;", + " });", + "", + " // Find overall position adjustments for anchoring", + " let anchorXOffset = 0;", + " let anchorYOffset = 0;", + " if (anchorX) {", + " if (typeof anchorX === 'number') {", + " anchorXOffset = -anchorX;", + " }", + " else if (typeof anchorX === 'string') {", + " anchorXOffset = -maxLineWidth * (", + " anchorX === 'left' ? 0 :", + " anchorX === 'center' ? 0.5 :", + " anchorX === 'right' ? 1 :", + " parsePercent(anchorX)", + " );", + " }", + " }", + " if (anchorY) {", + " if (typeof anchorY === 'number') {", + " anchorYOffset = -anchorY;", + " }", + " else if (typeof anchorY === 'string') {", + " anchorYOffset = anchorY === 'top' ? 0 :", + " anchorY === 'top-baseline' ? -lines[0].baseline :", + " anchorY === 'top-cap' ? -lines[0].cap :", + " anchorY === 'top-ex' ? -lines[0].ex :", + " anchorY === 'middle' ? totalHeight / 2 :", + " anchorY === 'bottom' ? totalHeight :", + " anchorY === 'bottom-baseline' ? lines[lines.length - 1].baseline :", + " parsePercent(anchorY) * totalHeight;", + " }", + " }", + "", + " if (!metricsOnly) {", + " // Resolve bidi levels", + " const bidiLevelsResult = bidi.getEmbeddingLevels(text, direction);", + "", + " // Process each line, applying alignment offsets, adding each glyph to the atlas, and", + " // collecting all renderable glyphs into a single collection.", + " glyphIds = new Uint16Array(renderableGlyphCount);", + " glyphFontIndices = new Uint8Array(renderableGlyphCount);", + " glyphPositions = new Float32Array(renderableGlyphCount * 2);", + " glyphData = {};", + " visibleBounds = [INF, INF, -INF, -INF];", + " chunkedBounds = [];", + " if (includeCaretPositions) {", + " caretPositions = new Float32Array(text.length * 4);", + " }", + " if (colorRanges) {", + " glyphColors = new Uint8Array(renderableGlyphCount * 3);", + " }", + " let renderableGlyphIndex = 0;", + " let prevCharIndex = -1;", + " let colorCharIndex = -1;", + " let chunk;", + " let currentColor;", + " lines.forEach((line, lineIndex) => {", + " let {count:lineGlyphCount, width:lineWidth} = line;", + "", + " // Ignore empty lines", + " if (lineGlyphCount > 0) {", + " // Count trailing whitespaces, we want to ignore these for certain things", + " let trailingWhitespaceCount = 0;", + " for (let i = lineGlyphCount; i-- && line.glyphAt(i).glyphObj.isWhitespace;) {", + " trailingWhitespaceCount++;", + " }", + "", + " // Apply horizontal alignment adjustments", + " let lineXOffset = 0;", + " let justifyAdjust = 0;", + " if (textAlign === 'center') {", + " lineXOffset = (maxLineWidth - lineWidth) / 2;", + " } else if (textAlign === 'right') {", + " lineXOffset = maxLineWidth - lineWidth;", + " } else if (textAlign === 'justify' && line.isSoftWrapped) {", + " // count non-trailing whitespace characters, and we'll adjust the offsets per character in the next loop", + " let whitespaceCount = 0;", + " for (let i = lineGlyphCount - trailingWhitespaceCount; i--;) {", + " if (line.glyphAt(i).glyphObj.isWhitespace) {", + " whitespaceCount++;", + " }", + " }", + " justifyAdjust = (maxLineWidth - lineWidth) / whitespaceCount;", + " }", + " if (justifyAdjust || lineXOffset) {", + " let justifyOffset = 0;", + " for (let i = 0; i < lineGlyphCount; i++) {", + " let glyphInfo = line.glyphAt(i);", + " const glyphObj = glyphInfo.glyphObj;", + " glyphInfo.x += lineXOffset + justifyOffset;", + " // Expand non-trailing whitespaces for justify alignment", + " if (justifyAdjust !== 0 && glyphObj.isWhitespace && i < lineGlyphCount - trailingWhitespaceCount) {", + " justifyOffset += justifyAdjust;", + " glyphInfo.width += justifyAdjust;", + " }", + " }", + " }", + "", + " // Perform bidi range flipping", + " const flips = bidi.getReorderSegments(", + " text, bidiLevelsResult, line.glyphAt(0).charIndex, line.glyphAt(line.count - 1).charIndex", + " );", + " for (let fi = 0; fi < flips.length; fi++) {", + " const [start, end] = flips[fi];", + " // Map start/end string indices to indices in the line", + " let left = Infinity, right = -Infinity;", + " for (let i = 0; i < lineGlyphCount; i++) {", + " if (line.glyphAt(i).charIndex >= start) { // gte to handle removed characters", + " let startInLine = i, endInLine = i;", + " for (; endInLine < lineGlyphCount; endInLine++) {", + " let info = line.glyphAt(endInLine);", + " if (info.charIndex > end) {", + " break", + " }", + " if (endInLine < lineGlyphCount - trailingWhitespaceCount) { //don't include trailing ws in flip width", + " left = Math.min(left, info.x);", + " right = Math.max(right, info.x + info.width);", + " }", + " }", + " for (let j = startInLine; j < endInLine; j++) {", + " const glyphInfo = line.glyphAt(j);", + " glyphInfo.x = right - (glyphInfo.x + glyphInfo.width - left);", + " }", + " break", + " }", + " }", + " }", + "", + " // Assemble final data arrays", + " let glyphObj;", + " const setGlyphObj = g => glyphObj = g;", + " for (let i = 0; i < lineGlyphCount; i++) {", + " const glyphInfo = line.glyphAt(i);", + " glyphObj = glyphInfo.glyphObj;", + " const glyphId = glyphObj.index;", + "", + " // Replace mirrored characters in rtl", + " const rtl = bidiLevelsResult.levels[glyphInfo.charIndex] & 1; //odd level means rtl", + " if (rtl) {", + " const mirrored = bidi.getMirroredCharacter(text[glyphInfo.charIndex]);", + " if (mirrored) {", + " glyphInfo.fontData.fontObj.forEachGlyph(mirrored, 0, 0, setGlyphObj);", + " }", + " }", + "", + " // Add caret positions", + " if (includeCaretPositions) {", + " const {charIndex, fontData} = glyphInfo;", + " const caretLeft = glyphInfo.x + anchorXOffset;", + " const caretRight = glyphInfo.x + glyphInfo.width + anchorXOffset;", + " caretPositions[charIndex * 4] = rtl ? caretRight : caretLeft; //start edge x", + " caretPositions[charIndex * 4 + 1] = rtl ? caretLeft : caretRight; //end edge x", + " caretPositions[charIndex * 4 + 2] = line.baseline + fontData.caretBottom + anchorYOffset; //common bottom y", + " caretPositions[charIndex * 4 + 3] = line.baseline + fontData.caretTop + anchorYOffset; //common top y", + "", + " // If we skipped any chars from the previous glyph (due to ligature subs), fill in caret", + " // positions for those missing char indices; currently this uses a best-guess by dividing", + " // the ligature's width evenly. In the future we may try to use the font's LigatureCaretList", + " // table to get better interior caret positions.", + " const ligCount = charIndex - prevCharIndex;", + " if (ligCount > 1) {", + " fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);", + " }", + " prevCharIndex = charIndex;", + " }", + "", + " // Track current color range", + " if (colorRanges) {", + " const {charIndex} = glyphInfo;", + " while(charIndex > colorCharIndex) {", + " colorCharIndex++;", + " if (colorRanges.hasOwnProperty(colorCharIndex)) {", + " currentColor = colorRanges[colorCharIndex];", + " }", + " }", + " }", + "", + " // Get atlas data for renderable glyphs", + " if (!glyphObj.isWhitespace && !glyphObj.isEmpty) {", + " const idx = renderableGlyphIndex++;", + " const {fontSizeMult, src: fontSrc, index: fontIndex} = glyphInfo.fontData;", + "", + " // Add this glyph's path data", + " const fontGlyphData = glyphData[fontSrc] || (glyphData[fontSrc] = {});", + " if (!fontGlyphData[glyphId]) {", + " fontGlyphData[glyphId] = {", + " path: glyphObj.path,", + " pathBounds: [glyphObj.xMin, glyphObj.yMin, glyphObj.xMax, glyphObj.yMax]", + " };", + " }", + "", + " // Determine final glyph position and add to glyphPositions array", + " const glyphX = glyphInfo.x + anchorXOffset;", + " const glyphY = glyphInfo.y + line.baseline + anchorYOffset;", + " glyphPositions[idx * 2] = glyphX;", + " glyphPositions[idx * 2 + 1] = glyphY;", + "", + " // Track total visible bounds", + " const visX0 = glyphX + glyphObj.xMin * fontSizeMult;", + " const visY0 = glyphY + glyphObj.yMin * fontSizeMult;", + " const visX1 = glyphX + glyphObj.xMax * fontSizeMult;", + " const visY1 = glyphY + glyphObj.yMax * fontSizeMult;", + " if (visX0 < visibleBounds[0]) visibleBounds[0] = visX0;", + " if (visY0 < visibleBounds[1]) visibleBounds[1] = visY0;", + " if (visX1 > visibleBounds[2]) visibleBounds[2] = visX1;", + " if (visY1 > visibleBounds[3]) visibleBounds[3] = visY1;", + "", + " // Track bounding rects for each chunk of N glyphs", + " if (idx % chunkedBoundsSize === 0) {", + " chunk = {start: idx, end: idx, rect: [INF, INF, -INF, -INF]};", + " chunkedBounds.push(chunk);", + " }", + " chunk.end++;", + " const chunkRect = chunk.rect;", + " if (visX0 < chunkRect[0]) chunkRect[0] = visX0;", + " if (visY0 < chunkRect[1]) chunkRect[1] = visY0;", + " if (visX1 > chunkRect[2]) chunkRect[2] = visX1;", + " if (visY1 > chunkRect[3]) chunkRect[3] = visY1;", + "", + " // Add to glyph ids and font indices arrays", + " glyphIds[idx] = glyphId;", + " glyphFontIndices[idx] = fontIndex;", + "", + " // Add colors", + " if (colorRanges) {", + " const start = idx * 3;", + " glyphColors[start] = currentColor >> 16 & 255;", + " glyphColors[start + 1] = currentColor >> 8 & 255;", + " glyphColors[start + 2] = currentColor & 255;", + " }", + " }", + " }", + " }", + " });", + "", + " // Fill in remaining caret positions in case the final character was a ligature", + " if (caretPositions) {", + " const ligCount = text.length - prevCharIndex;", + " if (ligCount > 1) {", + " fillLigatureCaretPositions(caretPositions, prevCharIndex, ligCount);", + " }", + " }", + " }", + "", + " // Assemble final data about each font used", + " const fontData = [];", + " metricsByFont.forEach(({index, src, unitsPerEm, ascender, descender, lineHeight, capHeight, xHeight}) => {", + " fontData[index] = {src, unitsPerEm, ascender, descender, lineHeight, capHeight, xHeight};", + " });", + "", + " // Timing stats", + " timings.typesetting = now() - typesetStart;", + "", + " callback({", + " glyphIds, //id for each glyph, specific to that glyph's font", + " glyphFontIndices, //index into fontData for each glyph", + " glyphPositions, //x,y of each glyph's origin in layout", + " glyphData, //dict holding data about each glyph appearing in the text", + " fontData, //data about each font used in the text", + " caretPositions, //startX,endX,bottomY caret positions for each char", + " // caretHeight, //height of cursor from bottom to top - todo per glyph?", + " glyphColors, //color for each glyph, if color ranges supplied", + " chunkedBounds, //total rects per (n=chunkedBoundsSize) consecutive glyphs", + " fontSize, //calculated em height", + " topBaseline: anchorYOffset + lines[0].baseline, //y coordinate of the top line's baseline", + " blockBounds: [ //bounds for the whole block of text, including vertical padding for lineHeight", + " anchorXOffset,", + " anchorYOffset - totalHeight,", + " anchorXOffset + maxLineWidth,", + " anchorYOffset", + " ],", + " visibleBounds, //total bounds of visible text paths, may be larger or smaller than blockBounds", + " timings", + " });", + " });", + " }", + "", + "", + " /**", + " * For a given text string and font parameters, determine the resulting block dimensions", + " * after wrapping for the given maxWidth.", + " * @param args", + " * @param callback", + " */", + " function measure(args, callback) {", + " typeset({...args, metricsOnly: true}, (result) => {", + " const [x0, y0, x1, y1] = result.blockBounds;", + " callback({", + " width: x1 - x0,", + " height: y1 - y0", + " });", + " });", + " }", + "", + " function parsePercent(str) {", + " let match = str.match(/^([\\d.]+)%$/);", + " let pct = match ? parseFloat(match[1]) : NaN;", + " return isNaN(pct) ? 0 : pct / 100", + " }", + "", + " function fillLigatureCaretPositions(caretPositions, ligStartIndex, ligCount) {", + " const ligStartX = caretPositions[ligStartIndex * 4];", + " const ligEndX = caretPositions[ligStartIndex * 4 + 1];", + " const ligBottom = caretPositions[ligStartIndex * 4 + 2];", + " const ligTop = caretPositions[ligStartIndex * 4 + 3];", + " const guessedAdvanceX = (ligEndX - ligStartX) / ligCount;", + " for (let i = 0; i < ligCount; i++) {", + " const startIndex = (ligStartIndex + i) * 4;", + " caretPositions[startIndex] = ligStartX + guessedAdvanceX * i;", + " caretPositions[startIndex + 1] = ligStartX + guessedAdvanceX * (i + 1);", + " caretPositions[startIndex + 2] = ligBottom;", + " caretPositions[startIndex + 3] = ligTop;", + " }", + " }", + "", + " function now() {", + " return (self.performance || Date).now()", + " }", + "", + " // Array-backed structure for a single line's glyphs data", + " function TextLine() {", + " this.data = [];", + " }", + " const textLineProps = ['glyphObj', 'x', 'y', 'width', 'charIndex', 'fontData'];", + " TextLine.prototype = {", + " width: 0,", + " lineHeight: 0,", + " baseline: 0,", + " cap: 0,", + " ex: 0,", + " isSoftWrapped: false,", + " get count() {", + " return Math.ceil(this.data.length / textLineProps.length)", + " },", + " glyphAt(i) {", + " let fly = TextLine.flyweight;", + " fly.data = this.data;", + " fly.index = i;", + " return fly", + " },", + " splitAt(i) {", + " let newLine = new TextLine();", + " newLine.data = this.data.splice(i * textLineProps.length);", + " return newLine", + " }", + " };", + " TextLine.flyweight = textLineProps.reduce((obj, prop, i, all) => {", + " Object.defineProperty(obj, prop, {", + " get() {", + " return this.data[this.index * textLineProps.length + i]", + " },", + " set(val) {", + " this.data[this.index * textLineProps.length + i] = val;", + " }", + " });", + " return obj", + " }, {data: null, index: 0});", + "", + "", + " return {", + " typeset,", + " measure,", + " }", + " }", + "", + " function SDFGenerator() {", + " var exports = (function (exports) {", + "", + " /**", + " * Find the point on a quadratic bezier curve at t where t is in the range [0, 1]", + " */", + " function pointOnQuadraticBezier (x0, y0, x1, y1, x2, y2, t, pointOut) {", + " var t2 = 1 - t;", + " pointOut.x = t2 * t2 * x0 + 2 * t2 * t * x1 + t * t * x2;", + " pointOut.y = t2 * t2 * y0 + 2 * t2 * t * y1 + t * t * y2;", + " }", + "", + " /**", + " * Find the point on a cubic bezier curve at t where t is in the range [0, 1]", + " */", + " function pointOnCubicBezier (x0, y0, x1, y1, x2, y2, x3, y3, t, pointOut) {", + " var t2 = 1 - t;", + " pointOut.x = t2 * t2 * t2 * x0 + 3 * t2 * t2 * t * x1 + 3 * t2 * t * t * x2 + t * t * t * x3;", + " pointOut.y = t2 * t2 * t2 * y0 + 3 * t2 * t2 * t * y1 + 3 * t2 * t * t * y2 + t * t * t * y3;", + " }", + "", + " /**", + " * Parse a path string into its constituent line/curve commands, invoking a callback for each.", + " * @param {string} pathString - An SVG-like path string to parse; should only contain commands: M/L/Q/C/Z", + " * @param {function(", + " * command: 'L'|'Q'|'C',", + " * startX: number,", + " * startY: number,", + " * endX: number,", + " * endY: number,", + " * ctrl1X?: number,", + " * ctrl1Y?: number,", + " * ctrl2X?: number,", + " * ctrl2Y?: number", + " * )} commandCallback - A callback function that will be called once for each parsed path command, passing the", + " * command identifier (only L/Q/C commands) and its numeric arguments.", + " */", + " function forEachPathCommand(pathString, commandCallback) {", + " var segmentRE = /([MLQCZ])([^MLQCZ]*)/g;", + " var match, firstX, firstY, prevX, prevY;", + " while ((match = segmentRE.exec(pathString))) {", + " var args = match[2]", + " .replace(/^\\s*|\\s*$/g, '')", + " .split(/[,\\s]+/)", + " .map(function (v) { return parseFloat(v); });", + " switch (match[1]) {", + " case 'M':", + " prevX = firstX = args[0];", + " prevY = firstY = args[1];", + " break", + " case 'L':", + " if (args[0] !== prevX || args[1] !== prevY) { // yup, some fonts have zero-length line commands", + " commandCallback('L', prevX, prevY, (prevX = args[0]), (prevY = args[1]));", + " }", + " break", + " case 'Q': {", + " commandCallback('Q', prevX, prevY, (prevX = args[2]), (prevY = args[3]), args[0], args[1]);", + " break", + " }", + " case 'C': {", + " commandCallback('C', prevX, prevY, (prevX = args[4]), (prevY = args[5]), args[0], args[1], args[2], args[3]);", + " break", + " }", + " case 'Z':", + " if (prevX !== firstX || prevY !== firstY) {", + " commandCallback('L', prevX, prevY, firstX, firstY);", + " }", + " break", + " }", + " }", + " }", + "", + " /**", + " * Convert a path string to a series of straight line segments", + " * @param {string} pathString - An SVG-like path string to parse; should only contain commands: M/L/Q/C/Z", + " * @param {function(x1:number, y1:number, x2:number, y2:number)} segmentCallback - A callback", + " * function that will be called once for every line segment", + " * @param {number} [curvePoints] - How many straight line segments to use when approximating a", + " * bezier curve in the path. Defaults to 16.", + " */", + " function pathToLineSegments (pathString, segmentCallback, curvePoints) {", + " if ( curvePoints === void 0 ) curvePoints = 16;", + "", + " var tempPoint = { x: 0, y: 0 };", + " forEachPathCommand(pathString, function (command, startX, startY, endX, endY, ctrl1X, ctrl1Y, ctrl2X, ctrl2Y) {", + " switch (command) {", + " case 'L':", + " segmentCallback(startX, startY, endX, endY);", + " break", + " case 'Q': {", + " var prevCurveX = startX;", + " var prevCurveY = startY;", + " for (var i = 1; i < curvePoints; i++) {", + " pointOnQuadraticBezier(", + " startX, startY,", + " ctrl1X, ctrl1Y,", + " endX, endY,", + " i / (curvePoints - 1),", + " tempPoint", + " );", + " segmentCallback(prevCurveX, prevCurveY, tempPoint.x, tempPoint.y);", + " prevCurveX = tempPoint.x;", + " prevCurveY = tempPoint.y;", + " }", + " break", + " }", + " case 'C': {", + " var prevCurveX$1 = startX;", + " var prevCurveY$1 = startY;", + " for (var i$1 = 1; i$1 < curvePoints; i$1++) {", + " pointOnCubicBezier(", + " startX, startY,", + " ctrl1X, ctrl1Y,", + " ctrl2X, ctrl2Y,", + " endX, endY,", + " i$1 / (curvePoints - 1),", + " tempPoint", + " );", + " segmentCallback(prevCurveX$1, prevCurveY$1, tempPoint.x, tempPoint.y);", + " prevCurveX$1 = tempPoint.x;", + " prevCurveY$1 = tempPoint.y;", + " }", + " break", + " }", + " }", + " });", + " }", + "", + " var viewportQuadVertex = \"precision highp float;attribute vec2 aUV;varying vec2 vUV;void main(){vUV=aUV;gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}\";", + "", + " var copyTexFragment = \"precision highp float;uniform sampler2D tex;varying vec2 vUV;void main(){gl_FragColor=texture2D(tex,vUV);}\";", + "", + " var cache = new WeakMap();", + "", + " var glContextParams = {", + " premultipliedAlpha: false,", + " preserveDrawingBuffer: true,", + " antialias: false,", + " depth: false,", + " };", + "", + " /**", + " * This is a little helper library for WebGL. It assists with state management for a GL context.", + " * It's pretty tightly wrapped to the needs of this package, not very general-purpose.", + " *", + " * @param { WebGLRenderingContext | HTMLCanvasElement | OffscreenCanvas } glOrCanvas - the GL context to wrap", + " * @param { ({gl, getExtension, withProgram, withTexture, withTextureFramebuffer, handleContextLoss}) => void } callback", + " */", + " function withWebGLContext (glOrCanvas, callback) {", + " var gl = glOrCanvas.getContext ? glOrCanvas.getContext('webgl', glContextParams) : glOrCanvas;", + " var wrapper = cache.get(gl);", + " if (!wrapper) {", + " var isWebGL2 = typeof WebGL2RenderingContext !== 'undefined' && gl instanceof WebGL2RenderingContext;", + " var extensions = {};", + " var programs = {};", + " var textures = {};", + " var textureUnit = -1;", + " var framebufferStack = [];", + "", + " gl.canvas.addEventListener('webglcontextlost', function (e) {", + " handleContextLoss();", + " e.preventDefault();", + " }, false);", + "", + " function getExtension (name) {", + " var ext = extensions[name];", + " if (!ext) {", + " ext = extensions[name] = gl.getExtension(name);", + " if (!ext) {", + " throw new Error((name + \" not supported\"))", + " }", + " }", + " return ext", + " }", + "", + " function compileShader (src, type) {", + " var shader = gl.createShader(type);", + " gl.shaderSource(shader, src);", + " gl.compileShader(shader);", + " // const status = gl.getShaderParameter(shader, gl.COMPILE_STATUS)", + " // if (!status && !gl.isContextLost()) {", + " // throw new Error(gl.getShaderInfoLog(shader).trim())", + " // }", + " return shader", + " }", + "", + " function withProgram (name, vert, frag, func) {", + " if (!programs[name]) {", + " var attributes = {};", + " var uniforms = {};", + " var program = gl.createProgram();", + " gl.attachShader(program, compileShader(vert, gl.VERTEX_SHADER));", + " gl.attachShader(program, compileShader(frag, gl.FRAGMENT_SHADER));", + " gl.linkProgram(program);", + "", + " programs[name] = {", + " program: program,", + " transaction: function transaction (func) {", + " gl.useProgram(program);", + " func({", + " setUniform: function setUniform (type, name) {", + " var values = [], len = arguments.length - 2;", + " while ( len-- > 0 ) values[ len ] = arguments[ len + 2 ];", + "", + " var uniformLoc = uniforms[name] || (uniforms[name] = gl.getUniformLocation(program, name));", + " gl[(\"uniform\" + type)].apply(gl, [ uniformLoc ].concat( values ));", + " },", + "", + " setAttribute: function setAttribute (name, size, usage, instancingDivisor, data) {", + " var attr = attributes[name];", + " if (!attr) {", + " attr = attributes[name] = {", + " buf: gl.createBuffer(), // TODO should we destroy our buffers?", + " loc: gl.getAttribLocation(program, name),", + " data: null", + " };", + " }", + " gl.bindBuffer(gl.ARRAY_BUFFER, attr.buf);", + " gl.vertexAttribPointer(attr.loc, size, gl.FLOAT, false, 0, 0);", + " gl.enableVertexAttribArray(attr.loc);", + " if (isWebGL2) {", + " gl.vertexAttribDivisor(attr.loc, instancingDivisor);", + " } else {", + " getExtension('ANGLE_instanced_arrays').vertexAttribDivisorANGLE(attr.loc, instancingDivisor);", + " }", + " if (data !== attr.data) {", + " gl.bufferData(gl.ARRAY_BUFFER, data, usage);", + " attr.data = data;", + " }", + " }", + " });", + " }", + " };", + " }", + "", + " programs[name].transaction(func);", + " }", + "", + " function withTexture (name, func) {", + " textureUnit++;", + " try {", + " gl.activeTexture(gl.TEXTURE0 + textureUnit);", + " var texture = textures[name];", + " if (!texture) {", + " texture = textures[name] = gl.createTexture();", + " gl.bindTexture(gl.TEXTURE_2D, texture);", + " gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MIN_FILTER, gl.NEAREST);", + " gl.texParameteri(gl.TEXTURE_2D, gl.TEXTURE_MAG_FILTER, gl.NEAREST);", + " }", + " gl.bindTexture(gl.TEXTURE_2D, texture);", + " func(texture, textureUnit);", + " } finally {", + " textureUnit--;", + " }", + " }", + "", + " function withTextureFramebuffer (texture, textureUnit, func) {", + " var framebuffer = gl.createFramebuffer();", + " framebufferStack.push(framebuffer);", + " gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);", + " gl.activeTexture(gl.TEXTURE0 + textureUnit);", + " gl.bindTexture(gl.TEXTURE_2D, texture);", + " gl.framebufferTexture2D(gl.FRAMEBUFFER, gl.COLOR_ATTACHMENT0, gl.TEXTURE_2D, texture, 0);", + " try {", + " func(framebuffer);", + " } finally {", + " gl.deleteFramebuffer(framebuffer);", + " gl.bindFramebuffer(gl.FRAMEBUFFER, framebufferStack[--framebufferStack.length - 1] || null);", + " }", + " }", + "", + " function handleContextLoss () {", + " extensions = {};", + " programs = {};", + " textures = {};", + " textureUnit = -1;", + " framebufferStack.length = 0;", + " }", + "", + " cache.set(gl, wrapper = {", + " gl: gl,", + " isWebGL2: isWebGL2,", + " getExtension: getExtension,", + " withProgram: withProgram,", + " withTexture: withTexture,", + " withTextureFramebuffer: withTextureFramebuffer,", + " handleContextLoss: handleContextLoss,", + " });", + " }", + " callback(wrapper);", + " }", + "", + "", + " function renderImageData(glOrCanvas, imageData, x, y, width, height, channels, framebuffer) {", + " if ( channels === void 0 ) channels = 15;", + " if ( framebuffer === void 0 ) framebuffer = null;", + "", + " withWebGLContext(glOrCanvas, function (ref) {", + " var gl = ref.gl;", + " var withProgram = ref.withProgram;", + " var withTexture = ref.withTexture;", + "", + " withTexture('copy', function (tex, texUnit) {", + " gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, width, height, 0, gl.RGBA, gl.UNSIGNED_BYTE, imageData);", + " withProgram('copy', viewportQuadVertex, copyTexFragment, function (ref) {", + " var setUniform = ref.setUniform;", + " var setAttribute = ref.setAttribute;", + "", + " setAttribute('aUV', 2, gl.STATIC_DRAW, 0, new Float32Array([0, 0, 2, 0, 0, 2]));", + " setUniform('1i', 'image', texUnit);", + " gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer || null);", + " gl.disable(gl.BLEND);", + " gl.colorMask(channels & 8, channels & 4, channels & 2, channels & 1);", + " gl.viewport(x, y, width, height);", + " gl.scissor(x, y, width, height);", + " gl.drawArrays(gl.TRIANGLES, 0, 3);", + " });", + " });", + " });", + " }", + "", + " /**", + " * Resizing a canvas clears its contents; this utility copies the previous contents over.", + " * @param canvas", + " * @param newWidth", + " * @param newHeight", + " */", + " function resizeWebGLCanvasWithoutClearing(canvas, newWidth, newHeight) {", + " var width = canvas.width;", + " var height = canvas.height;", + " withWebGLContext(canvas, function (ref) {", + " var gl = ref.gl;", + "", + " var data = new Uint8Array(width * height * 4);", + " gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, data);", + " canvas.width = newWidth;", + " canvas.height = newHeight;", + " renderImageData(gl, data, 0, 0, width, height);", + " });", + " }", + "", + " var webglUtils = /*#__PURE__*/Object.freeze({", + " __proto__: null,", + " withWebGLContext: withWebGLContext,", + " renderImageData: renderImageData,", + " resizeWebGLCanvasWithoutClearing: resizeWebGLCanvasWithoutClearing", + " });", + "", + " function generate$2 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent) {", + " if ( sdfExponent === void 0 ) sdfExponent = 1;", + "", + " var textureData = new Uint8Array(sdfWidth * sdfHeight);", + "", + " var viewBoxWidth = viewBox[2] - viewBox[0];", + " var viewBoxHeight = viewBox[3] - viewBox[1];", + "", + " // Decompose all paths into straight line segments and add them to an index", + " var segments = [];", + " pathToLineSegments(path, function (x1, y1, x2, y2) {", + " segments.push({", + " x1: x1, y1: y1, x2: x2, y2: y2,", + " minX: Math.min(x1, x2),", + " minY: Math.min(y1, y2),", + " maxX: Math.max(x1, x2),", + " maxY: Math.max(y1, y2)", + " });", + " });", + "", + " // Sort segments by maxX, this will let us short-circuit some loops below", + " segments.sort(function (a, b) { return a.maxX - b.maxX; });", + "", + " // For each target SDF texel, find the distance from its center to its nearest line segment,", + " // map that distance to an alpha value, and write that alpha to the texel", + " for (var sdfX = 0; sdfX < sdfWidth; sdfX++) {", + " for (var sdfY = 0; sdfY < sdfHeight; sdfY++) {", + " var signedDist = findNearestSignedDistance(", + " viewBox[0] + viewBoxWidth * (sdfX + 0.5) / sdfWidth,", + " viewBox[1] + viewBoxHeight * (sdfY + 0.5) / sdfHeight", + " );", + "", + " // Use an exponential scale to ensure the texels very near the glyph path have adequate", + " // precision, while allowing the distance field to cover the entire texture, given that", + " // there are only 8 bits available. Formula visualized: https://www.desmos.com/calculator/uiaq5aqiam", + " var alpha = Math.pow((1 - Math.abs(signedDist) / maxDistance), sdfExponent) / 2;", + " if (signedDist < 0) {", + " alpha = 1 - alpha;", + " }", + "", + " alpha = Math.max(0, Math.min(255, Math.round(alpha * 255))); //clamp", + " textureData[sdfY * sdfWidth + sdfX] = alpha;", + " }", + " }", + "", + " return textureData", + "", + " /**", + " * For a given x/y, search the index for the closest line segment and return", + " * its signed distance. Negative = inside, positive = outside, zero = on edge", + " * @param x", + " * @param y", + " * @returns {number}", + " */", + " function findNearestSignedDistance (x, y) {", + " var closestDistSq = Infinity;", + " var closestDist = Infinity;", + "", + " for (var i = segments.length; i--;) {", + " var seg = segments[i];", + " if (seg.maxX + closestDist <= x) { break } //sorting by maxX means no more can be closer, so we can short-circuit", + " if (x + closestDist > seg.minX && y - closestDist < seg.maxY && y + closestDist > seg.minY) {", + " var distSq = absSquareDistanceToLineSegment(x, y, seg.x1, seg.y1, seg.x2, seg.y2);", + " if (distSq < closestDistSq) {", + " closestDistSq = distSq;", + " closestDist = Math.sqrt(closestDistSq);", + " }", + " }", + " }", + "", + " // Flip to negative distance if inside the poly", + " if (isPointInPoly(x, y)) {", + " closestDist = -closestDist;", + " }", + " return closestDist", + " }", + "", + " /**", + " * Determine whether the given point lies inside or outside the glyph. Uses a simple", + " * winding-number ray casting algorithm using a ray pointing east from the point.", + " */", + " function isPointInPoly (x, y) {", + " var winding = 0;", + " for (var i = segments.length; i--;) {", + " var seg = segments[i];", + " if (seg.maxX <= x) { break } //sorting by maxX means no more can cross, so we can short-circuit", + " var intersects = ((seg.y1 > y) !== (seg.y2 > y)) && (x < (seg.x2 - seg.x1) * (y - seg.y1) / (seg.y2 - seg.y1) + seg.x1);", + " if (intersects) {", + " winding += seg.y1 < seg.y2 ? 1 : -1;", + " }", + " }", + " return winding !== 0", + " }", + " }", + "", + " function generateIntoCanvas$2(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, x, y, channel) {", + " if ( sdfExponent === void 0 ) sdfExponent = 1;", + " if ( x === void 0 ) x = 0;", + " if ( y === void 0 ) y = 0;", + " if ( channel === void 0 ) channel = 0;", + "", + " generateIntoFramebuffer$1(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, null, x, y, channel);", + " }", + "", + " function generateIntoFramebuffer$1 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas, framebuffer, x, y, channel) {", + " if ( sdfExponent === void 0 ) sdfExponent = 1;", + " if ( x === void 0 ) x = 0;", + " if ( y === void 0 ) y = 0;", + " if ( channel === void 0 ) channel = 0;", + "", + " var data = generate$2(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent);", + " // Expand single-channel data to rbga", + " var rgbaData = new Uint8Array(data.length * 4);", + " for (var i = 0; i < data.length; i++) {", + " rgbaData[i * 4 + channel] = data[i];", + " }", + " renderImageData(glOrCanvas, rgbaData, x, y, sdfWidth, sdfHeight, 1 << (3 - channel), framebuffer);", + " }", + "", + " /**", + " * Find the absolute distance from a point to a line segment at closest approach", + " */", + " function absSquareDistanceToLineSegment (x, y, lineX0, lineY0, lineX1, lineY1) {", + " var ldx = lineX1 - lineX0;", + " var ldy = lineY1 - lineY0;", + " var lengthSq = ldx * ldx + ldy * ldy;", + " var t = lengthSq ? Math.max(0, Math.min(1, ((x - lineX0) * ldx + (y - lineY0) * ldy) / lengthSq)) : 0;", + " var dx = x - (lineX0 + t * ldx);", + " var dy = y - (lineY0 + t * ldy);", + " return dx * dx + dy * dy", + " }", + "", + " var javascript = /*#__PURE__*/Object.freeze({", + " __proto__: null,", + " generate: generate$2,", + " generateIntoCanvas: generateIntoCanvas$2,", + " generateIntoFramebuffer: generateIntoFramebuffer$1", + " });", + "", + " var mainVertex = \"precision highp float;uniform vec4 uGlyphBounds;attribute vec2 aUV;attribute vec4 aLineSegment;varying vec4 vLineSegment;varying vec2 vGlyphXY;void main(){vLineSegment=aLineSegment;vGlyphXY=mix(uGlyphBounds.xy,uGlyphBounds.zw,aUV);gl_Position=vec4(mix(vec2(-1.0),vec2(1.0),aUV),0.0,1.0);}\";", + "", + " var mainFragment = \"precision highp float;uniform vec4 uGlyphBounds;uniform float uMaxDistance;uniform float uExponent;varying vec4 vLineSegment;varying vec2 vGlyphXY;float absDistToSegment(vec2 point,vec2 lineA,vec2 lineB){vec2 lineDir=lineB-lineA;float lenSq=dot(lineDir,lineDir);float t=lenSq==0.0 ? 0.0 : clamp(dot(point-lineA,lineDir)/lenSq,0.0,1.0);vec2 linePt=lineA+t*lineDir;return distance(point,linePt);}void main(){vec4 seg=vLineSegment;vec2 p=vGlyphXY;float dist=absDistToSegment(p,seg.xy,seg.zw);float val=pow(1.0-clamp(dist/uMaxDistance,0.0,1.0),uExponent)*0.5;bool crossing=(seg.y>p.y!=seg.w>p.y)&&(p.x<(seg.z-seg.x)*(p.y-seg.y)/(seg.w-seg.y)+seg.x);bool crossingUp=crossing&&vLineSegment.y bool", + "", + " function validateSupport (glOrCanvas) {", + " if (!isTestingSupport && !isSupported(glOrCanvas)) {", + " throw new Error('WebGL generation not supported')", + " }", + " }", + "", + " function generate$1 (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas) {", + " if ( sdfExponent === void 0 ) sdfExponent = 1;", + " if ( glOrCanvas === void 0 ) glOrCanvas = null;", + "", + " if (!glOrCanvas) {", + " glOrCanvas = implicitContext;", + " if (!glOrCanvas) {", + " var canvas = typeof OffscreenCanvas === 'function'", + " ? new OffscreenCanvas(1, 1)", + " : typeof document !== 'undefined'", + " ? document.createElement('canvas')", + " : null;", + " if (!canvas) {", + " throw new Error('OffscreenCanvas or DOM canvas not supported')", + " }", + " glOrCanvas = implicitContext = canvas.getContext('webgl', { depth: false });", + " }", + " }", + "", + " validateSupport(glOrCanvas);", + "", + " var rgbaData = new Uint8Array(sdfWidth * sdfHeight * 4); //not Uint8ClampedArray, cuz Safari", + "", + " // Render into a background texture framebuffer", + " withWebGLContext(glOrCanvas, function (ref) {", + " var gl = ref.gl;", + " var withTexture = ref.withTexture;", + " var withTextureFramebuffer = ref.withTextureFramebuffer;", + "", + " withTexture('readable', function (texture, textureUnit) {", + " gl.texImage2D(gl.TEXTURE_2D, 0, gl.RGBA, sdfWidth, sdfHeight, 0, gl.RGBA, gl.UNSIGNED_BYTE, null);", + "", + " withTextureFramebuffer(texture, textureUnit, function (framebuffer) {", + " generateIntoFramebuffer(", + " sdfWidth,", + " sdfHeight,", + " path,", + " viewBox,", + " maxDistance,", + " sdfExponent,", + " gl,", + " framebuffer,", + " 0,", + " 0,", + " 0 // red channel", + " );", + " gl.readPixels(0, 0, sdfWidth, sdfHeight, gl.RGBA, gl.UNSIGNED_BYTE, rgbaData);", + " });", + " });", + " });", + "", + " // Throw away all but the red channel", + " var data = new Uint8Array(sdfWidth * sdfHeight);", + " for (var i = 0, j = 0; i < rgbaData.length; i += 4) {", + " data[j++] = rgbaData[i];", + " }", + "", + " return data", + " }", + "", + " function generateIntoCanvas$1(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, x, y, channel) {", + " if ( sdfExponent === void 0 ) sdfExponent = 1;", + " if ( x === void 0 ) x = 0;", + " if ( y === void 0 ) y = 0;", + " if ( channel === void 0 ) channel = 0;", + "", + " generateIntoFramebuffer(sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, canvas, null, x, y, channel);", + " }", + "", + " function generateIntoFramebuffer (sdfWidth, sdfHeight, path, viewBox, maxDistance, sdfExponent, glOrCanvas, framebuffer, x, y, channel) {", + " if ( sdfExponent === void 0 ) sdfExponent = 1;", + " if ( x === void 0 ) x = 0;", + " if ( y === void 0 ) y = 0;", + " if ( channel === void 0 ) channel = 0;", + "", + " // Verify support", + " validateSupport(glOrCanvas);", + "", + " // Compute path segments", + " var lineSegmentCoords = [];", + " pathToLineSegments(path, function (x1, y1, x2, y2) {", + " lineSegmentCoords.push(x1, y1, x2, y2);", + " });", + " lineSegmentCoords = new Float32Array(lineSegmentCoords);", + "", + " withWebGLContext(glOrCanvas, function (ref) {", + " var gl = ref.gl;", + " var isWebGL2 = ref.isWebGL2;", + " var getExtension = ref.getExtension;", + " var withProgram = ref.withProgram;", + " var withTexture = ref.withTexture;", + " var withTextureFramebuffer = ref.withTextureFramebuffer;", + " var handleContextLoss = ref.handleContextLoss;", + "", + " withTexture('rawDistances', function (intermediateTexture, intermediateTextureUnit) {", + " if (sdfWidth !== intermediateTexture._lastWidth || sdfHeight !== intermediateTexture._lastHeight) {", + " gl.texImage2D(", + " gl.TEXTURE_2D, 0, gl.RGBA,", + " intermediateTexture._lastWidth = sdfWidth,", + " intermediateTexture._lastHeight = sdfHeight,", + " 0, gl.RGBA, gl.UNSIGNED_BYTE, null", + " );", + " }", + "", + " // Unsigned distance pass", + " withProgram('main', mainVertex, mainFragment, function (ref) {", + " var setAttribute = ref.setAttribute;", + " var setUniform = ref.setUniform;", + "", + " // Init extensions", + " var instancingExtension = !isWebGL2 && getExtension('ANGLE_instanced_arrays');", + " var blendMinMaxExtension = !isWebGL2 && getExtension('EXT_blend_minmax');", + "", + " // Init/update attributes", + " setAttribute('aUV', 2, gl.STATIC_DRAW, 0, viewportUVs);", + " setAttribute('aLineSegment', 4, gl.DYNAMIC_DRAW, 1, lineSegmentCoords);", + "", + " // Init/update uniforms", + " setUniform.apply(void 0, [ '4f', 'uGlyphBounds' ].concat( viewBox ));", + " setUniform('1f', 'uMaxDistance', maxDistance);", + " setUniform('1f', 'uExponent', sdfExponent);", + "", + " // Render initial unsigned distance / winding number info to a texture", + " withTextureFramebuffer(intermediateTexture, intermediateTextureUnit, function (framebuffer) {", + " gl.enable(gl.BLEND);", + " gl.colorMask(true, true, true, true);", + " gl.viewport(0, 0, sdfWidth, sdfHeight);", + " gl.scissor(0, 0, sdfWidth, sdfHeight);", + " gl.blendFunc(gl.ONE, gl.ONE);", + " // Red+Green channels are incremented (FUNC_ADD) for segment-ray crossings to give a \"winding number\".", + " // Alpha holds the closest (MAX) unsigned distance.", + " gl.blendEquationSeparate(gl.FUNC_ADD, isWebGL2 ? gl.MAX : blendMinMaxExtension.MAX_EXT);", + " gl.clear(gl.COLOR_BUFFER_BIT);", + " if (isWebGL2) {", + " gl.drawArraysInstanced(gl.TRIANGLES, 0, 3, lineSegmentCoords.length / 4);", + " } else {", + " instancingExtension.drawArraysInstancedANGLE(gl.TRIANGLES, 0, 3, lineSegmentCoords.length / 4);", + " }", + " // Debug", + " // const debug = new Uint8Array(sdfWidth * sdfHeight * 4)", + " // gl.readPixels(0, 0, sdfWidth, sdfHeight, gl.RGBA, gl.UNSIGNED_BYTE, debug)", + " // console.log('intermediate texture data: ', debug)", + " });", + " });", + "", + " // Use the data stored in the texture to apply inside/outside and write to the output framebuffer rect+channel.", + " withProgram('post', viewportQuadVertex, postFragment, function (program) {", + " program.setAttribute('aUV', 2, gl.STATIC_DRAW, 0, viewportUVs);", + " program.setUniform('1i', 'tex', intermediateTextureUnit);", + " gl.bindFramebuffer(gl.FRAMEBUFFER, framebuffer);", + " gl.disable(gl.BLEND);", + " gl.colorMask(channel === 0, channel === 1, channel === 2, channel === 3);", + " gl.viewport(x, y, sdfWidth, sdfHeight);", + " gl.scissor(x, y, sdfWidth, sdfHeight);", + " gl.drawArrays(gl.TRIANGLES, 0, 3);", + " });", + " });", + "", + " // Handle context loss occurring during any of the above calls", + " if (gl.isContextLost()) {", + " handleContextLoss();", + " throw new Error('webgl context lost')", + " }", + " });", + " }", + "", + " function isSupported (glOrCanvas) {", + " var key = (!glOrCanvas || glOrCanvas === implicitContext) ? NULL_OBJECT : (glOrCanvas.canvas || glOrCanvas);", + " var supported = supportByCanvas.get(key);", + " if (supported === undefined) {", + " isTestingSupport = true;", + " var failReason = null;", + " try {", + " // Since we can't detect all failure modes up front, let's just do a trial run of a", + " // simple path and compare what we get back to the correct expected result. This will", + " // also serve to prime the shader compilation.", + " var expectedResult = [", + " 97, 106, 97, 61,", + " 99, 137, 118, 80,", + " 80, 118, 137, 99,", + " 61, 97, 106, 97", + " ];", + " var testResult = generate$1(", + " 4,", + " 4,", + " 'M8,8L16,8L24,24L16,24Z',", + " [0, 0, 32, 32],", + " 24,", + " 1,", + " glOrCanvas", + " );", + " supported = testResult && expectedResult.length === testResult.length &&", + " testResult.every(function (val, i) { return val === expectedResult[i]; });", + " if (!supported) {", + " failReason = 'bad trial run results';", + " console.info(expectedResult, testResult);", + " }", + " } catch (err) {", + " // TODO if it threw due to webgl context loss, should we maybe leave isSupported as null and try again later?", + " supported = false;", + " failReason = err.message;", + " }", + " if (failReason) {", + " console.warn('WebGL SDF generation not supported:', failReason);", + " }", + " isTestingSupport = false;", + " supportByCanvas.set(key, supported);", + " }", + " return supported", + " }", + "", + " var webgl = /*#__PURE__*/Object.freeze({", + " __proto__: null,", + " generate: generate$1,", + " generateIntoCanvas: generateIntoCanvas$1,", + " generateIntoFramebuffer: generateIntoFramebuffer,", + " isSupported: isSupported", + " });", + "", + " /**", + " * Generate an SDF texture image for a 2D path.", + " *", + " * @param {number} sdfWidth - width of the SDF output image in pixels.", + " * @param {number} sdfHeight - height of the SDF output image in pixels.", + " * @param {string} path - an SVG-like path string describing the glyph; should only contain commands: M/L/Q/C/Z.", + " * @param {number[]} viewBox - [minX, minY, maxX, maxY] in font units aligning with the texture's edges.", + " * @param {number} maxDistance - the maximum distance from the glyph path in font units that will be encoded; defaults", + " * to half the maximum viewBox dimension.", + " * @param {number} [sdfExponent] - specifies an exponent for encoding the SDF's distance values; higher exponents", + " * will give greater precision nearer the glyph's path.", + " * @return {Uint8Array}", + " */", + " function generate(", + " sdfWidth,", + " sdfHeight,", + " path,", + " viewBox,", + " maxDistance,", + " sdfExponent", + " ) {", + " if ( maxDistance === void 0 ) maxDistance = Math.max(viewBox[2] - viewBox[0], viewBox[3] - viewBox[1]) / 2;", + " if ( sdfExponent === void 0 ) sdfExponent = 1;", + "", + " try {", + " return generate$1.apply(webgl, arguments)", + " } catch(e) {", + " console.info('WebGL SDF generation failed, falling back to JS', e);", + " return generate$2.apply(javascript, arguments)", + " }", + " }", + "", + " /**", + " * Generate an SDF texture image for a 2D path, inserting the result into a WebGL `canvas` at a given x/y position", + " * and color channel. This is generally much faster than calling `generate` because it does not require reading pixels", + " * back from the GPU->CPU -- the `canvas` can be used directly as a WebGL texture image, so it all stays on the GPU.", + " *", + " * @param {number} sdfWidth - width of the SDF output image in pixels.", + " * @param {number} sdfHeight - height of the SDF output image in pixels.", + " * @param {string} path - an SVG-like path string describing the glyph; should only contain commands: M/L/Q/C/Z.", + " * @param {number[]} viewBox - [minX, minY, maxX, maxY] in font units aligning with the texture's edges.", + " * @param {number} maxDistance - the maximum distance from the glyph path in font units that will be encoded; defaults", + " * to half the maximum viewBox dimension.", + " * @param {number} [sdfExponent] - specifies an exponent for encoding the SDF's distance values; higher exponents", + " * will give greater precision nearer the glyph's path.", + " * @param {HTMLCanvasElement|OffscreenCanvas} canvas - a WebGL-enabled canvas into which the SDF will be rendered.", + " * Only the relevant rect/channel will be modified, the rest will be preserved. To avoid unpredictable results", + " * due to shared GL context state, this canvas should be dedicated to use by this library alone.", + " * @param {number} x - the x position at which to render the SDF.", + " * @param {number} y - the y position at which to render the SDF.", + " * @param {number} channel - the color channel index (0-4) into which the SDF will be rendered.", + " * @return {Uint8Array}", + " */", + " function generateIntoCanvas(", + " sdfWidth,", + " sdfHeight,", + " path,", + " viewBox,", + " maxDistance,", + " sdfExponent,", + " canvas,", + " x,", + " y,", + " channel", + " ) {", + " if ( maxDistance === void 0 ) maxDistance = Math.max(viewBox[2] - viewBox[0], viewBox[3] - viewBox[1]) / 2;", + " if ( sdfExponent === void 0 ) sdfExponent = 1;", + " if ( x === void 0 ) x = 0;", + " if ( y === void 0 ) y = 0;", + " if ( channel === void 0 ) channel = 0;", + "", + " try {", + " return generateIntoCanvas$1.apply(webgl, arguments)", + " } catch(e) {", + " console.info('WebGL SDF generation failed, falling back to JS', e);", + " return generateIntoCanvas$2.apply(javascript, arguments)", + " }", + " }", + "", + " exports.forEachPathCommand = forEachPathCommand;", + " exports.generate = generate;", + " exports.generateIntoCanvas = generateIntoCanvas;", + " exports.javascript = javascript;", + " exports.pathToLineSegments = pathToLineSegments;", + " exports.webgl = webgl;", + " exports.webglUtils = webglUtils;", + "", + " Object.defineProperty(exports, '__esModule', { value: true });", + "", + " return exports;", + "", + " }({}));", + " return exports", + " }", + "", + " const now = () => (self.performance || Date).now();", + "", + " const mainThreadGenerator = /*#__PURE__*/ SDFGenerator();", + "", + " let warned;", + "", + " /**", + " * Generate an SDF texture image for a single glyph path, placing the result into a webgl canvas at a", + " * given location and channel. Utilizes the webgl-sdf-generator external package for GPU-accelerated SDF", + " * generation when supported.", + " */", + " function generateSDF(width, height, path, viewBox, distance, exponent, canvas, x, y, channel, useWebGL = true) {", + " // Allow opt-out", + " if (!useWebGL) {", + " return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)", + " }", + "", + " // Attempt GPU-accelerated generation first", + " return generateSDF_GL(width, height, path, viewBox, distance, exponent, canvas, x, y, channel).then(", + " null,", + " err => {", + " // WebGL failed either due to a hard error or unexpected results; fall back to JS in workers", + " if (!warned) {", + " console.warn(`WebGL SDF generation failed, falling back to JS`, err);", + " warned = true;", + " }", + " return generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel)", + " }", + " )", + " }", + "", + " const queue = [];", + " const chunkTimeBudget = 5; // ms", + " let timer = 0;", + "", + " function nextChunk() {", + " const start = now();", + " while (queue.length && now() - start < chunkTimeBudget) {", + " queue.shift()();", + " }", + " timer = queue.length ? setTimeout(nextChunk, 0) : 0;", + " }", + "", + " /**", + " * WebGL-based implementation executed on the main thread. Requests are executed in time-bounded", + " * macrotask chunks to allow render frames to execute in between.", + " */", + " const generateSDF_GL = (...args) => {", + " return new Promise((resolve, reject) => {", + " queue.push(() => {", + " const start = now();", + " try {", + " mainThreadGenerator.webgl.generateIntoCanvas(...args);", + " resolve({ timing: now() - start });", + " } catch (err) {", + " reject(err);", + " }", + " });", + " if (!timer) {", + " timer = setTimeout(nextChunk, 0);", + " }", + " })", + " };", + "", + " const threadCount = 4; // how many workers to spawn", + " const idleTimeout = 2000; // workers will be terminated after being idle this many milliseconds", + " const threads = {};", + " let callNum = 0;", + "", + " /**", + " * Fallback JS-based implementation, fanned out to a number of worker threads for parallelism", + " */", + " function generateSDF_JS_Worker(width, height, path, viewBox, distance, exponent, canvas, x, y, channel) {", + " const workerId = 'TroikaTextSDFGenerator_JS_' + ((callNum++) % threadCount);", + " let thread = threads[workerId];", + " if (!thread) {", + " thread = threads[workerId] = {", + " workerModule: defineWorkerModule({", + " name: workerId,", + " workerId,", + " dependencies: [", + " SDFGenerator,", + " now", + " ],", + " init(_createSDFGenerator, now) {", + " const generate = _createSDFGenerator().javascript.generate;", + " return function (...args) {", + " const start = now();", + " const textureData = generate(...args);", + " return {", + " textureData,", + " timing: now() - start", + " }", + " }", + " },", + " getTransferables(result) {", + " return [result.textureData.buffer]", + " }", + " }),", + " requests: 0,", + " idleTimer: null", + " };", + " }", + "", + " thread.requests++;", + " clearTimeout(thread.idleTimer);", + " return thread.workerModule(width, height, path, viewBox, distance, exponent)", + " .then(({ textureData, timing }) => {", + " // copy result data into the canvas", + " const start = now();", + " // expand single-channel data into rgba", + " const imageData = new Uint8Array(textureData.length * 4);", + " for (let i = 0; i < textureData.length; i++) {", + " imageData[i * 4 + channel] = textureData[i];", + " }", + " mainThreadGenerator.webglUtils.renderImageData(canvas, imageData, x, y, width, height, 1 << (3 - channel));", + " timing += now() - start;", + "", + " // clean up workers after a while", + " if (--thread.requests === 0) {", + " thread.idleTimer = setTimeout(() => { terminateWorker(workerId); }, idleTimeout);", + " }", + " return { timing }", + " })", + " }", + "", + " function warmUpSDFCanvas(canvas) {", + " if (!canvas._warm) {", + " mainThreadGenerator.webgl.isSupported(canvas);", + " canvas._warm = true;", + " }", + " }", + "", + " const resizeWebGLCanvasWithoutClearing = mainThreadGenerator.webglUtils.resizeWebGLCanvasWithoutClearing;", + "", + " function bidiFactory() {", + " var bidi = (function (exports) {", + "", + " // Bidi character types data, auto generated", + " var DATA = {", + " \"R\": \"13k,1a,2,3,3,2+1j,ch+16,a+1,5+2,2+n,5,a,4,6+16,4+3,h+1b,4mo,179q,2+9,2+11,2i9+7y,2+68,4,3+4,5+13,4+3,2+4k,3+29,8+cf,1t+7z,w+17,3+3m,1t+3z,16o1+5r,8+30,8+mc,29+1r,29+4v,75+73\",", + " \"EN\": \"1c+9,3d+1,6,187+9,513,4+5,7+9,sf+j,175h+9,qw+q,161f+1d,4xt+a,25i+9\",", + " \"ES\": \"17,2,6dp+1,f+1,av,16vr,mx+1,4o,2\",", + " \"ET\": \"z+2,3h+3,b+1,ym,3e+1,2o,p4+1,8,6u,7c,g6,1wc,1n9+4,30+1b,2n,6d,qhx+1,h0m,a+1,49+2,63+1,4+1,6bb+3,12jj\",", + " \"AN\": \"16o+5,2j+9,2+1,35,ed,1ff2+9,87+u\",", + " \"CS\": \"18,2+1,b,2u,12k,55v,l,17v0,2,3,53,2+1,b\",", + " \"B\": \"a,3,f+2,2v,690\",", + " \"S\": \"9,2,k\",", + " \"WS\": \"c,k,4f4,1vk+a,u,1j,335\",", + " \"ON\": \"x+1,4+4,h+5,r+5,r+3,z,5+3,2+1,2+1,5,2+2,3+4,o,w,ci+1,8+d,3+d,6+8,2+g,39+1,9,6+1,2,33,b8,3+1,3c+1,7+1,5r,b,7h+3,sa+5,2,3i+6,jg+3,ur+9,2v,ij+1,9g+9,7+a,8m,4+1,49+x,14u,2+2,c+2,e+2,e+2,e+1,i+n,e+e,2+p,u+2,e+2,36+1,2+3,2+1,b,2+2,6+5,2,2,2,h+1,5+4,6+3,3+f,16+2,5+3l,3+81,1y+p,2+40,q+a,m+13,2r+ch,2+9e,75+hf,3+v,2+2w,6e+5,f+6,75+2a,1a+p,2+2g,d+5x,r+b,6+3,4+o,g,6+1,6+2,2k+1,4,2j,5h+z,1m+1,1e+f,t+2,1f+e,d+3,4o+3,2s+1,w,535+1r,h3l+1i,93+2,2s,b+1,3l+x,2v,4g+3,21+3,kz+1,g5v+1,5a,j+9,n+v,2,3,2+8,2+1,3+2,2,3,46+1,4+4,h+5,r+5,r+a,3h+2,4+6,b+4,78,1r+24,4+c,4,1hb,ey+6,103+j,16j+c,1ux+7,5+g,fsh,jdq+1t,4,57+2e,p1,1m,1m,1m,1m,4kt+1,7j+17,5+2r,d+e,3+e,2+e,2+10,m+4,w,1n+5,1q,4z+5,4b+rb,9+c,4+c,4+37,d+2g,8+b,l+b,5+1j,9+9,7+13,9+t,3+1,27+3c,2+29,2+3q,d+d,3+4,4+2,6+6,a+o,8+6,a+2,e+6,16+42,2+1i\",", + " \"BN\": \"0+8,6+d,2s+5,2+p,e,4m9,1kt+2,2b+5,5+5,17q9+v,7k,6p+8,6+1,119d+3,440+7,96s+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+1,1ekf+75,6p+2rz,1ben+1,1ekf+1,1ekf+1\",", + " \"NSM\": \"lc+33,7o+6,7c+18,2,2+1,2+1,2,21+a,1d+k,h,2u+6,3+5,3+1,2+3,10,v+q,2k+a,1n+8,a,p+3,2+8,2+2,2+4,18+2,3c+e,2+v,1k,2,5+7,5,4+6,b+1,u,1n,5+3,9,l+1,r,3+1,1m,5+1,5+1,3+2,4,v+1,4,c+1,1m,5+4,2+1,5,l+1,n+5,2,1n,3,2+3,9,8+1,c+1,v,1q,d,1f,4,1m+2,6+2,2+3,8+1,c+1,u,1n,g+1,l+1,t+1,1m+1,5+3,9,l+1,u,21,8+2,2,2j,3+6,d+7,2r,3+8,c+5,23+1,s,2,2,1k+d,2+4,2+1,6+a,2+z,a,2v+3,2+5,2+1,3+1,q+1,5+2,h+3,e,3+1,7,g,jk+2,qb+2,u+2,u+1,v+1,1t+1,2+6,9,3+a,a,1a+2,3c+1,z,3b+2,5+1,a,7+2,64+1,3,1n,2+6,2,2,3+7,7+9,3,1d+g,1s+3,1d,2+4,2,6,15+8,d+1,x+3,3+1,2+2,1l,2+1,4,2+2,1n+7,3+1,49+2,2+c,2+6,5,7,4+1,5j+1l,2+4,k1+w,2db+2,3y,2p+v,ff+3,30+1,n9x+3,2+9,x+1,29+1,7l,4,5,q+1,6,48+1,r+h,e,13+7,q+a,1b+2,1d,3+3,3+1,14,1w+5,3+1,3+1,d,9,1c,1g,2+2,3+1,6+1,2,17+1,9,6n,3,5,fn5,ki+f,h+f,r2,6b,46+4,1af+2,2+1,6+3,15+2,5,4m+1,fy+3,as+1,4a+a,4x,1j+e,1l+2,1e+3,3+1,1y+2,11+4,2+7,1r,d+1,1h+8,b+3,3,2o+2,3,2+1,7,4h,4+7,m+1,1m+1,4,12+6,4+4,5g+7,3+2,2,o,2d+5,2,5+1,2+1,6n+3,7+1,2+1,s+1,2e+7,3,2+1,2z,2,3+5,2,2u+2,3+3,2+4,78+8,2+1,75+1,2,5,41+3,3+1,5,x+5,3+1,15+5,3+3,9,a+5,3+2,1b+c,2+1,bb+6,2+5,2d+l,3+6,2+1,2+1,3f+5,4,2+1,2+6,2,21+1,4,2,9o+1,f0c+4,1o+6,t5,1s+3,2a,f5l+1,43t+2,i+7,3+6,v+3,45+2,1j0+1i,5+1d,9,f,n+4,2+e,11t+6,2+g,3+6,2+1,2+4,7a+6,c6+3,15t+6,32+6,gzhy+6n\",", + " \"AL\": \"16w,3,2,e+1b,z+2,2+2s,g+1,8+1,b+m,2+t,s+2i,c+e,4h+f,1d+1e,1bwe+dp,3+3z,x+c,2+1,35+3y,2rm+z,5+7,b+5,dt+l,c+u,17nl+27,1t+27,4x+6n,3+d\",", + " \"LRO\": \"6ct\",", + " \"RLO\": \"6cu\",", + " \"LRE\": \"6cq\",", + " \"RLE\": \"6cr\",", + " \"PDF\": \"6cs\",", + " \"LRI\": \"6ee\",", + " \"RLI\": \"6ef\",", + " \"FSI\": \"6eg\",", + " \"PDI\": \"6eh\"", + " };", + "", + " var TYPES = {};", + " var TYPES_TO_NAMES = {};", + " TYPES.L = 1; //L is the default", + " TYPES_TO_NAMES[1] = 'L';", + " Object.keys(DATA).forEach(function (type, i) {", + " TYPES[type] = 1 << (i + 1);", + " TYPES_TO_NAMES[TYPES[type]] = type;", + " });", + " Object.freeze(TYPES);", + "", + " var ISOLATE_INIT_TYPES = TYPES.LRI | TYPES.RLI | TYPES.FSI;", + " var STRONG_TYPES = TYPES.L | TYPES.R | TYPES.AL;", + " var NEUTRAL_ISOLATE_TYPES = TYPES.B | TYPES.S | TYPES.WS | TYPES.ON | TYPES.FSI | TYPES.LRI | TYPES.RLI | TYPES.PDI;", + " var BN_LIKE_TYPES = TYPES.BN | TYPES.RLE | TYPES.LRE | TYPES.RLO | TYPES.LRO | TYPES.PDF;", + " var TRAILING_TYPES = TYPES.S | TYPES.WS | TYPES.B | ISOLATE_INIT_TYPES | TYPES.PDI | BN_LIKE_TYPES;", + "", + " var map = null;", + "", + " function parseData () {", + " if (!map) {", + " //const start = performance.now()", + " map = new Map();", + " var loop = function ( type ) {", + " if (DATA.hasOwnProperty(type)) {", + " var lastCode = 0;", + " DATA[type].split(',').forEach(function (range) {", + " var ref = range.split('+');", + " var skip = ref[0];", + " var step = ref[1];", + " skip = parseInt(skip, 36);", + " step = step ? parseInt(step, 36) : 0;", + " map.set(lastCode += skip, TYPES[type]);", + " for (var i = 0; i < step; i++) {", + " map.set(++lastCode, TYPES[type]);", + " }", + " });", + " }", + " };", + "", + " for (var type in DATA) loop( type );", + " //console.log(`char types parsed in ${performance.now() - start}ms`)", + " }", + " }", + "", + " /**", + " * @param {string} char", + " * @return {number}", + " */", + " function getBidiCharType (char) {", + " parseData();", + " return map.get(char.codePointAt(0)) || TYPES.L", + " }", + "", + " function getBidiCharTypeName(char) {", + " return TYPES_TO_NAMES[getBidiCharType(char)]", + " }", + "", + " // Bidi bracket pairs data, auto generated", + " var data$1 = {", + " \"pairs\": \"14>1,1e>2,u>2,2wt>1,1>1,1ge>1,1wp>1,1j>1,f>1,hm>1,1>1,u>1,u6>1,1>1,+5,28>1,w>1,1>1,+3,b8>1,1>1,+3,1>3,-1>-1,3>1,1>1,+2,1s>1,1>1,x>1,th>1,1>1,+2,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,4q>1,1e>2,u>2,2>1,+1\",", + " \"canonical\": \"6f1>-6dx,6dy>-6dx,6ec>-6ed,6ee>-6ed,6ww>2jj,-2ji>2jj,14r4>-1e7l,1e7m>-1e7l,1e7m>-1e5c,1e5d>-1e5b,1e5c>-14qx,14qy>-14qx,14vn>-1ecg,1ech>-1ecg,1edu>-1ecg,1eci>-1ecg,1eda>-1ecg,1eci>-1ecg,1eci>-168q,168r>-168q,168s>-14ye,14yf>-14ye\"", + " };", + "", + " /**", + " * Parses an string that holds encoded codepoint mappings, e.g. for bracket pairs or", + " * mirroring characters, as encoded by scripts/generateBidiData.js. Returns an object", + " * holding the `map`, and optionally a `reverseMap` if `includeReverse:true`.", + " * @param {string} encodedString", + " * @param {boolean} includeReverse - true if you want reverseMap in the output", + " * @return {{map: Map, reverseMap?: Map}}", + " */", + " function parseCharacterMap (encodedString, includeReverse) {", + " var radix = 36;", + " var lastCode = 0;", + " var map = new Map();", + " var reverseMap = includeReverse && new Map();", + " var prevPair;", + " encodedString.split(',').forEach(function visit(entry) {", + " if (entry.indexOf('+') !== -1) {", + " for (var i = +entry; i--;) {", + " visit(prevPair);", + " }", + " } else {", + " prevPair = entry;", + " var ref = entry.split('>');", + " var a = ref[0];", + " var b = ref[1];", + " a = String.fromCodePoint(lastCode += parseInt(a, radix));", + " b = String.fromCodePoint(lastCode += parseInt(b, radix));", + " map.set(a, b);", + " includeReverse && reverseMap.set(b, a);", + " }", + " });", + " return { map: map, reverseMap: reverseMap }", + " }", + "", + " var openToClose, closeToOpen, canonical;", + "", + " function parse$1 () {", + " if (!openToClose) {", + " //const start = performance.now()", + " var ref = parseCharacterMap(data$1.pairs, true);", + " var map = ref.map;", + " var reverseMap = ref.reverseMap;", + " openToClose = map;", + " closeToOpen = reverseMap;", + " canonical = parseCharacterMap(data$1.canonical, false).map;", + " //console.log(`brackets parsed in ${performance.now() - start}ms`)", + " }", + " }", + "", + " function openingToClosingBracket (char) {", + " parse$1();", + " return openToClose.get(char) || null", + " }", + "", + " function closingToOpeningBracket (char) {", + " parse$1();", + " return closeToOpen.get(char) || null", + " }", + "", + " function getCanonicalBracket (char) {", + " parse$1();", + " return canonical.get(char) || null", + " }", + "", + " // Local type aliases", + " var TYPE_L = TYPES.L;", + " var TYPE_R = TYPES.R;", + " var TYPE_EN = TYPES.EN;", + " var TYPE_ES = TYPES.ES;", + " var TYPE_ET = TYPES.ET;", + " var TYPE_AN = TYPES.AN;", + " var TYPE_CS = TYPES.CS;", + " var TYPE_B = TYPES.B;", + " var TYPE_S = TYPES.S;", + " var TYPE_ON = TYPES.ON;", + " var TYPE_BN = TYPES.BN;", + " var TYPE_NSM = TYPES.NSM;", + " var TYPE_AL = TYPES.AL;", + " var TYPE_LRO = TYPES.LRO;", + " var TYPE_RLO = TYPES.RLO;", + " var TYPE_LRE = TYPES.LRE;", + " var TYPE_RLE = TYPES.RLE;", + " var TYPE_PDF = TYPES.PDF;", + " var TYPE_LRI = TYPES.LRI;", + " var TYPE_RLI = TYPES.RLI;", + " var TYPE_FSI = TYPES.FSI;", + " var TYPE_PDI = TYPES.PDI;", + "", + " /**", + " * @typedef {object} GetEmbeddingLevelsResult", + " * @property {{start, end, level}[]} paragraphs", + " * @property {Uint8Array} levels", + " */", + "", + " /**", + " * This function applies the Bidirectional Algorithm to a string, returning the resolved embedding levels", + " * in a single Uint8Array plus a list of objects holding each paragraph's start and end indices and resolved", + " * base embedding level.", + " *", + " * @param {string} string - The input string", + " * @param {\"ltr\"|\"rtl\"|\"auto\"} [baseDirection] - Use \"ltr\" or \"rtl\" to force a base paragraph direction,", + " * otherwise a direction will be chosen automatically from each paragraph's contents.", + " * @return {GetEmbeddingLevelsResult}", + " */", + " function getEmbeddingLevels (string, baseDirection) {", + " var MAX_DEPTH = 125;", + "", + " // Start by mapping all characters to their unicode type, as a bitmask integer", + " var charTypes = new Uint32Array(string.length);", + " for (var i = 0; i < string.length; i++) {", + " charTypes[i] = getBidiCharType(string[i]);", + " }", + "", + " var charTypeCounts = new Map(); //will be cleared at start of each paragraph", + " function changeCharType(i, type) {", + " var oldType = charTypes[i];", + " charTypes[i] = type;", + " charTypeCounts.set(oldType, charTypeCounts.get(oldType) - 1);", + " if (oldType & NEUTRAL_ISOLATE_TYPES) {", + " charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) - 1);", + " }", + " charTypeCounts.set(type, (charTypeCounts.get(type) || 0) + 1);", + " if (type & NEUTRAL_ISOLATE_TYPES) {", + " charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);", + " }", + " }", + "", + " var embedLevels = new Uint8Array(string.length);", + " var isolationPairs = new Map(); //init->pdi and pdi->init", + "", + " // === 3.3.1 The Paragraph Level ===", + " // 3.3.1 P1: Split the text into paragraphs", + " var paragraphs = []; // [{start, end, level}, ...]", + " var paragraph = null;", + " for (var i$1 = 0; i$1 < string.length; i$1++) {", + " if (!paragraph) {", + " paragraphs.push(paragraph = {", + " start: i$1,", + " end: string.length - 1,", + " // 3.3.1 P2-P3: Determine the paragraph level", + " level: baseDirection === 'rtl' ? 1 : baseDirection === 'ltr' ? 0 : determineAutoEmbedLevel(i$1, false)", + " });", + " }", + " if (charTypes[i$1] & TYPE_B) {", + " paragraph.end = i$1;", + " paragraph = null;", + " }", + " }", + "", + " var FORMATTING_TYPES = TYPE_RLE | TYPE_LRE | TYPE_RLO | TYPE_LRO | ISOLATE_INIT_TYPES | TYPE_PDI | TYPE_PDF | TYPE_B;", + " var nextEven = function (n) { return n + ((n & 1) ? 1 : 2); };", + " var nextOdd = function (n) { return n + ((n & 1) ? 2 : 1); };", + "", + " // Everything from here on will operate per paragraph.", + " for (var paraIdx = 0; paraIdx < paragraphs.length; paraIdx++) {", + " paragraph = paragraphs[paraIdx];", + " var statusStack = [{", + " _level: paragraph.level,", + " _override: 0, //0=neutral, 1=L, 2=R", + " _isolate: 0 //bool", + " }];", + " var stackTop = (void 0);", + " var overflowIsolateCount = 0;", + " var overflowEmbeddingCount = 0;", + " var validIsolateCount = 0;", + " charTypeCounts.clear();", + "", + " // === 3.3.2 Explicit Levels and Directions ===", + " for (var i$2 = paragraph.start; i$2 <= paragraph.end; i$2++) {", + " var charType = charTypes[i$2];", + " stackTop = statusStack[statusStack.length - 1];", + "", + " // Set initial counts", + " charTypeCounts.set(charType, (charTypeCounts.get(charType) || 0) + 1);", + " if (charType & NEUTRAL_ISOLATE_TYPES) {", + " charTypeCounts.set(NEUTRAL_ISOLATE_TYPES, (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES) || 0) + 1);", + " }", + "", + " // Explicit Embeddings: 3.3.2 X2 - X3", + " if (charType & FORMATTING_TYPES) { //prefilter all formatters", + " if (charType & (TYPE_RLE | TYPE_LRE)) {", + " embedLevels[i$2] = stackTop._level; // 5.2", + " var level = (charType === TYPE_RLE ? nextOdd : nextEven)(stackTop._level);", + " if (level <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {", + " statusStack.push({", + " _level: level,", + " _override: 0,", + " _isolate: 0", + " });", + " } else if (!overflowIsolateCount) {", + " overflowEmbeddingCount++;", + " }", + " }", + "", + " // Explicit Overrides: 3.3.2 X4 - X5", + " else if (charType & (TYPE_RLO | TYPE_LRO)) {", + " embedLevels[i$2] = stackTop._level; // 5.2", + " var level$1 = (charType === TYPE_RLO ? nextOdd : nextEven)(stackTop._level);", + " if (level$1 <= MAX_DEPTH && !overflowIsolateCount && !overflowEmbeddingCount) {", + " statusStack.push({", + " _level: level$1,", + " _override: (charType & TYPE_RLO) ? TYPE_R : TYPE_L,", + " _isolate: 0", + " });", + " } else if (!overflowIsolateCount) {", + " overflowEmbeddingCount++;", + " }", + " }", + "", + " // Isolates: 3.3.2 X5a - X5c", + " else if (charType & ISOLATE_INIT_TYPES) {", + " // X5c - FSI becomes either RLI or LRI", + " if (charType & TYPE_FSI) {", + " charType = determineAutoEmbedLevel(i$2 + 1, true) === 1 ? TYPE_RLI : TYPE_LRI;", + " }", + "", + " embedLevels[i$2] = stackTop._level;", + " if (stackTop._override) {", + " changeCharType(i$2, stackTop._override);", + " }", + " var level$2 = (charType === TYPE_RLI ? nextOdd : nextEven)(stackTop._level);", + " if (level$2 <= MAX_DEPTH && overflowIsolateCount === 0 && overflowEmbeddingCount === 0) {", + " validIsolateCount++;", + " statusStack.push({", + " _level: level$2,", + " _override: 0,", + " _isolate: 1,", + " _isolInitIndex: i$2", + " });", + " } else {", + " overflowIsolateCount++;", + " }", + " }", + "", + " // Terminating Isolates: 3.3.2 X6a", + " else if (charType & TYPE_PDI) {", + " if (overflowIsolateCount > 0) {", + " overflowIsolateCount--;", + " } else if (validIsolateCount > 0) {", + " overflowEmbeddingCount = 0;", + " while (!statusStack[statusStack.length - 1]._isolate) {", + " statusStack.pop();", + " }", + " // Add to isolation pairs bidirectional mapping:", + " var isolInitIndex = statusStack[statusStack.length - 1]._isolInitIndex;", + " if (isolInitIndex != null) {", + " isolationPairs.set(isolInitIndex, i$2);", + " isolationPairs.set(i$2, isolInitIndex);", + " }", + " statusStack.pop();", + " validIsolateCount--;", + " }", + " stackTop = statusStack[statusStack.length - 1];", + " embedLevels[i$2] = stackTop._level;", + " if (stackTop._override) {", + " changeCharType(i$2, stackTop._override);", + " }", + " }", + "", + "", + " // Terminating Embeddings and Overrides: 3.3.2 X7", + " else if (charType & TYPE_PDF) {", + " if (overflowIsolateCount === 0) {", + " if (overflowEmbeddingCount > 0) {", + " overflowEmbeddingCount--;", + " } else if (!stackTop._isolate && statusStack.length > 1) {", + " statusStack.pop();", + " stackTop = statusStack[statusStack.length - 1];", + " }", + " }", + " embedLevels[i$2] = stackTop._level; // 5.2", + " }", + "", + " // End of Paragraph: 3.3.2 X8", + " else if (charType & TYPE_B) {", + " embedLevels[i$2] = paragraph.level;", + " }", + " }", + "", + " // Non-formatting characters: 3.3.2 X6", + " else {", + " embedLevels[i$2] = stackTop._level;", + " // NOTE: This exclusion of BN seems to go against what section 5.2 says, but is required for test passage", + " if (stackTop._override && charType !== TYPE_BN) {", + " changeCharType(i$2, stackTop._override);", + " }", + " }", + " }", + "", + " // === 3.3.3 Preparations for Implicit Processing ===", + "", + " // Remove all RLE, LRE, RLO, LRO, PDF, and BN characters: 3.3.3 X9", + " // Note: Due to section 5.2, we won't remove them, but we'll use the BN_LIKE_TYPES bitset to", + " // easily ignore them all from here on out.", + "", + " // 3.3.3 X10", + " // Compute the set of isolating run sequences as specified by BD13", + " var levelRuns = [];", + " var currentRun = null;", + " for (var i$3 = paragraph.start; i$3 <= paragraph.end; i$3++) {", + " var charType$1 = charTypes[i$3];", + " if (!(charType$1 & BN_LIKE_TYPES)) {", + " var lvl = embedLevels[i$3];", + " var isIsolInit = charType$1 & ISOLATE_INIT_TYPES;", + " var isPDI = charType$1 === TYPE_PDI;", + " if (currentRun && lvl === currentRun._level) {", + " currentRun._end = i$3;", + " currentRun._endsWithIsolInit = isIsolInit;", + " } else {", + " levelRuns.push(currentRun = {", + " _start: i$3,", + " _end: i$3,", + " _level: lvl,", + " _startsWithPDI: isPDI,", + " _endsWithIsolInit: isIsolInit", + " });", + " }", + " }", + " }", + " var isolatingRunSeqs = []; // [{seqIndices: [], sosType: L|R, eosType: L|R}]", + " for (var runIdx = 0; runIdx < levelRuns.length; runIdx++) {", + " var run = levelRuns[runIdx];", + " if (!run._startsWithPDI || (run._startsWithPDI && !isolationPairs.has(run._start))) {", + " var seqRuns = [currentRun = run];", + " for (var pdiIndex = (void 0); currentRun && currentRun._endsWithIsolInit && (pdiIndex = isolationPairs.get(currentRun._end)) != null;) {", + " for (var i$4 = runIdx + 1; i$4 < levelRuns.length; i$4++) {", + " if (levelRuns[i$4]._start === pdiIndex) {", + " seqRuns.push(currentRun = levelRuns[i$4]);", + " break", + " }", + " }", + " }", + " // build flat list of indices across all runs:", + " var seqIndices = [];", + " for (var i$5 = 0; i$5 < seqRuns.length; i$5++) {", + " var run$1 = seqRuns[i$5];", + " for (var j = run$1._start; j <= run$1._end; j++) {", + " seqIndices.push(j);", + " }", + " }", + " // determine the sos/eos types:", + " var firstLevel = embedLevels[seqIndices[0]];", + " var prevLevel = paragraph.level;", + " for (var i$6 = seqIndices[0] - 1; i$6 >= 0; i$6--) {", + " if (!(charTypes[i$6] & BN_LIKE_TYPES)) { //5.2", + " prevLevel = embedLevels[i$6];", + " break", + " }", + " }", + " var lastIndex = seqIndices[seqIndices.length - 1];", + " var lastLevel = embedLevels[lastIndex];", + " var nextLevel = paragraph.level;", + " if (!(charTypes[lastIndex] & ISOLATE_INIT_TYPES)) {", + " for (var i$7 = lastIndex + 1; i$7 <= paragraph.end; i$7++) {", + " if (!(charTypes[i$7] & BN_LIKE_TYPES)) { //5.2", + " nextLevel = embedLevels[i$7];", + " break", + " }", + " }", + " }", + " isolatingRunSeqs.push({", + " _seqIndices: seqIndices,", + " _sosType: Math.max(prevLevel, firstLevel) % 2 ? TYPE_R : TYPE_L,", + " _eosType: Math.max(nextLevel, lastLevel) % 2 ? TYPE_R : TYPE_L", + " });", + " }", + " }", + "", + " // The next steps are done per isolating run sequence", + " for (var seqIdx = 0; seqIdx < isolatingRunSeqs.length; seqIdx++) {", + " var ref = isolatingRunSeqs[seqIdx];", + " var seqIndices$1 = ref._seqIndices;", + " var sosType = ref._sosType;", + " var eosType = ref._eosType;", + " /**", + " * All the level runs in an isolating run sequence have the same embedding level.", + " * ", + " * DO NOT change any `embedLevels[i]` within the current scope.", + " */", + " var embedDirection = ((embedLevels[seqIndices$1[0]]) & 1) ? TYPE_R : TYPE_L;", + "", + " // === 3.3.4 Resolving Weak Types ===", + "", + " // W1 + 5.2. Search backward from each NSM to the first character in the isolating run sequence whose", + " // bidirectional type is not BN, and set the NSM to ON if it is an isolate initiator or PDI, and to its", + " // type otherwise. If the NSM is the first non-BN character, change the NSM to the type of sos.", + " if (charTypeCounts.get(TYPE_NSM)) {", + " for (var si = 0; si < seqIndices$1.length; si++) {", + " var i$8 = seqIndices$1[si];", + " if (charTypes[i$8] & TYPE_NSM) {", + " var prevType = sosType;", + " for (var sj = si - 1; sj >= 0; sj--) {", + " if (!(charTypes[seqIndices$1[sj]] & BN_LIKE_TYPES)) { //5.2 scan back to first non-BN", + " prevType = charTypes[seqIndices$1[sj]];", + " break", + " }", + " }", + " changeCharType(i$8, (prevType & (ISOLATE_INIT_TYPES | TYPE_PDI)) ? TYPE_ON : prevType);", + " }", + " }", + " }", + "", + " // W2. Search backward from each instance of a European number until the first strong type (R, L, AL, or sos)", + " // is found. If an AL is found, change the type of the European number to Arabic number.", + " if (charTypeCounts.get(TYPE_EN)) {", + " for (var si$1 = 0; si$1 < seqIndices$1.length; si$1++) {", + " var i$9 = seqIndices$1[si$1];", + " if (charTypes[i$9] & TYPE_EN) {", + " for (var sj$1 = si$1 - 1; sj$1 >= -1; sj$1--) {", + " var prevCharType = sj$1 === -1 ? sosType : charTypes[seqIndices$1[sj$1]];", + " if (prevCharType & STRONG_TYPES) {", + " if (prevCharType === TYPE_AL) {", + " changeCharType(i$9, TYPE_AN);", + " }", + " break", + " }", + " }", + " }", + " }", + " }", + "", + " // W3. Change all ALs to R", + " if (charTypeCounts.get(TYPE_AL)) {", + " for (var si$2 = 0; si$2 < seqIndices$1.length; si$2++) {", + " var i$10 = seqIndices$1[si$2];", + " if (charTypes[i$10] & TYPE_AL) {", + " changeCharType(i$10, TYPE_R);", + " }", + " }", + " }", + "", + " // W4. A single European separator between two European numbers changes to a European number. A single common", + " // separator between two numbers of the same type changes to that type.", + " if (charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {", + " for (var si$3 = 1; si$3 < seqIndices$1.length - 1; si$3++) {", + " var i$11 = seqIndices$1[si$3];", + " if (charTypes[i$11] & (TYPE_ES | TYPE_CS)) {", + " var prevType$1 = 0, nextType = 0;", + " for (var sj$2 = si$3 - 1; sj$2 >= 0; sj$2--) {", + " prevType$1 = charTypes[seqIndices$1[sj$2]];", + " if (!(prevType$1 & BN_LIKE_TYPES)) { //5.2", + " break", + " }", + " }", + " for (var sj$3 = si$3 + 1; sj$3 < seqIndices$1.length; sj$3++) {", + " nextType = charTypes[seqIndices$1[sj$3]];", + " if (!(nextType & BN_LIKE_TYPES)) { //5.2", + " break", + " }", + " }", + " if (prevType$1 === nextType && (charTypes[i$11] === TYPE_ES ? prevType$1 === TYPE_EN : (prevType$1 & (TYPE_EN | TYPE_AN)))) {", + " changeCharType(i$11, prevType$1);", + " }", + " }", + " }", + " }", + "", + " // W5. A sequence of European terminators adjacent to European numbers changes to all European numbers.", + " if (charTypeCounts.get(TYPE_EN)) {", + " for (var si$4 = 0; si$4 < seqIndices$1.length; si$4++) {", + " var i$12 = seqIndices$1[si$4];", + " if (charTypes[i$12] & TYPE_EN) {", + " for (var sj$4 = si$4 - 1; sj$4 >= 0 && (charTypes[seqIndices$1[sj$4]] & (TYPE_ET | BN_LIKE_TYPES)); sj$4--) {", + " changeCharType(seqIndices$1[sj$4], TYPE_EN);", + " }", + " for (si$4++; si$4 < seqIndices$1.length && (charTypes[seqIndices$1[si$4]] & (TYPE_ET | BN_LIKE_TYPES | TYPE_EN)); si$4++) {", + " if (charTypes[seqIndices$1[si$4]] !== TYPE_EN) {", + " changeCharType(seqIndices$1[si$4], TYPE_EN);", + " }", + " }", + " }", + " }", + " }", + "", + " // W6. Otherwise, separators and terminators change to Other Neutral.", + " if (charTypeCounts.get(TYPE_ET) || charTypeCounts.get(TYPE_ES) || charTypeCounts.get(TYPE_CS)) {", + " for (var si$5 = 0; si$5 < seqIndices$1.length; si$5++) {", + " var i$13 = seqIndices$1[si$5];", + " if (charTypes[i$13] & (TYPE_ET | TYPE_ES | TYPE_CS)) {", + " changeCharType(i$13, TYPE_ON);", + " // 5.2 transform adjacent BNs too:", + " for (var sj$5 = si$5 - 1; sj$5 >= 0 && (charTypes[seqIndices$1[sj$5]] & BN_LIKE_TYPES); sj$5--) {", + " changeCharType(seqIndices$1[sj$5], TYPE_ON);", + " }", + " for (var sj$6 = si$5 + 1; sj$6 < seqIndices$1.length && (charTypes[seqIndices$1[sj$6]] & BN_LIKE_TYPES); sj$6++) {", + " changeCharType(seqIndices$1[sj$6], TYPE_ON);", + " }", + " }", + " }", + " }", + "", + " // W7. Search backward from each instance of a European number until the first strong type (R, L, or sos)", + " // is found. If an L is found, then change the type of the European number to L.", + " // NOTE: implemented in single forward pass for efficiency", + " if (charTypeCounts.get(TYPE_EN)) {", + " for (var si$6 = 0, prevStrongType = sosType; si$6 < seqIndices$1.length; si$6++) {", + " var i$14 = seqIndices$1[si$6];", + " var type = charTypes[i$14];", + " if (type & TYPE_EN) {", + " if (prevStrongType === TYPE_L) {", + " changeCharType(i$14, TYPE_L);", + " }", + " } else if (type & STRONG_TYPES) {", + " prevStrongType = type;", + " }", + " }", + " }", + "", + " // === 3.3.5 Resolving Neutral and Isolate Formatting Types ===", + "", + " if (charTypeCounts.get(NEUTRAL_ISOLATE_TYPES)) {", + " // N0. Process bracket pairs in an isolating run sequence sequentially in the logical order of the text", + " // positions of the opening paired brackets using the logic given below. Within this scope, bidirectional", + " // types EN and AN are treated as R.", + " var R_TYPES_FOR_N_STEPS = (TYPE_R | TYPE_EN | TYPE_AN);", + " var STRONG_TYPES_FOR_N_STEPS = R_TYPES_FOR_N_STEPS | TYPE_L;", + "", + " // * Identify the bracket pairs in the current isolating run sequence according to BD16.", + " var bracketPairs = [];", + " {", + " var openerStack = [];", + " for (var si$7 = 0; si$7 < seqIndices$1.length; si$7++) {", + " // NOTE: for any potential bracket character we also test that it still carries a NI", + " // type, as that may have been changed earlier. This doesn't seem to be explicitly", + " // called out in the spec, but is required for passage of certain tests.", + " if (charTypes[seqIndices$1[si$7]] & NEUTRAL_ISOLATE_TYPES) {", + " var char = string[seqIndices$1[si$7]];", + " var oppositeBracket = (void 0);", + " // Opening bracket", + " if (openingToClosingBracket(char) !== null) {", + " if (openerStack.length < 63) {", + " openerStack.push({ char: char, seqIndex: si$7 });", + " } else {", + " break", + " }", + " }", + " // Closing bracket", + " else if ((oppositeBracket = closingToOpeningBracket(char)) !== null) {", + " for (var stackIdx = openerStack.length - 1; stackIdx >= 0; stackIdx--) {", + " var stackChar = openerStack[stackIdx].char;", + " if (stackChar === oppositeBracket ||", + " stackChar === closingToOpeningBracket(getCanonicalBracket(char)) ||", + " openingToClosingBracket(getCanonicalBracket(stackChar)) === char", + " ) {", + " bracketPairs.push([openerStack[stackIdx].seqIndex, si$7]);", + " openerStack.length = stackIdx; //pop the matching bracket and all following", + " break", + " }", + " }", + " }", + " }", + " }", + " bracketPairs.sort(function (a, b) { return a[0] - b[0]; });", + " }", + " // * For each bracket-pair element in the list of pairs of text positions", + " for (var pairIdx = 0; pairIdx < bracketPairs.length; pairIdx++) {", + " var ref$1 = bracketPairs[pairIdx];", + " var openSeqIdx = ref$1[0];", + " var closeSeqIdx = ref$1[1];", + " // a. Inspect the bidirectional types of the characters enclosed within the bracket pair.", + " // b. If any strong type (either L or R) matching the embedding direction is found, set the type for both", + " // brackets in the pair to match the embedding direction.", + " var foundStrongType = false;", + " var useStrongType = 0;", + " for (var si$8 = openSeqIdx + 1; si$8 < closeSeqIdx; si$8++) {", + " var i$15 = seqIndices$1[si$8];", + " if (charTypes[i$15] & STRONG_TYPES_FOR_N_STEPS) {", + " foundStrongType = true;", + " var lr = (charTypes[i$15] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;", + " if (lr === embedDirection) {", + " useStrongType = lr;", + " break", + " }", + " }", + " }", + " // c. Otherwise, if there is a strong type it must be opposite the embedding direction. Therefore, test", + " // for an established context with a preceding strong type by checking backwards before the opening paired", + " // bracket until the first strong type (L, R, or sos) is found.", + " // 1. If the preceding strong type is also opposite the embedding direction, context is established, so", + " // set the type for both brackets in the pair to that direction.", + " // 2. Otherwise set the type for both brackets in the pair to the embedding direction.", + " if (foundStrongType && !useStrongType) {", + " useStrongType = sosType;", + " for (var si$9 = openSeqIdx - 1; si$9 >= 0; si$9--) {", + " var i$16 = seqIndices$1[si$9];", + " if (charTypes[i$16] & STRONG_TYPES_FOR_N_STEPS) {", + " var lr$1 = (charTypes[i$16] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;", + " if (lr$1 !== embedDirection) {", + " useStrongType = lr$1;", + " } else {", + " useStrongType = embedDirection;", + " }", + " break", + " }", + " }", + " }", + " if (useStrongType) {", + " charTypes[seqIndices$1[openSeqIdx]] = charTypes[seqIndices$1[closeSeqIdx]] = useStrongType;", + " // * Any number of characters that had original bidirectional character type NSM prior to the application", + " // of W1 that immediately follow a paired bracket which changed to L or R under N0 should change to match", + " // the type of their preceding bracket.", + " if (useStrongType !== embedDirection) {", + " for (var si$10 = openSeqIdx + 1; si$10 < seqIndices$1.length; si$10++) {", + " if (!(charTypes[seqIndices$1[si$10]] & BN_LIKE_TYPES)) {", + " if (getBidiCharType(string[seqIndices$1[si$10]]) & TYPE_NSM) {", + " charTypes[seqIndices$1[si$10]] = useStrongType;", + " }", + " break", + " }", + " }", + " }", + " if (useStrongType !== embedDirection) {", + " for (var si$11 = closeSeqIdx + 1; si$11 < seqIndices$1.length; si$11++) {", + " if (!(charTypes[seqIndices$1[si$11]] & BN_LIKE_TYPES)) {", + " if (getBidiCharType(string[seqIndices$1[si$11]]) & TYPE_NSM) {", + " charTypes[seqIndices$1[si$11]] = useStrongType;", + " }", + " break", + " }", + " }", + " }", + " }", + " }", + "", + " // N1. A sequence of NIs takes the direction of the surrounding strong text if the text on both sides has the", + " // same direction.", + " // N2. Any remaining NIs take the embedding direction.", + " for (var si$12 = 0; si$12 < seqIndices$1.length; si$12++) {", + " if (charTypes[seqIndices$1[si$12]] & NEUTRAL_ISOLATE_TYPES) {", + " var niRunStart = si$12, niRunEnd = si$12;", + " var prevType$2 = sosType; //si === 0 ? sosType : (charTypes[seqIndices[si - 1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L", + " for (var si2 = si$12 - 1; si2 >= 0; si2--) {", + " if (charTypes[seqIndices$1[si2]] & BN_LIKE_TYPES) {", + " niRunStart = si2; //5.2 treat BNs adjacent to NIs as NIs", + " } else {", + " prevType$2 = (charTypes[seqIndices$1[si2]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;", + " break", + " }", + " }", + " var nextType$1 = eosType;", + " for (var si2$1 = si$12 + 1; si2$1 < seqIndices$1.length; si2$1++) {", + " if (charTypes[seqIndices$1[si2$1]] & (NEUTRAL_ISOLATE_TYPES | BN_LIKE_TYPES)) {", + " niRunEnd = si2$1;", + " } else {", + " nextType$1 = (charTypes[seqIndices$1[si2$1]] & R_TYPES_FOR_N_STEPS) ? TYPE_R : TYPE_L;", + " break", + " }", + " }", + " for (var sj$7 = niRunStart; sj$7 <= niRunEnd; sj$7++) {", + " charTypes[seqIndices$1[sj$7]] = prevType$2 === nextType$1 ? prevType$2 : embedDirection;", + " }", + " si$12 = niRunEnd;", + " }", + " }", + " }", + " }", + "", + " // === 3.3.6 Resolving Implicit Levels ===", + "", + " for (var i$17 = paragraph.start; i$17 <= paragraph.end; i$17++) {", + " var level$3 = embedLevels[i$17];", + " var type$1 = charTypes[i$17];", + " // I2. For all characters with an odd (right-to-left) embedding level, those of type L, EN or AN go up one level.", + " if (level$3 & 1) {", + " if (type$1 & (TYPE_L | TYPE_EN | TYPE_AN)) {", + " embedLevels[i$17]++;", + " }", + " }", + " // I1. For all characters with an even (left-to-right) embedding level, those of type R go up one level", + " // and those of type AN or EN go up two levels.", + " else {", + " if (type$1 & TYPE_R) {", + " embedLevels[i$17]++;", + " } else if (type$1 & (TYPE_AN | TYPE_EN)) {", + " embedLevels[i$17] += 2;", + " }", + " }", + "", + " // 5.2: Resolve any LRE, RLE, LRO, RLO, PDF, or BN to the level of the preceding character if there is one,", + " // and otherwise to the base level.", + " if (type$1 & BN_LIKE_TYPES) {", + " embedLevels[i$17] = i$17 === 0 ? paragraph.level : embedLevels[i$17 - 1];", + " }", + "", + " // 3.4 L1.1-4: Reset the embedding level of segment/paragraph separators, and any sequence of whitespace or", + " // isolate formatting characters preceding them or the end of the paragraph, to the paragraph level.", + " // NOTE: this will also need to be applied to each individual line ending after line wrapping occurs.", + " if (i$17 === paragraph.end || getBidiCharType(string[i$17]) & (TYPE_S | TYPE_B)) {", + " for (var j$1 = i$17; j$1 >= 0 && (getBidiCharType(string[j$1]) & TRAILING_TYPES); j$1--) {", + " embedLevels[j$1] = paragraph.level;", + " }", + " }", + " }", + " }", + "", + " // DONE! The resolved levels can then be used, after line wrapping, to flip runs of characters", + " // according to section 3.4 Reordering Resolved Levels", + " return {", + " levels: embedLevels,", + " paragraphs: paragraphs", + " }", + "", + " function determineAutoEmbedLevel (start, isFSI) {", + " // 3.3.1 P2 - P3", + " for (var i = start; i < string.length; i++) {", + " var charType = charTypes[i];", + " if (charType & (TYPE_R | TYPE_AL)) {", + " return 1", + " }", + " if ((charType & (TYPE_B | TYPE_L)) || (isFSI && charType === TYPE_PDI)) {", + " return 0", + " }", + " if (charType & ISOLATE_INIT_TYPES) {", + " var pdi = indexOfMatchingPDI(i);", + " i = pdi === -1 ? string.length : pdi;", + " }", + " }", + " return 0", + " }", + "", + " function indexOfMatchingPDI (isolateStart) {", + " // 3.1.2 BD9", + " var isolationLevel = 1;", + " for (var i = isolateStart + 1; i < string.length; i++) {", + " var charType = charTypes[i];", + " if (charType & TYPE_B) {", + " break", + " }", + " if (charType & TYPE_PDI) {", + " if (--isolationLevel === 0) {", + " return i", + " }", + " } else if (charType & ISOLATE_INIT_TYPES) {", + " isolationLevel++;", + " }", + " }", + " return -1", + " }", + " }", + "", + " // Bidi mirrored chars data, auto generated", + " var data = \"14>1,j>2,t>2,u>2,1a>g,2v3>1,1>1,1ge>1,1wd>1,b>1,1j>1,f>1,ai>3,-2>3,+1,8>1k0,-1jq>1y7,-1y6>1hf,-1he>1h6,-1h5>1ha,-1h8>1qi,-1pu>1,6>3u,-3s>7,6>1,1>1,f>1,1>1,+2,3>1,1>1,+13,4>1,1>1,6>1eo,-1ee>1,3>1mg,-1me>1mk,-1mj>1mi,-1mg>1mi,-1md>1,1>1,+2,1>10k,-103>1,1>1,4>1,5>1,1>1,+10,3>1,1>8,-7>8,+1,-6>7,+1,a>1,1>1,u>1,u6>1,1>1,+5,26>1,1>1,2>1,2>2,8>1,7>1,4>1,1>1,+5,b8>1,1>1,+3,1>3,-2>1,2>1,1>1,+2,c>1,3>1,1>1,+2,h>1,3>1,a>1,1>1,2>1,3>1,1>1,d>1,f>1,3>1,1a>1,1>1,6>1,7>1,13>1,k>1,1>1,+19,4>1,1>1,+2,2>1,1>1,+18,m>1,a>1,1>1,lk>1,1>1,4>1,2>1,f>1,3>1,1>1,+3,db>1,1>1,+3,3>1,1>1,+2,14qm>1,1>1,+1,6>1,4j>1,j>2,t>2,u>2,2>1,+1\";", + "", + " var mirrorMap;", + "", + " function parse () {", + " if (!mirrorMap) {", + " //const start = performance.now()", + " var ref = parseCharacterMap(data, true);", + " var map = ref.map;", + " var reverseMap = ref.reverseMap;", + " // Combine both maps into one", + " reverseMap.forEach(function (value, key) {", + " map.set(key, value);", + " });", + " mirrorMap = map;", + " //console.log(`mirrored chars parsed in ${performance.now() - start}ms`)", + " }", + " }", + "", + " function getMirroredCharacter (char) {", + " parse();", + " return mirrorMap.get(char) || null", + " }", + "", + " /**", + " * Given a string and its resolved embedding levels, build a map of indices to replacement chars", + " * for any characters in right-to-left segments that have defined mirrored characters.", + " * @param string", + " * @param embeddingLevels", + " * @param [start]", + " * @param [end]", + " * @return {Map}", + " */", + " function getMirroredCharactersMap(string, embeddingLevels, start, end) {", + " var strLen = string.length;", + " start = Math.max(0, start == null ? 0 : +start);", + " end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);", + "", + " var map = new Map();", + " for (var i = start; i <= end; i++) {", + " if (embeddingLevels[i] & 1) { //only odd (rtl) levels", + " var mirror = getMirroredCharacter(string[i]);", + " if (mirror !== null) {", + " map.set(i, mirror);", + " }", + " }", + " }", + " return map", + " }", + "", + " /**", + " * Given a start and end denoting a single line within a string, and a set of precalculated", + " * bidi embedding levels, produce a list of segments whose ordering should be flipped, in sequence.", + " * @param {string} string - the full input string", + " * @param {GetEmbeddingLevelsResult} embeddingLevelsResult - the result object from getEmbeddingLevels", + " * @param {number} [start] - first character in a subset of the full string", + " * @param {number} [end] - last character in a subset of the full string", + " * @return {number[][]} - the list of start/end segments that should be flipped, in order.", + " */", + " function getReorderSegments(string, embeddingLevelsResult, start, end) {", + " var strLen = string.length;", + " start = Math.max(0, start == null ? 0 : +start);", + " end = Math.min(strLen - 1, end == null ? strLen - 1 : +end);", + "", + " var segments = [];", + " embeddingLevelsResult.paragraphs.forEach(function (paragraph) {", + " var lineStart = Math.max(start, paragraph.start);", + " var lineEnd = Math.min(end, paragraph.end);", + " if (lineStart < lineEnd) {", + " // Local slice for mutation", + " var lineLevels = embeddingLevelsResult.levels.slice(lineStart, lineEnd + 1);", + "", + " // 3.4 L1.4: Reset any sequence of whitespace characters and/or isolate formatting characters at the", + " // end of the line to the paragraph level.", + " for (var i = lineEnd; i >= lineStart && (getBidiCharType(string[i]) & TRAILING_TYPES); i--) {", + " lineLevels[i] = paragraph.level;", + " }", + "", + " // L2. From the highest level found in the text to the lowest odd level on each line, including intermediate levels", + " // not actually present in the text, reverse any contiguous sequence of characters that are at that level or higher.", + " var maxLevel = paragraph.level;", + " var minOddLevel = Infinity;", + " for (var i$1 = 0; i$1 < lineLevels.length; i$1++) {", + " var level = lineLevels[i$1];", + " if (level > maxLevel) { maxLevel = level; }", + " if (level < minOddLevel) { minOddLevel = level | 1; }", + " }", + " for (var lvl = maxLevel; lvl >= minOddLevel; lvl--) {", + " for (var i$2 = 0; i$2 < lineLevels.length; i$2++) {", + " if (lineLevels[i$2] >= lvl) {", + " var segStart = i$2;", + " while (i$2 + 1 < lineLevels.length && lineLevels[i$2 + 1] >= lvl) {", + " i$2++;", + " }", + " if (i$2 > segStart) {", + " segments.push([segStart + lineStart, i$2 + lineStart]);", + " }", + " }", + " }", + " }", + " }", + " });", + " return segments", + " }", + "", + " /**", + " * @param {string} string", + " * @param {GetEmbeddingLevelsResult} embedLevelsResult", + " * @param {number} [start]", + " * @param {number} [end]", + " * @return {string} the new string with bidi segments reordered", + " */", + " function getReorderedString(string, embedLevelsResult, start, end) {", + " var indices = getReorderedIndices(string, embedLevelsResult, start, end);", + " var chars = [].concat( string );", + " indices.forEach(function (charIndex, i) {", + " chars[i] = (", + " (embedLevelsResult.levels[charIndex] & 1) ? getMirroredCharacter(string[charIndex]) : null", + " ) || string[charIndex];", + " });", + " return chars.join('')", + " }", + "", + " /**", + " * @param {string} string", + " * @param {GetEmbeddingLevelsResult} embedLevelsResult", + " * @param {number} [start]", + " * @param {number} [end]", + " * @return {number[]} an array with character indices in their new bidi order", + " */", + " function getReorderedIndices(string, embedLevelsResult, start, end) {", + " var segments = getReorderSegments(string, embedLevelsResult, start, end);", + " // Fill an array with indices", + " var indices = [];", + " for (var i = 0; i < string.length; i++) {", + " indices[i] = i;", + " }", + " // Reverse each segment in order", + " segments.forEach(function (ref) {", + " var start = ref[0];", + " var end = ref[1];", + "", + " var slice = indices.slice(start, end + 1);", + " for (var i = slice.length; i--;) {", + " indices[end - i] = slice[i];", + " }", + " });", + " return indices", + " }", + "", + " exports.closingToOpeningBracket = closingToOpeningBracket;", + " exports.getBidiCharType = getBidiCharType;", + " exports.getBidiCharTypeName = getBidiCharTypeName;", + " exports.getCanonicalBracket = getCanonicalBracket;", + " exports.getEmbeddingLevels = getEmbeddingLevels;", + " exports.getMirroredCharacter = getMirroredCharacter;", + " exports.getMirroredCharactersMap = getMirroredCharactersMap;", + " exports.getReorderSegments = getReorderSegments;", + " exports.getReorderedIndices = getReorderedIndices;", + " exports.getReorderedString = getReorderedString;", + " exports.openingToClosingBracket = openingToClosingBracket;", + "", + " Object.defineProperty(exports, '__esModule', { value: true });", + "", + " return exports;", + "", + " }({}));", + " return bidi}", + "", + " const CONFIG = {", + " defaultFontURL: null,", + " unicodeFontsURL: null,", + " sdfGlyphSize: 64,", + " sdfMargin: 1 / 16,", + " sdfExponent: 9,", + " textureWidth: 2048,", + " };", + " const tempColor = /*#__PURE__*/new THREE.Color();", + " let hasRequested = false;", + "", + " function now$1() {", + " return (self.performance || Date).now()", + " }", + "", + " /**", + " * Customizes the text builder configuration. This must be called prior to the first font processing", + " * request, and applies to all fonts.", + " *", + " * @param {String} config.defaultFontURL - The URL of the default font to use for text processing", + " * requests, in case none is specified or the specifiede font fails to load or parse.", + " * Defaults to \"Roboto Regular\" from Google Fonts.", + " * @param {String} config.unicodeFontsURL - A custom location for the fallback unicode-font-resolver", + " * data and font files, if you don't want to use the default CDN. See", + " * https://github.com/lojjic/unicode-font-resolver for details. It can also be", + " * configured per text instance, but this lets you do it once globally.", + " * @param {Number} config.sdfGlyphSize - The default size of each glyph's SDF (signed distance field)", + " * texture used for rendering. Must be a power-of-two number, and applies to all fonts,", + " * but note that this can also be overridden per call to `getTextRenderInfo()`.", + " * Larger sizes can improve the quality of glyph rendering by increasing the sharpness", + " * of corners and preventing loss of very thin lines, at the expense of memory. Defaults", + " * to 64 which is generally a good balance of size and quality.", + " * @param {Number} config.sdfExponent - The exponent used when encoding the SDF values. A higher exponent", + " * shifts the encoded 8-bit values to achieve higher precision/accuracy at texels nearer", + " * the glyph's path, with lower precision further away. Defaults to 9.", + " * @param {Number} config.sdfMargin - How much space to reserve in the SDF as margin outside the glyph's", + " * path, as a percentage of the SDF width. A larger margin increases the quality of", + " * extruded glyph outlines, but decreases the precision available for the glyph itself.", + " * Defaults to 1/16th of the glyph size.", + " * @param {Number} config.textureWidth - The width of the SDF texture; must be a power of 2. Defaults to", + " * 2048 which is a safe maximum texture dimension according to the stats at", + " * https://webglstats.com/webgl/parameter/MAX_TEXTURE_SIZE and should allow for a", + " * reasonably large number of glyphs (default glyph size of 64^2 and safe texture size of", + " * 2048^2, times 4 channels, allows for 4096 glyphs.) This can be increased if you need to", + " * increase the glyph size and/or have an extraordinary number of glyphs.", + " */", + " function configureTextBuilder(config) {", + " if (hasRequested) {", + " console.warn('configureTextBuilder called after first font request; will be ignored.');", + " } else {", + " assign(CONFIG, config);", + " }", + " }", + "", + " /**", + " * Repository for all font SDF atlas textures and their glyph mappings. There is a separate atlas for", + " * each sdfGlyphSize. Each atlas has a single Texture that holds all glyphs for all fonts.", + " *", + " * {", + " * [sdfGlyphSize]: {", + " * glyphCount: number,", + " * sdfGlyphSize: number,", + " * sdfTexture: Texture,", + " * sdfCanvas: HTMLCanvasElement,", + " * contextLost: boolean,", + " * glyphsByFont: Map>", + " * }", + " * }", + " */", + " const atlases = Object.create(null);", + "", + " /**", + " * @typedef {object} TroikaTextRenderInfo - Format of the result from `getTextRenderInfo`.", + " * @property {TypesetParams} parameters - The normalized input arguments to the render call.", + " * @property {Texture} sdfTexture - The SDF atlas texture.", + " * @property {number} sdfGlyphSize - The size of each glyph's SDF; see `configureTextBuilder`.", + " * @property {number} sdfExponent - The exponent used in encoding the SDF's values; see `configureTextBuilder`.", + " * @property {Float32Array} glyphBounds - List of [minX, minY, maxX, maxY] quad bounds for each glyph.", + " * @property {Float32Array} glyphAtlasIndices - List holding each glyph's index in the SDF atlas.", + " * @property {Uint8Array} [glyphColors] - List holding each glyph's [r, g, b] color, if `colorRanges` was supplied.", + " * @property {Float32Array} [caretPositions] - A list of caret positions for all characters in the string; each is", + " * four elements: the starting X, the ending X, the bottom Y, and the top Y for the caret.", + " * @property {number} [caretHeight] - An appropriate height for all selection carets.", + " * @property {number} ascender - The font's ascender metric.", + " * @property {number} descender - The font's descender metric.", + " * @property {number} capHeight - The font's cap height metric, based on the height of Latin capital letters.", + " * @property {number} xHeight - The font's x height metric, based on the height of Latin lowercase letters.", + " * @property {number} lineHeight - The final computed lineHeight measurement.", + " * @property {number} topBaseline - The y position of the top line's baseline.", + " * @property {Array} blockBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;", + " * this can include extra vertical space beyond the visible glyphs due to lineHeight, and is", + " * equivalent to the dimensions of a block-level text element in CSS.", + " * @property {Array} visibleBounds - The total [minX, minY, maxX, maxY] rect of the whole text block;", + " * unlike `blockBounds` this is tightly wrapped to the visible glyph paths.", + " * @property {Array} chunkedBounds - List of bounding rects for each consecutive set of N glyphs,", + " * in the format `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`.", + " * @property {object} timings - Timing info for various parts of the rendering logic including SDF", + " * generation, typesetting, etc.", + " * @frozen", + " */", + "", + " /**", + " * @callback getTextRenderInfo~callback", + " * @param {TroikaTextRenderInfo} textRenderInfo", + " */", + "", + " /**", + " * Main entry point for requesting the data needed to render a text string with given font parameters.", + " * This is an asynchronous call, performing most of the logic in a web worker thread.", + " * @param {TypesetParams} args", + " * @param {getTextRenderInfo~callback} callback", + " */", + " function getTextRenderInfo(args, callback) {", + " hasRequested = true;", + " args = assign({}, args);", + " const totalStart = now$1();", + "", + " // Convert relative URL to absolute so it can be resolved in the worker, and add fallbacks.", + " // In the future we'll allow args.font to be a list with unicode ranges too.", + " const { defaultFontURL } = CONFIG;", + " const fonts = [];", + " if (defaultFontURL) {", + " fonts.push({label: 'default', src: toAbsoluteURL(defaultFontURL)});", + " }", + " if (args.font) {", + " fonts.push({label: 'user', src: toAbsoluteURL(args.font)});", + " }", + " args.font = fonts;", + "", + " // Normalize text to a string", + " args.text = '' + args.text;", + "", + " args.sdfGlyphSize = args.sdfGlyphSize || CONFIG.sdfGlyphSize;", + " args.unicodeFontsURL = args.unicodeFontsURL || CONFIG.unicodeFontsURL;", + "", + " // Normalize colors", + " if (args.colorRanges != null) {", + " let colors = {};", + " for (let key in args.colorRanges) {", + " if (args.colorRanges.hasOwnProperty(key)) {", + " let val = args.colorRanges[key];", + " if (typeof val !== 'number') {", + " val = tempColor.set(val).getHex();", + " }", + " colors[key] = val;", + " }", + " }", + " args.colorRanges = colors;", + " }", + "", + " Object.freeze(args);", + "", + " // Init the atlas if needed", + " const {textureWidth, sdfExponent} = CONFIG;", + " const {sdfGlyphSize} = args;", + " const glyphsPerRow = (textureWidth / sdfGlyphSize * 4);", + " let atlas = atlases[sdfGlyphSize];", + " if (!atlas) {", + " const canvas = document.createElement('canvas');", + " canvas.width = textureWidth;", + " canvas.height = sdfGlyphSize * 256 / glyphsPerRow; // start tall enough to fit 256 glyphs", + " atlas = atlases[sdfGlyphSize] = {", + " glyphCount: 0,", + " sdfGlyphSize,", + " sdfCanvas: canvas,", + " sdfTexture: new THREE.Texture(", + " canvas,", + " undefined,", + " undefined,", + " undefined,", + " THREE.LinearFilter,", + " THREE.LinearFilter", + " ),", + " contextLost: false,", + " glyphsByFont: new Map()", + " };", + " atlas.sdfTexture.generateMipmaps = false;", + " initContextLossHandling(atlas);", + " }", + "", + " const {sdfTexture, sdfCanvas} = atlas;", + "", + " // Issue request to the typesetting engine in the worker", + " typesetInWorker(args).then(result => {", + " const {glyphIds, glyphFontIndices, fontData, glyphPositions, fontSize, timings} = result;", + " const neededSDFs = [];", + " const glyphBounds = new Float32Array(glyphIds.length * 4);", + " let boundsIdx = 0;", + " let positionsIdx = 0;", + " const quadsStart = now$1();", + "", + " const fontGlyphMaps = fontData.map(font => {", + " let map = atlas.glyphsByFont.get(font.src);", + " if (!map) {", + " atlas.glyphsByFont.set(font.src, map = new Map());", + " }", + " return map", + " });", + "", + " glyphIds.forEach((glyphId, i) => {", + " const fontIndex = glyphFontIndices[i];", + " const {src: fontSrc, unitsPerEm} = fontData[fontIndex];", + " let glyphInfo = fontGlyphMaps[fontIndex].get(glyphId);", + "", + " // If this is a glyphId not seen before, add it to the atlas", + " if (!glyphInfo) {", + " const {path, pathBounds} = result.glyphData[fontSrc][glyphId];", + "", + " // Margin around path edges in SDF, based on a percentage of the glyph's max dimension.", + " // Note we add an extra 0.5 px over the configured value because the outer 0.5 doesn't contain", + " // useful interpolated values and will be ignored anyway.", + " const fontUnitsMargin = Math.max(pathBounds[2] - pathBounds[0], pathBounds[3] - pathBounds[1])", + " / sdfGlyphSize * (CONFIG.sdfMargin * sdfGlyphSize + 0.5);", + "", + " const atlasIndex = atlas.glyphCount++;", + " const sdfViewBox = [", + " pathBounds[0] - fontUnitsMargin,", + " pathBounds[1] - fontUnitsMargin,", + " pathBounds[2] + fontUnitsMargin,", + " pathBounds[3] + fontUnitsMargin,", + " ];", + " fontGlyphMaps[fontIndex].set(glyphId, (glyphInfo = { path, atlasIndex, sdfViewBox }));", + "", + " // Collect those that need SDF generation", + " neededSDFs.push(glyphInfo);", + " }", + "", + " // Calculate bounds for renderable quads", + " // TODO can we get this back off the main thread?", + " const {sdfViewBox} = glyphInfo;", + " const posX = glyphPositions[positionsIdx++];", + " const posY = glyphPositions[positionsIdx++];", + " const fontSizeMult = fontSize / unitsPerEm;", + " glyphBounds[boundsIdx++] = posX + sdfViewBox[0] * fontSizeMult;", + " glyphBounds[boundsIdx++] = posY + sdfViewBox[1] * fontSizeMult;", + " glyphBounds[boundsIdx++] = posX + sdfViewBox[2] * fontSizeMult;", + " glyphBounds[boundsIdx++] = posY + sdfViewBox[3] * fontSizeMult;", + "", + " // Convert glyphId to SDF index for the shader", + " glyphIds[i] = glyphInfo.atlasIndex;", + " });", + " timings.quads = (timings.quads || 0) + (now$1() - quadsStart);", + "", + " const sdfStart = now$1();", + " timings.sdf = {};", + "", + " // Grow the texture height by power of 2 if needed", + " const currentHeight = sdfCanvas.height;", + " const neededRows = Math.ceil(atlas.glyphCount / glyphsPerRow);", + " const neededHeight = Math.pow(2, Math.ceil(Math.log2(neededRows * sdfGlyphSize)));", + " if (neededHeight > currentHeight) {", + " // Since resizing the canvas clears its render buffer, it needs special handling to copy the old contents over", + " console.info(`Increasing SDF texture size ${currentHeight}->${neededHeight}`);", + " resizeWebGLCanvasWithoutClearing(sdfCanvas, textureWidth, neededHeight);", + " // As of Three r136 textures cannot be resized once they're allocated on the GPU, we must dispose to reallocate it", + " sdfTexture.dispose();", + " }", + "", + " Promise.all(neededSDFs.map(glyphInfo =>", + " generateGlyphSDF(glyphInfo, atlas, args.gpuAccelerateSDF).then(({timing}) => {", + " timings.sdf[glyphInfo.atlasIndex] = timing;", + " })", + " )).then(() => {", + " if (neededSDFs.length && !atlas.contextLost) {", + " safariPre15Workaround(atlas);", + " sdfTexture.needsUpdate = true;", + " }", + " timings.sdfTotal = now$1() - sdfStart;", + " timings.total = now$1() - totalStart;", + " // console.log(`SDF - ${timings.sdfTotal}, Total - ${timings.total - timings.fontLoad}`)", + "", + " // Invoke callback with the text layout arrays and updated texture", + " callback(Object.freeze({", + " parameters: args,", + " sdfTexture,", + " sdfGlyphSize,", + " sdfExponent,", + " glyphBounds,", + " glyphAtlasIndices: glyphIds,", + " glyphColors: result.glyphColors,", + " caretPositions: result.caretPositions,", + " chunkedBounds: result.chunkedBounds,", + " ascender: result.ascender,", + " descender: result.descender,", + " lineHeight: result.lineHeight,", + " capHeight: result.capHeight,", + " xHeight: result.xHeight,", + " topBaseline: result.topBaseline,", + " blockBounds: result.blockBounds,", + " visibleBounds: result.visibleBounds,", + " timings: result.timings,", + " }));", + " });", + " });", + "", + " // While the typesetting request is being handled, go ahead and make sure the atlas canvas context is", + " // \"warmed up\"; the first request will be the longest due to shader program compilation so this gets", + " // a head start on that process before SDFs actually start getting processed.", + " Promise.resolve().then(() => {", + " if (!atlas.contextLost) {", + " warmUpSDFCanvas(sdfCanvas);", + " }", + " });", + " }", + "", + " function generateGlyphSDF({path, atlasIndex, sdfViewBox}, {sdfGlyphSize, sdfCanvas, contextLost}, useGPU) {", + " if (contextLost) {", + " // If the context is lost there's nothing we can do, just quit silently and let it", + " // get regenerated when the context is restored", + " return Promise.resolve({timing: -1})", + " }", + " const {textureWidth, sdfExponent} = CONFIG;", + " const maxDist = Math.max(sdfViewBox[2] - sdfViewBox[0], sdfViewBox[3] - sdfViewBox[1]);", + " const squareIndex = Math.floor(atlasIndex / 4);", + " const x = squareIndex % (textureWidth / sdfGlyphSize) * sdfGlyphSize;", + " const y = Math.floor(squareIndex / (textureWidth / sdfGlyphSize)) * sdfGlyphSize;", + " const channel = atlasIndex % 4;", + " return generateSDF(sdfGlyphSize, sdfGlyphSize, path, sdfViewBox, maxDist, sdfExponent, sdfCanvas, x, y, channel, useGPU)", + " }", + "", + " function initContextLossHandling(atlas) {", + " const canvas = atlas.sdfCanvas;", + "", + " /*", + " // Begin context loss simulation", + " if (!window.WebGLDebugUtils) {", + " let script = document.getElementById('WebGLDebugUtilsScript')", + " if (!script) {", + " script = document.createElement('script')", + " script.id = 'WebGLDebugUtils'", + " document.head.appendChild(script)", + " script.src = 'https://cdn.jsdelivr.net/gh/KhronosGroup/WebGLDeveloperTools@b42e702/src/debug/webgl-debug.js'", + " }", + " script.addEventListener('load', () => {", + " initContextLossHandling(atlas)", + " })", + " return", + " }", + " window.WebGLDebugUtils.makeLostContextSimulatingCanvas(canvas)", + " canvas.loseContextInNCalls(500)", + " canvas.addEventListener('webglcontextrestored', (event) => {", + " canvas.loseContextInNCalls(5000)", + " })", + " // End context loss simulation", + " */", + "", + " canvas.addEventListener('webglcontextlost', (event) => {", + " console.log('Context Lost', event);", + " event.preventDefault();", + " atlas.contextLost = true;", + " });", + " canvas.addEventListener('webglcontextrestored', (event) => {", + " console.log('Context Restored', event);", + " atlas.contextLost = false;", + " // Regenerate all glyphs into the restored canvas:", + " const promises = [];", + " atlas.glyphsByFont.forEach(glyphMap => {", + " glyphMap.forEach(glyph => {", + " promises.push(generateGlyphSDF(glyph, atlas, true));", + " });", + " });", + " Promise.all(promises).then(() => {", + " safariPre15Workaround(atlas);", + " atlas.sdfTexture.needsUpdate = true;", + " });", + " });", + " }", + "", + " /**", + " * Preload a given font and optionally pre-generate glyph SDFs for one or more character sequences.", + " * This can be useful to avoid long pauses when first showing text in a scene, by preloading the", + " * needed fonts and glyphs up front along with other assets.", + " *", + " * @param {object} options", + " * @param {string} options.font - URL of the font file to preload. If not given, the default font will", + " * be loaded.", + " * @param {string|string[]} options.characters - One or more character sequences for which to pre-", + " * generate glyph SDFs. Note that this will honor ligature substitution, so you may need", + " * to specify ligature sequences in addition to their individual characters to get all", + " * possible glyphs, e.g. `[\"t\", \"h\", \"th\"]` to get the \"t\" and \"h\" glyphs plus the \"th\" ligature.", + " * @param {number} options.sdfGlyphSize - The size at which to prerender the SDF textures for the", + " * specified `characters`.", + " * @param {function} callback - A function that will be called when the preloading is complete.", + " */", + " function preloadFont({font, characters, sdfGlyphSize}, callback) {", + " let text = Array.isArray(characters) ? characters.join('\\n') : '' + characters;", + " getTextRenderInfo({ font, sdfGlyphSize, text }, callback);", + " }", + "", + "", + " // Local assign impl so we don't have to import troika-core", + " function assign(toObj, fromObj) {", + " for (let key in fromObj) {", + " if (fromObj.hasOwnProperty(key)) {", + " toObj[key] = fromObj[key];", + " }", + " }", + " return toObj", + " }", + "", + " // Utility for making URLs absolute", + " let linkEl;", + " function toAbsoluteURL(path) {", + " if (!linkEl) {", + " linkEl = typeof document === 'undefined' ? {} : document.createElement('a');", + " }", + " linkEl.href = path;", + " return linkEl.href", + " }", + "", + " /**", + " * Safari < v15 seems unable to use the SDF webgl canvas as a texture. This applies a workaround", + " * where it reads the pixels out of that canvas and uploads them as a data texture instead, at", + " * a slight performance cost.", + " */", + " function safariPre15Workaround(atlas) {", + " // Use createImageBitmap support as a proxy for Safari<15, all other mainstream browsers", + " // have supported it for a long while so any false positives should be minimal.", + " if (typeof createImageBitmap !== 'function') {", + " console.info('Safari<15: applying SDF canvas workaround');", + " const {sdfCanvas, sdfTexture} = atlas;", + " const {width, height} = sdfCanvas;", + " const gl = atlas.sdfCanvas.getContext('webgl');", + " let pixels = sdfTexture.image.data;", + " if (!pixels || pixels.length !== width * height * 4) {", + " pixels = new Uint8Array(width * height * 4);", + " sdfTexture.image = {width, height, data: pixels};", + " sdfTexture.flipY = false;", + " sdfTexture.isDataTexture = true;", + " }", + " gl.readPixels(0, 0, width, height, gl.RGBA, gl.UNSIGNED_BYTE, pixels);", + " }", + " }", + "", + " const typesetterWorkerModule = /*#__PURE__*/defineWorkerModule({", + " name: 'Typesetter',", + " dependencies: [", + " createTypesetter,", + " fontResolverWorkerModule,", + " bidiFactory,", + " ],", + " init(createTypesetter, fontResolver, bidiFactory) {", + " return createTypesetter(fontResolver, bidiFactory())", + " }", + " });", + "", + " const typesetInWorker = /*#__PURE__*/defineWorkerModule({", + " name: 'Typesetter',", + " dependencies: [", + " typesetterWorkerModule,", + " ],", + " init(typesetter) {", + " return function(args) {", + " return new Promise(resolve => {", + " typesetter.typeset(args, resolve);", + " })", + " }", + " },", + " getTransferables(result) {", + " // Mark array buffers as transferable to avoid cloning during postMessage", + " const transferables = [];", + " for (let p in result) {", + " if (result[p] && result[p].buffer) {", + " transferables.push(result[p].buffer);", + " }", + " }", + " return transferables", + " }", + " });", + "", + " function dumpSDFTextures() {", + " Object.keys(atlases).forEach(size => {", + " const canvas = atlases[size].sdfCanvas;", + " const {width, height} = canvas;", + " console.log(\"%c.\", `", + " background: url(${canvas.toDataURL()});", + " background-size: ${width}px ${height}px;", + " color: transparent;", + " font-size: 0;", + " line-height: ${height}px;", + " padding-left: ${width}px;", + " `);", + " });", + " }", + "", + " const templateGeometries = {};", + "", + " function getTemplateGeometry(detail) {", + " let geom = templateGeometries[detail];", + " if (!geom) {", + " // Geometry is two planes back-to-back, which will always be rendered FrontSide only but", + " // appear as DoubleSide by default. FrontSide/BackSide are emulated using drawRange.", + " // We do it this way to avoid the performance hit of two draw calls for DoubleSide materials", + " // introduced by Three.js in r130 - see https://github.com/mrdoob/THREE.js/pull/21967", + " const front = new THREE.PlaneGeometry(1, 1, detail, detail);", + " const back = front.clone();", + " const frontAttrs = front.attributes;", + " const backAttrs = back.attributes;", + " const combined = new THREE.BufferGeometry();", + " const vertCount = frontAttrs.uv.count;", + " for (let i = 0; i < vertCount; i++) {", + " backAttrs.position.array[i * 3] *= -1; // flip position x", + " backAttrs.normal.array[i * 3 + 2] *= -1; // flip normal z", + " }", + " ['position', 'normal', 'uv'].forEach(name => {", + " combined.setAttribute(name, new THREE.Float32BufferAttribute(", + " [...frontAttrs[name].array, ...backAttrs[name].array],", + " frontAttrs[name].itemSize)", + " );", + " });", + " combined.setIndex([...front.index.array, ...back.index.array.map(n => n + vertCount)]);", + " combined.translate(0.5, 0.5, 0);", + " geom = templateGeometries[detail] = combined;", + " }", + " return geom", + " }", + "", + " const glyphBoundsAttrName = 'aTroikaGlyphBounds';", + " const glyphIndexAttrName = 'aTroikaGlyphIndex';", + " const glyphColorAttrName = 'aTroikaGlyphColor';", + "", + " /**", + " @class GlyphsGeometry", + "", + " A specialized Geometry for rendering a set of text glyphs. Uses InstancedBufferGeometry to", + " render the glyphs using GPU instancing of a single quad, rather than constructing a whole", + " geometry with vertices, for much smaller attribute arraybuffers according to this math:", + "", + " Where N = number of glyphs...", + "", + " Instanced:", + " - position: 4 * 3", + " - index: 2 * 3", + " - normal: 4 * 3", + " - uv: 4 * 2", + " - glyph x/y bounds: N * 4", + " - glyph indices: N * 1", + " = 5N + 38", + "", + " Non-instanced:", + " - position: N * 4 * 3", + " - index: N * 2 * 3", + " - normal: N * 4 * 3", + " - uv: N * 4 * 2", + " - glyph indices: N * 1", + " = 39N", + "", + " A downside of this is the rare-but-possible lack of the instanced arrays extension,", + " which we could potentially work around with a fallback non-instanced implementation.", + "", + " */", + " class GlyphsGeometry extends THREE.InstancedBufferGeometry {", + " constructor() {", + " super();", + "", + " this.detail = 1;", + " this.curveRadius = 0;", + "", + " // Define groups for rendering text outline as a separate pass; these will only", + " // be used when the `material` getter returns an array, i.e. outlineWidth > 0.", + " this.groups = [", + " {start: 0, count: Infinity, materialIndex: 0},", + " {start: 0, count: Infinity, materialIndex: 1}", + " ];", + "", + " // Preallocate empty bounding objects", + " this.boundingSphere = new THREE.Sphere();", + " this.boundingBox = new THREE.Box3();", + " }", + "", + " computeBoundingSphere () {", + " // No-op; we'll sync the boundingSphere proactively when needed.", + " }", + "", + " computeBoundingBox() {", + " // No-op; we'll sync the boundingBox proactively when needed.", + " }", + "", + " // Since our base geometry contains triangles for both front and back sides, we can emulate", + " // the \"side\" by restricting the draw range.", + " setSide(side) {", + " const verts = this.getIndex().count;", + " this.setDrawRange(side === THREE.BackSide ? verts / 2 : 0, side === THREE.DoubleSide ? verts : verts / 2);", + " }", + "", + " set detail(detail) {", + " if (detail !== this._detail) {", + " this._detail = detail;", + " if (typeof detail !== 'number' || detail < 1) {", + " detail = 1;", + " }", + " let tpl = getTemplateGeometry(detail)", + " ;['position', 'normal', 'uv'].forEach(attr => {", + " this.attributes[attr] = tpl.attributes[attr].clone();", + " });", + " this.setIndex(tpl.getIndex().clone());", + " }", + " }", + " get detail() {", + " return this._detail", + " }", + "", + " set curveRadius(r) {", + " if (r !== this._curveRadius) {", + " this._curveRadius = r;", + " this._updateBounds();", + " }", + " }", + " get curveRadius() {", + " return this._curveRadius", + " }", + "", + " /**", + " * Update the geometry for a new set of glyphs.", + " * @param {Float32Array} glyphBounds - An array holding the planar bounds for all glyphs", + " * to be rendered, 4 entries for each glyph: x1,x2,y1,y1", + " * @param {Float32Array} glyphAtlasIndices - An array holding the index of each glyph within", + " * the SDF atlas texture.", + " * @param {Array} blockBounds - An array holding the [minX, minY, maxX, maxY] across all glyphs", + " * @param {Array} [chunkedBounds] - An array of objects describing bounds for each chunk of N", + " * consecutive glyphs: `{start:N, end:N, rect:[minX, minY, maxX, maxY]}`. This can be", + " * used with `applyClipRect` to choose an optimized `instanceCount`.", + " * @param {Uint8Array} [glyphColors] - An array holding r,g,b values for each glyph.", + " */", + " updateGlyphs(glyphBounds, glyphAtlasIndices, blockBounds, chunkedBounds, glyphColors) {", + " // Update the instance attributes", + " updateBufferAttr(this, glyphBoundsAttrName, glyphBounds, 4);", + " updateBufferAttr(this, glyphIndexAttrName, glyphAtlasIndices, 1);", + " updateBufferAttr(this, glyphColorAttrName, glyphColors, 3);", + " this._blockBounds = blockBounds;", + " this._chunkedBounds = chunkedBounds;", + " this.instanceCount = glyphAtlasIndices.length;", + " this._updateBounds();", + " }", + "", + " _updateBounds() {", + " const bounds = this._blockBounds;", + " if (bounds) {", + " const { curveRadius, boundingBox: bbox } = this;", + " if (curveRadius) {", + " const { PI, floor, min, max, sin, cos } = Math;", + " const halfPi = PI / 2;", + " const twoPi = PI * 2;", + " const absR = Math.abs(curveRadius);", + " const leftAngle = bounds[0] / absR;", + " const rightAngle = bounds[2] / absR;", + " const minX = floor((leftAngle + halfPi) / twoPi) !== floor((rightAngle + halfPi) / twoPi)", + " ? -absR : min(sin(leftAngle) * absR, sin(rightAngle) * absR);", + " const maxX = floor((leftAngle - halfPi) / twoPi) !== floor((rightAngle - halfPi) / twoPi)", + " ? absR : max(sin(leftAngle) * absR, sin(rightAngle) * absR);", + " const maxZ = floor((leftAngle + PI) / twoPi) !== floor((rightAngle + PI) / twoPi)", + " ? absR * 2 : max(absR - cos(leftAngle) * absR, absR - cos(rightAngle) * absR);", + " bbox.min.set(minX, bounds[1], curveRadius < 0 ? -maxZ : 0);", + " bbox.max.set(maxX, bounds[3], curveRadius < 0 ? 0 : maxZ);", + " } else {", + " bbox.min.set(bounds[0], bounds[1], 0);", + " bbox.max.set(bounds[2], bounds[3], 0);", + " }", + " bbox.getBoundingSphere(this.boundingSphere);", + " }", + " }", + "", + " /**", + " * Given a clipping rect, and the chunkedBounds from the last updateGlyphs call, choose the lowest", + " * `instanceCount` that will show all glyphs within the clipped view. This is an optimization", + " * for long blocks of text that are clipped, to skip vertex shader evaluation for glyphs that would", + " * be clipped anyway.", + " *", + " * Note that since `drawElementsInstanced[ANGLE]` only accepts an instance count and not a starting", + " * offset, this optimization becomes less effective as the clipRect moves closer to the end of the", + " * text block. We could fix that by switching from instancing to a full geometry with a drawRange,", + " * but at the expense of much larger attribute buffers (see classdoc above.)", + " *", + " * @param {Vector4} clipRect", + " */", + " applyClipRect(clipRect) {", + " let count = this.getAttribute(glyphIndexAttrName).count;", + " let chunks = this._chunkedBounds;", + " if (chunks) {", + " for (let i = chunks.length; i--;) {", + " count = chunks[i].end;", + " let rect = chunks[i].rect;", + " // note: both rects are l-b-r-t", + " if (rect[1] < clipRect.w && rect[3] > clipRect.y && rect[0] < clipRect.z && rect[2] > clipRect.x) {", + " break", + " }", + " }", + " }", + " this.instanceCount = count;", + " }", + " }", + "", + "", + " function updateBufferAttr(geom, attrName, newArray, itemSize) {", + " const attr = geom.getAttribute(attrName);", + " if (newArray) {", + " // If length isn't changing, just update the attribute's array data", + " if (attr && attr.array.length === newArray.length) {", + " attr.array.set(newArray);", + " attr.needsUpdate = true;", + " } else {", + " geom.setAttribute(attrName, new THREE.InstancedBufferAttribute(newArray, itemSize));", + " // If the new attribute has a different size, we also have to (as of r117) manually clear the", + " // internal cached max instance count. See https://github.com/mrdoob/THREE.js/issues/19706", + " // It's unclear if this is a threejs bug or a truly unsupported scenario; discussion in", + " // that ticket is ambiguous as to whether replacing a BufferAttribute with one of a", + " // different size is supported, but https://github.com/mrdoob/THREE.js/pull/17418 strongly", + " // implies it should be supported. It's possible we need to", + " delete geom._maxInstanceCount; //for r117+, could be fragile", + " geom.dispose(); //for r118+, more robust feeling, but more heavy-handed than I'd like", + " }", + " } else if (attr) {", + " geom.deleteAttribute(attrName);", + " }", + " }", + "", + " /**", + " * Regular expression for matching the `void main() {` opener line in GLSL.", + " * @type {RegExp}", + " */", + " const voidMainRegExp = /\\bvoid\\s+main\\s*\\(\\s*\\)\\s*{/g;", + "", + " /**", + " * Recursively expands all `#include ` statements within string of shader code.", + " * Copied from THREE's WebGLProgram#parseIncludes for external use.", + " *", + " * @param {string} source - The GLSL source code to evaluate", + " * @return {string} The GLSL code with all includes expanded", + " */", + " function expandShaderIncludes( source ) {", + " const pattern = /^[ \\t]*#include +<([\\w\\d./]+)>/gm;", + " function replace(match, include) {", + " let chunk = THREE.ShaderChunk[include];", + " return chunk ? expandShaderIncludes(chunk) : match", + " }", + " return source.replace( pattern, replace )", + " }", + "", + " /*", + " * This is a direct copy of MathUtils.generateUUID from Three.js, to preserve compatibility with THREE", + " * versions before 0.113.0 as it was changed from Math to MathUtils in that version.", + " * https://github.com/mrdoob/THREE.js/blob/dd8b5aa3b270c17096b90945cd2d6d1b13aaec53/src/math/MathUtils.js#L16", + " */", + "", + " const _lut = [];", + "", + " for (let i = 0; i < 256; i++) {", + " _lut[i] = (i < 16 ? '0' : '') + (i).toString(16);", + " }", + "", + " function generateUUID() {", + "", + " // http://stackoverflow.com/questions/105034/how-to-create-a-guid-uuid-in-javascript/21963136#21963136", + "", + " const d0 = Math.random() * 0xffffffff | 0;", + " const d1 = Math.random() * 0xffffffff | 0;", + " const d2 = Math.random() * 0xffffffff | 0;", + " const d3 = Math.random() * 0xffffffff | 0;", + " const uuid = _lut[d0 & 0xff] + _lut[d0 >> 8 & 0xff] + _lut[d0 >> 16 & 0xff] + _lut[d0 >> 24 & 0xff] + '-' +", + " _lut[d1 & 0xff] + _lut[d1 >> 8 & 0xff] + '-' + _lut[d1 >> 16 & 0x0f | 0x40] + _lut[d1 >> 24 & 0xff] + '-' +", + " _lut[d2 & 0x3f | 0x80] + _lut[d2 >> 8 & 0xff] + '-' + _lut[d2 >> 16 & 0xff] + _lut[d2 >> 24 & 0xff] +", + " _lut[d3 & 0xff] + _lut[d3 >> 8 & 0xff] + _lut[d3 >> 16 & 0xff] + _lut[d3 >> 24 & 0xff];", + "", + " // .toUpperCase() here flattens concatenated strings to save heap memory space.", + " return uuid.toUpperCase()", + "", + " }", + "", + " // Local assign polyfill to avoid importing troika-core", + " const assign$1 = Object.assign || function(/*target, ...sources*/) {", + " let target = arguments[0];", + " for (let i = 1, len = arguments.length; i < len; i++) {", + " let source = arguments[i];", + " if (source) {", + " for (let prop in source) {", + " if (Object.prototype.hasOwnProperty.call(source, prop)) {", + " target[prop] = source[prop];", + " }", + " }", + " }", + " }", + " return target", + " };", + "", + "", + " const epoch = Date.now();", + " const CONSTRUCTOR_CACHE = new WeakMap();", + " const SHADER_UPGRADE_CACHE = new Map();", + "", + " // Material ids must be integers, but we can't access the increment from Three's `Material` module,", + " // so let's choose a sufficiently large starting value that should theoretically never collide.", + " let materialInstanceId = 1e10;", + "", + " /**", + " * A utility for creating a custom shader material derived from another material's", + " * shaders. This allows you to inject custom shader logic and transforms into the", + " * builtin ThreeJS materials without having to recreate them from scratch.", + " *", + " * @param {THREE.Material} baseMaterial - the original material to derive from", + " *", + " * @param {Object} options - How the base material should be modified.", + " * @param {Object} options.defines - Custom `defines` for the material", + " * @param {Object} options.extensions - Custom `extensions` for the material, e.g. `{derivatives: true}`", + " * @param {Object} options.uniforms - Custom `uniforms` for use in the modified shader. These can", + " * be accessed and manipulated via the resulting material's `uniforms` property, just like", + " * in a ShaderMaterial. You do not need to repeat the base material's own uniforms here.", + " * @param {String} options.timeUniform - If specified, a uniform of this name will be injected into", + " * both shaders, and it will automatically be updated on each render frame with a number of", + " * elapsed milliseconds. The \"zero\" epoch time is not significant so don't rely on this as a", + " * true calendar time.", + " * @param {String} options.vertexDefs - Custom GLSL code to inject into the vertex shader's top-level", + " * definitions, above the `void main()` function.", + " * @param {String} options.vertexMainIntro - Custom GLSL code to inject at the top of the vertex", + " * shader's `void main` function.", + " * @param {String} options.vertexMainOutro - Custom GLSL code to inject at the end of the vertex", + " * shader's `void main` function.", + " * @param {String} options.vertexTransform - Custom GLSL code to manipulate the `position`, `normal`,", + " * and/or `uv` vertex attributes. This code will be wrapped within a standalone function with", + " * those attributes exposed by their normal names as read/write values.", + " * @param {String} options.fragmentDefs - Custom GLSL code to inject into the fragment shader's top-level", + " * definitions, above the `void main()` function.", + " * @param {String} options.fragmentMainIntro - Custom GLSL code to inject at the top of the fragment", + " * shader's `void main` function.", + " * @param {String} options.fragmentMainOutro - Custom GLSL code to inject at the end of the fragment", + " * shader's `void main` function. You can manipulate `gl_FragColor` here but keep in mind it goes", + " * after any of ThreeJS's color postprocessing shader chunks (tonemapping, fog, etc.), so if you", + " * want those to apply to your changes use `fragmentColorTransform` instead.", + " * @param {String} options.fragmentColorTransform - Custom GLSL code to manipulate the `gl_FragColor`", + " * output value. Will be injected near the end of the `void main` function, but before any", + " * of ThreeJS's color postprocessing shader chunks (tonemapping, fog, etc.), and before the", + " * `fragmentMainOutro`.", + " * @param {function<{vertexShader,fragmentShader}>:{vertexShader,fragmentShader}} options.customRewriter - A function", + " * for performing custom rewrites of the full shader code. Useful if you need to do something", + " * special that's not covered by the other builtin options. This function will be executed before", + " * any other transforms are applied.", + " * @param {boolean} options.chained - Set to `true` to prototype-chain the derived material to the base", + " * material, rather than the default behavior of copying it. This allows the derived material to", + " * automatically pick up changes made to the base material and its properties. This can be useful", + " * where the derived material is hidden from the user as an implementation detail, allowing them", + " * to work with the original material like normal. But it can result in unexpected behavior if not", + " * handled carefully.", + " *", + " * @return {THREE.Material}", + " *", + " * The returned material will also have two new methods, `getDepthMaterial()` and `getDistanceMaterial()`,", + " * which can be called to get a variant of the derived material for use in shadow casting. If the", + " * target mesh is expected to cast shadows, then you can assign these to the mesh's `customDepthMaterial`", + " * (for directional and spot lights) and/or `customDistanceMaterial` (for point lights) properties to", + " * allow the cast shadow to honor your derived shader's vertex transforms and discarded fragments. These", + " * will also set a custom `#define IS_DEPTH_MATERIAL` or `#define IS_DISTANCE_MATERIAL` that you can look", + " * for in your derived shaders with `#ifdef` to customize their behavior for the depth or distance", + " * scenarios, e.g. skipping antialiasing or expensive shader logic.", + " */", + " function createDerivedMaterial(baseMaterial, options) {", + " // Generate a key that is unique to the content of these `options`. We'll use this", + " // throughout for caching and for generating the upgraded shader code. This increases", + " // the likelihood that the resulting shaders will line up across multiple calls so", + " // their GL programs can be shared and cached.", + " const optionsKey = getKeyForOptions(options);", + "", + " // First check to see if we've already derived from this baseMaterial using this", + " // unique set of options, and if so reuse the constructor to avoid some allocations.", + " let ctorsByDerivation = CONSTRUCTOR_CACHE.get(baseMaterial);", + " if (!ctorsByDerivation) {", + " CONSTRUCTOR_CACHE.set(baseMaterial, (ctorsByDerivation = Object.create(null)));", + " }", + " if (ctorsByDerivation[optionsKey]) {", + " return new ctorsByDerivation[optionsKey]()", + " }", + "", + " const privateBeforeCompileProp = `_onBeforeCompile${optionsKey}`;", + "", + " // Private onBeforeCompile handler that injects the modified shaders and uniforms when", + " // the renderer switches to this material's program", + " const onBeforeCompile = function (shaderInfo, renderer) {", + " baseMaterial.onBeforeCompile.call(this, shaderInfo, renderer);", + "", + " // Upgrade the shaders, caching the result by incoming source code", + " const cacheKey = this.customProgramCacheKey() + '|' + shaderInfo.vertexShader + '|' + shaderInfo.fragmentShader;", + " let upgradedShaders = SHADER_UPGRADE_CACHE[cacheKey];", + " if (!upgradedShaders) {", + " const upgraded = upgradeShaders(this, shaderInfo, options, optionsKey);", + " upgradedShaders = SHADER_UPGRADE_CACHE[cacheKey] = upgraded;", + " }", + "", + " // Inject upgraded shaders and uniforms into the program", + " shaderInfo.vertexShader = upgradedShaders.vertexShader;", + " shaderInfo.fragmentShader = upgradedShaders.fragmentShader;", + " assign$1(shaderInfo.uniforms, this.uniforms);", + "", + " // Inject auto-updating time uniform if requested", + " if (options.timeUniform) {", + " shaderInfo.uniforms[options.timeUniform] = {", + " get value() {return Date.now() - epoch}", + " };", + " }", + "", + " // Users can still add their own handlers on top of ours", + " if (this[privateBeforeCompileProp]) {", + " this[privateBeforeCompileProp](shaderInfo);", + " }", + " };", + "", + " const DerivedMaterial = function DerivedMaterial() {", + " return derive(options.chained ? baseMaterial : baseMaterial.clone())", + " };", + "", + " const derive = function(base) {", + " // Prototype chain to the base material", + " const derived = Object.create(base, descriptor);", + "", + " // Store the baseMaterial for reference; this is always the original even when cloning", + " Object.defineProperty(derived, 'baseMaterial', { value: baseMaterial });", + "", + " // Needs its own ids", + " Object.defineProperty(derived, 'id', { value: materialInstanceId++ });", + " derived.uuid = generateUUID();", + "", + " // Merge uniforms, defines, and extensions", + " derived.uniforms = assign$1({}, base.uniforms, options.uniforms);", + " derived.defines = assign$1({}, base.defines, options.defines);", + " derived.defines[`TROIKA_DERIVED_MATERIAL_${optionsKey}`] = ''; //force a program change from the base material", + " derived.extensions = assign$1({}, base.extensions, options.extensions);", + "", + " // Don't inherit EventDispatcher listeners", + " derived._listeners = undefined;", + "", + " return derived", + " };", + "", + " const descriptor = {", + " constructor: {value: DerivedMaterial},", + " isDerivedMaterial: {value: true},", + "", + " customProgramCacheKey: {", + " writable: true,", + " configurable: true,", + " value: function () {", + " return baseMaterial.customProgramCacheKey() + '|' + optionsKey", + " }", + " },", + "", + " onBeforeCompile: {", + " get() {", + " return onBeforeCompile", + " },", + " set(fn) {", + " this[privateBeforeCompileProp] = fn;", + " }", + " },", + "", + " copy: {", + " writable: true,", + " configurable: true,", + " value: function (source) {", + " baseMaterial.copy.call(this, source);", + " if (!baseMaterial.isShaderMaterial && !baseMaterial.isDerivedMaterial) {", + " assign$1(this.extensions, source.extensions);", + " assign$1(this.defines, source.defines);", + " assign$1(this.uniforms, THREE.UniformsUtils.clone(source.uniforms));", + " }", + " return this", + " }", + " },", + "", + " clone: {", + " writable: true,", + " configurable: true,", + " value: function () {", + " const newBase = new baseMaterial.constructor();", + " return derive(newBase).copy(this)", + " }", + " },", + "", + " /**", + " * Utility to get a MeshDepthMaterial that will honor this derived material's vertex", + " * transformations and discarded fragments.", + " */", + " getDepthMaterial: {", + " writable: true,", + " configurable: true,", + " value: function() {", + " let depthMaterial = this._depthMaterial;", + " if (!depthMaterial) {", + " depthMaterial = this._depthMaterial = createDerivedMaterial(", + " baseMaterial.isDerivedMaterial", + " ? baseMaterial.getDepthMaterial()", + " : new THREE.MeshDepthMaterial({ depthPacking: THREE.RGBADepthPacking }),", + " options", + " );", + " depthMaterial.defines.IS_DEPTH_MATERIAL = '';", + " depthMaterial.uniforms = this.uniforms; //automatically recieve same uniform values", + " }", + " return depthMaterial", + " }", + " },", + "", + " /**", + " * Utility to get a MeshDistanceMaterial that will honor this derived material's vertex", + " * transformations and discarded fragments.", + " */", + " getDistanceMaterial: {", + " writable: true,", + " configurable: true,", + " value: function() {", + " let distanceMaterial = this._distanceMaterial;", + " if (!distanceMaterial) {", + " distanceMaterial = this._distanceMaterial = createDerivedMaterial(", + " baseMaterial.isDerivedMaterial", + " ? baseMaterial.getDistanceMaterial()", + " : new THREE.MeshDistanceMaterial(),", + " options", + " );", + " distanceMaterial.defines.IS_DISTANCE_MATERIAL = '';", + " distanceMaterial.uniforms = this.uniforms; //automatically recieve same uniform values", + " }", + " return distanceMaterial", + " }", + " },", + "", + " dispose: {", + " writable: true,", + " configurable: true,", + " value() {", + " const {_depthMaterial, _distanceMaterial} = this;", + " if (_depthMaterial) _depthMaterial.dispose();", + " if (_distanceMaterial) _distanceMaterial.dispose();", + " baseMaterial.dispose.call(this);", + " }", + " }", + " };", + "", + " ctorsByDerivation[optionsKey] = DerivedMaterial;", + " return new DerivedMaterial()", + " }", + "", + "", + " function upgradeShaders(material, {vertexShader, fragmentShader}, options, key) {", + " let {", + " vertexDefs,", + " vertexMainIntro,", + " vertexMainOutro,", + " vertexTransform,", + " fragmentDefs,", + " fragmentMainIntro,", + " fragmentMainOutro,", + " fragmentColorTransform,", + " customRewriter,", + " timeUniform", + " } = options;", + "", + " vertexDefs = vertexDefs || '';", + " vertexMainIntro = vertexMainIntro || '';", + " vertexMainOutro = vertexMainOutro || '';", + " fragmentDefs = fragmentDefs || '';", + " fragmentMainIntro = fragmentMainIntro || '';", + " fragmentMainOutro = fragmentMainOutro || '';", + "", + " // Expand includes if needed", + " if (vertexTransform || customRewriter) {", + " vertexShader = expandShaderIncludes(vertexShader);", + " }", + " if (fragmentColorTransform || customRewriter) {", + " // We need to be able to find postprocessing chunks after include expansion in order to", + " // put them after the fragmentColorTransform, so mark them with comments first. Even if", + " // this particular derivation doesn't have a fragmentColorTransform, other derivations may,", + " // so we still mark them.", + " fragmentShader = fragmentShader.replace(", + " /^[ \\t]*#include <((?:tonemapping|encodings|fog|premultiplied_alpha|dithering)_fragment)>/gm,", + " '\\n//!BEGIN_POST_CHUNK $1\\n$&\\n//!END_POST_CHUNK\\n'", + " );", + " fragmentShader = expandShaderIncludes(fragmentShader);", + " }", + "", + " // Apply custom rewriter function", + " if (customRewriter) {", + " let res = customRewriter({vertexShader, fragmentShader});", + " vertexShader = res.vertexShader;", + " fragmentShader = res.fragmentShader;", + " }", + "", + " // The fragmentColorTransform needs to go before any postprocessing chunks, so extract", + " // those and re-insert them into the outro in the correct place:", + " if (fragmentColorTransform) {", + " let postChunks = [];", + " fragmentShader = fragmentShader.replace(", + " /^\\/\\/!BEGIN_POST_CHUNK[^]+?^\\/\\/!END_POST_CHUNK/gm, // [^]+? = non-greedy match of any chars including newlines", + " match => {", + " postChunks.push(match);", + " return ''", + " }", + " );", + " fragmentMainOutro = `${fragmentColorTransform}\\n${postChunks.join('\\n')}\\n${fragmentMainOutro}`;", + " }", + "", + " // Inject auto-updating time uniform if requested", + " if (timeUniform) {", + " const code = `\\nuniform float ${timeUniform};\\n`;", + " vertexDefs = code + vertexDefs;", + " fragmentDefs = code + fragmentDefs;", + " }", + "", + " // Inject a function for the vertexTransform and rename all usages of position/normal/uv", + " if (vertexTransform) {", + " // Hoist these defs to the very top so they work in other function defs", + " vertexShader = `vec3 troika_position_${key};", + "vec3 troika_normal_${key};", + "vec2 troika_uv_${key};", + "${vertexShader}", + "`;", + " vertexDefs = `${vertexDefs}", + "void troikaVertexTransform${key}(inout vec3 position, inout vec3 normal, inout vec2 uv) {", + " ${vertexTransform}", + "}", + "`;", + " vertexMainIntro = `", + "troika_position_${key} = vec3(position);", + "troika_normal_${key} = vec3(normal);", + "troika_uv_${key} = vec2(uv);", + "troikaVertexTransform${key}(troika_position_${key}, troika_normal_${key}, troika_uv_${key});", + "${vertexMainIntro}", + "`;", + " vertexShader = vertexShader.replace(/\\b(position|normal|uv)\\b/g, (match, match1, index, fullStr) => {", + " return /\\battribute\\s+vec[23]\\s+$/.test(fullStr.substr(0, index)) ? match1 : `troika_${match1}_${key}`", + " });", + "", + " // Three r152 introduced the MAP_UV token, replace it too if it's pointing to the main 'uv'", + " // Perhaps the other textures too going forward?", + " if (!(material.map && material.map.channel > 0)) {", + " vertexShader = vertexShader.replace(/\\bMAP_UV\\b/g, `troika_uv_${key}`);", + " }", + " }", + "", + " // Inject defs and intro/outro snippets", + " vertexShader = injectIntoShaderCode(vertexShader, key, vertexDefs, vertexMainIntro, vertexMainOutro);", + " fragmentShader = injectIntoShaderCode(fragmentShader, key, fragmentDefs, fragmentMainIntro, fragmentMainOutro);", + "", + " return {", + " vertexShader,", + " fragmentShader", + " }", + " }", + "", + " function injectIntoShaderCode(shaderCode, id, defs, intro, outro) {", + " if (intro || outro || defs) {", + " shaderCode = shaderCode.replace(voidMainRegExp, `", + "${defs}", + "void troikaOrigMain${id}() {`", + " );", + " shaderCode += `", + "void main() {", + " ${intro}", + " troikaOrigMain${id}();", + " ${outro}", + "}`;", + " }", + " return shaderCode", + " }", + "", + "", + " function optionsJsonReplacer(key, value) {", + " return key === 'uniforms' ? undefined : typeof value === 'function' ? value.toString() : value", + " }", + "", + " let _idCtr = 0;", + " const optionsHashesToIds = new Map();", + " function getKeyForOptions(options) {", + " const optionsHash = JSON.stringify(options, optionsJsonReplacer);", + " let id = optionsHashesToIds.get(optionsHash);", + " if (id == null) {", + " optionsHashesToIds.set(optionsHash, (id = ++_idCtr));", + " }", + " return id", + " }", + "", + " // language=GLSL", + " const VERTEX_DEFS = `", + "uniform vec2 uTroikaSDFTextureSize;", + "uniform float uTroikaSDFGlyphSize;", + "uniform vec4 uTroikaTotalBounds;", + "uniform vec4 uTroikaClipRect;", + "uniform mat3 uTroikaOrient;", + "uniform bool uTroikaUseGlyphColors;", + "uniform float uTroikaDistanceOffset;", + "uniform float uTroikaBlurRadius;", + "uniform vec2 uTroikaPositionOffset;", + "uniform float uTroikaCurveRadius;", + "attribute vec4 aTroikaGlyphBounds;", + "attribute float aTroikaGlyphIndex;", + "attribute vec3 aTroikaGlyphColor;", + "varying vec2 vTroikaGlyphUV;", + "varying vec4 vTroikaTextureUVBounds;", + "varying float vTroikaTextureChannel;", + "varying vec3 vTroikaGlyphColor;", + "varying vec2 vTroikaGlyphDimensions;", + "`;", + "", + " // language=GLSL prefix=\"void main() {\" suffix=\"}\"", + " const VERTEX_TRANSFORM = `", + "vec4 bounds = aTroikaGlyphBounds;", + "bounds.xz += uTroikaPositionOffset.x;", + "bounds.yw -= uTroikaPositionOffset.y;", + "", + "vec4 outlineBounds = vec4(", + " bounds.xy - uTroikaDistanceOffset - uTroikaBlurRadius,", + " bounds.zw + uTroikaDistanceOffset + uTroikaBlurRadius", + ");", + "vec4 clippedBounds = vec4(", + " clamp(outlineBounds.xy, uTroikaClipRect.xy, uTroikaClipRect.zw),", + " clamp(outlineBounds.zw, uTroikaClipRect.xy, uTroikaClipRect.zw)", + ");", + "", + "vec2 clippedXY = (mix(clippedBounds.xy, clippedBounds.zw, position.xy) - bounds.xy) / (bounds.zw - bounds.xy);", + "", + "position.xy = mix(bounds.xy, bounds.zw, clippedXY);", + "", + "uv = (position.xy - uTroikaTotalBounds.xy) / (uTroikaTotalBounds.zw - uTroikaTotalBounds.xy);", + "", + "float rad = uTroikaCurveRadius;", + "if (rad != 0.0) {", + " float angle = position.x / rad;", + " position.xz = vec2(sin(angle) * rad, rad - cos(angle) * rad);", + " normal.xz = vec2(sin(angle), cos(angle));", + "}", + " ", + "position = uTroikaOrient * position;", + "normal = uTroikaOrient * normal;", + "", + "vTroikaGlyphUV = clippedXY.xy;", + "vTroikaGlyphDimensions = vec2(bounds[2] - bounds[0], bounds[3] - bounds[1]);", + "", + "${''/* NOTE: it seems important to calculate the glyph's bounding texture UVs here in the", + " vertex shader, rather than in the fragment shader, as the latter gives strange artifacts", + " on some glyphs (those in the leftmost texture column) on some systems. The exact reason", + " isn't understood but doing this here, then mix()-ing in the fragment shader, seems to work. */}", + "float txCols = uTroikaSDFTextureSize.x / uTroikaSDFGlyphSize;", + "vec2 txUvPerSquare = uTroikaSDFGlyphSize / uTroikaSDFTextureSize;", + "vec2 txStartUV = txUvPerSquare * vec2(", + " mod(floor(aTroikaGlyphIndex / 4.0), txCols),", + " floor(floor(aTroikaGlyphIndex / 4.0) / txCols)", + ");", + "vTroikaTextureUVBounds = vec4(txStartUV, vec2(txStartUV) + txUvPerSquare);", + "vTroikaTextureChannel = mod(aTroikaGlyphIndex, 4.0);", + "`;", + "", + " // language=GLSL", + " const FRAGMENT_DEFS = `", + "uniform sampler2D uTroikaSDFTexture;", + "uniform vec2 uTroikaSDFTextureSize;", + "uniform float uTroikaSDFGlyphSize;", + "uniform float uTroikaSDFExponent;", + "uniform float uTroikaDistanceOffset;", + "uniform float uTroikaFillOpacity;", + "uniform float uTroikaOutlineOpacity;", + "uniform float uTroikaBlurRadius;", + "uniform vec3 uTroikaStrokeColor;", + "uniform float uTroikaStrokeWidth;", + "uniform float uTroikaStrokeOpacity;", + "uniform bool uTroikaSDFDebug;", + "varying vec2 vTroikaGlyphUV;", + "varying vec4 vTroikaTextureUVBounds;", + "varying float vTroikaTextureChannel;", + "varying vec2 vTroikaGlyphDimensions;", + "", + "float troikaSdfValueToSignedDistance(float alpha) {", + " // Inverse of exponential encoding in webgl-sdf-generator", + " ${''/* TODO - there's some slight inaccuracy here when dealing with interpolated alpha values; those", + " are linearly interpolated where the encoding is exponential. Look into improving this by rounding", + " to nearest 2 whole texels, decoding those exponential values, and linearly interpolating the result.", + " */}", + " float maxDimension = max(vTroikaGlyphDimensions.x, vTroikaGlyphDimensions.y);", + " float absDist = (1.0 - pow(2.0 * (alpha > 0.5 ? 1.0 - alpha : alpha), 1.0 / uTroikaSDFExponent)) * maxDimension;", + " float signedDist = absDist * (alpha > 0.5 ? -1.0 : 1.0);", + " return signedDist;", + "}", + "", + "float troikaGlyphUvToSdfValue(vec2 glyphUV) {", + " vec2 textureUV = mix(vTroikaTextureUVBounds.xy, vTroikaTextureUVBounds.zw, glyphUV);", + " vec4 rgba = texture2D(uTroikaSDFTexture, textureUV);", + " float ch = floor(vTroikaTextureChannel + 0.5); //NOTE: can't use round() in WebGL1", + " return ch == 0.0 ? rgba.r : ch == 1.0 ? rgba.g : ch == 2.0 ? rgba.b : rgba.a;", + "}", + "", + "float troikaGlyphUvToDistance(vec2 uv) {", + " return troikaSdfValueToSignedDistance(troikaGlyphUvToSdfValue(uv));", + "}", + "", + "float troikaGetAADist() {", + " ${''/*", + " When the standard derivatives extension is available, we choose an antialiasing alpha threshold based", + " on the potential change in the SDF's alpha from this fragment to its neighbor. This strategy maximizes ", + " readability and edge crispness at all sizes and screen resolutions.", + " */}", + " #if defined(GL_OES_standard_derivatives) || __VERSION__ >= 300", + " return length(fwidth(vTroikaGlyphUV * vTroikaGlyphDimensions)) * 0.5;", + " #else", + " return vTroikaGlyphDimensions.x / 64.0;", + " #endif", + "}", + "", + "float troikaGetFragDistValue() {", + " vec2 clampedGlyphUV = clamp(vTroikaGlyphUV, 0.5 / uTroikaSDFGlyphSize, 1.0 - 0.5 / uTroikaSDFGlyphSize);", + " float distance = troikaGlyphUvToDistance(clampedGlyphUV);", + " ", + " // Extrapolate distance when outside bounds:", + " distance += clampedGlyphUV == vTroikaGlyphUV ? 0.0 : ", + " length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);", + "", + " ${''/* ", + " // TODO more refined extrapolated distance by adjusting for angle of gradient at edge...", + " // This has potential but currently gives very jagged extensions, maybe due to precision issues?", + " float uvStep = 1.0 / uTroikaSDFGlyphSize;", + " vec2 neighbor1UV = clampedGlyphUV + (", + " vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * sign(0.5 - vTroikaGlyphUV.y)) :", + " vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * sign(0.5 - vTroikaGlyphUV.x), 0.0) :", + " vec2(0.0)", + " );", + " vec2 neighbor2UV = clampedGlyphUV + (", + " vTroikaGlyphUV.x != clampedGlyphUV.x ? vec2(0.0, uvStep * -sign(0.5 - vTroikaGlyphUV.y)) :", + " vTroikaGlyphUV.y != clampedGlyphUV.y ? vec2(uvStep * -sign(0.5 - vTroikaGlyphUV.x), 0.0) :", + " vec2(0.0)", + " );", + " float neighbor1Distance = troikaGlyphUvToDistance(neighbor1UV);", + " float neighbor2Distance = troikaGlyphUvToDistance(neighbor2UV);", + " float distToUnclamped = length((vTroikaGlyphUV - clampedGlyphUV) * vTroikaGlyphDimensions);", + " float distToNeighbor = length((clampedGlyphUV - neighbor1UV) * vTroikaGlyphDimensions);", + " float gradientAngle1 = min(asin(abs(neighbor1Distance - distance) / distToNeighbor), PI / 2.0);", + " float gradientAngle2 = min(asin(abs(neighbor2Distance - distance) / distToNeighbor), PI / 2.0);", + " distance += (cos(gradientAngle1) + cos(gradientAngle2)) / 2.0 * distToUnclamped;", + " */}", + "", + " return distance;", + "}", + "", + "float troikaGetEdgeAlpha(float distance, float distanceOffset, float aaDist) {", + " #if defined(IS_DEPTH_MATERIAL) || defined(IS_DISTANCE_MATERIAL)", + " float alpha = step(-distanceOffset, -distance);", + " #else", + "", + " float alpha = smoothstep(", + " distanceOffset + aaDist,", + " distanceOffset - aaDist,", + " distance", + " );", + " #endif", + "", + " return alpha;", + "}", + "`;", + "", + " // language=GLSL prefix=\"void main() {\" suffix=\"}\"", + " const FRAGMENT_TRANSFORM = `", + "float aaDist = troikaGetAADist();", + "float fragDistance = troikaGetFragDistValue();", + "float edgeAlpha = uTroikaSDFDebug ?", + " troikaGlyphUvToSdfValue(vTroikaGlyphUV) :", + " troikaGetEdgeAlpha(fragDistance, uTroikaDistanceOffset, max(aaDist, uTroikaBlurRadius));", + "", + "#if !defined(IS_DEPTH_MATERIAL) && !defined(IS_DISTANCE_MATERIAL)", + "vec4 fillRGBA = gl_FragColor;", + "fillRGBA.a *= uTroikaFillOpacity;", + "vec4 strokeRGBA = uTroikaStrokeWidth == 0.0 ? fillRGBA : vec4(uTroikaStrokeColor, uTroikaStrokeOpacity);", + "if (fillRGBA.a == 0.0) fillRGBA.rgb = strokeRGBA.rgb;", + "gl_FragColor = mix(fillRGBA, strokeRGBA, smoothstep(", + " -uTroikaStrokeWidth - aaDist,", + " -uTroikaStrokeWidth + aaDist,", + " fragDistance", + "));", + "gl_FragColor.a *= edgeAlpha;", + "#endif", + "", + "if (edgeAlpha == 0.0) {", + " discard;", + "}", + "`;", + "", + "", + " /**", + " * Create a material for rendering text, derived from a baseMaterial", + " */", + " function createTextDerivedMaterial(baseMaterial) {", + " const textMaterial = createDerivedMaterial(baseMaterial, {", + " chained: true,", + " extensions: {", + " derivatives: true", + " },", + " uniforms: {", + " uTroikaSDFTexture: {value: null},", + " uTroikaSDFTextureSize: {value: new THREE.Vector2()},", + " uTroikaSDFGlyphSize: {value: 0},", + " uTroikaSDFExponent: {value: 0},", + " uTroikaTotalBounds: {value: new THREE.Vector4(0,0,0,0)},", + " uTroikaClipRect: {value: new THREE.Vector4(0,0,0,0)},", + " uTroikaDistanceOffset: {value: 0},", + " uTroikaOutlineOpacity: {value: 0},", + " uTroikaFillOpacity: {value: 1},", + " uTroikaPositionOffset: {value: new THREE.Vector2()},", + " uTroikaCurveRadius: {value: 0},", + " uTroikaBlurRadius: {value: 0},", + " uTroikaStrokeWidth: {value: 0},", + " uTroikaStrokeColor: {value: new THREE.Color()},", + " uTroikaStrokeOpacity: {value: 1},", + " uTroikaOrient: {value: new THREE.Matrix3()},", + " uTroikaUseGlyphColors: {value: true},", + " uTroikaSDFDebug: {value: false}", + " },", + " vertexDefs: VERTEX_DEFS,", + " vertexTransform: VERTEX_TRANSFORM,", + " fragmentDefs: FRAGMENT_DEFS,", + " fragmentColorTransform: FRAGMENT_TRANSFORM,", + " customRewriter({vertexShader, fragmentShader}) {", + " let uDiffuseRE = /\\buniform\\s+vec3\\s+diffuse\\b/;", + " if (uDiffuseRE.test(fragmentShader)) {", + " // Replace all instances of `diffuse` with our varying", + " fragmentShader = fragmentShader", + " .replace(uDiffuseRE, 'varying vec3 vTroikaGlyphColor')", + " .replace(/\\bdiffuse\\b/g, 'vTroikaGlyphColor');", + " // Make sure the vertex shader declares the uniform so we can grab it as a fallback", + " if (!uDiffuseRE.test(vertexShader)) {", + " vertexShader = vertexShader.replace(", + " voidMainRegExp,", + " 'uniform vec3 diffuse;\\n$&\\nvTroikaGlyphColor = uTroikaUseGlyphColors ? aTroikaGlyphColor / 255.0 : diffuse;\\n'", + " );", + " }", + " }", + " return { vertexShader, fragmentShader }", + " }", + " });", + "", + " // Force transparency - TODO is this reasonable?", + " textMaterial.transparent = true;", + "", + " Object.defineProperties(textMaterial, {", + " isTroikaTextMaterial: {value: true},", + "", + " // WebGLShadowMap reverses the side of the shadow material by default, which fails", + " // for planes, so here we force the `shadowSide` to always match the main side.", + " shadowSide: {", + " get() {", + " return this.side", + " },", + " set() {", + " //no-op", + " }", + " }", + " });", + "", + " return textMaterial", + " }", + "", + " const defaultMaterial = /*#__PURE__*/ new THREE.MeshBasicMaterial({", + " color: 0xffffff,", + " side: THREE.DoubleSide,", + " transparent: true", + " });", + " const defaultStrokeColor = 0x808080;", + "", + " const tempMat4 = /*#__PURE__*/ new THREE.Matrix4();", + " const tempVec3a = /*#__PURE__*/ new THREE.Vector3();", + " const tempVec3b = /*#__PURE__*/ new THREE.Vector3();", + " const tempArray = [];", + " const origin = /*#__PURE__*/ new THREE.Vector3();", + " const defaultOrient = '+x+y';", + "", + " function first(o) {", + " return Array.isArray(o) ? o[0] : o", + " }", + "", + " let getFlatRaycastMesh = () => {", + " const mesh = new THREE.Mesh(", + " new THREE.PlaneGeometry(1, 1),", + " defaultMaterial", + " );", + " getFlatRaycastMesh = () => mesh;", + " return mesh", + " };", + " let getCurvedRaycastMesh = () => {", + " const mesh = new THREE.Mesh(", + " new THREE.PlaneGeometry(1, 1, 32, 1),", + " defaultMaterial", + " );", + " getCurvedRaycastMesh = () => mesh;", + " return mesh", + " };", + "", + " const syncStartEvent = { type: 'syncstart' };", + " const syncCompleteEvent = { type: 'synccomplete' };", + "", + " const SYNCABLE_PROPS = [", + " 'font',", + " 'fontSize',", + " 'fontStyle',", + " 'fontWeight',", + " 'lang',", + " 'letterSpacing',", + " 'lineHeight',", + " 'maxWidth',", + " 'overflowWrap',", + " 'text',", + " 'direction',", + " 'textAlign',", + " 'textIndent',", + " 'whiteSpace',", + " 'anchorX',", + " 'anchorY',", + " 'colorRanges',", + " 'sdfGlyphSize'", + " ];", + "", + " const COPYABLE_PROPS = SYNCABLE_PROPS.concat(", + " 'material',", + " 'color',", + " 'depthOffset',", + " 'clipRect',", + " 'curveRadius',", + " 'orientation',", + " 'glyphGeometryDetail'", + " );", + "", + " /**", + " * @class Text", + " *", + " * A ThreeJS Mesh that renders a string of text on a plane in 3D space using signed distance", + " * fields (SDF).", + " */", + " class Text extends THREE.Mesh {", + " constructor() {", + " const geometry = new GlyphsGeometry();", + " super(geometry, null);", + "", + " // === Text layout properties: === //", + "", + " /**", + " * @member {string} text", + " * The string of text to be rendered.", + " */", + " this.text = '';", + "", + " /**", + " * @member {number|string} anchorX", + " * Defines the horizontal position in the text block that should line up with the local origin.", + " * Can be specified as a numeric x position in local units, a string percentage of the total", + " * text block width e.g. `'25%'`, or one of the following keyword strings: 'left', 'center',", + " * or 'right'.", + " */", + " this.anchorX = 0;", + "", + " /**", + " * @member {number|string} anchorY", + " * Defines the vertical position in the text block that should line up with the local origin.", + " * Can be specified as a numeric y position in local units (note: down is negative y), a string", + " * percentage of the total text block height e.g. `'25%'`, or one of the following keyword strings:", + " * 'top', 'top-baseline', 'top-cap', 'top-ex', 'middle', 'bottom-baseline', or 'bottom'.", + " */", + " this.anchorY = 0;", + "", + " /**", + " * @member {number} curveRadius", + " * Defines a cylindrical radius along which the text's plane will be curved. Positive numbers put", + " * the cylinder's centerline (oriented vertically) that distance in front of the text, for a concave", + " * curvature, while negative numbers put it behind the text for a convex curvature. The centerline", + " * will be aligned with the text's local origin; you can use `anchorX` to offset it.", + " *", + " * Since each glyph is by default rendered with a simple quad, each glyph remains a flat plane", + " * internally. You can use `glyphGeometryDetail` to add more vertices for curvature inside glyphs.", + " */", + " this.curveRadius = 0;", + "", + " /**", + " * @member {string} direction", + " * Sets the base direction for the text. The default value of \"auto\" will choose a direction based", + " * on the text's content according to the bidi spec. A value of \"ltr\" or \"rtl\" will force the direction.", + " */", + " this.direction = 'auto';", + "", + " /**", + " * @member {string|null} font", + " * URL of a custom font to be used. Font files can be in .ttf, .otf, or .woff (not .woff2) formats.", + " * Defaults to Noto Sans.", + " */", + " this.font = null; //will use default from TextBuilder", + "", + " this.unicodeFontsURL = null; //defaults to CDN", + "", + " /**", + " * @member {number} fontSize", + " * The size at which to render the font in local units; corresponds to the em-box height", + " * of the chosen `font`.", + " */", + " this.fontSize = 0.1;", + "", + " /**", + " * @member {number|'normal'|'bold'}", + " * The weight of the font. Currently only used for fallback Noto fonts.", + " */", + " this.fontWeight = 'normal';", + "", + " /**", + " * @member {'normal'|'italic'}", + " * The style of the font. Currently only used for fallback Noto fonts.", + " */", + " this.fontStyle = 'normal';", + "", + " /**", + " * @member {string|null} lang", + " * The language code of this text; can be used for explicitly selecting certain CJK fonts.", + " */", + " this.lang = null;", + "", + " /**", + " * @member {number} letterSpacing", + " * Sets a uniform adjustment to spacing between letters after kerning is applied. Positive", + " * numbers increase spacing and negative numbers decrease it.", + " */", + " this.letterSpacing = 0;", + "", + " /**", + " * @member {number|string} lineHeight", + " * Sets the height of each line of text, as a multiple of the `fontSize`. Defaults to 'normal'", + " * which chooses a reasonable height based on the chosen font's ascender/descender metrics.", + " */", + " this.lineHeight = 'normal';", + "", + " /**", + " * @member {number} maxWidth", + " * The maximum width of the text block, above which text may start wrapping according to the", + " * `whiteSpace` and `overflowWrap` properties.", + " */", + " this.maxWidth = Infinity;", + "", + " /**", + " * @member {string} overflowWrap", + " * Defines how text wraps if the `whiteSpace` property is `normal`. Can be either `'normal'`", + " * to break at whitespace characters, or `'break-word'` to allow breaking within words.", + " * Defaults to `'normal'`.", + " */", + " this.overflowWrap = 'normal';", + "", + " /**", + " * @member {string} textAlign", + " * The horizontal alignment of each line of text within the overall text bounding box.", + " */", + " this.textAlign = 'left';", + "", + " /**", + " * @member {number} textIndent", + " * Indentation for the first character of a line; see CSS `text-indent`.", + " */", + " this.textIndent = 0;", + "", + " /**", + " * @member {string} whiteSpace", + " * Defines whether text should wrap when a line reaches the `maxWidth`. Can", + " * be either `'normal'` (the default), to allow wrapping according to the `overflowWrap` property,", + " * or `'nowrap'` to prevent wrapping. Note that `'normal'` here honors newline characters to", + " * manually break lines, making it behave more like `'pre-wrap'` does in CSS.", + " */", + " this.whiteSpace = 'normal';", + "", + "", + " // === Presentation properties: === //", + "", + " /**", + " * @member {THREE.Material} material", + " * Defines a _base_ material to be used when rendering the text. This material will be", + " * automatically replaced with a material derived from it, that adds shader code to", + " * decrease the alpha for each fragment (pixel) outside the text glyphs, with antialiasing.", + " * By default it will derive from a simple white MeshBasicMaterial, but you can use any", + " * of the other mesh materials to gain other features like lighting, texture maps, etc.", + " *", + " * Also see the `color` shortcut property.", + " */", + " this.material = null;", + "", + " /**", + " * @member {string|number|THREE.Color} color", + " * This is a shortcut for setting the `color` of the text's material. You can use this", + " * if you don't want to specify a whole custom `material`. Also, if you do use a custom", + " * `material`, this color will only be used for this particuar Text instance, even if", + " * that same material instance is shared across multiple Text objects.", + " */", + " this.color = null;", + "", + " /**", + " * @member {object|null} colorRanges", + " * WARNING: This API is experimental and may change.", + " * This allows more fine-grained control of colors for individual or ranges of characters,", + " * taking precedence over the material's `color`. Its format is an Object whose keys each", + " * define a starting character index for a range, and whose values are the color for each", + " * range. The color value can be a numeric hex color value, a `THREE.Color` object, or", + " * any of the strings accepted by `THREE.Color`.", + " */", + " this.colorRanges = null;", + "", + " /**", + " * @member {number|string} outlineWidth", + " * WARNING: This API is experimental and may change.", + " * The width of an outline/halo to be drawn around each text glyph using the `outlineColor` and `outlineOpacity`.", + " * Can be specified as either an absolute number in local units, or as a percentage string e.g.", + " * `\"12%\"` which is treated as a percentage of the `fontSize`. Defaults to `0`, which means", + " * no outline will be drawn unless an `outlineOffsetX/Y` or `outlineBlur` is set.", + " */", + " this.outlineWidth = 0;", + "", + " /**", + " * @member {string|number|THREE.Color} outlineColor", + " * WARNING: This API is experimental and may change.", + " * The color of the text outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.", + " * Defaults to black.", + " */", + " this.outlineColor = 0x000000;", + "", + " /**", + " * @member {number} outlineOpacity", + " * WARNING: This API is experimental and may change.", + " * The opacity of the outline, if `outlineWidth`/`outlineBlur`/`outlineOffsetX/Y` are set.", + " * Defaults to `1`.", + " */", + " this.outlineOpacity = 1;", + "", + " /**", + " * @member {number|string} outlineBlur", + " * WARNING: This API is experimental and may change.", + " * A blur radius applied to the outer edge of the text's outline. If the `outlineWidth` is", + " * zero, the blur will be applied at the glyph edge, like CSS's `text-shadow` blur radius.", + " * Can be specified as either an absolute number in local units, or as a percentage string e.g.", + " * `\"12%\"` which is treated as a percentage of the `fontSize`. Defaults to `0`.", + " */", + " this.outlineBlur = 0;", + "", + " /**", + " * @member {number|string} outlineOffsetX", + " * WARNING: This API is experimental and may change.", + " * A horizontal offset for the text outline.", + " * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`", + " * which is treated as a percentage of the `fontSize`. Defaults to `0`.", + " */", + " this.outlineOffsetX = 0;", + "", + " /**", + " * @member {number|string} outlineOffsetY", + " * WARNING: This API is experimental and may change.", + " * A vertical offset for the text outline.", + " * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`", + " * which is treated as a percentage of the `fontSize`. Defaults to `0`.", + " */", + " this.outlineOffsetY = 0;", + "", + " /**", + " * @member {number|string} strokeWidth", + " * WARNING: This API is experimental and may change.", + " * The width of an inner stroke drawn inside each text glyph using the `strokeColor` and `strokeOpacity`.", + " * Can be specified as either an absolute number in local units, or as a percentage string e.g. `\"12%\"`", + " * which is treated as a percentage of the `fontSize`. Defaults to `0`.", + " */", + " this.strokeWidth = 0;", + "", + " /**", + " * @member {string|number|THREE.Color} strokeColor", + " * WARNING: This API is experimental and may change.", + " * The color of the text stroke, if `strokeWidth` is greater than zero. Defaults to gray.", + " */", + " this.strokeColor = defaultStrokeColor;", + "", + " /**", + " * @member {number} strokeOpacity", + " * WARNING: This API is experimental and may change.", + " * The opacity of the stroke, if `strokeWidth` is greater than zero. Defaults to `1`.", + " */", + " this.strokeOpacity = 1;", + "", + " /**", + " * @member {number} fillOpacity", + " * WARNING: This API is experimental and may change.", + " * The opacity of the glyph's fill from 0 to 1. This behaves like the material's `opacity` but allows", + " * giving the fill a different opacity than the `strokeOpacity`. A fillOpacity of `0` makes the", + " * interior of the glyph invisible, leaving just the `strokeWidth`. Defaults to `1`.", + " */", + " this.fillOpacity = 1;", + "", + " /**", + " * @member {number} depthOffset", + " * This is a shortcut for setting the material's `polygonOffset` and related properties,", + " * which can be useful in preventing z-fighting when this text is laid on top of another", + " * plane in the scene. Positive numbers are further from the camera, negatives closer.", + " */", + " this.depthOffset = 0;", + "", + " /**", + " * @member {Array} clipRect", + " * If specified, defines a `[minX, minY, maxX, maxY]` of a rectangle outside of which all", + " * pixels will be discarded. This can be used for example to clip overflowing text when", + " * `whiteSpace='nowrap'`.", + " */", + " this.clipRect = null;", + "", + " /**", + " * @member {string} orientation", + " * Defines the axis plane on which the text should be laid out when the mesh has no extra", + " * rotation transform. It is specified as a string with two axes: the horizontal axis with", + " * positive pointing right, and the vertical axis with positive pointing up. By default this", + " * is '+x+y', meaning the text sits on the xy plane with the text's top toward positive y", + " * and facing positive z. A value of '+x-z' would place it on the xz plane with the text's", + " * top toward negative z and facing positive y.", + " */", + " this.orientation = defaultOrient;", + "", + " /**", + " * @member {number} glyphGeometryDetail", + " * Controls number of vertical/horizontal segments that make up each glyph's rectangular", + " * plane. Defaults to 1. This can be increased to provide more geometrical detail for custom", + " * vertex shader effects, for example.", + " */", + " this.glyphGeometryDetail = 1;", + "", + " /**", + " * @member {number|null} sdfGlyphSize", + " * The size of each glyph's SDF (signed distance field) used for rendering. This must be a", + " * power-of-two number. Defaults to 64 which is generally a good balance of size and quality", + " * for most fonts. Larger sizes can improve the quality of glyph rendering by increasing", + " * the sharpness of corners and preventing loss of very thin lines, at the expense of", + " * increased memory footprint and longer SDF generation time.", + " */", + " this.sdfGlyphSize = null;", + "", + " /**", + " * @member {boolean} gpuAccelerateSDF", + " * When `true`, the SDF generation process will be GPU-accelerated with WebGL when possible,", + " * making it much faster especially for complex glyphs, and falling back to a JavaScript version", + " * executed in web workers when support isn't available. It should automatically detect support,", + " * but it's still somewhat experimental, so you can set it to `false` to force it to use the JS", + " * version if you encounter issues with it.", + " */", + " this.gpuAccelerateSDF = true;", + "", + " this.debugSDF = false;", + " }", + "", + " /**", + " * Updates the text rendering according to the current text-related configuration properties.", + " * This is an async process, so you can pass in a callback function to be executed when it", + " * finishes.", + " * @param {function} [callback]", + " */", + " sync(callback) {", + " if (this._needsSync) {", + " this._needsSync = false;", + "", + " // If there's another sync still in progress, queue", + " if (this._isSyncing) {", + " (this._queuedSyncs || (this._queuedSyncs = [])).push(callback);", + " } else {", + " this._isSyncing = true;", + " this.dispatchEvent(syncStartEvent);", + "", + " getTextRenderInfo({", + " text: this.text,", + " font: this.font,", + " lang: this.lang,", + " fontSize: this.fontSize || 0.1,", + " fontWeight: this.fontWeight || 'normal',", + " fontStyle: this.fontStyle || 'normal',", + " letterSpacing: this.letterSpacing || 0,", + " lineHeight: this.lineHeight || 'normal',", + " maxWidth: this.maxWidth,", + " direction: this.direction || 'auto',", + " textAlign: this.textAlign,", + " textIndent: this.textIndent,", + " whiteSpace: this.whiteSpace,", + " overflowWrap: this.overflowWrap,", + " anchorX: this.anchorX,", + " anchorY: this.anchorY,", + " colorRanges: this.colorRanges,", + " includeCaretPositions: true, //TODO parameterize", + " sdfGlyphSize: this.sdfGlyphSize,", + " gpuAccelerateSDF: this.gpuAccelerateSDF,", + " unicodeFontsURL: this.unicodeFontsURL,", + " }, textRenderInfo => {", + " this._isSyncing = false;", + "", + " // Save result for later use in onBeforeRender", + " this._textRenderInfo = textRenderInfo;", + "", + " // Update the geometry attributes", + " this.geometry.updateGlyphs(", + " textRenderInfo.glyphBounds,", + " textRenderInfo.glyphAtlasIndices,", + " textRenderInfo.blockBounds,", + " textRenderInfo.chunkedBounds,", + " textRenderInfo.glyphColors", + " );", + "", + " // If we had extra sync requests queued up, kick it off", + " const queued = this._queuedSyncs;", + " if (queued) {", + " this._queuedSyncs = null;", + " this._needsSync = true;", + " this.sync(() => {", + " queued.forEach(fn => fn && fn());", + " });", + " }", + "", + " this.dispatchEvent(syncCompleteEvent);", + " if (callback) {", + " callback();", + " }", + " });", + " }", + " }", + " }", + "", + " /**", + " * Initiate a sync if needed - note it won't complete until next frame at the", + " * earliest so if possible it's a good idea to call sync() manually as soon as", + " * all the properties have been set.", + " * @override", + " */", + " onBeforeRender(renderer, scene, camera, geometry, material, group) {", + " this.sync();", + "", + " // This may not always be a text material, e.g. if there's a scene.overrideMaterial present", + " if (material.isTroikaTextMaterial) {", + " this._prepareForRender(material);", + " }", + "", + " // We need to force the material to FrontSide to avoid the double-draw-call performance hit", + " // introduced in Three.js r130: https://github.com/mrdoob/THREE.js/pull/21967 - The sidedness", + " // is instead applied via drawRange in the GlyphsGeometry.", + " material._hadOwnSide = material.hasOwnProperty('side');", + " this.geometry.setSide(material._actualSide = material.side);", + " material.side = THREE.FrontSide;", + " }", + "", + " onAfterRender(renderer, scene, camera, geometry, material, group) {", + " // Restore original material side", + " if (material._hadOwnSide) {", + " material.side = material._actualSide;", + " } else {", + " delete material.side; // back to inheriting from base material", + " }", + " }", + "", + " /**", + " * Shortcut to dispose the geometry specific to this instance.", + " * Note: we don't also dispose the derived material here because if anything else is", + " * sharing the same base material it will result in a pause next frame as the program", + " * is recompiled. Instead users can dispose the base material manually, like normal,", + " * and we'll also dispose the derived material at that time.", + " */", + " dispose() {", + " this.geometry.dispose();", + " }", + "", + " /**", + " * @property {TroikaTextRenderInfo|null} textRenderInfo", + " * @readonly", + " * The current processed rendering data for this TextMesh, returned by the TextBuilder after", + " * a `sync()` call. This will be `null` initially, and may be stale for a short period until", + " * the asynchrous `sync()` process completes.", + " */", + " get textRenderInfo() {", + " return this._textRenderInfo || null", + " }", + "", + " // Handler for automatically wrapping the base material with our upgrades. We do the wrapping", + " // lazily on _read_ rather than write to avoid unnecessary wrapping on transient values.", + " get material() {", + " let derivedMaterial = this._derivedMaterial;", + " const baseMaterial = this._baseMaterial || this._defaultMaterial || (this._defaultMaterial = defaultMaterial.clone());", + " if (!derivedMaterial || derivedMaterial.baseMaterial !== baseMaterial) {", + " derivedMaterial = this._derivedMaterial = createTextDerivedMaterial(baseMaterial);", + " // dispose the derived material when its base material is disposed:", + " baseMaterial.addEventListener('dispose', function onDispose() {", + " baseMaterial.removeEventListener('dispose', onDispose);", + " derivedMaterial.dispose();", + " });", + " }", + " // If text outline is configured, render it as a preliminary draw using Three's multi-material", + " // feature (see GlyphsGeometry which sets up `groups` for this purpose) Doing it with multi", + " // materials ensures the layers are always rendered consecutively in a consistent order.", + " // Each layer will trigger onBeforeRender with the appropriate material.", + " if (this.outlineWidth || this.outlineBlur || this.outlineOffsetX || this.outlineOffsetY) {", + " let outlineMaterial = derivedMaterial._outlineMtl;", + " if (!outlineMaterial) {", + " outlineMaterial = derivedMaterial._outlineMtl = Object.create(derivedMaterial, {", + " id: {value: derivedMaterial.id + 0.1}", + " });", + " outlineMaterial.isTextOutlineMaterial = true;", + " outlineMaterial.depthWrite = false;", + " outlineMaterial.map = null; //???", + " derivedMaterial.addEventListener('dispose', function onDispose() {", + " derivedMaterial.removeEventListener('dispose', onDispose);", + " outlineMaterial.dispose();", + " });", + " }", + " return [", + " outlineMaterial,", + " derivedMaterial", + " ]", + " } else {", + " return derivedMaterial", + " }", + " }", + " set material(baseMaterial) {", + " if (baseMaterial && baseMaterial.isTroikaTextMaterial) { //prevent double-derivation", + " this._derivedMaterial = baseMaterial;", + " this._baseMaterial = baseMaterial.baseMaterial;", + " } else {", + " this._baseMaterial = baseMaterial;", + " }", + " }", + "", + " get glyphGeometryDetail() {", + " return this.geometry.detail", + " }", + " set glyphGeometryDetail(detail) {", + " this.geometry.detail = detail;", + " }", + "", + " get curveRadius() {", + " return this.geometry.curveRadius", + " }", + " set curveRadius(r) {", + " this.geometry.curveRadius = r;", + " }", + "", + " // Create and update material for shadows upon request:", + " get customDepthMaterial() {", + " return first(this.material).getDepthMaterial()", + " }", + " get customDistanceMaterial() {", + " return first(this.material).getDistanceMaterial()", + " }", + "", + " _prepareForRender(material) {", + " const isOutline = material.isTextOutlineMaterial;", + " const uniforms = material.uniforms;", + " const textInfo = this.textRenderInfo;", + " if (textInfo) {", + " const {sdfTexture, blockBounds} = textInfo;", + " uniforms.uTroikaSDFTexture.value = sdfTexture;", + " uniforms.uTroikaSDFTextureSize.value.set(sdfTexture.image.width, sdfTexture.image.height);", + " uniforms.uTroikaSDFGlyphSize.value = textInfo.sdfGlyphSize;", + " uniforms.uTroikaSDFExponent.value = textInfo.sdfExponent;", + " uniforms.uTroikaTotalBounds.value.fromArray(blockBounds);", + " uniforms.uTroikaUseGlyphColors.value = !isOutline && !!textInfo.glyphColors;", + "", + " let distanceOffset = 0;", + " let blurRadius = 0;", + " let strokeWidth = 0;", + " let fillOpacity;", + " let strokeOpacity;", + " let strokeColor;", + " let offsetX = 0;", + " let offsetY = 0;", + "", + " if (isOutline) {", + " let {outlineWidth, outlineOffsetX, outlineOffsetY, outlineBlur, outlineOpacity} = this;", + " distanceOffset = this._parsePercent(outlineWidth) || 0;", + " blurRadius = Math.max(0, this._parsePercent(outlineBlur) || 0);", + " fillOpacity = outlineOpacity;", + " offsetX = this._parsePercent(outlineOffsetX) || 0;", + " offsetY = this._parsePercent(outlineOffsetY) || 0;", + " } else {", + " strokeWidth = Math.max(0, this._parsePercent(this.strokeWidth) || 0);", + " if (strokeWidth) {", + " strokeColor = this.strokeColor;", + " uniforms.uTroikaStrokeColor.value.set(strokeColor == null ? defaultStrokeColor : strokeColor);", + " strokeOpacity = this.strokeOpacity;", + " if (strokeOpacity == null) strokeOpacity = 1;", + " }", + " fillOpacity = this.fillOpacity;", + " }", + "", + " uniforms.uTroikaDistanceOffset.value = distanceOffset;", + " uniforms.uTroikaPositionOffset.value.set(offsetX, offsetY);", + " uniforms.uTroikaBlurRadius.value = blurRadius;", + " uniforms.uTroikaStrokeWidth.value = strokeWidth;", + " uniforms.uTroikaStrokeOpacity.value = strokeOpacity;", + " uniforms.uTroikaFillOpacity.value = fillOpacity == null ? 1 : fillOpacity;", + " uniforms.uTroikaCurveRadius.value = this.curveRadius || 0;", + "", + " let clipRect = this.clipRect;", + " if (clipRect && Array.isArray(clipRect) && clipRect.length === 4) {", + " uniforms.uTroikaClipRect.value.fromArray(clipRect);", + " } else {", + " // no clipping - choose a finite rect that shouldn't ever be reached by overflowing glyphs or outlines", + " const pad = (this.fontSize || 0.1) * 100;", + " uniforms.uTroikaClipRect.value.set(", + " blockBounds[0] - pad,", + " blockBounds[1] - pad,", + " blockBounds[2] + pad,", + " blockBounds[3] + pad", + " );", + " }", + " this.geometry.applyClipRect(uniforms.uTroikaClipRect.value);", + " }", + " uniforms.uTroikaSDFDebug.value = !!this.debugSDF;", + " material.polygonOffset = !!this.depthOffset;", + " material.polygonOffsetFactor = material.polygonOffsetUnits = this.depthOffset || 0;", + "", + " // Shortcut for setting material color via `color` prop on the mesh; this is", + " // applied only to the derived material to avoid mutating a shared base material.", + " const color = isOutline ? (this.outlineColor || 0) : this.color;", + "", + " if (color == null) {", + " delete material.color; //inherit from base", + " } else {", + " const colorObj = material.hasOwnProperty('color') ? material.color : (material.color = new THREE.Color());", + " if (color !== colorObj._input || typeof color === 'object') {", + " colorObj.set(colorObj._input = color);", + " }", + " }", + "", + " // base orientation", + " let orient = this.orientation || defaultOrient;", + " if (orient !== material._orientation) {", + " let rotMat = uniforms.uTroikaOrient.value;", + " orient = orient.replace(/[^-+xyz]/g, '');", + " let match = orient !== defaultOrient && orient.match(/^([-+])([xyz])([-+])([xyz])$/);", + " if (match) {", + " let [, hSign, hAxis, vSign, vAxis] = match;", + " tempVec3a.set(0, 0, 0)[hAxis] = hSign === '-' ? 1 : -1;", + " tempVec3b.set(0, 0, 0)[vAxis] = vSign === '-' ? -1 : 1;", + " tempMat4.lookAt(origin, tempVec3a.cross(tempVec3b), tempVec3b);", + " rotMat.setFromMatrix4(tempMat4);", + " } else {", + " rotMat.identity();", + " }", + " material._orientation = orient;", + " }", + " }", + "", + " _parsePercent(value) {", + " if (typeof value === 'string') {", + " let match = value.match(/^(-?[\\d.]+)%$/);", + " let pct = match ? parseFloat(match[1]) : NaN;", + " value = (isNaN(pct) ? 0 : pct / 100) * this.fontSize;", + " }", + " return value", + " }", + "", + " /**", + " * Translate a point in local space to an x/y in the text plane.", + " */", + " localPositionToTextCoords(position, target = new THREE.Vector2()) {", + " target.copy(position); //simple non-curved case is 1:1", + " const r = this.curveRadius;", + " if (r) { //flatten the curve", + " target.x = Math.atan2(position.x, Math.abs(r) - Math.abs(position.z)) * Math.abs(r);", + " }", + " return target", + " }", + "", + " /**", + " * Translate a point in world space to an x/y in the text plane.", + " */", + " worldPositionToTextCoords(position, target = new THREE.Vector2()) {", + " tempVec3a.copy(position);", + " return this.localPositionToTextCoords(this.worldToLocal(tempVec3a), target)", + " }", + "", + " /**", + " * @override Custom raycasting to test against the whole text block's max rectangular bounds", + " * TODO is there any reason to make this more granular, like within individual line or glyph rects?", + " */", + " raycast(raycaster, intersects) {", + " const {textRenderInfo, curveRadius} = this;", + " if (textRenderInfo) {", + " const bounds = textRenderInfo.blockBounds;", + " const raycastMesh = curveRadius ? getCurvedRaycastMesh() : getFlatRaycastMesh();", + " const geom = raycastMesh.geometry;", + " const {position, uv} = geom.attributes;", + " for (let i = 0; i < uv.count; i++) {", + " let x = bounds[0] + (uv.getX(i) * (bounds[2] - bounds[0]));", + " const y = bounds[1] + (uv.getY(i) * (bounds[3] - bounds[1]));", + " let z = 0;", + " if (curveRadius) {", + " z = curveRadius - Math.cos(x / curveRadius) * curveRadius;", + " x = Math.sin(x / curveRadius) * curveRadius;", + " }", + " position.setXYZ(i, x, y, z);", + " }", + " geom.boundingSphere = this.geometry.boundingSphere;", + " geom.boundingBox = this.geometry.boundingBox;", + " raycastMesh.matrixWorld = this.matrixWorld;", + " raycastMesh.material.side = this.material.side;", + " tempArray.length = 0;", + " raycastMesh.raycast(raycaster, tempArray);", + " for (let i = 0; i < tempArray.length; i++) {", + " tempArray[i].object = this;", + " intersects.push(tempArray[i]);", + " }", + " }", + " }", + "", + " copy(source) {", + " // Prevent copying the geometry reference so we don't end up sharing attributes between instances", + " const geom = this.geometry;", + " super.copy(source);", + " this.geometry = geom;", + "", + " COPYABLE_PROPS.forEach(prop => {", + " this[prop] = source[prop];", + " });", + " return this", + " }", + "", + " clone() {", + " return new this.constructor().copy(this)", + " }", + " }", + "", + "", + " // Create setters for properties that affect text layout:", + " SYNCABLE_PROPS.forEach(prop => {", + " const privateKey = '_private_' + prop;", + " Object.defineProperty(Text.prototype, prop, {", + " get() {", + " return this[privateKey]", + " },", + " set(value) {", + " if (value !== this[privateKey]) {", + " this[privateKey] = value;", + " this._needsSync = true;", + " }", + " }", + " });", + " });", + "", + " //=== Utility functions for dealing with carets and selection ranges ===//", + "", + " /**", + " * @typedef {object} TextCaret", + " * @property {number} x - x position of the caret", + " * @property {number} y - y position of the caret's bottom", + " * @property {number} height - height of the caret", + " * @property {number} charIndex - the index in the original input string of this caret's target", + " * character; the caret will be for the position _before_ that character.", + " */", + "", + " /**", + " * Given a local x/y coordinate in the text block plane, find the nearest caret position.", + " * @param {TroikaTextRenderInfo} textRenderInfo - a result object from TextBuilder#getTextRenderInfo", + " * @param {number} x", + " * @param {number} y", + " * @return {TextCaret | null}", + " */", + " function getCaretAtPoint(textRenderInfo, x, y) {", + " let closestCaret = null;", + " const rows = groupCaretsByRow(textRenderInfo);", + "", + " // Find nearest row by y first", + " let closestRow = null;", + " rows.forEach(row => {", + " if (!closestRow || Math.abs(y - (row.top + row.bottom) / 2) < Math.abs(y - (closestRow.top + closestRow.bottom) / 2)) {", + " closestRow = row;", + " }", + " });", + "", + " // Then find closest caret by x within that row", + " closestRow.carets.forEach(caret => {", + " if (!closestCaret || Math.abs(x - caret.x) < Math.abs(x - closestCaret.x)) {", + " closestCaret = caret;", + " }", + " });", + " return closestCaret", + " }", + "", + "", + " const _rectsCache = new WeakMap();", + "", + " /**", + " * Given start and end character indexes, return a list of rectangles covering all the", + " * characters within that selection.", + " * @param {TroikaTextRenderInfo} textRenderInfo", + " * @param {number} start - index of the first char in the selection", + " * @param {number} end - index of the first char after the selection", + " * @return {Array<{left, top, right, bottom}> | null}", + " */", + " function getSelectionRects(textRenderInfo, start, end) {", + " let rects;", + " if (textRenderInfo) {", + " // Check cache - textRenderInfo is frozen so it's safe to cache based on it", + " let prevResult = _rectsCache.get(textRenderInfo);", + " if (prevResult && prevResult.start === start && prevResult.end === end) {", + " return prevResult.rects", + " }", + "", + " const {caretPositions} = textRenderInfo;", + "", + " // Normalize", + " if (end < start) {", + " const s = start;", + " start = end;", + " end = s;", + " }", + " start = Math.max(start, 0);", + " end = Math.min(end, caretPositions.length + 1);", + "", + " // Build list of rects, expanding the current rect for all characters in a run and starting", + " // a new rect whenever reaching a new line or a new bidi direction", + " rects = [];", + " let currentRect = null;", + " for (let i = start; i < end; i++) {", + " const x1 = caretPositions[i * 4];", + " const x2 = caretPositions[i * 4 + 1];", + " const left = Math.min(x1, x2);", + " const right = Math.max(x1, x2);", + " const bottom = caretPositions[i * 4 + 2];", + " const top = caretPositions[i * 4 + 3];", + " if (!currentRect || bottom !== currentRect.bottom || top !== currentRect.top || left > currentRect.right || right < currentRect.left) {", + " currentRect = {", + " left: Infinity,", + " right: -Infinity,", + " bottom,", + " top,", + " };", + " rects.push(currentRect);", + " }", + " currentRect.left = Math.min(left, currentRect.left);", + " currentRect.right = Math.max(right, currentRect.right);", + " }", + "", + " // Merge any overlapping rects, e.g. those formed by adjacent bidi runs", + " rects.sort((a, b) => b.bottom - a.bottom || a.left - b.left);", + " for (let i = rects.length - 1; i-- > 0;) {", + " const rectA = rects[i];", + " const rectB = rects[i + 1];", + " if (rectA.bottom === rectB.bottom && rectA.top === rectB.top && rectA.left <= rectB.right && rectA.right >= rectB.left) {", + " rectB.left = Math.min(rectB.left, rectA.left);", + " rectB.right = Math.max(rectB.right, rectA.right);", + " rects.splice(i, 1);", + " }", + " }", + "", + " _rectsCache.set(textRenderInfo, {start, end, rects});", + " }", + " return rects", + " }", + "", + " const _caretsByRowCache = new WeakMap();", + "", + " /**", + " * Group a set of carets by row of text, caching the result. A single row of text may contain carets of", + " * differing positions/heights if it has multiple fonts, and they may overlap slightly across rows, so this", + " * uses an assumption of \"at least overlapping by half\" to put them in the same row.", + " * @return Array<{bottom: number, top: number, carets: TextCaret[]}>", + " */", + " function groupCaretsByRow(textRenderInfo) {", + " // textRenderInfo is frozen so it's safe to cache based on it", + " let rows = _caretsByRowCache.get(textRenderInfo);", + " if (!rows) {", + " rows = [];", + " const {caretPositions} = textRenderInfo;", + " let curRow;", + "", + " const visitCaret = (x, bottom, top, charIndex) => {", + " // new row if not overlapping by at least half", + " if (!curRow || (top < (curRow.top + curRow.bottom) / 2)) {", + " rows.push(curRow = {bottom, top, carets: []});", + " }", + " // expand vertical limits if necessary", + " if (top > curRow.top) curRow.top = top;", + " if (bottom < curRow.bottom) curRow.bottom = bottom;", + " curRow.carets.push({", + " x,", + " y: bottom,", + " height: top - bottom,", + " charIndex,", + " });", + " };", + "", + " let i = 0;", + " for (; i < caretPositions.length; i += 4) {", + " visitCaret(caretPositions[i], caretPositions[i + 2], caretPositions[i + 3], i / 4);", + " }", + " // Add one more caret after the final char", + " visitCaret(caretPositions[i - 3], caretPositions[i - 2], caretPositions[i - 1], i / 4);", + " }", + " _caretsByRowCache.set(textRenderInfo, rows);", + " return rows", + " }", + "", + "gdjs.__text3DExtension = {", + " Text3DRenderer,", + " Text", + "};", + "" + ], + "parameterObjects": "", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [], + "objectGroups": [] + }, + { + "description": "The text color.", + "fullName": "Text color", + "functionType": "StringExpression", + "name": "TextColor", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "\r", + "eventsFunctionContext.returnValue = object._color.join(\";\");\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "The text font.", + "fullName": "Font", + "functionType": "StringExpression", + "name": "Font", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "\r", + "eventsFunctionContext.returnValue = object._fontName;\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Change the text font.", + "fullName": "Font", + "functionType": "Action", + "name": "SetFont", + "private": true, + "sentence": "Change the font of _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "const value = eventsFunctionContext.getArgument(\"Value\");\r", + "\r", + "object.setFontName(value);\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + }, + { + "description": "Font name", + "name": "Value", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "The text color.", + "fullName": "Outline color", + "functionType": "StringExpression", + "name": "OutlineColor", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "\r", + "eventsFunctionContext.returnValue = object._outlineColor.join(\";\");\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "fullName": "Outline thickness", + "functionType": "Expression", + "name": "OutlineThickness", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "\r", + "eventsFunctionContext.returnValue = object.getOutlineThickness();\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "fullName": "Shadow distance", + "functionType": "Expression", + "name": "ShadowDistance", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "\r", + "eventsFunctionContext.returnValue = object.getShadowDistance();\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "fullName": "Shadow angle", + "functionType": "Expression", + "name": "ShadowAngle", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "\r", + "eventsFunctionContext.returnValue = object.getShadowAngle();\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "fullName": "Shadow blur radius", + "functionType": "Expression", + "name": "ShadowBlurRadius", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "\r", + "eventsFunctionContext.returnValue = object.getShadowBlurRadius();\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "The text color.", + "fullName": "Shadow color", + "functionType": "StringExpression", + "name": "ShadowColor", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "\r", + "eventsFunctionContext.returnValue = object._shadowColor.join(\";\");\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "fullName": "Shadow opacity", + "functionType": "Expression", + "name": "ShadowOpacity", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "\r", + "eventsFunctionContext.returnValue = object.getShadowOpacity();\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "fullName": "Wrapping width", + "functionType": "Expression", + "name": "WrappingWidth", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.TextRuntimeObject} */\r", + "const object = objects[0];\r", + "\r", + "eventsFunctionContext.returnValue = object.getWrappingWidth();\r", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TextObject::Text", + "type": "objectList" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [], + "eventsBasedObjects": [ + { + "areaMaxX": 64, + "areaMaxY": 64, + "areaMaxZ": 64, + "areaMinX": 0, + "areaMinY": 0, + "areaMinZ": 0, + "defaultName": "Text", + "description": "A text in 3D.", + "fullName": "3D text", + "is3D": true, + "isTextContainer": true, + "isUsingLegacyInstancesRenderer": true, + "name": "Text3D", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Text3D::DefineHelperClasses" + }, + "parameters": [ + "", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Text", + "0", + "0", + "\"\"" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Text" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "As the 3D text geometry is updated in background, its dimensions are not updated right away.\nThe 2D text child dimension is used instead as a workaround but the dimensions don't exatcly match the 3D text." + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetIncludedInParentCollisionMask" + }, + "parameters": [ + "Text", + "no" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "const { Text, Text3DRenderer } = gdjs.__text3DExtension;", + "", + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "/** @type {gdjs.TextRuntimeObject} */", + "const textObject = eventsFunctionContext.getObjects(\"Text\")[0];", + "", + "// Here runtimeScene is the gdjs.CustomRuntimeObjectInstanceContainer inside the custom object.", + "const gameScene = object.getRuntimeScene();", + "", + "const superExtraInitializationFromInitialInstance = object.extraInitializationFromInitialInstance.bind(object);", + "object.extraInitializationFromInitialInstance = initialInstanceData => {", + " superExtraInitializationFromInitialInstance(initialInstanceData);", + " if (initialInstanceData.customSize) {", + " textObject.setWrappingWidth(initialInstanceData.width);", + " textObject.setWrapping(true);", + " object.__text3DExtension.threeText.maxWidth = initialInstanceData.width;", + " }", + "};", + "", + "// This is a hack that may break in future releases.", + "const layer = gameScene.getLayer(object.getLayer());", + "layer.getRenderer().remove3DRendererObject(object._renderer._threeGroup);", + "const text3DRenderer = new Text3DRenderer(object, object._instanceContainer, object.getInstanceContainer());", + "object._renderer = text3DRenderer;", + "layer.getRenderer().add3DRendererObject(text3DRenderer._threeGroup);", + "", + "const threeText = new Text()", + "object.__text3DExtension = { threeText };", + "text3DRenderer._threeGroup.add(threeText);", + "threeText.scale.y = -1;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateFromProperties" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateText" + }, + "parameters": [ + "Object", + "Object.Text::Value()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::UpdateGeometry" + }, + "parameters": [ + "Object", + "", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "", + "// Ensure it stays true at least a whole frame for events.", + "object.__text3DExtension.hasGeometryUpdated = false;", + "", + "if (object.__text3DExtension.hasSync) {", + " object.__text3DExtension.hasSync = false;", + " object.__text3DExtension.hasGeometryUpdated = true;", + " object._renderer._isContainerDirty = true;", + "}", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": false + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetRotationCenter" + }, + "parameters": [ + "Object", + "Object.TextWidth() / 2", + "Object.TextHeight() / 2", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "Update text", + "functionType": "Action", + "getterName": "OutlineThickness", + "name": "UpdateText", + "private": true, + "sentence": "Update text of _PARAM0_ to _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::IsTextUpToDate" + }, + "parameters": [ + "Object", + "Value", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "no" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.text = value;", + "object._renderer._isContainerDirty = true;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Value", + "name": "Value", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "fullName": "Displayed text", + "functionType": "Condition", + "getterName": "OutlineThickness", + "name": "IsTextUpToDate", + "private": true, + "sentence": "_PARAM0_ display text _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "eventsFunctionContext.returnValue = object.__text3DExtension.threeText.text === value;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Value", + "name": "Value", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "fullName": "Update geometry", + "functionType": "Action", + "getterName": "OutlineThickness", + "name": "UpdateGeometry", + "private": true, + "sentence": "Update geometry of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::PropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "", + "object.__text3DExtension.threeText.sync(() => {", + " object.__text3DExtension.hasSync = true;", + "});" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the text has just been updated on screen.", + "fullName": "Has updated on sceen", + "functionType": "Condition", + "getterName": "OutlineThickness", + "name": "HasGeometryUpdated", + "private": true, + "sentence": "_PARAM0_ has updated on screen", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "", + "eventsFunctionContext.returnValue =", + " object.__text3DExtension.hasGeometryUpdated;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateFromProperties" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Update from properties.", + "fullName": "Update from properties", + "functionType": "Action", + "name": "UpdateFromProperties", + "private": true, + "sentence": "Update from properties of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "Object", + "Text", + "=", + "Text.Text::Value()" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetFontSize" + }, + "parameters": [ + "Object", + "=", + "Object.FontSize()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetFont" + }, + "parameters": [ + "Object", + "=", + "Object.Font()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetColor" + }, + "parameters": [ + "Object", + "=", + "Object.Color()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetWrappingWidth" + }, + "parameters": [ + "Object", + "=", + "Object.WrappingWidth()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetTextAlignment" + }, + "parameters": [ + "Object", + "=", + "Object.TextAlignment()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetShadowColor" + }, + "parameters": [ + "Object", + "=", + "Object.ShadowColor()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetShadowAngle" + }, + "parameters": [ + "Object", + "=", + "Object.ShadowAngle()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetShadowDistance" + }, + "parameters": [ + "Object", + "=", + "Object.ShadowDistance()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetShadowBlurRadius" + }, + "parameters": [ + "Object", + "=", + "Object.ShadowBlurRadius()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetShadowOpacity" + }, + "parameters": [ + "Object", + "=", + "Object.ShadowOpacity()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetOutlineThickness" + }, + "parameters": [ + "Object", + "=", + "Object.OutlineThickness()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetOutlineColor" + }, + "parameters": [ + "Object", + "=", + "Object.OutlineColor()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetLineSpacing" + }, + "parameters": [ + "Object", + "=", + "Object.LineSpacing()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::IsShadowEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetShadowEnabled" + }, + "parameters": [ + "Object", + "", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::IsOutlineEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetOutlineEnabled" + }, + "parameters": [ + "Object", + "", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsShadowEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetShadowEnabled" + }, + "parameters": [ + "Object", + "yes", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsOutlineEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetOutlineEnabled" + }, + "parameters": [ + "Object", + "yes", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::IsWrapping" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetWrapping" + }, + "parameters": [ + "Object", + "", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsWrapping" + }, + "parameters": [ + "Object", + "=" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetWrapping" + }, + "parameters": [ + "Object", + "yes", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "Text width", + "functionType": "Expression", + "name": "TextWidth", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "", + "const boundingBox = object.__text3DExtension.threeText.geometry.boundingBox;", + "eventsFunctionContext.returnValue = boundingBox.max.x - boundingBox.min.x;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "Text width", + "functionType": "Expression", + "name": "TextHeight", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "", + "const boundingBox = object.__text3DExtension.threeText.geometry.boundingBox;", + "eventsFunctionContext.returnValue = boundingBox.max.y - boundingBox.min.y;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the font size of a text object.", + "fullName": "Font size", + "functionType": "ExpressionAndCondition", + "group": "Style", + "name": "FontSize", + "sentence": "the font size", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Text.FontSize()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FontSize", + "name": "SetFontSize", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::FontSize" + }, + "parameters": [ + "Object", + "=", + "Value", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::Text::SetFontSize" + }, + "parameters": [ + "Text", + "=", + "Value" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.fontSize = value;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the word wrapping style of an object is set.", + "fullName": "Wrapping", + "functionType": "Condition", + "group": "Style", + "name": "IsWrapping", + "sentence": "_PARAM0_ word wrapping style is activated", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TextObject::IsWrapping" + }, + "parameters": [ + "Text" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "De/activate word wrapping. Note that word wrapping is a graphical option, you can't get the number of lines displayed.", + "fullName": "Wrapping", + "functionType": "Action", + "group": "Style", + "name": "SetWrapping", + "sentence": "Activate wrapping style of _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::SetWrapping" + }, + "parameters": [ + "Text", + "no" + ] + }, + { + "type": { + "value": "Text3D::Text3D::UpdateWrappingWidth" + }, + "parameters": [ + "Object", + "0", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::SetWrapping" + }, + "parameters": [ + "Text", + "yes" + ] + }, + { + "type": { + "value": "Text3D::Text3D::UpdateWrappingWidth" + }, + "parameters": [ + "Object", + "Object.WrappingWidth()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Enable outline", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "the word wrapping width of a Text object.", + "fullName": "Wrapping width", + "functionType": "ExpressionAndCondition", + "group": "Style", + "name": "WrappingWidth", + "sentence": "the wrapping width", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Text3D::WrappingWidth(Text)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "WrappingWidth", + "name": "SetWrappingWidth", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::WrappingWidth" + }, + "parameters": [ + "Object", + "=", + "Value", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::WrappingWidth" + }, + "parameters": [ + "Text", + "=", + "Value" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsWrapping" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateWrappingWidth" + }, + "parameters": [ + "Object", + "Object.WrappingWidth()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "Update wrapping width", + "functionType": "Action", + "getterName": "OutlineThickness", + "name": "UpdateWrappingWidth", + "private": true, + "sentence": "Update wrapping width of _PARAM0_ to _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::WrappingWidth" + }, + "parameters": [ + "Object", + "=", + "Value", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.maxWidth = value || Number.POSITIVE_INFINITY;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the color of the text.", + "fullName": "Color", + "functionType": "ExpressionAndCondition", + "group": "Style", + "name": "Color", + "sentence": "the color", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Text3D::TextColor(Text)" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Color", + "name": "SetColor", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::ChangeColor" + }, + "parameters": [ + "Text", + "Value" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.color = gdjs.rgbOrHexStringToNumber(value);", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the font of the text.", + "fullName": "Font", + "functionType": "ExpressionAndCondition", + "group": "Style", + "name": "Font", + "sentence": "the font", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Text3D::Font(Text)" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Font", + "name": "SetFont", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::Font" + }, + "parameters": [ + "Object", + "=", + "Value", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::SetFont" + }, + "parameters": [ + "Text", + "Text", + "Value", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.font =", + " runtimeScene.getGame().getFontManager().getFontFile(value);", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the line spacing of the object.", + "fullName": "Line spacing", + "functionType": "ExpressionAndCondition", + "group": "Style", + "name": "LineSpacing", + "sentence": "the line spacing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "LineSpacing" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "LineSpacing", + "name": "SetLineSpacing", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::LineSpacing" + }, + "parameters": [ + "Object", + "=", + "Value", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetPropertyLineSpacing" + }, + "parameters": [ + "Object", + "=", + "Value" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.lineHeight = value || 'normal';", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the text outline is enabled.", + "fullName": "Outline enabled", + "functionType": "Condition", + "group": "Outline", + "name": "IsOutlineEnabled", + "sentence": "The outline of _PARAM0_ is enabled", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TextObject::Text::IsOutlineEnabled" + }, + "parameters": [ + "Text" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Enable or disable the outline of the text.", + "fullName": "Enable outline", + "functionType": "Action", + "group": "Outline", + "name": "SetOutlineEnabled", + "sentence": "Enable the outline of _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::Text::SetOutlineEnabled" + }, + "parameters": [ + "Text", + "no" + ] + }, + { + "type": { + "value": "Text3D::Text3D::UpdateOutlineThickness" + }, + "parameters": [ + "Object", + "0", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::Text::SetOutlineEnabled" + }, + "parameters": [ + "Text", + "yes" + ] + }, + { + "type": { + "value": "Text3D::Text3D::UpdateOutlineThickness" + }, + "parameters": [ + "Object", + "Object.OutlineThickness()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Enable outline", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "the outline thickness of the text.", + "fullName": "Outline thickness", + "functionType": "ExpressionAndCondition", + "group": "Outline", + "name": "OutlineThickness", + "sentence": "the text outline thickness", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Text3D::OutlineThickness(Text)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "OutlineThickness", + "name": "SetOutlineThickness", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::Text::SetOutlineThickness" + }, + "parameters": [ + "Text", + "=", + "Value" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsOutlineEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateOutlineThickness" + }, + "parameters": [ + "Object", + "Value", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "Update outline thickness", + "functionType": "Action", + "getterName": "OutlineThickness", + "name": "UpdateOutlineThickness", + "private": true, + "sentence": "Update outline thickness of _PARAM0_ to _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::OutlineThickness" + }, + "parameters": [ + "Object", + "=", + "Value", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.outlineWidth = value / 2;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the outline color of the text.", + "fullName": "Outline color", + "functionType": "ExpressionAndCondition", + "group": "Outline", + "name": "OutlineColor", + "sentence": "the text outline color", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Text3D::OutlineColor(Text)" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "OutlineColor", + "name": "SetOutlineColor", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::Text::SetOutlineColor" + }, + "parameters": [ + "Text", + "Value" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsOutlineEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.outlineColor = gdjs.rgbOrHexStringToNumber(value);", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the text shadowis enabled.", + "fullName": "Shadow enabled", + "functionType": "Condition", + "group": "Shadow", + "name": "IsShadowEnabled", + "sentence": "The shadow of _PARAM0_ is enabled", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TextObject::Text::IsShadowEnabled" + }, + "parameters": [ + "Text" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Enable or disable the shadow of the text.", + "fullName": "Enable shadow", + "functionType": "Action", + "group": "Shadow", + "name": "SetShadowEnabled", + "sentence": "Enable the shadow of _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateShadowOffset" + }, + "parameters": [ + "Object", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::UpdateShadowBlurRadius" + }, + "parameters": [ + "Object", + "0", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::UpdateShadowOpacity" + }, + "parameters": [ + "Object", + "255", + "" + ] + }, + { + "type": { + "value": "TextObject::ShowShadow" + }, + "parameters": [ + "Text", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateShadowOffset" + }, + "parameters": [ + "Object", + "Object.ShadowAngle()", + "Object.ShadowDistance()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::UpdateShadowBlurRadius" + }, + "parameters": [ + "Object", + "Object.ShadowBlurRadius()", + "" + ] + }, + { + "type": { + "value": "Text3D::Text3D::UpdateShadowOpacity" + }, + "parameters": [ + "Object", + "Object.ShadowOpacity()", + "" + ] + }, + { + "type": { + "value": "TextObject::ShowShadow" + }, + "parameters": [ + "Text", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Show the shadow", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "the shadow color of the text.", + "fullName": "Shadow color", + "functionType": "ExpressionAndCondition", + "group": "Shadow", + "name": "ShadowColor", + "sentence": "the shadow color", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Text3D::ShadowColor(Text)" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ShadowColor", + "name": "SetShadowColor", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::Text::SetShadowColor" + }, + "parameters": [ + "Text", + "Value" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsShadowEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.outlineColor = gdjs.rgbOrHexStringToNumber(value);", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the shadow distance of the text.", + "fullName": "Shadow distance", + "functionType": "ExpressionAndCondition", + "group": "Shadow", + "name": "ShadowDistance", + "sentence": "the shadow distance", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Text3D::ShadowDistance(Text)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ShadowDistance", + "name": "SetShadowDistance", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsShadowEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateShadowOffset" + }, + "parameters": [ + "Object", + "Object.ShadowAngle()", + "Value", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::Text::SetShadowDistance" + }, + "parameters": [ + "Text", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the shadow angle of the text.", + "fullName": "Shadow angle", + "functionType": "ExpressionAndCondition", + "group": "Shadow", + "name": "ShadowAngle", + "sentence": "the shadow angle", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Text3D::ShadowAngle(Text)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ShadowAngle", + "name": "SetShadowAngle", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsShadowEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateShadowOffset" + }, + "parameters": [ + "Object", + "Value", + "Object.ShadowDistance()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::Text::SetShadowAngle" + }, + "parameters": [ + "Text", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "Update shadow offset", + "functionType": "Action", + "getterName": "OutlineThickness", + "name": "UpdateShadowOffset", + "private": true, + "sentence": "Update shadow offset of _PARAM0_ to angle: _PARAM1_ and distance: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::ShadowAngle" + }, + "parameters": [ + "Object", + "=", + "Angle", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::ShadowDistance" + }, + "parameters": [ + "Object", + "=", + "Distance", + "" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const angle = eventsFunctionContext.getArgument(\"Angle\");", + "const distance = eventsFunctionContext.getArgument(\"Distance\");", + "", + "object.__text3DExtension.threeText.outlineOffsetX = distance * Math.cos(gdjs.toRad(angle));", + "object.__text3DExtension.threeText.outlineOffsetY = distance * Math.sin(gdjs.toRad(angle));" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Angle", + "name": "Angle", + "type": "expression" + }, + { + "description": "Distance", + "name": "Distance", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the shadow blur radius of the text.", + "fullName": "Shadow blur radius", + "functionType": "ExpressionAndCondition", + "group": "Shadow", + "name": "ShadowBlurRadius", + "sentence": "the shadow blur radius", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Text3D::ShadowBlurRadius(Text)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ShadowBlurRadius", + "name": "SetShadowBlurRadius", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsShadowEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateShadowBlurRadius" + }, + "parameters": [ + "Object", + "Value", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::Text::SetShadowBlurRadius" + }, + "parameters": [ + "Text", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "Update shadow blur radius", + "functionType": "Action", + "getterName": "OutlineThickness", + "name": "UpdateShadowBlurRadius", + "private": true, + "sentence": "Update shadow blur radius of _PARAM0_ to _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::ShadowBlurRadius" + }, + "parameters": [ + "Object", + "=", + "Value", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.outlineBlur = value;", + "object.__text3DExtension.threeText.outlineWidth = -value / 2;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the shadow opacity of the text.", + "fullName": "Shadow opacity", + "functionType": "ExpressionAndCondition", + "group": "Shadow", + "name": "ShadowOpacity", + "sentence": "the shadow opacity", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Text3D::ShadowOpacity(Text)" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "ShadowOpacity", + "name": "SetShadowOpacity", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Text3D::Text3D::IsShadowEnabled" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::UpdateShadowOpacity" + }, + "parameters": [ + "Object", + "Value", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::Text::SetShadowOpacity" + }, + "parameters": [ + "Text", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "Update shadow opacity", + "functionType": "Action", + "getterName": "OutlineThickness", + "name": "UpdateShadowOpacity", + "private": true, + "sentence": "Update shadow opacity of _PARAM0_ to _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::ShadowOpacity" + }, + "parameters": [ + "Object", + "=", + "Value", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.outlineOpacity = value / 255;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the boldstyle is activated.", + "fullName": "Bold", + "functionType": "Condition", + "group": "Style", + "name": "IsBold", + "sentence": "_PARAM0_ bold style is set", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TextObject::IsBold" + }, + "parameters": [ + "Text" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "De/activate bold.", + "fullName": "Bold", + "functionType": "Action", + "group": "Style", + "name": "SetBold", + "sentence": "Set bold style for _PARAM0_ : _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::SetBold" + }, + "parameters": [ + "Text", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::SetBold" + }, + "parameters": [ + "Text", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.fontWeight = value ? \"bold\" : \"normal\";", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Bold", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the italic style is activated.", + "fullName": "Italic", + "functionType": "Condition", + "group": "Style", + "name": "IsItalic", + "sentence": "_PARAM0_ italic style is set", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TextObject::IsItalic" + }, + "parameters": [ + "Text" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "De/activate italic.", + "fullName": "Italic", + "functionType": "Action", + "group": "Style", + "name": "SetItalic", + "sentence": "Set italic style for _PARAM0_ : _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::SetItalic" + }, + "parameters": [ + "Text", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::SetItalic" + }, + "parameters": [ + "Text", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.fontStyle = value ? \"italic\" : \"normal\";", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + }, + { + "description": "Italic", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "the text alignment of a multiline text object.", + "fullName": "Alignment", + "functionType": "ExpressionAndCondition", + "group": "Style", + "name": "TextAlignment", + "sentence": "the alignment", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TextObject::TextAlignment" + }, + "parameters": [ + "Text", + "=", + "\"left\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "\"left\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TextObject::TextAlignment" + }, + "parameters": [ + "Text", + "=", + "\"center\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "\"center\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TextObject::TextAlignment" + }, + "parameters": [ + "Text", + "=", + "\"right\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "\"right\"" + ] + } + ] + } + ], + "expressionType": { + "supplementaryInformation": "[\"left\",\"center\",\"right\"]", + "type": "stringWithSelector" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "TextAlignment", + "name": "SetTextAlignment", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "Text3D::Text3D::TextAlignment" + }, + "parameters": [ + "Object", + "=", + "Value", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextObject::SetTextAlignment" + }, + "parameters": [ + "Text", + "Value" + ] + }, + { + "type": { + "value": "Text3D::Text3D::SetPropertyIsGeometryUpToDate" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "/** @type {gdjs.CustomRuntimeObject3D} */", + "const object = objects[0];", + "const value = eventsFunctionContext.getArgument(\"Value\");", + "", + "object.__text3DExtension.threeText.textAlign = value;", + "" + ], + "parameterObjects": "Object", + "useStrict": true, + "eventsSheetExpanded": true + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Text3D::Text3D", + "type": "object" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "Top", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Text" + ], + "hidden": true, + "name": "TextVerticalAnchorOrigin" + }, + { + "value": "Top", + "type": "String", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TextVerticalAnchorTarget" + }, + { + "value": "0", + "type": "Number", + "unit": "Dimensionless", + "label": "Line spacing", + "description": "", + "group": "", + "extraInformation": [], + "name": "LineSpacing" + }, + { + "value": "false", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsGeometryUpToDate" + } + ], + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Text", + "smoothed": true, + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Text", + "font": "", + "textAlignment": "left", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + }, + "content": { + "bold": false, + "isOutlineEnabled": false, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "255;255;255", + "outlineThickness": 2, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "Text", + "font": "", + "textAlignment": "left", + "verticalTextAlignment": "top", + "characterSize": 20, + "color": "0;0;0" + } + } + ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Text" + } + ] + }, + "objectsGroups": [], + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "instances": [] + } + ] + }, + { + "author": "", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Slider", + "helpPath": "/objects/slider", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSI3IiByPSIzIi8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMyIgeTE9IjciIHgyPSIyMCIgeTI9IjciLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjciIHgyPSIyNiIgeTI9IjciLz4NCjxjaXJjbGUgY2xhc3M9InN0MCIgY3g9IjEyIiBjeT0iMTYiIHI9IjMiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIzIiB5MT0iMTYiIHgyPSI5IiB5Mj0iMTYiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjE2IiB4Mj0iMTUiIHkyPSIxNiIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjMiIGN5PSIyNSIgcj0iMyIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjMiIHkxPSIyNSIgeDI9IjIwIiB5Mj0iMjUiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIyOSIgeTE9IjI1IiB4Mj0iMjYiIHkyPSIyNSIvPg0KPC9zdmc+DQo=", + "name": "PanelSpriteSlider", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/Line Hero Pack/Master/SVG/UI Essentials/1678c39a3b2bd3df4f82a8a293770db4986a6bcfd3f78e738ddfc86e39176423_UI Essentials_sliders_options.svg", + "shortDescription": "A draggable slider that users can move to select a numerical value.", + "version": "1.4.2", + "description": [ + "A draggable slider that users can move to select a numerical value. The slider can be customized with sprites.", + "", + "There are ready-to-use sliders in the asset-store [settings UI pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=settings-ui-settings-ui)." + ], + "origin": { + "identifier": "PanelSpriteSlider", + "name": "gdevelop-extension-store" + }, + "tags": [ + "draggable", + "slider", + "ui", + "widget" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Represent a value on a slider.", + "fullName": "Slider", + "name": "Slider", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "description": "the value of the object.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "name": "Value", + "sentence": "the value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::PropertyStepSize" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(GetArgumentAsNumber(\"Value\"), Object.Behavior::PropertyMinValue(), Object.Behavior::PropertyMaxValue())" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::PropertyStepSize" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetPropertyValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(round(GetArgumentAsNumber(\"Value\") / Object.Behavior::PropertyStepSize()) * Object.Behavior::PropertyStepSize(), Object.Behavior::PropertyMinValue(), Object.Behavior::PropertyMaxValue())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the minimum value of the object.", + "fullName": "Minimum value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MinValue", + "sentence": "the minimum value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMinValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MinValue", + "name": "SetMinValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetPropertyMinValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::Slider::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum value of the object.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "MaxValue", + "sentence": "the maximum value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyMaxValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetPropertyMaxValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::Slider::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the bar value bounds size.", + "fullName": "Size", + "functionType": "ExpressionAndCondition", + "name": "Size", + "sentence": "the bar value bounds size", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::MaxValue() - Object.Behavior::MinValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the step size of the object.", + "fullName": "Step size", + "functionType": "ExpressionAndCondition", + "group": "Resource bar configuration", + "name": "StepSize", + "sentence": "the step size", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyStepSize()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "StepSize", + "name": "SetStepSize", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetPropertyStepSize" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::Slider::SetValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::Value()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Value", + "description": "", + "group": "", + "extraInformation": [], + "name": "Value" + }, + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "", + "extraInformation": [], + "name": "MinValue" + }, + { + "value": "1", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "", + "extraInformation": [], + "name": "MaxValue" + }, + { + "value": "0", + "type": "Number", + "label": "Step size", + "description": "", + "group": "", + "extraInformation": [], + "name": "StepSize" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "The finite state machine used internally by the button object.", + "fullName": "Button finite state machine", + "name": "ButtonFSM", + "objectType": "", + "private": true, + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Finite state machine", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The \"Validated\" state only last one frame." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the cursor position is only checked once per frame." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyShouldCheckHovering" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "MouseOnlyCursorX(Object.Layer(), 0)", + "MouseOnlyCursorY(Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Touches are always pressed, so ShouldCheckHovering doesn't matter." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)", + "TouchY(Object.Behavior::PropertyTouchId(), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch start", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Object.Behavior::PropertyIndex()), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Object.Behavior::PropertyIndex())" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply position changes", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteSlider::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteSlider::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch end", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "Object.Behavior::PropertyTouchId()" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is not used.", + "fullName": "Is idle", + "functionType": "Condition", + "name": "IsIdle", + "sentence": "_PARAM0_ is idle", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button was just clicked.", + "fullName": "Is clicked", + "functionType": "Condition", + "name": "IsClicked", + "sentence": "_PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the cursor is hovered over the button.", + "fullName": "Is hovered", + "functionType": "Condition", + "name": "IsHovered", + "sentence": "_PARAM0_ is hovered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is either hovered or pressed but not hovered.", + "fullName": "Is focused", + "functionType": "Condition", + "name": "IsFocused", + "sentence": "_PARAM0_ is focused", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed with mouse or touch.", + "fullName": "Is pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "_PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed outside with mouse or touch.", + "fullName": "Is held outside", + "functionType": "Condition", + "name": "IsPressedOutside", + "sentence": "_PARAM0_ is held outside", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the touch id that is using the button or 0 if none.", + "fullName": "Touch id", + "functionType": "ExpressionAndCondition", + "name": "TouchId", + "sentence": "the touch id", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyTouchId()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "Should check hovering", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ShouldCheckHovering" + }, + { + "value": "Idle", + "type": "Choice", + "label": "State", + "description": "", + "group": "", + "extraInformation": [ + "Idle", + "Hovered", + "PressedInside", + "PressedOutside", + "Validated" + ], + "hidden": true, + "name": "State" + }, + { + "value": "0", + "type": "Number", + "label": "Touch id", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchId" + }, + { + "value": "", + "type": "Boolean", + "label": "Touch is inside", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TouchIsInside" + }, + { + "value": "", + "type": "Boolean", + "label": "Mouse is inside", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "MouseIsInside" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Index" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [ + { + "areaMaxX": 64, + "areaMaxY": 64, + "areaMaxZ": 64, + "areaMinX": 0, + "areaMinY": 0, + "areaMinZ": 0, + "defaultName": "Slider", + "description": "Let users select a numerical value by dragging a slider.", + "fullName": "Slider", + "isUsingLegacyInstancesRenderer": true, + "name": "PanelSpriteSlider", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "This allows to detect a change of \"intial value\" on hot reload." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyPreviousInitialValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create the child-object instances." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Background", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "FillBar", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Thumb", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Background", + "=", + "1" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "FillBar", + "=", + "2" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Thumb", + "=", + "3" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Create the label that is displayed over the thumb." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Label", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Label", + "=", + "4" + ] + }, + { + "type": { + "value": "TextObject::SetWrapping" + }, + "parameters": [ + "Label", + "no" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Label" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass the configuration to the behavior." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateSliderConfiguration" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()", + "Object.PropertyInitialValue()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetIncludedInParentCollisionMask" + }, + "parameters": [ + "Label", + "" + ] + }, + { + "type": { + "value": "SetIncludedInParentCollisionMask" + }, + "parameters": [ + "Thumb", + "" + ] + }, + { + "type": { + "value": "SetIncludedInParentCollisionMask" + }, + "parameters": [ + "FillBar", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateSliderConfiguration" + }, + "parameters": [ + "Object", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyInitialValue" + }, + "parameters": [ + "Object", + "!=", + "Object.PropertyPreviousInitialValue()" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyPreviousInitialValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyInitialValue()", + "Object.PropertyInitialValue()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touches", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BehaviorActivated" + }, + "parameters": [ + "Background", + "ButtonFSM" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "DraggableBehavior::Dragged" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + }, + { + "type": { + "inverted": true, + "value": "DraggableBehavior::Dropped" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::IsPressed" + }, + "parameters": [ + "Background", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::IsPressedOutside" + }, + "parameters": [ + "Background", + "ButtonFSM", + "" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" + }, + "parameters": [ + "Object", + "=", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (TouchX(Background.ButtonFSM::TouchId(), Object.Layer()) - Object.FullBarLeft()) / Object.FullBarWidth()", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (MouseX() - Object.FullBarLeft()) / Object.FullBarWidth()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableBehavior::Dragged" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetValue" + }, + "parameters": [ + "Object", + "=", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()", + "FillBar.Slider::MinValue() + FillBar.Slider::Size() * (Thumb.CenterX() - Object.FullBarLeft()) / Object.FullBarWidth()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "DraggableBehavior::Dropped" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + }, + "parameters": [ + "Object" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Thumb", + "MouseOnlyCursorX(Object.Layer(), 0)", + "MouseOnlyCursorY(Thumb.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + }, + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"", + ">", + "0.5" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Label" + ] + }, + { + "type": { + "value": "RemoveObjectTimer" + }, + "parameters": [ + "Label", + "\"HideBack\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Resize", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Children instances must be resized when the parent size change:\n- background is resized to take the full dimensions of the parent\n- the label is put back at the center of the bar\n\nThe scale is set back to 1 because it means that the parent instance has the same dimensions as the union of its children instances." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Width()", + "!=", + "max(Background.BoundingBoxRight(), max(Label.BoundingBoxRight(), Thumb.BoundingBoxRight())) - min(Background.BoundingBoxLeft(), min(Label.BoundingBoxLeft(), Thumb.BoundingBoxLeft()))" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Height()", + "!=", + "max(Background.BoundingBoxBottom(), max(Label.BoundingBoxBottom(), Thumb.BoundingBoxBottom())) - min(Background.BoundingBoxTop(), min(Label.BoundingBoxTop(), Thumb.BoundingBoxTop()))" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Width", + "=", + "Object.Width()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Background", + "Height", + "=", + "Object.Height()" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::Scale" + }, + "parameters": [ + "Object", + "=", + "1" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Width)" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Background", + "=", + "Background.Variable(Height)" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The parent size is not defined in onCreate so it needs to be done here." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the slider is being dragged.", + "fullName": "Being dragged", + "functionType": "Condition", + "group": "Slider", + "name": "IsBeingDragged", + "sentence": "_PARAM0_ is being dragged", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "DraggableBehavior::Dragged" + }, + "parameters": [ + "Thumb", + "Draggable" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::IsPressed" + }, + "parameters": [ + "Background", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::ButtonFSM::IsPressedOutside" + }, + "parameters": [ + "Background", + "ButtonFSM", + "" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the value of the slider.", + "fullName": "Value", + "functionType": "ExpressionAndCondition", + "name": "Value", + "sentence": "the value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FillBar.Slider::Value()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Value", + "name": "SetValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetValue" + }, + "parameters": [ + "FillBar", + "Slider", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the minimum value of the slider.", + "fullName": "Minimum value", + "functionType": "ExpressionAndCondition", + "group": "Slider configuration", + "name": "MinValue", + "sentence": "the minimum value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FillBar.Slider::MinValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MinValue", + "name": "SetMinValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetMinValue" + }, + "parameters": [ + "FillBar", + "Slider", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the maximum value of the slider.", + "fullName": "Maximum value", + "functionType": "ExpressionAndCondition", + "group": "Slider configuration", + "name": "MaxValue", + "sentence": "the maximum value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FillBar.Slider::MaxValue()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "MaxValue", + "name": "SetMaxValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetMaxValue" + }, + "parameters": [ + "FillBar", + "Slider", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateLayout" + }, + "parameters": [ + "Object", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::UpdateThumbPosition" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the step size of the slider.", + "fullName": "Step size", + "functionType": "ExpressionAndCondition", + "group": "Slider configuration", + "name": "StepSize", + "sentence": "the step size", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FillBar.Slider::StepSize()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "StepSize", + "name": "SetStepSize", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::SetStepSize" + }, + "parameters": [ + "FillBar", + "Slider", + "=", + "GetArgumentAsNumber(\"Value\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteSlider::Slider", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the label is shown.", + "fullName": "Label is shown", + "functionType": "Condition", + "group": "Slider configuration", + "name": "IsLabelShown", + "sentence": "_PARAM0_ label is shown", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::PropertyShowLabelAtChanges" + }, + "parameters": [ + "Object" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Show (or hide) the label on the bar.", + "fullName": "Show label", + "functionType": "Action", + "group": "Slider configuration", + "name": "SetLabelShown", + "sentence": "Show the label of _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyShowLabelAtChanges" + }, + "parameters": [ + "Object", + "no" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Label" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"Value\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetPropertyShowLabelAtChanges" + }, + "parameters": [ + "Object", + "yes" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Label", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + }, + { + "description": "Show the label", + "name": "Value", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Center the bar according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "Update layout", + "functionType": "Action", + "name": "UpdateLayout", + "private": true, + "sentence": "Update layout of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "FillBar", + "=", + "Object.PropertyBarLeftPadding()", + "=", + "Object.PropertyBarTopPadding()" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "FillBar", + "=", + "round(Background.Height() - Object.PropertyBarTopPadding() - Object.PropertyBarBottomPadding())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Update the thumb position according to the slider value.", + "fullName": "Update thumb position", + "functionType": "Action", + "name": "UpdateThumbPosition", + "private": true, + "sentence": "Update the thumb position of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteSlider::Slider::Size" + }, + "parameters": [ + "FillBar", + "Slider", + ">", + "0", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "FillBar", + "=", + "Object.FullBarWidth() * (FillBar.Slider::Value() - FillBar.Slider::MinValue()) / FillBar.Slider::Size()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetCenterX" + }, + "parameters": [ + "Thumb", + "=", + "Object.FullBarLeft() + FillBar.Width()" + ] + }, + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Thumb", + "=", + "FillBar.CenterY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::String" + }, + "parameters": [ + "Label", + "=", + "ToString(Object.Value())" + ] + }, + { + "type": { + "value": "SetCenterX" + }, + "parameters": [ + "Label", + "=", + "Thumb.CenterX()" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Label", + "=", + "Thumb.Y() - Label.Height() - Object.PropertyLabelMargin()" + ] + }, + { + "type": { + "value": "TextObject::Angle" + }, + "parameters": [ + "Label", + "=", + "-Object.Angle()" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Expression", + "name": "FullBarLeft", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.PropertyBarLeftPadding()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Expression", + "name": "FullBarRight", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Background.Width() - Object.PropertyBarRightPadding()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Expression", + "name": "FullBarWidth", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Background.Width() - Object.PropertyBarLeftPadding() - Object.PropertyBarRightPadding()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Update the slider configuration.", + "fullName": "Update slider configuration", + "functionType": "Action", + "name": "UpdateSliderConfiguration", + "private": true, + "sentence": "Update the slider configuration of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Pass configuration to the behavior and update children." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetMinValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyMinValue()", + "Object.PropertyMaxValue()", + "" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetMaxValue" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyMaxValue()", + "Object.PropertyMaxValue()" + ] + }, + { + "type": { + "value": "PanelSpriteSlider::PanelSpriteSlider::SetStepSize" + }, + "parameters": [ + "Object", + "=", + "Object.PropertyStepSize()", + "Object.PropertyMaxValue()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "De/activate interactions with the button.", + "fullName": "De/activate interactions", + "functionType": "Action", + "name": "Activate", + "sentence": "Activate interactions with _PARAM0_: _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Thumb", + "Draggable", + "yes" + ] + }, + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Background", + "ButtonFSM", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Thumb", + "Draggable", + "no" + ] + }, + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Background", + "ButtonFSM", + "no" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Label" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + }, + { + "description": "Activate", + "name": "ShouldActivate", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the slider allows interactions.", + "fullName": "Interactions activated", + "functionType": "Condition", + "name": "IsActivated", + "sentence": "Interactions on _PARAM0_ are activated", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BehaviorActivated" + }, + "parameters": [ + "Background", + "ButtonFSM" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteSlider::PanelSpriteSlider", + "type": "object" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Bar left margin", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "FillBar" + ], + "name": "BarLeftPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Bar top margin", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "FillBar" + ], + "name": "BarTopPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Bar right margin", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "FillBar" + ], + "name": "BarRightPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Bar bottom margin", + "description": "", + "group": "Bar", + "extraInformation": [ + "Label", + "FillBar" + ], + "name": "BarBottomPadding" + }, + { + "value": "true", + "type": "Boolean", + "label": "Show the label when the value is changed", + "description": "", + "group": "Label", + "extraInformation": [], + "name": "ShowLabelAtChanges" + }, + { + "value": "8", + "type": "Number", + "label": "Label margin", + "description": "", + "group": "Label", + "extraInformation": [], + "name": "LabelMargin" + }, + { + "value": "0", + "type": "Number", + "label": "Minimum value", + "description": "", + "group": "Value", + "extraInformation": [], + "name": "MinValue" + }, + { + "value": "100", + "type": "Number", + "label": "Maximum value", + "description": "", + "group": "Value", + "extraInformation": [], + "name": "MaxValue" + }, + { + "value": "1", + "type": "Number", + "label": "Step size", + "description": "", + "group": "Value", + "extraInformation": [], + "name": "StepSize" + }, + { + "value": "50", + "type": "Number", + "label": "Initial value", + "description": "", + "group": "Value", + "extraInformation": [], + "name": "InitialValue" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "It's used to detect a change at hot reload.", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "PreviousInitialValue" + }, + { + "value": "Center-center", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Thumb" + ], + "hidden": true, + "name": "ThumbAnchorOrigin" + }, + { + "value": "Center-right", + "type": "String", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "FillBar" + ], + "hidden": true, + "name": "ThumbAnchorTarget" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "Only used by the scene editor.", + "group": "", + "extraInformation": [ + "Label" + ], + "hidden": true, + "name": "ShowLabel" + } + ], + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + }, + "content": { + "bold": false, + "isOutlineEnabled": false, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "255;255;255", + "outlineThickness": 2, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "It displays the value when it changes.", + "font": "", + "textAlignment": "", + "verticalTextAlignment": "top", + "characterSize": 20, + "color": "0;0;0" + } + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Thumb", + "rightMargin": 0, + "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, + "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, + "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 + } + ] + } + ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Label" + }, + { + "objectName": "Thumb" + }, + { + "objectName": "FillBar" + }, + { + "objectName": "Background" + } + ] + }, + "objectsGroups": [], + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "instances": [] + } + ] + }, + { + "author": "", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Button states and effects", + "helpPath": "/objects/button", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWdlc3R1cmUtdGFwLWJ1dHRvbiIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xMyA1QzE1LjIxIDUgMTcgNi43OSAxNyA5QzE3IDEwLjUgMTYuMiAxMS43NyAxNSAxMi40NlYxMS4yNEMxNS42MSAxMC42OSAxNiA5Ljg5IDE2IDlDMTYgNy4zNCAxNC42NiA2IDEzIDZTMTAgNy4zNCAxMCA5QzEwIDkuODkgMTAuMzkgMTAuNjkgMTEgMTEuMjRWMTIuNDZDOS44IDExLjc3IDkgMTAuNSA5IDlDOSA2Ljc5IDEwLjc5IDUgMTMgNU0yMCAyMC41QzE5Ljk3IDIxLjMyIDE5LjMyIDIxLjk3IDE4LjUgMjJIMTNDMTIuNjIgMjIgMTIuMjYgMjEuODUgMTIgMjEuNTdMOCAxNy4zN0w4Ljc0IDE2LjZDOC45MyAxNi4zOSA5LjIgMTYuMjggOS41IDE2LjI4SDkuN0wxMiAxOFY5QzEyIDguNDUgMTIuNDUgOCAxMyA4UzE0IDguNDUgMTQgOVYxMy40N0wxNS4yMSAxMy42TDE5LjE1IDE1Ljc5QzE5LjY4IDE2LjAzIDIwIDE2LjU2IDIwIDE3LjE0VjIwLjVNMjAgMkg0QzIuOSAyIDIgMi45IDIgNFYxMkMyIDEzLjExIDIuOSAxNCA0IDE0SDhWMTJMNCAxMkw0IDRIMjBMMjAgMTJIMThWMTRIMjBWMTMuOTZMMjAuMDQgMTRDMjEuMTMgMTQgMjIgMTMuMDkgMjIgMTJWNEMyMiAyLjkgMjEuMTEgMiAyMCAyWiIgLz48L3N2Zz4=", + "name": "ButtonStates", + "previewIconUrl": "https://asset-resources.gdevelop.io/public-resources/Icons/753a9a794bd885058159b7509f06f5a8f67f72decfccb9a1b0efee26f41c3c4c_gesture-tap-button.svg", + "shortDescription": "Use any object as a button and change appearance according to user interactions.", + "version": "1.1.1", + "description": [ + "Use the \"Button states\" behavior to track user interactions with an object, including:", + "", + "- Hovered", + "- Pressed", + "- Clicked", + "- Idle", + "", + "Add additional behaviors to make juicy buttons with animated responses to user input:", + "", + "- Size", + "- Color", + "- Animation", + "- Object effects" + ], + "origin": { + "identifier": "ButtonStates", + "name": "gdevelop-extension-store" + }, + "tags": [ + "ui", + "button" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2", + "gqDaZjCfevOOxBYkK6zlhtZnXCg1" + ], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Use objects as buttons.", + "fullName": "Button states", + "name": "ButtonFSM", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Finite state machine", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The \"Validated\" state only last one frame." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Check position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Make sure the cursor position is only checked once per frame." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyShouldCheckHovering" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "MouseOnlyCursorX(Object.Layer(), 0)", + "MouseOnlyCursorY(Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Touches are always pressed, so ShouldCheckHovering doesn't matter." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(TouchId, Object.Layer(), 0)", + "TouchY(TouchId, Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch start", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasAnyTouchOrMouseStarted" + }, + "parameters": [ + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "StartedTouchOrMouseCount()", + "conditions": [], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "TouchX(StartedTouchOrMouseId(Index), Object.Layer(), 0)", + "TouchY(StartedTouchOrMouseId(Index), Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Index)" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply position changes", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ButtonStates::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ButtonStates::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Handle touch end", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "HasTouchEnded" + }, + "parameters": [ + "", + "TouchId" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::ResetState" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset the state of the button.", + "fullName": "Reset state", + "functionType": "Action", + "name": "ResetState", + "private": true, + "sentence": "Reset the button state of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is not used.", + "fullName": "Is idle", + "functionType": "Condition", + "name": "IsIdle", + "sentence": "_PARAM0_ is idle", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button was just clicked.", + "fullName": "Is clicked", + "functionType": "Condition", + "name": "IsClicked", + "sentence": "_PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the cursor is hovered over the button.", + "fullName": "Is hovered", + "functionType": "Condition", + "name": "IsHovered", + "sentence": "_PARAM0_ is hovered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is either hovered or pressed but not hovered.", + "fullName": "Is focused", + "functionType": "Condition", + "name": "IsFocused", + "sentence": "_PARAM0_ is focused", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed with mouse or touch.", + "fullName": "Is pressed", + "functionType": "Condition", + "name": "IsPressed", + "sentence": "_PARAM0_ is pressed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the button is currently being pressed outside with mouse or touch.", + "fullName": "Is held outside", + "functionType": "Condition", + "name": "IsPressedOutside", + "sentence": "_PARAM0_ is held outside", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the touch id that is using the button or 0 if none.", + "fullName": "Touch id", + "functionType": "ExpressionAndCondition", + "name": "TouchId", + "sentence": "the touch id", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "TouchId" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "true", + "type": "Boolean", + "label": "", + "description": "Should check hovering", + "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": [] + }, + { + "description": "Enable effects on buttons based on their state.", + "fullName": "Button object effects", + "name": "ButtonObjectEffects", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "Object", + "Effect", + "IdleEffect", + "yes" + ] + }, + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "Object", + "Effect", + "FocusedEffect", + "no" + ] + }, + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "Object", + "Effect", + "PressedEffect", + "no" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffects", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "States", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "Object", + "Effect", + "IdleEffect", + "no" + ] + }, + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "Object", + "Effect", + "FocusedEffect", + "no" + ] + }, + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "Object", + "Effect", + "PressedEffect", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffects::PropertyIdleEffect" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonFSM::IsIdle" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "Object", + "Effect", + "IdleEffect", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffects::PropertyFocusedEffect" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonFSM::IsFocused" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "Object", + "Effect", + "FocusedEffect", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffects::PropertyPressedEffect" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonFSM::IsPressed" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "Object", + "Effect", + "PressedEffect", + "yes" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffects", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the idle state effect of the object.", + "fullName": "Idle state effect", + "functionType": "ExpressionAndCondition", + "group": "Button object effects configuration", + "name": "IdleEffect", + "sentence": "the idle state effect", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "IdleEffect" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffects", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "IdleEffect", + "name": "SetIdleEffect", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffects::SetPropertyIdleEffect" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffects", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the focused state effect of the object. The state is Focused when the button is hovered or held outside.", + "fullName": "Focused state effect", + "functionType": "ExpressionAndCondition", + "group": "Button object effects configuration", + "name": "FocusedEffect", + "sentence": "the focused state effect", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "FocusedEffect" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffects", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FocusedEffect", + "name": "SetFocusedEffect", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffects::SetPropertyFocusedEffect" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffects", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the pressed state effect of the object.", + "fullName": "Pressed state effect", + "functionType": "ExpressionAndCondition", + "group": "Button object effects configuration", + "name": "PressedEffect", + "sentence": "the pressed state effect", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "PressedEffect" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffects", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PressedEffect", + "name": "SetPressedEffect", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffects::SetPropertyPressedEffect" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffects", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Button states", + "description": "", + "group": "", + "extraInformation": [ + "ButtonStates::ButtonFSM" + ], + "name": "ButtonFSM" + }, + { + "value": "", + "type": "Behavior", + "label": "Effect capability", + "description": "", + "group": "", + "extraInformation": [ + "EffectCapability::EffectBehavior" + ], + "name": "Effect" + }, + { + "value": "", + "type": "String", + "label": "Idle state effect", + "description": "", + "group": "Effects", + "extraInformation": [], + "name": "IdleEffect" + }, + { + "value": "", + "type": "String", + "label": "Focused state effect", + "description": "The state is Focused when the button is hovered or held outside.", + "group": "Effects", + "extraInformation": [], + "name": "FocusedEffect" + }, + { + "value": "", + "type": "String", + "label": "Pressed state effect", + "description": "", + "group": "Effects", + "extraInformation": [], + "name": "PressedEffect" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Change the animation of buttons according to their state.", + "fullName": "Button animation", + "name": "ButtonAnimationName", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "AnimatableCapability::AnimatableBehavior::SetName" + }, + "parameters": [ + "Object", + "Animation", + "=", + "IdleAnimationName" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonAnimationName", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Change based on state", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsIdle" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "AnimatableCapability::AnimatableBehavior::SetName" + }, + "parameters": [ + "Object", + "Animation", + "=", + "IdleAnimationName" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsFocused" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "AnimatableCapability::AnimatableBehavior::SetName" + }, + "parameters": [ + "Object", + "Animation", + "=", + "FocusedAnimationName" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsPressed" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "AnimatableCapability::AnimatableBehavior::SetName" + }, + "parameters": [ + "Object", + "Animation", + "=", + "PressedAnimationName" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonAnimationName", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the idle state animation name of the object.", + "fullName": "Idle state animation name", + "functionType": "ExpressionAndCondition", + "group": "Button animation configuration", + "name": "IdleAnimationName", + "sentence": "the idle state animation name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "IdleAnimationName" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonAnimationName", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "IdleAnimationName", + "name": "SetIdleAnimationName", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonAnimationName::SetPropertyIdleAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonAnimationName", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the focused state animation name of the object. The state is Focused when the button is hovered or held outside.", + "fullName": "Focused state animation name", + "functionType": "ExpressionAndCondition", + "group": "Button animation configuration", + "name": "FocusedAnimationName", + "sentence": "the focused state animation name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "FocusedAnimationName" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonAnimationName", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FocusedAnimationName", + "name": "SetFocusedAnimationName", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonAnimationName::SetPropertyFocusedAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonAnimationName", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the pressed state animation name of the object.", + "fullName": "Pressed state animation name", + "functionType": "ExpressionAndCondition", + "group": "Button animation configuration", + "name": "PressedAnimationName", + "sentence": "the pressed state animation name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "PressedAnimationName" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonAnimationName", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PressedAnimationName", + "name": "SetPressedAnimationName", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonAnimationName::SetPropertyPressedAnimationName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonAnimationName", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Animatable capability", + "description": "", + "group": "", + "extraInformation": [ + "AnimatableCapability::AnimatableBehavior" + ], + "name": "Animation" + }, + { + "value": "", + "type": "Behavior", + "label": "Button states", + "description": "", + "group": "", + "extraInformation": [ + "ButtonStates::ButtonFSM" + ], + "name": "ButtonFSM" + }, + { + "value": "Idle", + "type": "String", + "label": "Idle state animation name", + "description": "", + "group": "Animation", + "extraInformation": [], + "name": "IdleAnimationName" + }, + { + "value": "Focused", + "type": "String", + "label": "Focused state animation name", + "description": "The state is Focused when the button is hovered or held outside.", + "group": "Animation", + "extraInformation": [], + "name": "FocusedAnimationName" + }, + { + "value": "Pressed", + "type": "String", + "label": "Pressed state animation name", + "description": "", + "group": "Animation", + "extraInformation": [], + "name": "PressedAnimationName" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Smoothly change an effect on buttons according to their state.", + "fullName": "Button object effect tween", + "name": "ButtonObjectEffectTween", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "IdleValue" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "States", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsIdle" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::FadeOut" + }, + "parameters": [ + "Object", + "Behavior", + "IdleValue", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsFocused" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Focused\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::FadeIn" + }, + "parameters": [ + "Object", + "Behavior", + "FocusedValue", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Pressed\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Focused\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::FadeOut" + }, + "parameters": [ + "Object", + "Behavior", + "FocusedValue", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsPressed" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"Pressed\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Pressed\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::FadeIn" + }, + "parameters": [ + "Object", + "Behavior", + "PressedValue", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Tween", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"FadeIn\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::PlayTween" + }, + "parameters": [ + "Object", + "Behavior", + "FadeInDuration", + "FadeInEasing", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"FadeOut\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::PlayTween" + }, + "parameters": [ + "Object", + "Behavior", + "FadeOutDuration", + "FadeOutEasing", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Time delta", + "functionType": "Expression", + "name": "TimeDelta", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "TimeDelta() * LayerTimeScale(Object.Layer())" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Fade in", + "functionType": "Action", + "name": "FadeIn", + "private": true, + "sentence": "_PARAM0_ fade in to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"FadeIn\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenInitialValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "EffectValue" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTargetedValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "fullName": "Fade out", + "functionType": "Action", + "name": "FadeOut", + "private": true, + "sentence": "_PARAM0_ fade out to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"FadeOut\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenInitialValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "EffectValue" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTargetedValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "fullName": "Play tween", + "functionType": "Action", + "name": "PlayTween", + "private": true, + "sentence": "Tween the effect property of object _PARAM0_ over _PARAM2_ seconds with _PARAM3_ easing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Duration" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Behavior::TimeDelta()" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Tween::Ease(Easing, TweenInitialValue, TweenTargetedValue, TweenTime / Duration)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::PropertyTweenTime" + }, + "parameters": [ + "Object", + "Behavior", + ">=", + "Duration" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyTweenState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"NoTween\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "TweenTargetedValue" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "EffectCapability::EffectBehavior::SetEffectDoubleParameter" + }, + "parameters": [ + "Object", + "Effect", + "EffectName", + "EffectProperty", + "EffectValue" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + }, + { + "description": "Duration (in seconds)", + "name": "Duration", + "type": "expression" + }, + { + "description": "Easing", + "name": "Easing", + "supplementaryInformation": "[]", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "the effect name of the object.", + "fullName": "Effect name", + "functionType": "ExpressionAndCondition", + "group": "Button effect tween configuration", + "name": "EffectName", + "sentence": "the effect name", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "EffectName" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.", + "fullName": "Effect parameter", + "functionType": "ExpressionAndCondition", + "group": "Button effect tween configuration", + "name": "EffectProperty", + "sentence": "the effect parameter", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "EffectProperty" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the effect parameter of the object. The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.", + "fullName": "Effect parameter", + "functionType": "Action", + "getterName": "EffectName", + "group": "Button effect tween configuration", + "name": "SetEffectProperty", + "sentence": "Change the tweened effect of _PARAM0_ to _PARAM2_ with parameter _PARAM3_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectName" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyEffectProperty" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + }, + { + "description": "Effect name", + "name": "EffectName", + "type": "string" + }, + { + "description": "Parameter name", + "name": "PropertyName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "the idle effect parameter value of the object.", + "fullName": "Idle effect parameter value", + "functionType": "ExpressionAndCondition", + "group": "Button effect tween configuration", + "name": "IdleValue", + "sentence": "the idle effect parameter value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "IdleValue" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "IdleValue", + "name": "SetIdleValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyIdleValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the focused effect parameter value of the object. The state is Focused when the button is hovered or held outside.", + "fullName": "Focused effect parameter value", + "functionType": "ExpressionAndCondition", + "group": "Button effect tween configuration", + "name": "FocusedValue", + "sentence": "the focused effect parameter value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FocusedValue" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FocusedValue", + "name": "SetFocusedValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFocusedValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the pressed effect parameter value of the object.", + "fullName": "Pressed effect parameter value", + "functionType": "ExpressionAndCondition", + "group": "Button effect tween configuration", + "name": "PressedValue", + "sentence": "the pressed effect parameter value", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "PressedValue" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PressedValue", + "name": "SetPressedValue", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyPressedValue" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-in easing of the object.", + "fullName": "Fade-in easing", + "functionType": "ExpressionAndCondition", + "group": "Button effect tween configuration", + "name": "FadeInEasing", + "sentence": "the fade-in easing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "FadeInEasing" + ] + } + ] + } + ], + "expressionType": { + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeInEasing", + "name": "SetFadeInEasing", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeInEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-out easing of the object.", + "fullName": "Fade-out easing", + "functionType": "ExpressionAndCondition", + "group": "Button effect tween configuration", + "name": "FadeOutEasing", + "sentence": "the fade-out easing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "FadeOutEasing" + ] + } + ] + } + ], + "expressionType": { + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeOutEasing", + "name": "SetFadeOutEasing", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeOutEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-in duration of the object.", + "fullName": "Fade-in duration", + "functionType": "ExpressionAndCondition", + "group": "Button effect tween configuration", + "name": "FadeInDuration", + "sentence": "the fade-in duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FadeInDuration" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeInDuration", + "name": "SetFadeInDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeInDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-out duration of the object.", + "fullName": "Fade-out duration", + "functionType": "ExpressionAndCondition", + "group": "Button effect tween configuration", + "name": "FadeOutDuration", + "sentence": "the fade-out duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FadeOutDuration" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeOutDuration", + "name": "SetFadeOutDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonObjectEffectTween::SetPropertyFadeOutDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonObjectEffectTween", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Button states", + "description": "", + "group": "", + "extraInformation": [ + "ButtonStates::ButtonFSM" + ], + "name": "ButtonFSM" + }, + { + "value": "", + "type": "Behavior", + "label": "Effect capability", + "description": "", + "group": "", + "extraInformation": [ + "EffectCapability::EffectBehavior" + ], + "name": "Effect" + }, + { + "value": "Effect", + "type": "String", + "label": "Effect name", + "description": "", + "group": "Effect", + "extraInformation": [], + "name": "EffectName" + }, + { + "value": "", + "type": "String", + "label": "Effect parameter", + "description": "The effect parameter names can be found in the effects tab with the \"Show parameter names\" action of the drop down menu.", + "group": "Effect", + "extraInformation": [], + "name": "EffectProperty" + }, + { + "value": "0", + "type": "Number", + "label": "Idle effect parameter value", + "description": "", + "group": "Value", + "extraInformation": [], + "name": "IdleValue" + }, + { + "value": "0", + "type": "Number", + "label": "Focused effect parameter value", + "description": "The state is Focused when the button is hovered or held outside.", + "group": "Value", + "extraInformation": [], + "name": "FocusedValue" + }, + { + "value": "0", + "type": "Number", + "label": "Pressed effect parameter value", + "description": "", + "group": "Value", + "extraInformation": [], + "name": "PressedValue" + }, + { + "value": "easeInOutQuad", + "type": "Choice", + "label": "Fade-in easing", + "description": "", + "group": "Speed", + "extraInformation": [ + "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" + ], + "name": "FadeInEasing" + }, + { + "value": "easeInOutQuad", + "type": "Choice", + "label": "Fade-out easing", + "description": "", + "group": "Speed", + "extraInformation": [ + "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" + ], + "name": "FadeOutEasing" + }, + { + "value": "0.125", + "type": "Number", + "unit": "Second", + "label": "Fade-in duration", + "description": "", + "group": "Speed", + "extraInformation": [], + "name": "FadeInDuration" + }, + { + "value": "0.5", + "type": "Number", + "unit": "Second", + "label": "Fade-out duration", + "description": "", + "group": "Speed", + "extraInformation": [], + "name": "FadeOutDuration" + }, + { + "value": "Idle", + "type": "Choice", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Idle", + "Focused", + "Pressed" + ], + "hidden": true, + "name": "PreviousState" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TweenInitialValue" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TweenTargetedValue" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "TweenTime" + }, + { + "value": "NoTween", + "type": "Choice", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "NoTween", + "FadeIn", + "FadeOut" + ], + "hidden": true, + "name": "TweenState" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "EffectValue" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Smoothly resize buttons according to their state.", + "fullName": "Button scale tween", + "name": "ButtonScaleTween", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ScalableCapability::ScalableBehavior::SetValue" + }, + "parameters": [ + "Object", + "Scale", + "=", + "IdleScale" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Change based on state", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsIdle" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonScaleTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonScaleTween::FadeOut" + }, + "parameters": [ + "Object", + "Behavior", + "IdleScale", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsFocused" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Focused\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonScaleTween::FadeIn" + }, + "parameters": [ + "Object", + "Behavior", + "FocusedScale", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Pressed\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Focused\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonScaleTween::FadeOut" + }, + "parameters": [ + "Object", + "Behavior", + "FocusedScale", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsPressed" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonScaleTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"Pressed\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Pressed\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonScaleTween::FadeIn" + }, + "parameters": [ + "Object", + "Behavior", + "PressedScale", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Fade in", + "functionType": "Action", + "name": "FadeIn", + "private": true, + "sentence": "_PARAM0_ fade in to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween::AddObjectScaleTween" + }, + "parameters": [ + "Object", + "Tween", + "\"__ButtonScaleTween.Fade\"", + "Value", + "Value", + "FadeInEasing", + "1000 * FadeInDuration", + "no", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "fullName": "Fade out", + "functionType": "Action", + "name": "FadeOut", + "private": true, + "sentence": "_PARAM0_ fade out to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween::AddObjectScaleTween" + }, + "parameters": [ + "Object", + "Tween", + "\"__ButtonScaleTween.Fade\"", + "Value", + "Value", + "FadeOutEasing", + "1000 * FadeOutDuration", + "no", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the idle state size scale of the object.", + "fullName": "Idle state size scale", + "functionType": "ExpressionAndCondition", + "group": "Button scale tween configuration", + "name": "IdleScale", + "sentence": "the idle state size scale", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "IdleScale" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "IdleScale", + "name": "SetIdleScale", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyIdleScale" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the focused state size scale of the object. The state is Focused when the button is hovered or held outside.", + "fullName": "Focused state size scale", + "functionType": "ExpressionAndCondition", + "group": "Button scale tween configuration", + "name": "FocusedScale", + "sentence": "the focused state size scale", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FocusedScale" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FocusedScale", + "name": "SetFocusedScale", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyFocusedScale" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the pressed state size scale of the object.", + "fullName": "Pressed state size scale", + "functionType": "ExpressionAndCondition", + "group": "Button scale tween configuration", + "name": "PressedScale", + "sentence": "the pressed state size scale", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "PressedScale" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PressedScale", + "name": "SetPressedScale", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyPressedScale" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-in duration of the object.", + "fullName": "Fade-in duration", + "functionType": "ExpressionAndCondition", + "group": "Button scale tween configuration", + "name": "FadeInDuration", + "sentence": "the fade-in duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FadeInDuration" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeInDuration", + "name": "SetFadeInDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyFadeInDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-out duration of the object.", + "fullName": "Fade-out duration", + "functionType": "ExpressionAndCondition", + "group": "Button scale tween configuration", + "name": "FadeOutDuration", + "sentence": "the fade-out duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FadeOutDuration" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeOutDuration", + "name": "SetFadeOutDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyFadeOutDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-in easing of the object.", + "fullName": "Fade-in easing", + "functionType": "ExpressionAndCondition", + "group": "Button scale tween configuration", + "name": "FadeInEasing", + "sentence": "the fade-in easing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "FadeInEasing" + ] + } + ] + } + ], + "expressionType": { + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeInEasing", + "name": "SetFadeInEasing", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyFadeInEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-out easing of the object.", + "fullName": "Fade-out easing", + "functionType": "ExpressionAndCondition", + "group": "Button scale tween configuration", + "name": "FadeOutEasing", + "sentence": "the fade-out easing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "FadeOutEasing" + ] + } + ] + } + ], + "expressionType": { + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeOutEasing", + "name": "SetFadeOutEasing", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonScaleTween::SetPropertyFadeOutEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonScaleTween", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Scalable capability", + "description": "", + "group": "", + "extraInformation": [ + "ScalableCapability::ScalableBehavior" + ], + "name": "Scale" + }, + { + "value": "", + "type": "Behavior", + "label": "Button states behavior (required)", + "description": "", + "group": "", + "extraInformation": [ + "ButtonStates::ButtonFSM" + ], + "name": "ButtonFSM" + }, + { + "value": "", + "type": "Behavior", + "label": "Tween behavior (required)", + "description": "", + "group": "", + "extraInformation": [ + "Tween::TweenBehavior" + ], + "name": "Tween" + }, + { + "value": "1", + "type": "Number", + "unit": "Dimensionless", + "label": "Idle state size scale", + "description": "", + "group": "Size", + "extraInformation": [], + "name": "IdleScale" + }, + { + "value": "1", + "type": "Number", + "unit": "Dimensionless", + "label": "Focused state size scale", + "description": "The state is Focused when the button is hovered or held outside.", + "group": "Size", + "extraInformation": [], + "name": "FocusedScale" + }, + { + "value": "0.1", + "type": "Number", + "unit": "Second", + "label": "Fade-in duration", + "description": "", + "group": "Speed", + "extraInformation": [], + "name": "FadeInDuration" + }, + { + "value": "0.2", + "type": "Number", + "unit": "Second", + "label": "Fade-out duration", + "description": "", + "group": "Speed", + "extraInformation": [], + "name": "FadeOutDuration" + }, + { + "value": "0.95", + "type": "Number", + "unit": "Dimensionless", + "label": "Pressed state size scale", + "description": "", + "group": "Size", + "extraInformation": [], + "name": "PressedScale" + }, + { + "value": "easeInOutQuad", + "type": "Choice", + "label": "Fade-in easing", + "description": "", + "group": "Speed", + "extraInformation": [ + "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" + ], + "name": "FadeInEasing" + }, + { + "value": "easeInOutQuad", + "type": "Choice", + "label": "Fade-out easing", + "description": "", + "group": "Speed", + "extraInformation": [ + "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" + ], + "name": "FadeOutEasing" + }, + { + "value": "Idle", + "type": "Choice", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Idle", + "Focused", + "Pressed" + ], + "hidden": true, + "name": "PreviousState" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Smoothly change the color tint of buttons according to their state.", + "fullName": "Button color tint tween", + "name": "ButtonColorTintTween", + "objectType": "Sprite", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ChangeColor" + }, + "parameters": [ + "Object", + "IdleColorTint" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "States", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsIdle" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::FadeOut" + }, + "parameters": [ + "Object", + "Behavior", + "IdleColorTint", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsFocused" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Focused\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::FadeIn" + }, + "parameters": [ + "Object", + "Behavior", + "FocusedColorTint", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Pressed\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Focused\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::FadeOut" + }, + "parameters": [ + "Object", + "Behavior", + "FocusedColorTint", + "" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ButtonStates::ButtonFSM::IsPressed" + }, + "parameters": [ + "Object", + "ButtonFSM", + "" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::PropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "\"Pressed\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyPreviousState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Pressed\"" + ] + }, + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::FadeIn" + }, + "parameters": [ + "Object", + "Behavior", + "PressedColorTint", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Fade in", + "functionType": "Action", + "name": "FadeIn", + "private": true, + "sentence": "_PARAM0_ fade in to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween::AddObjectColorTween" + }, + "parameters": [ + "Object", + "Tween", + "\"__ButtonColorTintTween.Fade\"", + "Value", + "FadeInEasing", + "1000 * FadeInDuration", + "no", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "fullName": "Fade out", + "functionType": "Action", + "name": "FadeOut", + "private": true, + "sentence": "_PARAM0_ fade out to _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Tween::AddObjectColorTween" + }, + "parameters": [ + "Object", + "Tween", + "\"__ButtonColorTintTween.Fade\"", + "Value", + "FadeOutEasing", + "1000 * FadeOutDuration", + "no", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + }, + { + "description": "Value", + "name": "Value", + "type": "color" + } + ], + "objectGroups": [] + }, + { + "description": "the idle state color tint of the object.", + "fullName": "Idle state color tint", + "functionType": "ExpressionAndCondition", + "group": "Button color tint tween", + "name": "IdleColorTint", + "sentence": "the idle state color tint", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "IdleColorTint" + ] + } + ] + } + ], + "expressionType": { + "type": "color" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "IdleColorTint", + "name": "SetIdleColorTint", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyIdleColorTint" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the focused state color tint of the object. The state is Focused when the button is hovered or held outside.", + "fullName": "Focused state color tint", + "functionType": "ExpressionAndCondition", + "group": "Button color tint tween", + "name": "FocusedColorTint", + "sentence": "the focused state color tint", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "FocusedColorTint" + ] + } + ] + } + ], + "expressionType": { + "type": "color" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FocusedColorTint", + "name": "SetFocusedColorTint", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyFocusedColorTint" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the pressed state color tint of the object.", + "fullName": "Pressed state color tint", + "functionType": "ExpressionAndCondition", + "group": "Button color tint tween", + "name": "PressedColorTint", + "sentence": "the pressed state color tint", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "PressedColorTint" + ] + } + ] + } + ], + "expressionType": { + "type": "color" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "PressedColorTint", + "name": "SetPressedColorTint", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyPressedColorTint" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-in duration of the object.", + "fullName": "Fade-in duration", + "functionType": "ExpressionAndCondition", + "group": "Button color tint tween", + "name": "FadeInDuration", + "sentence": "the fade-in duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FadeInDuration" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeInDuration", + "name": "SetFadeInDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeInDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-out duration of the object.", + "fullName": "Fade-out duration", + "functionType": "ExpressionAndCondition", + "group": "Button color tint tween", + "name": "FadeOutDuration", + "sentence": "the fade-out duration", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "FadeOutDuration" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeOutDuration", + "name": "SetFadeOutDuration", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeOutDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-in easing of the object.", + "fullName": "Fade-in easing", + "functionType": "ExpressionAndCondition", + "group": "Button color tint tween", + "name": "FadeInEasing", + "sentence": "the fade-in easing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "FadeInEasing" + ] + } + ] + } + ], + "expressionType": { + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeInEasing", + "name": "SetFadeInEasing", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeInEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "the fade-out easing of the object.", + "fullName": "Fade-out easing", + "functionType": "ExpressionAndCondition", + "group": "Button color tint tween", + "name": "FadeOutEasing", + "sentence": "the fade-out easing", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "FadeOutEasing" + ] + } + ] + } + ], + "expressionType": { + "supplementaryInformation": "[\"linear\",\"easeInQuad\",\"easeOutQuad\",\"easeInOutQuad\",\"easeInCubic\",\"easeOutCubic\",\"easeInOutCubic\",\"easeInQuart\",\"easeOutQuart\",\"easeInOutQuart\",\"easeInQuint\",\"easeOutQuint\",\"easeInOutQuint\",\"easeInOutSine\",\"easeInExpo\",\"easeOutExpo\",\"easeInOutExpo\",\"easeInCirc\",\"easeOutCirc\",\"easeInOutCirc\",\"easeOutBounce\",\"easeInBack\",\"easeOutBack\",\"easeInOutBack\",\"elastic\",\"swingFromTo\",\"swingFrom\",\"swingTo\",\"bounce\",\"bouncePast\",\"easeFromTo\",\"easeFrom\",\"easeTo\"]", + "type": "stringWithSelector" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "FadeOutEasing", + "name": "SetFadeOutEasing", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ButtonStates::ButtonColorTintTween::SetPropertyFadeOutEasing" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "Sprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "ButtonStates::ButtonColorTintTween", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Button states", + "description": "", + "group": "", + "extraInformation": [ + "ButtonStates::ButtonFSM" + ], + "name": "ButtonFSM" + }, + { + "value": "", + "type": "Behavior", + "label": "Tween", + "description": "", + "group": "", + "extraInformation": [ + "Tween::TweenBehavior" + ], + "name": "Tween" + }, + { + "value": "255;255;255", + "type": "Color", + "label": "Idle state color tint", + "description": "", + "group": "Color", + "extraInformation": [], + "name": "IdleColorTint" + }, + { + "value": "192;192;192", + "type": "Color", + "label": "Focused state color tint", + "description": "The state is Focused when the button is hovered or held outside.", + "group": "Color", + "extraInformation": [], + "name": "FocusedColorTint" + }, + { + "value": "64;64;64", + "type": "Color", + "label": "Pressed state color tint", + "description": "", + "group": "Color", + "extraInformation": [], + "name": "PressedColorTint" + }, + { + "value": "0.1", + "type": "Number", + "unit": "Second", + "label": "Fade-in duration", + "description": "", + "group": "Speed", + "extraInformation": [], + "name": "FadeInDuration" + }, + { + "value": "0.2", + "type": "Number", + "unit": "Second", + "label": "Fade-out duration", + "description": "", + "group": "Speed", + "extraInformation": [], + "name": "FadeOutDuration" + }, + { + "value": "easeInOutQuad", + "type": "Choice", + "label": "Fade-in easing", + "description": "", + "group": "Speed", + "extraInformation": [ + "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" + ], + "name": "FadeInEasing" + }, + { + "value": "easeInOutQuad", + "type": "Choice", + "label": "Fade-out easing", + "description": "", + "group": "Speed", + "extraInformation": [ + "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" + ], + "name": "FadeOutEasing" + }, + { + "value": "Idle", + "type": "Choice", + "label": "", + "description": "", + "group": "", + "extraInformation": [ + "Idle", + "Focused", + "Pressed" + ], + "hidden": true, + "name": "PreviousState" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Panel sprite button", + "helpPath": "/objects/button", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQo8L3N0eWxlPg0KPHBhdGggY2xhc3M9InN0MCIgZD0iTTI5LDIzSDNjLTEuMSwwLTItMC45LTItMlYxMWMwLTEuMSwwLjktMiwyLTJoMjZjMS4xLDAsMiwwLjksMiwydjEwQzMxLDIyLjEsMzAuMSwyMywyOSwyM3oiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0xMywxOUwxMywxOWMtMS4xLDAtMi0wLjktMi0ydi0yYzAtMS4xLDAuOS0yLDItMmgwYzEuMSwwLDIsMC45LDIsMnYyQzE1LDE4LjEsMTQuMSwxOSwxMywxOXoiLz4NCjxsaW5lIGNsYXNzPSJzdDAiIHgxPSIxOCIgeTE9IjEzIiB4Mj0iMTgiIHkyPSIxOSIvPg0KPGxpbmUgY2xhc3M9InN0MCIgeDE9IjIxIiB5MT0iMTMiIHgyPSIxOCIgeTI9IjE3Ii8+DQo8bGluZSBjbGFzcz0ic3QwIiB4MT0iMjEiIHkxPSIxOSIgeDI9IjE5IiB5Mj0iMTYiLz4NCjwvc3ZnPg0K", + "name": "PanelSpriteButton", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Interface Elements/Interface Elements_interface_ui_button_ok_cta_clock_tap.svg", + "shortDescription": "A button that can be customized.", + "version": "1.4.4", + "description": [ + "The button can be customized with a background for each state and a label. It handles user interactions and a simple condition can be used to check if it is clicked.", + "", + "There are ready-to-use buttons in the asset-store [menu buttons pack](https://editor.gdevelop.io/?initial-dialog=asset-store&asset-pack=menu-buttons-menu-buttons)." + ], + "origin": { + "identifier": "PanelSpriteButton", + "name": "gdevelop-extension-store" + }, + "tags": [ + "button", + "ui" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "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": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::SetPropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyShouldCheckHovering" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "CollisionPoint" + }, + "parameters": [ + "Object", + "MouseOnlyCursorX(Object.Layer(), 0)", + "MouseOnlyCursorY(Object.Layer(), 0)" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::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": "PanelSpriteButton::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": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "StartedTouchOrMouseId(Object.Behavior::PropertyIndex())" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyMouseIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyTouchIsInside" + }, + "parameters": [ + "Object", + "Behavior" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + }, + { + "type": { + "inverted": true, + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onDeActivate", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::ResetState" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::ButtonFSM", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Reset the state of the button.", + "fullName": "Reset state", + "functionType": "Action", + "name": "ResetState", + "private": true, + "sentence": "Reset the button state of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + }, + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::SetPropertyTouchId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Idle\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Validated\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"Hovered\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedInside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::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": "PanelSpriteButton::ButtonFSM::PropertyState" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "\"PressedOutside\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "PanelSpriteButton::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": "PanelSpriteButton::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": [ + { + "areaMaxX": 64, + "areaMaxY": 64, + "areaMaxZ": 64, + "areaMinX": 0, + "areaMinY": 0, + "areaMinZ": 0, + "defaultName": "Button", + "description": "A button that can be customized.", + "fullName": "Button (panel sprite)", + "isUsingLegacyInstancesRenderer": true, + "name": "PanelSpriteButton", + "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": "Create one background instance for of each state.\nOnly the instance for the current state is shown." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Idle", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Hovered", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Pressed", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Hovered", + "=", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Place the label over the backgrounds." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Create" + }, + "parameters": [ + "", + "Label", + "0", + "0", + "" + ] + }, + { + "type": { + "value": "ChangePlan" + }, + "parameters": [ + "Label", + "=", + "2" + ] + }, + { + "type": { + "value": "TextObject::SetWrapping" + }, + "parameters": [ + "Label", + "yes" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + } + ] + }, + { + "fullName": "", + "functionType": "Action", + "name": "onHotReloading", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Apply states", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Show the right background accordingly to the new state." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsIdle" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "Object.CenterWithPaddingY()" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Idle", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Visible" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::PropertyHoveredFadeOutDuration" + }, + "parameters": [ + "Object", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Tween::AddObjectOpacityTween" + }, + "parameters": [ + "Hovered", + "Tween", + "\"Fadeout\"", + "0", + "\"linear\"", + "Object.PropertyHoveredFadeOutDuration() * 1000", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::PropertyHoveredFadeOutDuration" + }, + "parameters": [ + "Object", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteObject::Opacity" + }, + "parameters": [ + "Hovered", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "PanelSpriteObject::SetOpacity" + }, + "parameters": [ + "Hovered", + "=", + "255" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsHovered" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "Object.CenterWithPaddingY()" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Idle" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Hovered", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + }, + { + "type": { + "value": "Tween::RemoveTween" + }, + "parameters": [ + "Hovered", + "Tween", + "\"Fadeout\"" + ] + }, + { + "type": { + "value": "PanelSpriteObject::SetOpacity" + }, + "parameters": [ + "Hovered", + "=", + "255" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsPressed" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "Object.CenterWithPaddingY() + Object.PropertyPressedLabelOffsetY()" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Idle" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Hovered" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Pressed", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsFocused" + }, + "parameters": [ + "Object", + "ButtonFSM" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "Object.CenterWithPaddingY()" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Idle" + ] + }, + { + "type": { + "value": "Montre" + }, + "parameters": [ + "Hovered", + "" + ] + }, + { + "type": { + "value": "Cache" + }, + "parameters": [ + "Pressed" + ] + } + ] + } + ], + "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 button size change:\n- backgrounds for each state are resized to take the full dimensions of the button\n- the label is put back at the center of the button\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(Idle.BoundingBoxRight(), Label.BoundingBoxRight()) - min(Idle.BoundingBoxLeft(), Label.BoundingBoxLeft())" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "Object.Height()", + "!=", + "max(Idle.BoundingBoxBottom(), Label.BoundingBoxBottom()) - min(Idle.BoundingBoxTop(), Label.BoundingBoxTop())" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Idle", + "Width", + "=", + "Object.Width()" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Idle", + "Height", + "=", + "Object.Height()" + ] + }, + { + "type": { + "value": "PanelSpriteButton::Scale" + }, + "parameters": [ + "Object", + "=", + "1" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Width" + }, + "parameters": [ + "Background", + "=", + "Idle.Variable(Width)" + ] + }, + { + "type": { + "value": "PanelSpriteObject::Height" + }, + "parameters": [ + "Background", + "=", + "Idle.Variable(Height)" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + } + ] + }, + { + "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": "PanelSpriteButton::ButtonFSM::IsIdle" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "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": "PanelSpriteButton::ButtonFSM::IsClicked" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "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": "PanelSpriteButton::ButtonFSM::IsHovered" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "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": "PanelSpriteButton::ButtonFSM::IsFocused" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "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": "PanelSpriteButton::ButtonFSM::IsPressed" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Change the text of the button label.", + "fullName": "Label text", + "functionType": "Action", + "name": "SetLabelText", + "sentence": "Change the text of _PARAM0_ to _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextObject::String" + }, + "parameters": [ + "Label", + "=", + "GetArgumentAsString(\"LabelText\")" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::CenterLabel" + }, + "parameters": [ + "Object", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + }, + { + "description": "Text", + "name": "LabelText", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Return the label text.", + "fullName": "Label text", + "functionType": "StringExpression", + "name": "LabelText", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "Label.String()" + ] + } + ] + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Return the label center Y according to the button configuration. This expression is used in doStepPostEvents when the button is pressed or released.", + "fullName": "", + "functionType": "Expression", + "name": "CenterWithPaddingY", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Idle.CenterY() + (Object.PropertyTopPadding() - Object.PropertyBottomPadding()) / 2" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Center the label according to the button configuration. This is used in doStepPostEvents when the button is resized.", + "fullName": "", + "functionType": "Action", + "name": "CenterLabel", + "private": true, + "sentence": "Center the label of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "MettreXY" + }, + "parameters": [ + "Label", + "=", + "Object.PropertyLeftPadding()", + "=", + "Object.PropertyTopPadding()" + ] + }, + { + "type": { + "value": "TextObject::WrappingWidth" + }, + "parameters": [ + "Label", + "=", + "Idle.Width() - Object.PropertyLeftPadding() - Object.PropertyRightPadding()" + ] + }, + { + "type": { + "value": "SetCenterY" + }, + "parameters": [ + "Label", + "=", + "Object.CenterWithPaddingY()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetCenterX" + }, + "parameters": [ + "Label", + "=", + "Background.CenterX() + (Object.PropertyLeftPadding() - Object.PropertyRightPadding()) / 2" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsPressed" + }, + "parameters": [ + "Object", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Label", + "+", + "Object.PropertyPressedLabelOffsetY()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [ + { + "name": "Background", + "objects": [ + { + "name": "Idle" + }, + { + "name": "Hovered" + }, + { + "name": "Pressed" + } + ] + } + ] + }, + { + "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": [ + "Idle", + "ButtonFSM", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"ShouldActivate\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "ActivateBehavior" + }, + "parameters": [ + "Idle", + "ButtonFSM", + "no" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + }, + { + "description": "Activate", + "name": "ShouldActivate", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Check if interactions are activated on the button.", + "fullName": "Interactions activated", + "functionType": "Condition", + "name": "IsActivated", + "sentence": "Interactions on _PARAM0_ are activated", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BehaviorActivated" + }, + "parameters": [ + "Idle", + "ButtonFSM" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "PanelSpriteButton::PanelSpriteButton", + "type": "object" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0", + "type": "Number", + "label": "Label offset on Y axis when pressed", + "description": "", + "group": "", + "extraInformation": [], + "name": "PressedLabelOffsetY" + }, + { + "value": "0", + "type": "Number", + "label": "Left padding", + "description": "", + "group": "Padding", + "extraInformation": [ + "Label" + ], + "name": "LeftPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Right padding", + "description": "", + "group": "Padding", + "extraInformation": [ + "Label" + ], + "name": "RightPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Top padding", + "description": "", + "group": "Padding", + "extraInformation": [ + "Label" + ], + "name": "TopPadding" + }, + { + "value": "0", + "type": "Number", + "label": "Bottom padding", + "description": "", + "group": "Padding", + "extraInformation": [ + "Label" + ], + "name": "BottomPadding" + }, + { + "value": "0.25", + "type": "Number", + "label": "Hovered fade out duration (in seconds)", + "description": "", + "group": "", + "extraInformation": [], + "name": "HoveredFadeOutDuration" + } + ], + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "Label", + "smoothed": true, + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [], + "string": "Text", + "font": "", + "textAlignment": "", + "characterSize": 20, + "color": { + "b": 0, + "g": 0, + "r": 0 + }, + "content": { + "bold": false, + "isOutlineEnabled": false, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "255;255;255", + "outlineThickness": 2, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "Text", + "font": "", + "textAlignment": "", + "verticalTextAlignment": "top", + "characterSize": 20, + "color": "0;0;0" + } + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Idle", + "rightMargin": 0, + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [ + { + "folded": true, + "name": "State", + "type": "string", + "value": "Idle" + } + ], + "effects": [], + "behaviors": [ + { + "name": "ButtonFSM", + "type": "PanelSpriteButton::ButtonFSM", + "ShouldCheckHovering": true + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Hovered", + "rightMargin": 0, + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Tween", + "type": "Tween::TweenBehavior" + } + ] + }, + { + "assetStoreId": "", + "bottomMargin": 0, + "height": 32, + "leftMargin": 0, + "name": "Pressed", + "rightMargin": 0, + "texture": "", + "tiled": false, + "topMargin": 0, + "type": "PanelSpriteObject::PanelSprite", + "width": 32, + "variables": [], + "effects": [], + "behaviors": [] + } + ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Label" + }, + { + "objectName": "Idle" + }, + { + "objectName": "Hovered" + }, + { + "objectName": "Pressed" + } + ] + }, + "objectsGroups": [], + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "instances": [] + } + ] + }, + { + "author": "@Bouh", + "category": "User interface", + "extensionNamespace": "", + "fullName": "Time formatting", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWNsb2NrLWRpZ2l0YWwiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMiw2QTIsMiAwIDAsMCAwLDhWMTZBMiwyIDAgMCwwIDIsMThIMjJBMiwyIDAgMCwwIDI0LDE2VjhBMiwyIDAgMCwwIDIyLDZNMiw4SDIyVjE2SDJNMyw5VjEwLjVINi4yNUwzLDE1SDQuNzVMOCwxMC41VjlNOS4yNSw5VjEwLjVIMTAuNzVWOU0xMiw5VjEwLjVIMTMuNVYxNUgxNVY5TTE3LDlBMSwxIDAgMCwwIDE2LDEwVjE0QTEsMSAwIDAsMCAxNywxNUgyMEExLDEgMCAwLDAgMjEsMTRWMTBBMSwxIDAgMCwwIDIwLDlNMTcuNSwxMC41SDE5LjVWMTMuNUgxNy41TTkuMjUsMTMuNVYxNUgxMC43NVYxMy41IiAvPjwvc3ZnPg==", + "name": "TimeFormatter", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/clock-digital.svg", + "shortDescription": "Converts seconds into standard time formats, such as HH:MM:SS. ", + "version": "0.0.2", + "description": [ + "Ideal for displaying timers on screen.", + "", + "Formats included:", + "* HH:MM:SS", + "* HH:MM:SS.000 (displays milliseconds)" + ], + "origin": { + "identifier": "TimeFormatter", + "name": "gdevelop-extension-store" + }, + "tags": [ + "time", + "timer", + "format", + "hours", + "minutes", + "seconds", + "milliseconds" + ], + "authorIds": [ + "2OwwM8ToR9dx9RJ2sAKTcrLmCB92" + ], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [ + { + "description": "Format time in seconds to HH:MM:SS.", + "fullName": "Format time in seconds to HH:MM:SS", + "functionType": "StringExpression", + "name": "SecondsToHHMMSS", + "sentence": "Format time _PARAM1_ to HH:MM:SS in _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "var format_time = function (time_second) {\r", + " date = new Date(null);\r", + " date.setSeconds(time_second);\r", + " if (time_second >= 3600) {\r", + " return date.toISOString().substr(11, 8); // MM:SS\r", + " } else {\r", + " return date.toISOString().substr(14, 5); // HH:MM:SS\r", + " }\r", + "}\r", + "\r", + "eventsFunctionContext.returnValue = format_time(eventsFunctionContext.getArgument(\"TimeInSeconds\"));" + ], + "parameterObjects": "", + "useStrict": false, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Time, in seconds", + "name": "TimeInSeconds", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Format time in seconds to HH:MM:SS.000, including milliseconds.", + "fullName": "Format time in seconds to HH:MM:SS.000", + "functionType": "StringExpression", + "name": "SecondsToHHMMSS000", + "sentence": "Format time _PARAM1_ to HH:MM:SS in _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::JsCode", + "inlineCode": [ + "var format_time = function (time_second) {\r", + " date = new Date(null);\r", + " date.setMilliseconds(1000*time_second);\r", + " if (time_second >= 3600) {\r", + " return date.toISOString().substr(11, 12); // MM:SS.000\r", + " } else {\r", + " return date.toISOString().substr(14, 9); // HH:MM:SS.000\r", + " }\r", + "}\r", + "\r", + "eventsFunctionContext.returnValue = format_time(eventsFunctionContext.getArgument(\"TimeInSeconds\"));" + ], + "parameterObjects": "", + "useStrict": false, + "eventsSheetExpanded": false + } + ], + "expressionType": { + "type": "string" + }, + "parameters": [ + { + "description": "Time, in seconds", + "name": "TimeInSeconds", + "type": "expression" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [], + "eventsBasedObjects": [] + }, + { + "author": "VegeTato, arthuro555", + "category": "General", + "extensionNamespace": "", + "fullName": "Repeat every X seconds", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLXJlcGVhdCIgd2lkdGg9IjI0IiBoZWlnaHQ9IjI0IiB2aWV3Qm94PSIwIDAgMjQgMjQiPjxwYXRoIGQ9Ik0xNywxN0g3VjE0TDMsMThMNywyMlYxOUgxOVYxM0gxN003LDdIMTdWMTBMMjEsNkwxNywyVjVINVYxMUg3VjdaIiAvPjwvc3ZnPg==", + "name": "RepeatEveryXSeconds", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/repeat.svg", + "shortDescription": "Trigger an event every X seconds.", + "version": "0.1.1", + "description": "Convenience conditions, actions and behaviors for timers to trigger a condition every X seconds.", + "origin": { + "identifier": "RepeatEveryXSeconds", + "name": "gdevelop-extension-store" + }, + "tags": [ + "repeat", + "timer", + "time" + ], + "authorIds": [ + "ZgrsWuRTAkXgeuPV9bo0zuEcA2w1", + "IRIhkkTTl2UHhfjrLTTH5GYwkYu1", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [ + { + "description": "Triggers every X seconds.", + "fullName": "Repeat with a scene timer", + "functionType": "Condition", + "name": "Repeat", + "sentence": "Repeat every _PARAM2_ seconds using timer _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "CompareTimer" + }, + "parameters": [ + "", + "TimerName", + ">=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "player", + "TimerName" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__RepeatEveryXSeconds.Repetitions[TimerName]", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "TODO: It should keep the overflowing time to be more precise (it would need JavaScript)" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareTimer" + }, + "parameters": [ + "player", + "TimerName", + ">=", + "LoopDuration" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "player", + "TimerName" + ] + }, + { + "type": { + "value": "ModVarScene" + }, + "parameters": [ + "__RepeatEveryXSeconds.Repetitions[TimerName]", + "+", + "1" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Timer name used to loop", + "name": "TimerName", + "type": "string" + }, + { + "description": "Duration in seconds between each repetition", + "name": "LoopDuration", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the number of times the timer has repeated.", + "fullName": "Repetition number of a scene timer", + "functionType": "ExpressionAndCondition", + "name": "Repetition", + "sentence": "Repetition number of timer _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Variable(__RepeatEveryXSeconds.Repetitions[TimerName])" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Timer name used to loop", + "name": "TimerName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Triggers every X seconds X amount of times.", + "fullName": "Repeat with a scene timer X times", + "functionType": "Condition", + "name": "RepeatXTimes", + "sentence": "Repeat every _PARAM2_ seconds _PARAM3_ times using timer _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "MaxLoop", + "<", + "0" + ] + }, + { + "type": { + "value": "RepeatEveryXSeconds::Repetition" + }, + "parameters": [ + "", + "<", + "MaxLoop", + "TimerName", + "" + ] + } + ] + }, + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "TimerName", + "LoopDuration", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Timer name used to loop", + "name": "TimerName", + "type": "string" + }, + { + "description": "Duration in seconds between each repetition", + "name": "LoopDuration", + "type": "expression" + }, + { + "description": "The limit of loops", + "longDescription": "Maximum nuber of repetition (-1 to repeat forever).", + "name": "MaxLoop", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Reset repetition count of a scene timer.", + "fullName": "Reset repetition count of a scene timer", + "functionType": "Action", + "name": "DeleteTimer", + "sentence": "Reset repetition count for timer _PARAM1_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RemoveTimer" + }, + "parameters": [ + "player", + "TimerName" + ] + }, + { + "type": { + "value": "VariableRemoveChild" + }, + "parameters": [ + "__RepeatEveryXSeconds.Repetitions", + "TimerName" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Timer name used to loop", + "name": "TimerName", + "type": "string" + } + ], + "objectGroups": [] + } + ], + "eventsBasedBehaviors": [ + { + "description": "Allows to repeat an object timer every X seconds.", + "fullName": "Repeat every X seconds", + "name": "RepeatTimer", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "TimerName" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Triggers every X seconds.", + "fullName": "Repeat with an object timer", + "functionType": "Condition", + "group": "Timers", + "name": "Repeat2", + "sentence": "Repeat every _PARAM3_ seconds using timer _PARAM2_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "TimerName", + ">=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "TimerName" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__RepeatEveryXSeconds.Repetitions[TimerName]", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "TODO: It should keep the overflowing time to be more precise (it would need JavaScript)" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CompareObjectTimer" + }, + "parameters": [ + "Object", + "TimerName", + ">=", + "LoopDuration" + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "TimerName" + ] + }, + { + "type": { + "value": "ModVarObjet" + }, + "parameters": [ + "Object", + "__RepeatEveryXSeconds.Repetitions[TimerName]", + "+", + "1" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + }, + { + "description": "Timer name used to loop", + "name": "TimerName", + "type": "string" + }, + { + "description": "Duration in seconds between each repetition", + "name": "LoopDuration", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the number of times the timer has repeated.", + "fullName": "Repetition number of an object timer", + "functionType": "ExpressionAndCondition", + "group": "Timers", + "name": "Repetition", + "sentence": "Repetition number of timer _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Variable(__RepeatEveryXSeconds.Repetitions[TimerName])" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + }, + { + "description": "Timer name used to loop", + "name": "TimerName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Triggers every X seconds X amount of times.", + "fullName": "Repeat with an object timer X times", + "functionType": "Condition", + "group": "Timers", + "name": "RepeatXTimes", + "sentence": "Repeat every _PARAM3_ seconds _PARAM4_ times using timer _PARAM2_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "BuiltinCommonInstructions::CompareNumbers" + }, + "parameters": [ + "MaxLoop", + "<", + "0" + ] + }, + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::Repetition" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "MaxLoop", + "TimerName", + "" + ] + } + ] + }, + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::Repeat2" + }, + "parameters": [ + "Object", + "Behavior", + "TimerName", + "LoopDuration", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + }, + { + "description": "Timer name used to loop", + "name": "TimerName", + "type": "string" + }, + { + "description": "Duration in seconds between each repetition", + "name": "LoopDuration", + "type": "expression" + }, + { + "description": "The limit of loops", + "longDescription": "Maximum nuber of repetition (-1 to repeat forever).", + "name": "MaxLoop", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Reset repetition count of an object timer.", + "fullName": "Reset repetition count of an object timer", + "functionType": "Action", + "group": "Timers", + "name": "DeleteTimer", + "sentence": "Reset repetition count for timer _PARAM2_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RemoveObjectTimer" + }, + "parameters": [ + "Object", + "TimerName" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveChild" + }, + "parameters": [ + "Object", + "__RepeatEveryXSeconds.Repetitions", + "TimerName" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + }, + { + "description": "Timer name used to loop", + "name": "TimerName", + "type": "string" + } + ], + "objectGroups": [] + }, + { + "description": "Triggers every X seconds, where X is defined in the behavior properties.", + "fullName": "Repeat every X seconds (deprecated)", + "functionType": "Condition", + "name": "Repeat", + "private": true, + "sentence": "Recurring timer _PARAM1_ of _PARAM0_ has triggered", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "ObjectTimer" + }, + "parameters": [ + "Object", + "TimerName", + "TimerLength" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::PropertyLimit" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "-1" + ] + }, + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::PropertyCounter" + }, + "parameters": [ + "Object", + "Behavior", + "<", + "Limit" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ResetObjectTimer" + }, + "parameters": [ + "Object", + "TimerName" + ] + }, + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Pauses a recurring timer.", + "fullName": "Pause a recurring timer (deprecated)", + "functionType": "Action", + "name": "Pause", + "private": true, + "sentence": "Pause recurring timer _PARAM1_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PauseObjectTimer" + }, + "parameters": [ + "Object", + "TimerName" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Resumes a paused recurring timer.", + "fullName": "Resume a recurring timer (deprecated)", + "functionType": "Action", + "name": "Resume", + "private": true, + "sentence": "Resume recurring timer _PARAM1_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "UnPauseObjectTimer" + }, + "parameters": [ + "Object", + "TimerName" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Allows to trigger the recurring timer X times again.", + "fullName": "Reset the limit (deprecated)", + "functionType": "Action", + "name": "ResetLimit", + "private": true, + "sentence": "Allow to trigger the recurring timer _PARAM1_ of _PARAM0_ X times again", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "RepeatEveryXSeconds::RepeatTimer::SetPropertyCounter" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "RepeatEveryXSeconds::RepeatTimer", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "MyTimer", + "type": "String", + "label": "The name of the timer to repeat", + "description": "", + "group": "", + "extraInformation": [], + "deprecated": true, + "name": "TimerName" + }, + { + "value": "1", + "type": "Number", + "label": "The time between each trigger (in seconds)", + "description": "", + "group": "", + "extraInformation": [], + "deprecated": true, + "name": "TimerLength" + }, + { + "value": "-1", + "type": "Number", + "label": "How many times should the timer trigger? -1 for forever.", + "description": "", + "group": "", + "extraInformation": [], + "deprecated": true, + "name": "Limit" + }, + { + "value": "0", + "type": "Number", + "label": "An internal counter", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Counter" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "4ian", + "category": "Camera", + "extensionNamespace": "", + "fullName": "Parallax for Tiled Sprite", + "helpPath": "", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz48IURPQ1RZUEUgc3ZnIFBVQkxJQyAiLS8vVzNDLy9EVEQgU1ZHIDEuMS8vRU4iICJodHRwOi8vd3d3LnczLm9yZy9HcmFwaGljcy9TVkcvMS4xL0RURC9zdmcxMS5kdGQiPjxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB4bWxuczp4bGluaz0iaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIgdmVyc2lvbj0iMS4xIiBpZD0ibWRpLWltYWdlLW1vdmUiIHdpZHRoPSIyNCIgaGVpZ2h0PSIyNCIgdmlld0JveD0iMCAwIDI0IDI0Ij48cGF0aCBkPSJNMTUsM0gxOVYwTDI0LDVMMTksMTBWN0gxNVYzTTIxLDExLjk0VjE5QTIsMiAwIDAsMSAxOSwyMUg1QTIsMiAwIDAsMSAzLDE5VjVBMiwyIDAgMCwxIDUsM0gxMi4wNkMxMiwzLjMzIDEyLDMuNjcgMTIsNEE4LDggMCAwLDAgMjAsMTJDMjAuMzMsMTIgMjAuNjcsMTIgMjEsMTEuOTRNMTksMThMMTQuNSwxMkwxMSwxNi41TDguNSwxMy41TDUsMThIMTlaIiAvPjwvc3ZnPg==", + "name": "Parallax", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/image-move.svg", + "shortDescription": "Behaviors to animate Tiled Sprite objects in the background, following the camera with a parallax effect.", + "version": "2.0.0", + "description": [ + "Behaviors to animate Tiled Sprite objects in the background, following the camera with a parallax effect.", + "", + "Breaking changes", + "- 2.0.1", + " - The parallax now starts with an offset of 0." + ], + "origin": { + "identifier": "Parallax", + "name": "gdevelop-extension-store" + }, + "tags": [ + "parallax", + "tiled", + "background" + ], + "authorIds": [ + "wWP8BSlAW0UP4NeaHa2LcmmDzmH2", + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Move the image of a Tiled Sprite to follow the camera horizontally with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").", + "fullName": "Horizontal Parallax for a Tiled Sprite", + "name": "HorizontalTiledSpriteParallax", + "objectType": "TiledSpriteObject::TiledSprite", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "- The left side of the camera is used to have the left side of the image at X = 0 in the scene.\n This also allows the image to keep the same location when the window ratio changes.\n\n- The camera left side is calculated for a zoom of 1 instead of using CameraBorderLeft() that use the current zoom.\n It allows the image to keep the same location when the zoom change.\n\n(CameraCenterX(FollowedLayer) - CameraWidth(FollowedLayer) / 2 * CameraZoom(FollowedLayer)) * ParallaxFactor\n\nWhen a zoom changes, the object size in the scene also change to cover the screen.\nThis part of the formula takes this into account:\n\n(CameraZoom(Object.Layer()) - 1) * CameraWidth(Object.Layer()) / 2\n" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledSpriteObject::XOffset" + }, + "parameters": [ + "Object", + "=", + "(CameraCenterX(FollowedLayer) - CameraWidth(FollowedLayer) / 2 * CameraZoom(FollowedLayer)) * ParallaxFactor + (CameraZoom(Object.Layer()) - 1) * CameraWidth(Object.Layer()) / 2" + ] + }, + { + "type": { + "value": "MettreX" + }, + "parameters": [ + "Object", + "=", + "CameraBorderLeft(Object.Layer())" + ] + }, + { + "type": { + "value": "ResizableCapability::ResizableBehavior::SetWidth" + }, + "parameters": [ + "Object", + "Resizable", + "=", + "CameraWidth(Object.Layer())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Parallax::HorizontalTiledSpriteParallax", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0.5", + "type": "Number", + "label": "Parallax factor (speed for the parallax, usually between 0 and 1)", + "description": "", + "group": "", + "extraInformation": [], + "name": "ParallaxFactor" + }, + { + "value": "", + "type": "String", + "label": "Layer to be followed (leave empty for the base layer)", + "description": "", + "group": "", + "extraInformation": [], + "name": "FollowedLayer" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Move the image of a Tiled Sprite to follow the camera vertically with a parallax effect. After adding this to an object, put the object on a layer that is not moving, behind the layer that is followed (for example, a layer called \"Background\").", + "fullName": "Vertical Parallax for a Tiled Sprite", + "name": "VerticalTiledSpriteParallax", + "objectType": "TiledSpriteObject::TiledSprite", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "See the comment in the other behavior for an explanation of this formula." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TiledSpriteObject::YOffset" + }, + "parameters": [ + "Object", + "=", + "(CameraCenterY(FollowedLayer) - CameraHeight(FollowedLayer) / 2 * CameraZoom(FollowedLayer)) * ParallaxFactor + (CameraZoom(Object.Layer()) - 1) * CameraHeight(Object.Layer()) / 2 + OffsetY" + ] + }, + { + "type": { + "value": "MettreY" + }, + "parameters": [ + "Object", + "=", + "CameraBorderTop(Object.Layer())" + ] + }, + { + "type": { + "value": "ResizableCapability::ResizableBehavior::SetHeight" + }, + "parameters": [ + "Object", + "Resizable", + "=", + "CameraHeight(Object.Layer())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "TiledSpriteObject::TiledSprite", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "Parallax::VerticalTiledSpriteParallax", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0.5", + "type": "Number", + "label": "Parallax factor (speed for the parallax, usually between 0 and 1)", + "description": "", + "group": "", + "extraInformation": [], + "name": "ParallaxFactor" + }, + { + "value": "", + "type": "String", + "label": "Layer to be followed (leave empty for the base layer)", + "description": "", + "group": "", + "extraInformation": [], + "name": "FollowedLayer" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Offset on Y axis", + "description": "", + "group": "", + "extraInformation": [], + "name": "OffsetY" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + }, + { + "author": "", + "category": "Camera", + "extensionNamespace": "", + "fullName": "Smooth Camera", + "helpPath": "/tutorials/follow-player-with-camera/", + "iconUrl": "data:image/svg+xml;base64,PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0idXRmLTgiPz4NCjwhLS0gR2VuZXJhdG9yOiBBZG9iZSBJbGx1c3RyYXRvciAyMy4wLjMsIFNWRyBFeHBvcnQgUGx1Zy1JbiAuIFNWRyBWZXJzaW9uOiA2LjAwIEJ1aWxkIDApICAtLT4NCjxzdmcgdmVyc2lvbj0iMS4xIiBpZD0iSWNvbnMiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIgeG1sbnM6eGxpbms9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiIHg9IjBweCIgeT0iMHB4Ig0KCSB2aWV3Qm94PSIwIDAgMzIgMzIiIHN0eWxlPSJlbmFibGUtYmFja2dyb3VuZDpuZXcgMCAwIDMyIDMyOyIgeG1sOnNwYWNlPSJwcmVzZXJ2ZSI+DQo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPg0KCS5zdDB7ZmlsbDpub25lO3N0cm9rZTojMDAwMDAwO3N0cm9rZS13aWR0aDoyO3N0cm9rZS1saW5lY2FwOnJvdW5kO3N0cm9rZS1saW5lam9pbjpyb3VuZDtzdHJva2UtbWl0ZXJsaW1pdDoxMDt9DQoJLnN0MXtmaWxsOm5vbmU7c3Ryb2tlOiMwMDAwMDA7c3Ryb2tlLXdpZHRoOjI7c3Ryb2tlLWxpbmVqb2luOnJvdW5kO3N0cm9rZS1taXRlcmxpbWl0OjEwO30NCjwvc3R5bGU+DQo8cGF0aCBjbGFzcz0ic3QwIiBkPSJNMjQsMTNoLTZjLTEuMSwwLTItMC45LTItMlY1YzAtMS4xLDAuOS0yLDItMmg2YzEuMSwwLDIsMC45LDIsMnY2QzI2LDEyLjEsMjUuMSwxMywyNCwxM3oiLz4NCjxwYXRoIGNsYXNzPSJzdDAiIGQ9Ik0yNiw4djEwYzAsMS4xLTAuOSwyLTIsMkg4Yy0xLjEsMC0yLTAuOS0yLTJWOGMwLTEuMSwwLjktMiwyLTJoOCIvPg0KPGNpcmNsZSBjbGFzcz0ic3QwIiBjeD0iMjEiIGN5PSI4IiByPSIyIi8+DQo8Y2lyY2xlIGNsYXNzPSJzdDAiIGN4PSIxMSIgY3k9IjE2IiByPSIxIi8+DQo8cmVjdCB4PSI5IiB5PSI5IiBjbGFzcz0ic3QwIiB3aWR0aD0iNCIgaGVpZ2h0PSIzIi8+DQo8cG9seWxpbmUgY2xhc3M9InN0MCIgcG9pbnRzPSIyMSwyOSAyMSwyOSAxMSwyOSAxMSwyOSAiLz4NCjxwb2x5bGluZSBjbGFzcz0ic3QwIiBwb2ludHM9IjE4LDIwIDE4LDI5IDE0LDI5IDE0LDIwICIvPg0KPHJlY3QgeD0iNyIgeT0iMyIgY2xhc3M9InN0MCIgd2lkdGg9IjQiIGhlaWdodD0iMyIvPg0KPC9zdmc+DQo=", + "name": "SmoothCamera", + "previewIconUrl": "https://resources.gdevelop-app.com/assets/Icons/Line Hero Pack/Master/SVG/Computers and Hardware/Computers and Hardware_camcoder_gopro_go_pro_camera.svg", + "shortDescription": "Smoothly scroll to follow an object.", + "version": "0.3.1", + "description": [ + "The camera follows an object according to:", + "- a frame rate independent catch-up speed to make the scrolling from smooth to strong", + "- a maximum speed to do linear following ([open the project online](https://editor.gdevelop.io/?project=example://platformer-with-tilemap)) or slow down the camera when teleporting the object", + "- a follow-free zone to avoid scrolling on small movements", + "- an offset to see further in one direction", + "- an extra delay and catch-up speed to give an impression of speed (useful for dash)", + "- position forecasting and delay to simulate a cameraman response time", + "", + "A platformer dedicated behavior allows to switch of settings when the character is in air or on the floor. This can be used to stabilize the camera when jumping." + ], + "origin": { + "identifier": "SmoothCamera", + "name": "gdevelop-extension-store" + }, + "tags": [ + "camera", + "scrolling", + "follow", + "smooth", + "platformer", + "platform" + ], + "authorIds": [ + "IWykYNRvhCZBN3vEgKEbBPOR3Oc2" + ], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "Smoothly scroll to follow an object.", + "fullName": "Smooth Camera", + "name": "SmoothCamera", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Update private properties through setters to check their values and initialize state." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetLeftwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyLeftwardSpeed()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetRightwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyRightwardSpeed()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyUpwardSpeed()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyDownwardSpeed()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetLeftwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyLeftwardSpeedMax()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetRightwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyRightwardSpeedMax()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyUpwardSpeedMax()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyDownwardSpeedMax()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaLeft" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyFollowFreeAreaLeft()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaRight" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyFollowFreeAreaRight()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyFollowFreeAreaTop()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Behavior::PropertyFollowFreeAreaBottom()", + "log(1 - )" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyCameraDelay()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::PropertyIsCalledManually" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::DoMoveCameraCloser" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Move the camera closer to the object. This action must be called after the object has moved for the frame.", + "fullName": "Move the camera closer", + "functionType": "Action", + "name": "MoveCameraCloser", + "sentence": "Move the camera closer to _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The camera following is called with an action, the call from doStepPreEvents must be disabled to avoid to do it twice." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIsCalledManually" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::DoMoveCameraCloser" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Move the camera closer to the object.", + "fullName": "Do move the camera closer", + "functionType": "Action", + "name": "DoMoveCameraCloser", + "private": true, + "sentence": "Do move the camera closer _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Delaying and forecasting can be used at the same time.\nForecasting only use the positions that are older than the one used for delaying.\nThe behavior uses a position history that is split in 2 arrays:\n- one for delaying the position (from TimeFromStart to TimeFromStart - CamearDelay)\n- one for forecasting the position (from TimeFromStart - CamearDelay to TimeFromStart - CamearDelay - ForecastHistoryDuration" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::UpdateDelayedPosition" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::UpdateForecastedPosition" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "At each frame, the camera must catchup the target by a given ratio (speed)\ncameraX(t) - targetX = (cameraX(t - 1) - targetX) * speed\n\nThe frame rate must not impact on the catch-up speed, we don't want a speed in ratio per frame but a speed ratio per second, like this:\ncameraX(t) - targetX = (cameraX(t - 1s) - targetX) * speed\n\nOk, but we still need to process each frame, we can use a exponent for this:\ncameraX(t) - targetX = (cameraX(t - timeDelta) - targetX) * speed^timeDelta\ncameraX(t) = targetX + (cameraX(t - timeDelta) - targetX) * exp(timeDelta * ln(speed))\n\npow is probably more efficient than precalculated log if the speed is changed continuously but this might be rare enough." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowOnX" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyOldX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "CameraX(Object.Layer(), 0)" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraX" + }, + "parameters": [ + "", + ">", + "Object.Behavior::FreeAreaRight()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraX" + }, + "parameters": [ + "", + "=", + "Object.Behavior::FreeAreaRight()\n+ (CameraX(Object.Layer(), 0) - Object.Behavior::FreeAreaRight())\n* exp(TimeDelta() * Object.Behavior::PropertyLogLeftwardSpeed())", + "Object.Layer()", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraX" + }, + "parameters": [ + "", + "<", + "Object.Behavior::PropertyOldX() - Object.Behavior::PropertyLeftwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraX" + }, + "parameters": [ + "", + "=", + "Object.Behavior::PropertyOldX() - Object.Behavior::PropertyLeftwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraX" + }, + "parameters": [ + "", + "<", + "Object.Behavior::FreeAreaLeft()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraX" + }, + "parameters": [ + "", + "=", + "Object.Behavior::FreeAreaLeft()\n+ (CameraX(Object.Layer(), 0) - Object.Behavior::FreeAreaLeft())\n* exp(TimeDelta() * Object.Behavior::PropertyLogRightwardSpeed())", + "Object.Layer()", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraX" + }, + "parameters": [ + "", + ">", + "Object.Behavior::PropertyOldX() + Object.Behavior::PropertyRightwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraX" + }, + "parameters": [ + "", + "=", + "Object.Behavior::PropertyOldX() + Object.Behavior::PropertyRightwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowOnY" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyOldY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "CameraY(Object.Layer(), 0)" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraY" + }, + "parameters": [ + "", + ">", + "Object.Behavior::FreeAreaBottom()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraY" + }, + "parameters": [ + "", + "=", + "Object.Behavior::FreeAreaBottom()\n+ (CameraY(Object.Layer(), 0) - Object.Behavior::FreeAreaBottom())\n* exp(TimeDelta() * Object.Behavior::PropertyLogUpwardSpeed())", + "Object.Layer()", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraY" + }, + "parameters": [ + "", + "<", + "Object.Behavior::PropertyOldY() - Object.Behavior::PropertyUpwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraY" + }, + "parameters": [ + "", + "=", + "Object.Behavior::PropertyOldY() - Object.Behavior::PropertyUpwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraY" + }, + "parameters": [ + "", + "<", + "Object.Behavior::FreeAreaTop()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraY" + }, + "parameters": [ + "", + "=", + "Object.Behavior::FreeAreaTop()\n+ (CameraY(Object.Layer(), 0) - Object.Behavior::FreeAreaTop())\n* exp(TimeDelta() * Object.Behavior::PropertyLogDownwardSpeed())", + "Object.Layer()", + "0" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "CameraY" + }, + "parameters": [ + "", + ">", + "Object.Behavior::PropertyOldY() + Object.Behavior::PropertyDownwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetCameraY" + }, + "parameters": [ + "", + "=", + "Object.Behavior::PropertyOldY() + Object.Behavior::PropertyDownwardSpeedMax() * TimeDelta()", + "Object.Layer()", + "0" + ] + } + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Delay the camera according to a maximum speed and catch up the delay.", + "fullName": "Wait and catch up", + "functionType": "Action", + "name": "WaitAndCatchUp", + "sentence": "Delay the camera of _PARAM0_ during: _PARAM2_ seconds according to the maximum speed _PARAM3_;_PARAM4_ seconds and catch up in _PARAM5_ seconds", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Maybe the catch-up show be done in constant pixel speed instead of constant time speed." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyWaitingEnd" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "TimeFromStart() + GetArgumentAsNumber(\"WaitingDuration\")" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyWaitingSpeedXMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"WaitingSpeedXMax\")" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyWaitingSpeedYMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"WaitingSpeedYMax\")" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelayCatchUpDuration" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"CatchUpDuration\")" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Wait and catch up\"", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Waiting duration (in seconds)", + "name": "WaitingDuration", + "type": "expression" + }, + { + "description": "Waiting maximum camera target speed X", + "name": "WaitingSpeedXMax", + "type": "expression" + }, + { + "description": "Waiting maximum camera target speed Y", + "name": "WaitingSpeedYMax", + "type": "expression" + }, + { + "description": "Catch up duration (in seconds)", + "name": "CatchUpDuration", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Draw the targeted and actual camera position.", + "fullName": "Draw debug", + "functionType": "Action", + "name": "DrawDebug", + "sentence": "Draw targeted and actual camera position for _PARAM0_ on _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::FillOpacity" + }, + "parameters": [ + "ShapePainter", + "=", + "0" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Path used by the forecasting", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::OutlineColor" + }, + "parameters": [ + "ShapePainter", + "\"245;166;35\"" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::BeginFillPath" + }, + "parameters": [ + "ShapePainter", + "Object.Variable(__SmoothCamera.ForecastHistoryX[0])", + "Object.Variable(__SmoothCamera.ForecastHistoryY[0])" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::PathLineTo" + }, + "parameters": [ + "ShapePainter", + "Object.Variable(__SmoothCamera.ForecastHistoryX[Object.Behavior::PropertyIndex()])", + "Object.Variable(__SmoothCamera.ForecastHistoryY[Object.Behavior::PropertyIndex()])" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::EndFillPath" + }, + "parameters": [ + "ShapePainter" + ] + } + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Follow-free area.", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaLeft" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaRight" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyFollowFreeAreaBottom" + }, + "parameters": [ + "Object", + "Behavior", + "!=", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::OutlineColor" + }, + "parameters": [ + "ShapePainter", + "\"126;211;33\"" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::Rectangle" + }, + "parameters": [ + "ShapePainter", + "Object.Behavior::FreeAreaLeft() - 1", + "Object.Behavior::FreeAreaTop() - 1", + "Object.Behavior::FreeAreaRight() + 1", + "Object.Behavior::FreeAreaBottom() + 1" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Linear regression vector used by the forecasting.", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::OutlineColor" + }, + "parameters": [ + "ShapePainter", + "\"208;2;27\"" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::LineV2" + }, + "parameters": [ + "ShapePainter", + "Object.Behavior::PropertyProjectedOldestX()", + "Object.Behavior::PropertyProjectedOldestY()", + "Object.Behavior::PropertyProjectedNewestX()", + "Object.Behavior::PropertyProjectedNewestY()", + "1" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Targeted and actual camera position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PrimitiveDrawing::Circle" + }, + "parameters": [ + "ShapePainter", + "Object.Behavior::PropertyForecastedX()", + "Object.Behavior::PropertyForecastedY()", + "3" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::LineV2" + }, + "parameters": [ + "ShapePainter", + "CameraX(Object.Layer(), 0)", + "CameraY(Object.Layer(), 0) - 4", + "CameraX(Object.Layer(), 0)", + "CameraY(Object.Layer(), 0) + 4", + "1" + ] + }, + { + "type": { + "value": "PrimitiveDrawing::LineV2" + }, + "parameters": [ + "ShapePainter", + "CameraX(Object.Layer(), 0) - 4", + "CameraY(Object.Layer(), 0)", + "CameraX(Object.Layer(), 0) + 4", + "CameraY(Object.Layer(), 0)", + "1" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Shape painter", + "name": "ShapePainter", + "supplementaryInformation": "PrimitiveDrawing::Drawer", + "type": "objectList" + } + ], + "objectGroups": [] + }, + { + "description": "Enable or disable the following on X axis.", + "fullName": "Follow on X", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowOnX", + "sentence": "The camera follows _PARAM0_ on X axis: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnX" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"FollowOnX\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnX" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow on X axis", + "name": "FollowOnX", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Enable or disable the following on Y axis.", + "fullName": "Follow on Y", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowOnY", + "sentence": "The camera follows _PARAM0_ on Y axis: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnY" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GetArgumentAsBoolean" + }, + "parameters": [ + "\"FollowOnY\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowOnY" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow on Y axis", + "name": "FollowOnY", + "type": "yesorno" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera follow free area right border.", + "fullName": "Follow free area right border", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowFreeAreaRight", + "sentence": "Change the camera follow free area right border of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"SetFollowFreeAreaRight\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow free area right border", + "name": "SetFollowFreeAreaRight", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera follow free area left border.", + "fullName": "Follow free area left border", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowFreeAreaLeft", + "sentence": "Change the camera follow free area left border of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"SetFollowFreeAreaLeft\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow free area left border", + "name": "SetFollowFreeAreaLeft", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera follow free area top border.", + "fullName": "Follow free area top border", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowFreeAreaTop", + "sentence": "Change the camera follow free area top border of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"FollowFreeAreaTop\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow free area top border", + "name": "FollowFreeAreaTop", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera follow free area bottom border.", + "fullName": "Follow free area bottom border", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetFollowFreeAreaBottom", + "sentence": "Change the camera follow free area bottom border of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyFollowFreeAreaBottom" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"SetFollowFreeAreaBottom\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Follow free area bottom border", + "name": "SetFollowFreeAreaBottom", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera leftward maximum speed (in pixels per second).", + "fullName": "Leftward maximum speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetLeftwardSpeedMax", + "sentence": "Change the camera leftward maximum speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"Speed\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Leftward maximum speed (in ratio per second)", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera rightward maximum speed (in pixels per second).", + "fullName": "Rightward maximum speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetRightwardSpeedMax", + "sentence": "Change the camera rightward maximum speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"Speed\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Rightward maximum speed (in pixels per second)", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera upward maximum speed (in pixels per second).", + "fullName": "Upward maximum speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetUpwardSpeedMax", + "sentence": "Change the camera upward maximum speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyUpwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"Speed\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Upward maximum speed (in pixels per second)", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera downward maximum speed (in pixels per second).", + "fullName": "Downward maximum speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetDownwardSpeedMax", + "sentence": "Change the camera downward maximum speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDownwardSpeedMax" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, GetArgumentAsNumber(\"Speed\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Downward maximum speed (in pixels per second)", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera leftward catch-up speed (in ratio per second).", + "fullName": "Leftward catch-up speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetLeftwardSpeed", + "sentence": "Change the camera leftward catch-up speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLeftwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(0, 1, GetArgumentAsNumber(\"LeftwardSpeed\"))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLogLeftwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "log(1 - Object.Behavior::PropertyLeftwardSpeed())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Leftward catch-up speed (in ratio per second)", + "name": "LeftwardSpeed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera rightward catch-up speed (in ratio per second).", + "fullName": "Rightward catch-up speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetRightwardSpeed", + "sentence": "Change the camera rightward catch-up speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyRightwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(0, 1, GetArgumentAsNumber(\"RightwardSpeed\"))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLogRightwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "log(1 - Object.Behavior::PropertyRightwardSpeed())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Rightward catch-up speed (in ratio per second)", + "name": "RightwardSpeed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera downward catch-up speed (in ratio per second).", + "fullName": "Downward catch-up speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetDownwardSpeed", + "sentence": "Change the camera downward catch-up speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDownwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(0, 1, GetArgumentAsNumber(\"DownwardSpeed\"))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLogDownwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "log(1 - Object.Behavior::PropertyDownwardSpeed())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Downward catch-up speed (in ratio per second)", + "name": "DownwardSpeed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera upward catch-up speed (in ratio per second).", + "fullName": "Upward catch-up speed", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetUpwardSpeed", + "sentence": "Change the camera upward catch-up speed of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyUpwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "clamp(0, 1, GetArgumentAsNumber(\"UpwardSpeed\"))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyLogUpwardSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "log(1 - Object.Behavior::PropertyUpwardSpeed())" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Upward catch-up speed (in ratio per second)", + "name": "UpwardSpeed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the camera offset on X axis of the object. This is not the current difference between the object and the camera position.", + "fullName": "Camera offset X", + "functionType": "ExpressionAndCondition", + "group": "Camera configuration", + "name": "OffsetX", + "sentence": "the camera offset on X axis", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCameraOffsetX()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "OffsetX", + "name": "SetOffsetXOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraOffsetX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera offset on X axis of an object.", + "fullName": "Camera Offset X", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetOffsetX", + "private": true, + "sentence": "Change the camera offset on X axis of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Deprecated use SetOffsetXOp instead." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetOffsetXOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"CameraOffsetX\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Camera offset X", + "name": "CameraOffsetX", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the camera offset on Y axis of the object. This is not the current difference between the object and the camera position.", + "fullName": "Camera offset Y", + "functionType": "ExpressionAndCondition", + "group": "Camera configuration", + "name": "OffsetY", + "sentence": "the camera offset on Y axis", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCameraOffsetY()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "OffsetY", + "name": "SetOffsetYOp", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Deprecated use SetOffsetYOp instead." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraOffsetY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"Value\")" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera offset on Y axis of an object.", + "fullName": "Camera Offset Y", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetOffsetY", + "private": true, + "sentence": "Change the camera offset on Y axis of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetOffsetYOp" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"CameraOffsetY\")", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Camera offset Y", + "name": "CameraOffsetY", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera forecast time (in seconds).", + "fullName": "Forecast time", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetForecastTime", + "sentence": "Change the camera forecast time of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastTime" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(0, GetArgumentAsNumber(\"ForecastTime\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Forecast time", + "name": "ForecastTime", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Change the camera delay (in seconds).", + "fullName": "Camera delay", + "functionType": "Action", + "group": "Camera configuration", + "name": "SetCameraDelay", + "sentence": "Change the camera delay of _PARAM0_: _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "min(0, GetArgumentAsNumber(\"CameraDelay\"))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Camera delay", + "name": "CameraDelay", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return follow free area left border X.", + "fullName": "Free area left", + "functionType": "Expression", + "group": "Private", + "name": "FreeAreaLeft", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyForecastedX() + Object.Behavior::PropertyCameraOffsetX() - Object.Behavior::PropertyFollowFreeAreaLeft()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return follow free area right border X.", + "fullName": "Free area right", + "functionType": "Expression", + "group": "Private", + "name": "FreeAreaRight", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyForecastedX() + Object.Behavior::PropertyCameraOffsetX() + Object.Behavior::PropertyFollowFreeAreaRight()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return follow free area bottom border Y.", + "fullName": "Free area bottom", + "functionType": "Expression", + "group": "Private", + "name": "FreeAreaBottom", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyForecastedY() + Object.Behavior::PropertyCameraOffsetY() + Object.Behavior::PropertyFollowFreeAreaBottom()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return follow free area top border Y.", + "fullName": "Free area top", + "functionType": "Expression", + "group": "Private", + "name": "FreeAreaTop", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyForecastedY() + Object.Behavior::PropertyCameraOffsetY() - Object.Behavior::PropertyFollowFreeAreaTop()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Update delayed position and delayed history. This is called in doStepPreEvents.", + "fullName": "Update delayed position", + "functionType": "Action", + "group": "Private", + "name": "UpdateDelayedPosition", + "private": true, + "sentence": "Update delayed position and delayed history of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add the previous position to have enough (2) positions to evaluate the extra delay for waiting mode." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ObjectTime)", + "=", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime", + "TimeFromStart()" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectX", + "Object.Behavior::PropertyDelayedCenterX()" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectY", + "Object.Behavior::PropertyDelayedCenterY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Use the object center when no delay is asked." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.CenterX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.CenterY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::IsDelayed" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::AddForecastHistoryPosition" + }, + "parameters": [ + "Object", + "Behavior", + "TimeFromStart()", + "Object.CenterX()", + "Object.CenterY()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::IsDelayed" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime", + "TimeFromStart()" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectX", + "Object.CenterX()" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectY", + "Object.CenterY()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Remove history entries that are too old to be useful for delaying and pass it to the history for forecasting." + }, + { + "infiniteLoopWarning": true, + "type": "BuiltinCommonInstructions::While", + "whileConditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ObjectTime)", + ">=", + "2" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime[1]", + "<", + "TimeFromStart() - Object.Behavior::CurrentDelay()" + ] + } + ], + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::AddForecastHistoryPosition" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Variable(__SmoothCamera.ObjectTime[0])", + "Object.Variable(__SmoothCamera.ObjectX[0])", + "Object.Variable(__SmoothCamera.ObjectY[0])", + "" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime", + "0" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectX", + "0" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectY", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Don't move the camera if there is not enough history." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Variable(__SmoothCamera.ObjectX[0])" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Variable(__SmoothCamera.ObjectY[0])" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ObjectTime)", + ">=", + "2" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime[0]", + "<", + "TimeFromStart() - Object.Behavior::CurrentDelay()" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Add the extra delay that could be needed to respect the speed limit in waiting mode.\n\nspeedRatio = min(speedMaxX / historySpeedX, speedMaxY / historySpeedY)\ndelay += min(0, timeDelta * (1 - speedRatio))" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraExtraDelay" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "max(0, TimeDelta() * (1 - min(Object.Behavior::PropertyWaitingSpeedXMax() * abs(Object.Variable(__SmoothCamera.ObjectX[1]) - Object.Variable(__SmoothCamera.ObjectX[0])), Object.Behavior::PropertyWaitingSpeedYMax() * abs(Object.Variable(__SmoothCamera.ObjectY[1]) - Object.Variable(__SmoothCamera.ObjectY[0]))) / (Object.Variable(__SmoothCamera.ObjectTime[1]) - Object.Variable(__SmoothCamera.ObjectTime[0]))))" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Extra delay: \" + ToString(Object.Behavior::PropertyCameraExtraDelay())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "The time with delay is now between the first 2 indexes" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "lerp(Object.Variable(__SmoothCamera.ObjectX[1]), Object.Variable(__SmoothCamera.ObjectX[0]), ((TimeFromStart() - Object.Behavior::CurrentDelay()) - Object.Variable(__SmoothCamera.ObjectTime[1])) / (Object.Variable(__SmoothCamera.ObjectTime[0]) - Object.Variable(__SmoothCamera.ObjectTime[1])))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyDelayedCenterY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "lerp(Object.Variable(__SmoothCamera.ObjectY[1]), Object.Variable(__SmoothCamera.ObjectY[0]), ((TimeFromStart() - Object.Behavior::CurrentDelay()) - Object.Variable(__SmoothCamera.ObjectTime[1])) / (Object.Variable(__SmoothCamera.ObjectTime[0]) - Object.Variable(__SmoothCamera.ObjectTime[1])))" + ] + } + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::IsDelayed" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "ObjectVariableClearChildren" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectTime" + ] + }, + { + "type": { + "value": "ObjectVariableClearChildren" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectX" + ] + }, + { + "type": { + "value": "ObjectVariableClearChildren" + }, + "parameters": [ + "Object", + "__SmoothCamera.ObjectY" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraDelayCatchUpSpeed" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyCameraExtraDelay() / Object.Behavior::PropertyCameraDelayCatchUpDuration()" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Start to catch up\"", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SmoothCamera::SmoothCamera::IsWaiting" + }, + "parameters": [ + "Object", + "Behavior", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyCameraExtraDelay" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyCameraExtraDelay" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "max(0, Object.Behavior::PropertyCameraExtraDelay() -Object.Behavior::PropertyCameraDelayCatchUpSpeed() * TimeDelta())" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Catching up delay: \" + ToString(Object.Behavior::PropertyCameraExtraDelay())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the camera following target is delayed from the object.", + "fullName": "Camera is delayed", + "functionType": "Condition", + "name": "IsDelayed", + "private": true, + "sentence": "The camera of _PARAM0_ is delayed", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.Behavior::CurrentDelay()", + ">", + "0" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Return the current camera delay.", + "fullName": "Current delay", + "functionType": "Expression", + "name": "CurrentDelay", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Object.Behavior::PropertyCameraDelay() + Object.Behavior::PropertyCameraExtraDelay()" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the camera following is waiting at a reduced speed.", + "fullName": "Camera is waiting", + "functionType": "Condition", + "name": "IsWaiting", + "private": true, + "sentence": "The camera of _PARAM0_ is waiting", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyWaitingEnd" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "TimeFromStart()" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Add a position to the history for forecasting. This is called 2 times in UpadteDelayedPosition.", + "fullName": "Add forecast history position", + "functionType": "Action", + "group": "Private", + "name": "AddForecastHistoryPosition", + "private": true, + "sentence": "Add the time:_PARAM2_ and position: _PARAM3_; _PARAM4_ to the forecast history of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyForecastHistoryDuration" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyForecastTime" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryTime", + "GetArgumentAsNumber(\"Time\")" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryX", + "GetArgumentAsNumber(\"ObjectX\")" + ] + }, + { + "type": { + "value": "ObjectVariablePushNumber" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryY", + "GetArgumentAsNumber(\"ObjectY\")" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Remove history entries that are too old to be useful.\nKeep at least 2 positions because no forecast can be done with less positions." + }, + { + "infiniteLoopWarning": true, + "type": "BuiltinCommonInstructions::While", + "whileConditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)", + ">=", + "3" + ] + }, + { + "type": { + "value": "VarObjet" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryTime[0]", + "<", + "TimeFromStart() - Object.Behavior::PropertyCameraDelay() - Object.Behavior::PropertyCameraExtraDelay() - Object.Behavior::PropertyForecastHistoryDuration()" + ] + } + ], + "conditions": [], + "actions": [ + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryTime", + "0" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryX", + "0" + ] + }, + { + "type": { + "value": "ObjectVariableRemoveAt" + }, + "parameters": [ + "Object", + "__SmoothCamera.ForecastHistoryY", + "0" + ] + } + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "Time", + "name": "Time", + "type": "expression" + }, + { + "description": "Object X", + "name": "ObjectX", + "type": "expression" + }, + { + "description": "Object Y", + "name": "ObjectY", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Update forecasted position. This is called in doStepPreEvents.", + "fullName": "Update forecasted position", + "functionType": "Action", + "group": "Private", + "name": "UpdateForecastedPosition", + "private": true, + "sentence": "Update forecasted position of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyDelayedCenterX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyDelayedCenterY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Simple linear regression\ny = A * x + B\n\nA = Covariance / VarianceX\nB = MeanY - A * MeanX\n\nNote than we could use only one position every N positions to reduce the process time,\nbut if we really need efficient process JavaScript and circular queues are a must." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime)", + ">=", + "2" + ] + }, + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyForecastHistoryDuration" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::PropertyForecastTime" + }, + "parameters": [ + "Object", + "Behavior", + ">", + "0" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Mean X", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Variable(__SmoothCamera.ForecastHistoryX[Object.Behavior::PropertyIndex()])" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanX" + }, + "parameters": [ + "Object", + "Behavior", + "/", + "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Mean Y", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "Object.Variable(__SmoothCamera.ForecastHistoryY[Object.Behavior::PropertyIndex()])" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryMeanY" + }, + "parameters": [ + "Object", + "Behavior", + "/", + "Object.VariableChildCount(__SmoothCamera.ForecastHistoryY)" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Mean: \" + ToString(Object.Behavior::PropertyForecastHistoryMeanX()) + \" \" + ToString(Object.Behavior::PropertyForecastHistoryMeanY())", + "", + "" + ] + } + ] + } + ], + "parameters": [] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Variance and Covariance", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "VarianceX = sum((X[i] - MeanX)²)\nVarianceY = sum((Y[i] - MeanY)²)\nCovariance = sum((X[i] - MeanX) * (Y[i] - MeanY))" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryCovariance" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "0" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Repeat", + "repeatExpression": "Object.VariableChildCount(__SmoothCamera.ForecastHistoryX)", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceX" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "pow(Object.Variable(__SmoothCamera.ForecastHistoryX[Object.Behavior::PropertyIndex()]) - Object.Behavior::PropertyForecastHistoryMeanX(), 2)" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryVarianceY" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "pow(Object.Variable(__SmoothCamera.ForecastHistoryY[Object.Behavior::PropertyIndex()]) - Object.Behavior::PropertyForecastHistoryMeanY(), 2)" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryCovariance" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "(Object.Variable(__SmoothCamera.ForecastHistoryX[Object.Behavior::PropertyIndex()]) - Object.Behavior::PropertyForecastHistoryMeanX())\n*\n(Object.Variable(__SmoothCamera.ForecastHistoryY[Object.Behavior::PropertyIndex()]) - Object.Behavior::PropertyForecastHistoryMeanY())" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "+", + "1" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Variances: \" + ToString(Object.Behavior::PropertyForecastHistoryVarianceX()) + \" \" + ToString(Object.Behavior::PropertyForecastHistoryVarianceY()) + \" \" + ToString(Object.Behavior::PropertyForecastHistoryCovariance())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceX())", + "<", + "1" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceY())", + "<", + "1" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyDelayedCenterX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyDelayedCenterY()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceX())", + ">=", + "1" + ] + }, + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceY())", + ">=", + "1" + ] + } + ] + } + ], + "actions": [], + "events": [ + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Linear function parameters", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "y = A * x + B\n\nA = Covariance / VarianceX\nB = MeanY - A * MeanX" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceX())", + ">=", + "abs(Object.Behavior::PropertyForecastHistoryVarianceY())" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearA" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyForecastHistoryCovariance() / Object.Behavior::PropertyForecastHistoryVarianceX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearB" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyForecastHistoryMeanY() - Object.Behavior::PropertyForecastHistoryLinearA() * Object.Behavior::PropertyForecastHistoryMeanX()" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Linear: \" + ToString(Object.Behavior::PropertyForecastHistoryLinearA()) + \" \" + ToString(Object.Behavior::PropertyForecastHistoryLinearB())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Projection", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::ProjectHistoryEnds" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Variable(__SmoothCamera.ForecastHistoryX[0])", + "Object.Variable(__SmoothCamera.ForecastHistoryY[0])", + "Object.Variable(__SmoothCamera.ForecastHistoryX[Object.VariableChildCount(__SmoothCamera.ForecastHistoryX) - 1])", + "Object.Variable(__SmoothCamera.ForecastHistoryY[Object.VariableChildCount(__SmoothCamera.ForecastHistoryY) - 1])", + "" + ] + } + ] + } + ], + "parameters": [] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Axis permutation to avoid a ratio between 2 numbers near 0." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Egal" + }, + "parameters": [ + "abs(Object.Behavior::PropertyForecastHistoryVarianceX())", + "<", + "abs(Object.Behavior::PropertyForecastHistoryVarianceY())" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearA" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyForecastHistoryCovariance() / Object.Behavior::PropertyForecastHistoryVarianceY()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastHistoryLinearB" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyForecastHistoryMeanX() - Object.Behavior::PropertyForecastHistoryLinearA() * Object.Behavior::PropertyForecastHistoryMeanY()" + ] + } + ], + "events": [ + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Linear: \" + ToString(Object.Behavior::PropertyForecastHistoryLinearA()) + \" \" + ToString(Object.Behavior::PropertyForecastHistoryLinearB())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Projection", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::ProjectHistoryEnds" + }, + "parameters": [ + "Object", + "Behavior", + "Object.Variable(__SmoothCamera.ForecastHistoryY[0])", + "Object.Variable(__SmoothCamera.ForecastHistoryX[0])", + "Object.Variable(__SmoothCamera.ForecastHistoryY[Object.VariableChildCount(__SmoothCamera.ForecastHistoryY) - 1])", + "Object.Variable(__SmoothCamera.ForecastHistoryX[Object.VariableChildCount(__SmoothCamera.ForecastHistoryX) - 1])", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Permute back axis" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedOldestX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedOldestY()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyIndex()" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyIndex" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedNewestX()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedNewestY()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyIndex()" + ] + } + ] + } + ], + "parameters": [] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Oldest: \" + ToString(Object.Behavior::PropertyProjectedOldestX()) + \" \" + ToString(Object.Behavior::PropertyProjectedOldestY())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Newest: \" + ToString(Object.Behavior::PropertyProjectedNewestX()) + \" \" + ToString(Object.Behavior::PropertyProjectedNewestY())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ] + }, + { + "colorB": 228, + "colorG": 176, + "colorR": 74, + "creationTime": 0, + "name": "Forecasted position", + "source": "", + "type": "BuiltinCommonInstructions::Group", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedNewestX() + ( Object.Behavior::PropertyProjectedNewestX() - Object.Behavior::PropertyProjectedOldestX()) * Object.Behavior::ForecastTimeRatio()" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyForecastedY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Object.Behavior::PropertyProjectedNewestY() + ( Object.Behavior::PropertyProjectedNewestY() - Object.Behavior::PropertyProjectedOldestY()) * Object.Behavior::ForecastTimeRatio()" + ] + } + ] + }, + { + "disabled": true, + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "DebuggerTools::ConsoleLog" + }, + "parameters": [ + "\"Forecasted: \" + ToString(Object.Behavior::PropertyForecastedX()) + \" \" + ToString(Object.Behavior::PropertyForecastedY())", + "\"info\"", + "\"SmoothCamera\"" + ] + } + ] + } + ], + "parameters": [] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "description": "Project history ends position to have the vector on the line from linear regression. This function is only called by UpdateForecastedPosition.", + "fullName": "Project history ends", + "functionType": "Action", + "group": "Private", + "name": "ProjectHistoryEnds", + "private": true, + "sentence": "Project history oldest: _PARAM2_;_PARAM3_ and newest position: _PARAM4_;_PARAM5_ of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Perpendicular line:\npA = -1/a; \npB = -pA * x + y\n\nIntersection:\n/ ProjectedY = a * ProjectedX + b\n\\ ProjectedY = pA * ProjectedX + b\n\nSolution that is cleaned out from indeterminism (like 0 / 0 or infinity / infinity):\nProjectedX= (x + (y - b) * a) / (a² + 1)\nProjectedY = y + (x * a - y + b) / (a² + 1)" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "(GetArgumentAsNumber(\"NewestX\") + (GetArgumentAsNumber(\"NewestY\") - Object.Behavior::PropertyForecastHistoryLinearB()) * Object.Behavior::PropertyForecastHistoryLinearA()) / (1 + pow(Object.Behavior::PropertyForecastHistoryLinearA(), 2))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedNewestY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"NewestY\") + (GetArgumentAsNumber(\"NewestX\") * Object.Behavior::PropertyForecastHistoryLinearA() - GetArgumentAsNumber(\"NewestY\") \n+ Object.Behavior::PropertyForecastHistoryLinearB()) / (1 + pow(Object.Behavior::PropertyForecastHistoryLinearA(), 2))" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestX" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "(GetArgumentAsNumber(\"OldestX\") + (GetArgumentAsNumber(\"OldestY\") - Object.Behavior::PropertyForecastHistoryLinearB()) * Object.Behavior::PropertyForecastHistoryLinearA()) / (1 + pow(Object.Behavior::PropertyForecastHistoryLinearA(), 2))" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetPropertyProjectedOldestY" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "GetArgumentAsNumber(\"OldestY\") + (GetArgumentAsNumber(\"OldestX\") * Object.Behavior::PropertyForecastHistoryLinearA() - GetArgumentAsNumber(\"OldestY\") \n+ Object.Behavior::PropertyForecastHistoryLinearB()) / (1 + pow(Object.Behavior::PropertyForecastHistoryLinearA(), 2))" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + }, + { + "description": "OldestX", + "name": "OldestX", + "type": "expression" + }, + { + "description": "OldestY", + "name": "OldestY", + "type": "expression" + }, + { + "description": "Newest X", + "name": "NewestX", + "type": "expression" + }, + { + "description": "Newest Y", + "name": "NewestY", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "Return the ratio between forecast time and the duration of the history. This function is only called by UpdateForecastedPosition.", + "fullName": "Forecast time ratio", + "functionType": "Expression", + "group": "Private", + "name": "ForecastTimeRatio", + "private": true, + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "- Object.Behavior::PropertyForecastTime() / (Object.Variable(__SmoothCamera.ForecastHistoryTime[0]) - Object.Variable(__SmoothCamera.ForecastHistoryTime[Object.VariableChildCount(__SmoothCamera.ForecastHistoryTime) - 1]))" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothCamera", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "0.9", + "type": "Number", + "label": "Leftward catch-up speed (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "name": "LeftwardSpeed" + }, + { + "value": "0.9", + "type": "Number", + "label": "Rightward catch-up speed (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "name": "RightwardSpeed" + }, + { + "value": "0.9", + "type": "Number", + "label": "Upward catch-up speed (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "name": "UpwardSpeed" + }, + { + "value": "0.9", + "type": "Number", + "label": "Downward catch-up speed (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "name": "DownwardSpeed" + }, + { + "value": "true", + "type": "Boolean", + "label": "Follow on X axis", + "description": "", + "group": "", + "extraInformation": [], + "name": "FollowOnX" + }, + { + "value": "true", + "type": "Boolean", + "label": "Follow on Y axis", + "description": "", + "group": "", + "extraInformation": [], + "name": "FollowOnY" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area left border", + "description": "", + "group": "Position", + "extraInformation": [], + "advanced": true, + "name": "FollowFreeAreaLeft" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area right border", + "description": "", + "group": "Position", + "extraInformation": [], + "advanced": true, + "name": "FollowFreeAreaRight" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area top border", + "description": "", + "group": "Position", + "extraInformation": [], + "advanced": true, + "name": "FollowFreeAreaTop" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area bottom border", + "description": "", + "group": "Position", + "extraInformation": [], + "advanced": true, + "name": "FollowFreeAreaBottom" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Camera offset X", + "description": "", + "group": "Position", + "extraInformation": [], + "advanced": true, + "name": "CameraOffsetX" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Camera offset Y", + "description": "", + "group": "Position", + "extraInformation": [], + "advanced": true, + "name": "CameraOffsetY" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "Camera delay", + "description": "", + "group": "Timing", + "extraInformation": [], + "deprecated": true, + "name": "CameraDelay" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "Forecast time", + "description": "", + "group": "Timing", + "extraInformation": [], + "deprecated": true, + "name": "ForecastTime" + }, + { + "value": "0", + "type": "Number", + "unit": "Second", + "label": "Forecast history duration", + "description": "", + "group": "Timing", + "extraInformation": [], + "deprecated": true, + "name": "ForecastHistoryDuration" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "LogLeftwardSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "LogRightwardSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "LogDownwardSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "LogUpwardSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "DelayedCenterX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "DelayedCenterY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryMeanX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryMeanY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryVarianceX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryCovariance" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryLinearA" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryLinearB" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastedX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastedY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ProjectedNewestX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ProjectedNewestY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ProjectedOldestX" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ProjectedOldestY" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "ForecastHistoryVarianceY" + }, + { + "value": "", + "type": "Number", + "label": "Index (local variable)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Index" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CameraDelayCatchUpSpeed" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CameraExtraDelay" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "WaitingSpeedXMax" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "WaitingSpeedYMax" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "WaitingEnd" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "CameraDelayCatchUpDuration" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Leftward maximum speed", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "advanced": true, + "name": "LeftwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Rightward maximum speed", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "advanced": true, + "name": "RightwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Upward maximum speed", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "advanced": true, + "name": "UpwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Downward maximum speed", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "advanced": true, + "name": "DownwardSpeedMax" + }, + { + "value": "", + "type": "Number", + "label": "OldX (local variable)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "OldX" + }, + { + "value": "", + "type": "Number", + "label": "OldY (local variable)", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "OldY" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsCalledManually" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "Smoothly scroll to follow a character and stabilize the camera when jumping.", + "fullName": "Smooth platformer camera", + "name": "SmoothPlatformerCamera", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "PlatformBehavior::IsJumping" + }, + "parameters": [ + "Object", + "PlatformerCharacter" + ] + }, + { + "type": { + "inverted": true, + "value": "PlatformBehavior::IsFalling" + }, + "parameters": [ + "Object", + "PlatformerCharacter" + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorFollowFreeAreaTop()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorFollowFreeAreaBottom()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeed" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorUpwardSpeed()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeed" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorDownwardSpeed()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorUpwardSpeedMax()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyFloorDownwardSpeedMax()", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ + { + "type": { + "value": "PlatformBehavior::IsJumping" + }, + "parameters": [ + "Object", + "PlatformerCharacter" + ] + }, + { + "type": { + "value": "PlatformBehavior::IsFalling" + }, + "parameters": [ + "Object", + "PlatformerCharacter" + ] + } + ] + } + ], + "actions": [ + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaBottom" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirFollowFreeAreaTop()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetFollowFreeAreaTop" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirFollowFreeAreaBottom()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeed" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirUpwardSpeed()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeed" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirDownwardSpeed()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetUpwardSpeedMax" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirUpwardSpeedMax()", + "" + ] + }, + { + "type": { + "value": "SmoothCamera::SmoothCamera::SetDownwardSpeedMax" + }, + "parameters": [ + "Object", + "SmoothCamera", + "Object.Behavior::PropertyAirDownwardSpeedMax()", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SmoothCamera::SmoothPlatformerCamera", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Platformer character behavior", + "description": "", + "group": "", + "extraInformation": [ + "PlatformBehavior::PlatformerObjectBehavior" + ], + "name": "PlatformerCharacter" + }, + { + "value": "", + "type": "Behavior", + "label": "Smooth camera behavior", + "description": "", + "group": "", + "extraInformation": [ + "SmoothCamera::SmoothCamera" + ], + "name": "SmoothCamera" + }, + { + "value": "", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JumpOriginY" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area top in the air", + "description": "", + "group": "Position", + "extraInformation": [], + "name": "AirFollowFreeAreaTop" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area bottom in the air", + "description": "", + "group": "Position", + "extraInformation": [], + "name": "AirFollowFreeAreaBottom" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area top on the floor", + "description": "", + "group": "Position", + "extraInformation": [], + "name": "FloorFollowFreeAreaTop" + }, + { + "value": "0", + "type": "Number", + "unit": "Pixel", + "label": "Follow free area bottom on the floor", + "description": "", + "group": "Position", + "extraInformation": [], + "name": "FloorFollowFreeAreaBottom" + }, + { + "value": "0.95", + "type": "Number", + "label": "Upward speed in the air (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "name": "AirUpwardSpeed" + }, + { + "value": "0.95", + "type": "Number", + "label": "Downward speed in the air (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "name": "AirDownwardSpeed" + }, + { + "value": "0.9", + "type": "Number", + "label": "Upward speed on the floor (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "name": "FloorUpwardSpeed" + }, + { + "value": "0.9", + "type": "Number", + "label": "Downward speed on the floor (in ratio per second)", + "description": "", + "group": "Catch-up speed", + "extraInformation": [], + "name": "FloorDownwardSpeed" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Upward maximum speed in the air", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "name": "AirUpwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Downward maximum speed in the air", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "name": "AirDownwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Upward maximum speed on the floor", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "name": "FloorUpwardSpeedMax" + }, + { + "value": "9000", + "type": "Number", + "unit": "PixelSpeed", + "label": "Downward maximum speed on the floor", + "description": "", + "group": "Maximum speed", + "extraInformation": [], + "name": "FloorDownwardSpeedMax" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] + } + ], + "externalLayouts": [ + { + "associatedLayout": "Game", + "name": "Level1", + "instances": [ + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 770, + "layer": "", + "name": "Base", + "persistentUuid": "5d71bfb4-8d6c-4e3b-8e78-6b7e92c4b0cd", + "width": 2149, + "x": -2, + "y": 534, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "44322c42-793c-4b71-bdfb-88ce903ed1e3", + "width": 1037, + "x": 3739, + "y": 527, + "z": -200, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "dbe012e2-7f99-43bf-9a94-55444daa604c", + "width": 2147, + "x": -1, + "y": 527, + "z": -200, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 771, + "layer": "", + "name": "Base", + "persistentUuid": "7d439f82-b1b9-43b0-b004-927856faaa85", + "width": 4663, + "x": 3739, + "y": 534, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 569, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "b9b5a52b-49f8-406a-97bb-ff104d5e970f", + "width": 1625, + "x": 2118, + "y": 734, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "2108d36e-5b37-48d6-9e30-087ab62b7f59", + "width": 1183, + "x": 615, + "y": -208, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "0440262d-a806-482d-b2c1-26fee4861449", + "width": 1809, + "x": 8075, + "y": 10, + "z": -4000, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "466319e1-877a-4a92-8767-ccc5c2eceeb6", + "width": 79, + "x": 0, + "y": 423, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "e0c68c92-7bbe-4be8-ad1c-0734f839921f", + "width": 79, + "x": 8322, + "y": 436, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "6ec233b6-9c26-450b-9913-c7da768ac825", + "width": 99, + "x": 7796, + "y": 373, + "z": -190, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "5ca9536c-2436-413f-8fd4-3d868d224411", + "width": 99, + "x": 7796, + "y": 373, + "z": 169, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "8fa11de9-c5d7-480e-a64b-62954f22e359", + "width": 1809, + "x": 8075, + "y": 1804, + "z": -4000, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "5fbba488-3900-4225-90e2-b011fee9f04b", + "width": 1183, + "x": 615, + "y": 1475, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 207.99999237060547, + "layer": "", + "name": "RoadSlantCurve", + "persistentUuid": "bd825921-ce3f-4480-8701-d8535c7c2f0f", + "width": 800, + "x": 2142, + "y": 527, + "z": -200, + "zOrder": 24, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 207.99999237060547, + "layer": "", + "name": "RoadSlantCurve", + "persistentUuid": "eef53f9b-49b8-44d0-ae6f-980e1fb82086", + "width": 800, + "x": 2941, + "y": 527, + "z": -200, + "zOrder": 24, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 207.99999237060547, + "layer": "", + "name": "RoadSlantCurve", + "persistentUuid": "21a82640-8c4c-4171-b7ed-faca256c61eb", + "width": 800, + "x": 4772, + "y": 327, + "z": -200, + "zOrder": 24, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 207.99999237060547, + "layer": "", + "name": "RoadSlantCurve", + "persistentUuid": "d277a923-786f-4453-9062-052845b045ea", + "width": 800, + "x": 5568, + "y": 327, + "z": -200, + "zOrder": 24, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "30e3d09b-000c-4b94-bb80-fe9db91025db", + "width": 2000, + "x": 6360, + "y": 527, + "z": -200, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "editionSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.06768546898536278, + "windowMask": false + } + }, + { + "associatedLayout": "Game", + "name": "Level2", + "instances": [ + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 770, + "layer": "", + "name": "Base", + "persistentUuid": "5d71bfb4-8d6c-4e3b-8e78-6b7e92c4b0cd", + "width": 2793, + "x": -2, + "y": 534, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "44322c42-793c-4b71-bdfb-88ce903ed1e3", + "width": 1200, + "x": 4605, + "y": 529, + "z": -200, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "dbe012e2-7f99-43bf-9a94-55444daa604c", + "width": 1995, + "x": -1, + "y": 527, + "z": -200, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 771, + "layer": "", + "name": "Base", + "persistentUuid": "7d439f82-b1b9-43b0-b004-927856faaa85", + "width": 2032, + "x": 3772, + "y": 536, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 973, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "b9b5a52b-49f8-406a-97bb-ff104d5e970f", + "width": 1046, + "x": 2785, + "y": 335, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "2108d36e-5b37-48d6-9e30-087ab62b7f59", + "width": 1183, + "x": 11286, + "y": 374, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "0440262d-a806-482d-b2c1-26fee4861449", + "width": 1809, + "x": 225, + "y": -225, + "z": -4000, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "466319e1-877a-4a92-8767-ccc5c2eceeb6", + "width": 79, + "x": 0, + "y": 423, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "e0c68c92-7bbe-4be8-ad1c-0734f839921f", + "width": 79, + "x": 10691, + "y": 442, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "6ec233b6-9c26-450b-9913-c7da768ac825", + "width": 99, + "x": 10165, + "y": 379, + "z": -190, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "5ca9536c-2436-413f-8fd4-3d868d224411", + "width": 99, + "x": 10165, + "y": 379, + "z": 169, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "8fa11de9-c5d7-480e-a64b-62954f22e359", + "width": 1809, + "x": 225, + "y": 1569, + "z": -4000, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "5fbba488-3900-4225-90e2-b011fee9f04b", + "width": 1183, + "x": 11286, + "y": 2057, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 207.99999237060547, + "layer": "", + "name": "RoadSlantCurve", + "persistentUuid": "bd825921-ce3f-4480-8701-d8535c7c2f0f", + "width": 800, + "x": 3827, + "y": 328, + "z": -200, + "zOrder": 24, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 207.99999237060547, + "layer": "", + "name": "RoadSlantCurve", + "persistentUuid": "eef53f9b-49b8-44d0-ae6f-980e1fb82086", + "width": 800, + "x": 1988, + "y": 327, + "z": -200, + "zOrder": 24, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 207.99999237060547, + "layer": "", + "name": "RoadSlantCurve", + "persistentUuid": "21a82640-8c4c-4171-b7ed-faca256c61eb", + "width": 800, + "x": 7641, + "y": 533, + "z": -200, + "zOrder": 24, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 207.99999237060547, + "layer": "", + "name": "RoadSlantCurve", + "persistentUuid": "d277a923-786f-4453-9062-052845b045ea", + "width": 800, + "x": 5802, + "y": 530, + "z": -200, + "zOrder": 24, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "30e3d09b-000c-4b94-bb80-fe9db91025db", + "width": 2289, + "x": 8440, + "y": 533, + "z": -200, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "9dda88b1-0ac3-4a5c-b590-15ea91fcf6c2", + "width": 1050, + "x": 2783, + "y": 328, + "z": -200, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "dd13092e-ce3a-4e4e-a1de-2ab89c854f1b", + "width": 99, + "x": 2941, + "y": 230, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "69c98546-dfc4-4e2f-bc82-f6c1c2f2de4a", + "width": 433, + "x": 3403, + "y": 445, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 586, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "b34955da-46ec-419a-a091-6f02617702f9", + "width": 2644, + "x": 5798, + "y": 739, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "2cc3979f-f988-41f4-bb30-ad5d4a45aef4", + "width": 1050, + "x": 6598, + "y": 732, + "z": -200, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "f741a96a-e41b-4c9a-ae31-63c8371a7ddc", + "width": 99, + "x": 6756, + "y": 634, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "b70dd6c8-15c3-44be-904a-179becc0f4f6", + "width": 433, + "x": 7218, + "y": 849, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 800, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "04a4f856-98f5-4f24-8c56-3310363b8406", + "width": 2334, + "x": 8438, + "y": 540, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "717ba0a7-1be6-444b-ad15-f67b588fae22", + "width": 1183, + "x": 5295, + "y": 1688, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "320a721d-08bf-4209-b746-933d02117a2f", + "width": 1183, + "x": 5295, + "y": 5, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "editionSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.1603152880454712, + "windowMask": false + } + }, + { + "associatedLayout": "Game", + "name": "Level3", + "instances": [ + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 770, + "layer": "", + "name": "Base", + "persistentUuid": "5d71bfb4-8d6c-4e3b-8e78-6b7e92c4b0cd", + "width": 2451, + "x": -2, + "y": 534, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "44322c42-793c-4b71-bdfb-88ce903ed1e3", + "width": 3624, + "x": 3523, + "y": 527, + "z": -200, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "dbe012e2-7f99-43bf-9a94-55444daa604c", + "width": 2147, + "x": -1, + "y": 527, + "z": -200, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 191, + "keepRatio": true, + "layer": "", + "name": "TileSlantHigh", + "persistentUuid": "d1b1af7f-b792-4bdb-9183-2b8cc270ed06", + "width": 353, + "x": 2096, + "y": 374, + "z": -200, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332.5, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "f5650393-24ac-480d-9dad-3a7e1f8e1175", + "width": 353, + "x": 2115, + "y": 451, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 771, + "layer": "", + "name": "Base", + "persistentUuid": "7d439f82-b1b9-43b0-b004-927856faaa85", + "width": 3958, + "x": 3197, + "y": 534, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 107.99999237060547, + "keepRatio": true, + "layer": "", + "name": "TileSlant", + "persistentUuid": "503c3761-819b-43a7-9560-80e7ccf21928", + "width": 400, + "x": 3197, + "y": 448, + "z": -200, + "zOrder": 15, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 14, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "0767bd5f-f5d4-422c-9a27-75ac82b5f619", + "width": 353, + "x": 3194, + "y": 487, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 259, + "keepRatio": true, + "layer": "", + "name": "SpikesLarge", + "persistentUuid": "a33e1518-e42c-408a-96ea-3b351ccddf59", + "width": 802, + "x": 2423, + "y": 659, + "z": -200, + "zOrder": 16, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 401, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "b9b5a52b-49f8-406a-97bb-ff104d5e970f", + "width": 848, + "x": 2427, + "y": 902, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "2108d36e-5b37-48d6-9e30-087ab62b7f59", + "width": 1183, + "x": 615, + "y": -208, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "0440262d-a806-482d-b2c1-26fee4861449", + "width": 1809, + "x": 8075, + "y": 10, + "z": -4000, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "466319e1-877a-4a92-8767-ccc5c2eceeb6", + "width": 79, + "x": 0, + "y": 423, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "3f2e111a-99d1-41f6-8365-86dd0097a436", + "width": 433, + "x": 5319, + "y": 644, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "e0c68c92-7bbe-4be8-ad1c-0734f839921f", + "width": 79, + "x": 7076, + "y": 438, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "6ec233b6-9c26-450b-9913-c7da768ac825", + "width": 99, + "x": 6550, + "y": 375, + "z": -190, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "5ca9536c-2436-413f-8fd4-3d868d224411", + "width": 99, + "x": 6550, + "y": 375, + "z": 169, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "e93dd470-47ec-485b-920b-410d7fc87980", + "width": 99, + "x": 2237, + "y": 346, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "08163b77-8a35-4bb1-a2dc-cc3dacc3e8d2", + "width": 99, + "x": 4857, + "y": 430, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "8fa11de9-c5d7-480e-a64b-62954f22e359", + "width": 1809, + "x": 8075, + "y": 1804, + "z": -4000, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "5fbba488-3900-4225-90e2-b011fee9f04b", + "width": 1183, + "x": 615, + "y": 1475, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "editionSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.18305734955560354, + "windowMask": false + } + }, + { + "associatedLayout": "Game", + "name": "Level4", + "instances": [ + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 1087, + "layer": "", + "name": "Base", + "persistentUuid": "5d71bfb4-8d6c-4e3b-8e78-6b7e92c4b0cd", + "width": 6948, + "x": -2, + "y": 534, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "44322c42-793c-4b71-bdfb-88ce903ed1e3", + "width": 3624, + "x": 14235, + "y": 846, + "z": -200, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "dbe012e2-7f99-43bf-9a94-55444daa604c", + "width": 5047, + "x": -1, + "y": 527, + "z": -200, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 337, + "layer": "", + "name": "TileSlantHigh", + "persistentUuid": "d1b1af7f-b792-4bdb-9183-2b8cc270ed06", + "width": 623, + "x": 11647, + "y": 555, + "z": -200, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332.5, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "f5650393-24ac-480d-9dad-3a7e1f8e1175", + "width": 700, + "x": 11609, + "y": 711, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 771, + "layer": "", + "name": "Base", + "persistentUuid": "7d439f82-b1b9-43b0-b004-927856faaa85", + "width": 3958, + "x": 13909, + "y": 853, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 107.99999237060547, + "keepRatio": true, + "layer": "", + "name": "TileSlant", + "persistentUuid": "503c3761-819b-43a7-9560-80e7ccf21928", + "width": 400, + "x": 13909, + "y": 767, + "z": -200, + "zOrder": 15, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 14, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "0767bd5f-f5d4-422c-9a27-75ac82b5f619", + "width": 353, + "x": 13906, + "y": 806, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 259, + "keepRatio": true, + "layer": "", + "name": "SpikesLarge", + "persistentUuid": "a33e1518-e42c-408a-96ea-3b351ccddf59", + "width": 802, + "x": 12286, + "y": 906, + "z": -200, + "zOrder": 16, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 471, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "b9b5a52b-49f8-406a-97bb-ff104d5e970f", + "width": 1655, + "x": 12270, + "y": 1149, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "2108d36e-5b37-48d6-9e30-087ab62b7f59", + "width": 1183, + "x": 5267, + "y": -271, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "0440262d-a806-482d-b2c1-26fee4861449", + "width": 1809, + "x": 8559, + "y": -81, + "z": -4000, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "466319e1-877a-4a92-8767-ccc5c2eceeb6", + "width": 79, + "x": 0, + "y": 423, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "3f2e111a-99d1-41f6-8365-86dd0097a436", + "width": 433, + "x": 16031, + "y": 963, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "e0c68c92-7bbe-4be8-ad1c-0734f839921f", + "width": 79, + "x": 17788, + "y": 757, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "6ec233b6-9c26-450b-9913-c7da768ac825", + "width": 99, + "x": 17262, + "y": 694, + "z": -190, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "5ca9536c-2436-413f-8fd4-3d868d224411", + "width": 99, + "x": 17262, + "y": 694, + "z": 169, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "c99c5049-852b-429b-b89c-113a382e91ae", + "width": 433, + "x": 2000, + "y": 644, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "4fa8782f-477f-4bf7-adb2-2ef5517738cf", + "width": 433, + "x": 3000, + "y": 644, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "69bca53a-82e9-4c54-8a9f-fe21d5cf658f", + "width": 433, + "x": 4000, + "y": 644, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 540.7586763518966, + "layer": "", + "name": "TileSlant", + "persistentUuid": "cf5b8eca-805c-4a2c-9c73-9cba5e5691bd", + "width": 2000, + "x": 4948, + "y": 63, + "z": -200, + "zOrder": 15, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": -14, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "8a706876-7a84-4fe5-aaf1-e2248e054dc9", + "width": 2000, + "x": 4974, + "y": 294, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "layer": "", + "name": "RoadSide", + "persistentUuid": "546dbd01-4858-4ebc-b38c-b5a2b32e21ed", + "width": 987, + "x": 6941, + "y": 53, + "z": -200, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 1554, + "layer": "", + "name": "Base", + "persistentUuid": "1e66d784-1450-4158-bc4b-756115d104a1", + "width": 1000, + "x": 6930, + "y": 64, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 907, + "layer": "", + "name": "TileSlantHigh", + "persistentUuid": "57ab6051-c02b-46e8-bf62-b50719be5ab5", + "width": 1318, + "x": 7924, + "y": 58, + "z": -200, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": -327, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "6e072e4b-95ab-47ca-9c07-3cd1ab24b3f5", + "width": 1500, + "x": 7806, + "y": 461, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "layer": "", + "name": "RoadSide", + "persistentUuid": "38b7371e-acbf-4f78-8689-681d5955ddb1", + "width": 2500, + "x": 9155, + "y": 870, + "z": -200, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 259, + "keepRatio": true, + "layer": "", + "name": "SpikesLarge", + "persistentUuid": "09f6a400-4c44-4a41-b397-07920900deca", + "width": 802, + "x": 13115, + "y": 901, + "z": -200, + "zOrder": 16, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 731, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "880d3a7e-2abf-4a81-b612-6e485c7f8ed1", + "width": 4353, + "x": 7918, + "y": 891, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1073, + "height": 2436, + "keepRatio": true, + "layer": "", + "name": "BuildingH", + "persistentUuid": "0164b801-cec4-4b00-a4b0-4efdb27d5b91", + "width": 1657, + "x": 2099, + "y": -411, + "z": -3000, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "4d3fff84-8d09-4401-a9f9-f390710c4beb", + "width": 1183, + "x": 18800, + "y": 300, + "z": -2500, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "13a00ed1-b80f-4590-8807-2249665ff514", + "width": 99, + "x": 1592, + "y": 433, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "8ae86997-86a9-4597-b810-76bb93244b6f", + "width": 99, + "x": 11845, + "y": 643, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "aac7170c-c146-4f60-9d39-4429f6bddcb3", + "width": 99, + "x": 15624, + "y": 758, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "820a2b97-0eef-4196-990f-17d7f2838148", + "width": 1183, + "x": 5267, + "y": 1485, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "e05b3e24-1db1-45a4-a434-7bd9ebd4d234", + "width": 1809, + "x": 8559, + "y": 1738, + "z": -4000, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "63651c7e-74c6-47af-b3bf-47e15ad76488", + "width": 1183, + "x": 18800, + "y": 2038, + "z": -2500, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "editionSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.08258739885902651, + "windowMask": false + } + }, + { + "associatedLayout": "Game", + "name": "Level5", + "instances": [ + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 1184, + "layer": "", + "name": "Base", + "persistentUuid": "5d71bfb4-8d6c-4e3b-8e78-6b7e92c4b0cd", + "width": 4937, + "x": -2, + "y": 534, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "44322c42-793c-4b71-bdfb-88ce903ed1e3", + "width": 3624, + "x": 11655, + "y": 906, + "z": -200, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "dbe012e2-7f99-43bf-9a94-55444daa604c", + "width": 4326, + "x": -1, + "y": 527, + "z": -200, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 337, + "layer": "", + "name": "TileSlantHigh", + "persistentUuid": "d1b1af7f-b792-4bdb-9183-2b8cc270ed06", + "width": 623, + "x": 9892, + "y": 624, + "z": -200, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332.5, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "f5650393-24ac-480d-9dad-3a7e1f8e1175", + "width": 700, + "x": 9854, + "y": 780, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 771, + "layer": "", + "name": "Base", + "persistentUuid": "7d439f82-b1b9-43b0-b004-927856faaa85", + "width": 3958, + "x": 11329, + "y": 913, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 107.99999237060547, + "keepRatio": true, + "layer": "", + "name": "TileSlant", + "persistentUuid": "503c3761-819b-43a7-9560-80e7ccf21928", + "width": 400, + "x": 11329, + "y": 827, + "z": -200, + "zOrder": 15, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 14, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "0767bd5f-f5d4-422c-9a27-75ac82b5f619", + "width": 353, + "x": 11326, + "y": 866, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 259, + "keepRatio": true, + "layer": "", + "name": "SpikesLarge", + "persistentUuid": "a33e1518-e42c-408a-96ea-3b351ccddf59", + "width": 802, + "x": 10531, + "y": 975, + "z": -200, + "zOrder": 16, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 471, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "b9b5a52b-49f8-406a-97bb-ff104d5e970f", + "width": 819, + "x": 10515, + "y": 1218, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "2108d36e-5b37-48d6-9e30-087ab62b7f59", + "width": 1183, + "x": 6816, + "y": -414, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "0440262d-a806-482d-b2c1-26fee4861449", + "width": 1809, + "x": 1533, + "y": -364, + "z": -4500, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "466319e1-877a-4a92-8767-ccc5c2eceeb6", + "width": 79, + "x": 0, + "y": 423, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "3f2e111a-99d1-41f6-8365-86dd0097a436", + "width": 433, + "x": 12515, + "y": 1023, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "e0c68c92-7bbe-4be8-ad1c-0734f839921f", + "width": 79, + "x": 15208, + "y": 817, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "6ec233b6-9c26-450b-9913-c7da768ac825", + "width": 99, + "x": 14682, + "y": 754, + "z": -190, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "5ca9536c-2436-413f-8fd4-3d868d224411", + "width": 99, + "x": 14682, + "y": 754, + "z": 169, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "8ae86997-86a9-4597-b810-76bb93244b6f", + "width": 99, + "x": 10090, + "y": 712, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "aac7170c-c146-4f60-9d39-4429f6bddcb3", + "width": 99, + "x": 12099, + "y": 816, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "820a2b97-0eef-4196-990f-17d7f2838148", + "width": 1183, + "x": 6816, + "y": 1342, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "e05b3e24-1db1-45a4-a434-7bd9ebd4d234", + "width": 1809, + "x": 1533, + "y": 1480, + "z": -4500, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 337, + "layer": "", + "name": "TileSlantHigh", + "persistentUuid": "619d64cf-f404-4c21-984c-ceecc28aa54a", + "width": 623, + "x": 4313, + "y": 214, + "z": -200, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332.5, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "c5f5e57c-cdcf-4a82-b433-8d58d24ea988", + "width": 700, + "x": 4275, + "y": 370, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 259, + "keepRatio": true, + "layer": "", + "name": "SpikesLarge", + "persistentUuid": "7fe731c8-5dbc-4e6e-a8d5-ba6d561d7d18", + "width": 802, + "x": 4952, + "y": 565, + "z": -200, + "zOrder": 16, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 908, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "a688b5a2-d049-4c15-967b-9bc98f1dc63b", + "width": 1652, + "x": 4936, + "y": 808, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "8c3b8a9d-3b17-487f-aa6e-9bfed98aa9d7", + "width": 99, + "x": 4511, + "y": 302, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 259, + "keepRatio": true, + "layer": "", + "name": "SpikesLarge", + "persistentUuid": "c6fb333e-1af8-4600-a3f6-295afd31a9e5", + "width": 802, + "x": 5782, + "y": 565, + "z": -200, + "zOrder": 16, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 540.7586763518966, + "layer": "", + "name": "TileSlant", + "persistentUuid": "b8d0900f-8b6e-412b-bb97-a5d70124cd8e", + "width": 2000, + "x": 6585, + "y": 454, + "z": -200, + "zOrder": 15, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 14, + "customSize": true, + "depth": 404, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "a9f5117b-8b8b-41e3-a3ba-00042047e973", + "width": 2020, + "x": 6558, + "y": 695, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 471, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "571a903f-387b-45b1-b399-a42c1be12aa6", + "width": 192, + "x": 6587, + "y": 507, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "7b9fa3fc-a70a-4824-ab51-83b8390a4269", + "width": 1358, + "x": 8541, + "y": 938, + "z": -200, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 771, + "layer": "", + "name": "Base", + "persistentUuid": "ab06d4d5-ccd1-4672-895d-3e01353af857", + "width": 3927, + "x": 6590, + "y": 945, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "a00f5adc-1f09-4f6f-ba35-377a238b6e58", + "width": 1183, + "x": 13476, + "y": 1552, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "f725186a-85ad-443a-a7af-bd13e5e56ba6", + "width": 1183, + "x": 13476, + "y": -204, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "editionSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.04254540245946718, + "windowMask": false + } + }, + { + "associatedLayout": "Game", + "name": "Level6", + "instances": [ + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 770, + "layer": "", + "name": "Base", + "persistentUuid": "5d71bfb4-8d6c-4e3b-8e78-6b7e92c4b0cd", + "width": 2451, + "x": -2, + "y": 534, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "44322c42-793c-4b71-bdfb-88ce903ed1e3", + "width": 3348, + "x": 3523, + "y": 527, + "z": -200, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "dbe012e2-7f99-43bf-9a94-55444daa604c", + "width": 2147, + "x": -1, + "y": 527, + "z": -200, + "zOrder": 12, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 191, + "keepRatio": true, + "layer": "", + "name": "TileSlantHigh", + "persistentUuid": "d1b1af7f-b792-4bdb-9183-2b8cc270ed06", + "width": 353, + "x": 2096, + "y": 374, + "z": -200, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332.5, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "f5650393-24ac-480d-9dad-3a7e1f8e1175", + "width": 353, + "x": 2115, + "y": 451, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 771, + "layer": "", + "name": "Base", + "persistentUuid": "7d439f82-b1b9-43b0-b004-927856faaa85", + "width": 3958, + "x": 3197, + "y": 534, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 107.99999237060547, + "keepRatio": true, + "layer": "", + "name": "TileSlant", + "persistentUuid": "503c3761-819b-43a7-9560-80e7ccf21928", + "width": 400, + "x": 3197, + "y": 448, + "z": -200, + "zOrder": 15, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 14, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "0767bd5f-f5d4-422c-9a27-75ac82b5f619", + "width": 353, + "x": 3194, + "y": 487, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 259, + "keepRatio": true, + "layer": "", + "name": "SpikesLarge", + "persistentUuid": "a33e1518-e42c-408a-96ea-3b351ccddf59", + "width": 802, + "x": 2423, + "y": 659, + "z": -200, + "zOrder": 16, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 401, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "b9b5a52b-49f8-406a-97bb-ff104d5e970f", + "width": 848, + "x": 2427, + "y": 902, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "2108d36e-5b37-48d6-9e30-087ab62b7f59", + "width": 1183, + "x": 679, + "y": -874, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "0440262d-a806-482d-b2c1-26fee4861449", + "width": 1809, + "x": 9126, + "y": -734, + "z": -4000, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "466319e1-877a-4a92-8767-ccc5c2eceeb6", + "width": 79, + "x": 0, + "y": 423, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "3f2e111a-99d1-41f6-8365-86dd0097a436", + "width": 433, + "x": 4400, + "y": 644, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 115, + "keepRatio": true, + "layer": "", + "name": "ConstructionBarrier", + "persistentUuid": "e0c68c92-7bbe-4be8-ad1c-0734f839921f", + "width": 79, + "x": 11776, + "y": 438, + "z": -200, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "6ec233b6-9c26-450b-9913-c7da768ac825", + "width": 99, + "x": 11250, + "y": 375, + "z": -190, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 27, + "height": 164, + "keepRatio": true, + "layer": "", + "name": "GoalFlag", + "persistentUuid": "5ca9536c-2436-413f-8fd4-3d868d224411", + "width": 99, + "x": 11250, + "y": 375, + "z": 169, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "e93dd470-47ec-485b-920b-410d7fc87980", + "width": 99, + "x": 2237, + "y": 346, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "08163b77-8a35-4bb1-a2dc-cc3dacc3e8d2", + "width": 99, + "x": 3931, + "y": 436, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 2687, + "height": 1828, + "keepRatio": true, + "layer": "", + "name": "BuildingD", + "persistentUuid": "8fa11de9-c5d7-480e-a64b-62954f22e359", + "width": 1809, + "x": 9126, + "y": 1060, + "z": -4000, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1183, + "height": 1761, + "keepRatio": true, + "layer": "", + "name": "BuildingC", + "persistentUuid": "5fbba488-3900-4225-90e2-b011fee9f04b", + "width": 1183, + "x": 679, + "y": 854, + "z": -3000, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "e50b1fe7-9d75-4849-b68e-5daa55dd2efa", + "width": 433, + "x": 5400, + "y": 644, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 6, + "keepRatio": true, + "layer": "", + "name": "RoadSide", + "persistentUuid": "7df14a7e-03d1-421b-a4a9-6411fe16a451", + "width": 3624, + "x": 8229, + "y": 525, + "z": -200, + "zOrder": 4, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "flippedX": true, + "height": 191, + "keepRatio": true, + "layer": "", + "name": "TileSlantHigh", + "persistentUuid": "d5ec5b13-fc80-42a5-b0e9-1174221f4bbf", + "width": 353, + "x": 6802, + "y": 372, + "z": -200, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332.5, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "97d40c5c-4ca5-49bf-bddf-ac16d1acf9a3", + "width": 353, + "x": 6821, + "y": 449, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 771, + "layer": "", + "name": "Base", + "persistentUuid": "446f53ed-acb9-4f7b-9388-a6a35fc6e12e", + "width": 3958, + "x": 7903, + "y": 532, + "z": -200, + "zOrder": 10, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 107.99999237060547, + "keepRatio": true, + "layer": "", + "name": "TileSlant", + "persistentUuid": "1217fe3e-993c-4869-a9e3-b3c8badb7857", + "width": 400, + "x": 7903, + "y": 446, + "z": -200, + "zOrder": 15, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 14, + "customSize": true, + "depth": 400, + "height": 7, + "layer": "", + "name": "RoadSide", + "persistentUuid": "b1c0264d-d4dd-480f-bcd3-2cafebddb955", + "width": 353, + "x": 7900, + "y": 485, + "z": -200, + "zOrder": 14, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 259, + "keepRatio": true, + "layer": "", + "name": "SpikesLarge", + "persistentUuid": "d9e3f6bc-2d22-4906-9a29-0e3d5e9ce387", + "width": 802, + "x": 7129, + "y": 657, + "z": -200, + "zOrder": 16, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 400, + "height": 401, + "keepRatio": true, + "layer": "", + "name": "Base", + "persistentUuid": "ed1d72fa-0031-4360-a3ab-f95985b67000", + "width": 848, + "x": 7133, + "y": 900, + "z": -200, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "ac575ad2-284e-4adf-9bf1-fce0a47a6d8b", + "width": 433, + "x": 9106, + "y": 642, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 332, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "3f7b1745-7e7b-4616-a2b1-ccec2bb3175e", + "width": 99, + "x": 6943, + "y": 344, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 19.331043856218876, + "height": 109.22893537368067, + "keepRatio": true, + "layer": "", + "name": "ArrowSide", + "persistentUuid": "46101102-daeb-441d-8c68-038f7b1a9e03", + "width": 99, + "x": 8637, + "y": 434, + "z": -190, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 433, + "height": 151, + "keepRatio": true, + "layer": "", + "name": "HazardSpikeTrap", + "persistentUuid": "76504bd8-eaa1-4c8e-9157-3de57888f82a", + "width": 433, + "x": 10106, + "y": 642, + "z": -19, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 1073, + "height": 2436, + "keepRatio": true, + "layer": "", + "name": "BuildingH", + "persistentUuid": "1c83ac34-cbd6-4813-a9b7-c1f82bf31301", + "width": 1657, + "x": 4690, + "y": -43, + "z": -3000, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "editionSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.05547241800881317, + "windowMask": false + } + }, + { + "associatedLayout": "Game", + "name": "HitboxRoadCurveFlip", + "instances": [ + { + "angle": 356, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "25a4236a-1f20-4c96-abfa-06b3b4138e83", + "width": 64, + "x": 4, + "y": 198, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 353, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "c1d95030-cbb1-4404-8fce-ec92f33471cd", + "width": 64, + "x": 69, + "y": 191, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 349, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "5bc46b93-dbfe-4cf6-a72f-2d354337f98e", + "width": 64, + "x": 133, + "y": 181, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 345, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "abcec2e4-33ac-476d-8c6c-d2f6395d004a", + "width": 64, + "x": 197, + "y": 167, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 358, + "customSize": true, + "depth": 1, + "height": 64, + "layer": "", + "name": "Hitbox", + "persistentUuid": "7793b583-a35d-431b-b47b-9aabf2eb6fe9", + "width": 64, + "x": 732, + "y": 1, + "zOrder": 25, + "numberProperties": [ + { + "name": "animation", + "value": 0 + } + ], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 340, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "af3b7730-a515-4b0e-a8b7-816aaa516e2f", + "width": 64, + "x": 260, + "y": 147, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 337, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "c2c3cc50-5570-42c1-823f-897bd39911e4", + "width": 64, + "x": 320, + "y": 123, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 334, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "bc49971a-cac2-433b-8490-33c1544c38ee", + "width": 64, + "x": 379, + "y": 96, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 336, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "f213d307-fc91-4642-8b17-e1bf9020f20e", + "width": 64, + "x": 436, + "y": 69, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 341, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "7bd44cce-b208-4714-a79d-272be8c2a3c9", + "width": 64, + "x": 492, + "y": 48, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 344, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "6e96043b-91d7-4235-a8fc-248eb64b9eb2", + "width": 64, + "x": 551, + "y": 29, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 348, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "e0c34e1c-483c-4318-a287-047e6948acc7", + "width": 64, + "x": 611, + "y": 14, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 355, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "368cb300-674a-41cf-b941-92134d71731d", + "width": 64, + "x": 670, + "y": 5, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "editionSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.379712100194794, + "windowMask": false + } + }, + { + "associatedLayout": "Game", + "name": "HitboxRoadCurve", + "instances": [ + { + "angle": 26, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "bc49971a-cac2-433b-8490-33c1544c38ee", + "width": 64, + "x": 358, + "y": 95, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 2, + "customSize": true, + "depth": 1, + "height": 64, + "layer": "", + "name": "Hitbox", + "persistentUuid": "75eee5ab-6fa3-4697-92e9-b3506adb6c81", + "width": 64, + "x": 4, + "y": 1, + "zOrder": 25, + "numberProperties": [ + { + "name": "animation", + "value": 0 + } + ], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 5, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "c6ae7862-fc4e-4d5c-85ef-7f290331d05c", + "width": 64, + "x": 66, + "y": 5, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 12, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "7c1552fc-c9f6-476f-80ed-1de65580b0e9", + "width": 64, + "x": 125, + "y": 14, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 14, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "f619bc0f-a780-4d78-823b-9cf73f616918", + "width": 64, + "x": 186, + "y": 29, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 19, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "c45ce70c-4487-411c-ba3a-5c94b7b15f5f", + "width": 64, + "x": 244, + "y": 46, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 24, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "ba7ddffe-ccc1-443e-bc9b-82cb02415d95", + "width": 64, + "x": 301, + "y": 69, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 23, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "aec7abdc-df39-4fa2-a134-883d83cc2bf1", + "width": 64, + "x": 416, + "y": 122, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 20, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "22cde184-4934-4ada-9d3d-e54fe130f96a", + "width": 64, + "x": 477, + "y": 147, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 15, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "354fe6cc-84ef-4591-abb4-a0cb724a70de", + "width": 64, + "x": 541, + "y": 168, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 11, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "fd0c8010-ddb8-42ee-81ca-a782f39a9173", + "width": 64, + "x": 606, + "y": 184, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 7, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "fe0e941a-a4df-4975-894b-bd6a941cba87", + "width": 64, + "x": 670, + "y": 195, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 4, + "customSize": true, + "depth": 0, + "height": 64, + "keepRatio": true, + "layer": "", + "name": "Hitbox", + "persistentUuid": "9431115a-e1e1-4a66-bd69-e22b2d4dfcaf", + "width": 64, + "x": 737, + "y": 201, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "editionSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.34375202416123213, + "windowMask": false + } + } + ], + "externalSourceFiles": [] +} \ No newline at end of file diff --git a/examples/3d-truck-extreme/Vehicle_Car_Door_Opening_Interior_Mono_02.wav b/examples/3d-truck-extreme/Vehicle_Car_Door_Opening_Interior_Mono_02.wav new file mode 100644 index 0000000000000000000000000000000000000000..4b08feb28e1dd9acce1df188c254476421b7da28 GIT binary patch literal 63168 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 literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/Wheel4.glb b/examples/3d-truck-extreme/Wheel4.glb new file mode 100644 index 0000000000000000000000000000000000000000..47f7fe4a0b9f6fac85451478647600f4f56862b9 GIT binary patch literal 41716 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 literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Building H Without Base.glb b/examples/3d-truck-extreme/assets/Building H Without Base.glb new file mode 100644 index 0000000000000000000000000000000000000000..b23370904d8157a739b84b2cfd1f8eb04b7e95a4 GIT binary patch literal 108188 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 bRfetK{U1IUhHtP%pDg|N#gEr~k1zip!{S`1 literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Car pedal round button.png b/examples/3d-truck-extreme/assets/Car pedal round button.png new file mode 100644 index 0000000000000000000000000000000000000000..f04848558eb3701b2e3f3a9ca65903d79ad2042c GIT binary patch literal 1042 zcmV+t1nv8YP)cS;9zcV1&efGY$Q)0YpvpI@(BVAPb5!i}JB5U?qU=P^S&OEr=R&l>+xYqi#$O zA2rPJvgiR?(DE|A%vyuQP}S~nWqM>S=gD@v{j17FL12zNXAJA3_>e~Tw*j6BQEW&j@UFJNGZz>-M92Ue;h7L=Qpc7#Pi0PQ3OpJ_Y}A_q z&w#jXyw0lt;`&{9v!=o`AkN&1tFbcI(W0Wbciue(4|_xh?!|p`B3Z5u+W$kjl(d0O z&jHIf%065;9H`=4xS-(tz(IOAlzlh%G3G+HXkIK9;eNjl4~Ii|yWK)oLfNPTb)il% zam_Rq1VIpLCDhF@Hi#}Bm&-*BAnK+sCQRWxolZmTgm<6{Yo@tsKA)=t#5+*UUCiNY zD?sG?A&~?4T8b z4+IS@$ku?dkd|^?vk_oy6O=m2+-x@D08uCXh*QdiO+!qxMRa^R$2O>@dAVGQ>p;}W zY}4JVUrS80bs$|tOZq@(0c7hyCcu9Vm8ARurFEc~zo3*?mUI&J(vr9bayp&F;Gr(& zJrWhSUP&>{6w#UPzHr&HNeePHV6Lk#`%(=id!}of>EgyRV-;S$kyuP1E!h5nOacAy z&WOa-F7!lzWMq~XLg}kt?uJqYHHP7UkdmG`Gkyl+{0yx0XE9KQW{CH{1<~SuCdG(90000jbVXQn zQ*UN;cVTj60AhJAVr*}3WMp|RV{&KQKGBibQV{c?-a;OG>?f?J) M07*qoM6N<$f*M`qjsO4v literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Construction Barrier.glb b/examples/3d-truck-extreme/assets/Construction Barrier.glb new file mode 100644 index 0000000000000000000000000000000000000000..f35a1a0fc8c626e20e4d504255c3122f8b27a799 GIT binary patch literal 4668 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 literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Hazard Spike Trap.glb b/examples/3d-truck-extreme/assets/Hazard Spike Trap.glb new file mode 100644 index 0000000000000000000000000000000000000000..4f86e82ea111f1bf83c629d7dd7bec4352745aba GIT binary patch literal 31016 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
    FF{t_a7MCB4f^RU59%SUp$v} zCFF_^c4HAbi~l-5{gd08^+UHWE>Z2wyRh2$>+Gka?|nKV8hB~3@!=nS9(}WJW_0ya z2hz80sM9A6tSM3bnOgh%)`$K$T;FtXvYvlJVe9TSYxIrr6QU2icXGOE?kv66>VfK9 zi1y1LVywRBljwok0$r&S{qIMD=~aJd)`RmtFDY17WW1kxGy3F5gLU^urRm>YpVIez zQXN(N6!Aa^#8?!6L_DNiiG$tz5^WWq)2bb1T!u0hL-j$4Ra%K>s}i@g61P^>A0-Zk z5(h(xL#q-8Ly3cB?C?kD8tPaB@?JidF+pFVR^W?e{X`r}WbQEb5}8xg4&o4%ImOs@ zStqg&)pM3=Rs`hYm-vL4tc9t%H59HO!wF!rdd0mMX?wZXb_T#BET z8c=+*#7*(RQ2OOOO8;AxF{V{J%D6b!a$IR8ZiecQ65F&AL(aR*g`vd3;*S!CRwWK; zB@S}D96NQtXR)K!o`OaHXeQdKa`-0VC1WFX6nR(uif63bg}#%0858!2ha`N1ovd8? zBxO=Zkz4jN%D5cYWL3w>XVo94zEmCQAL}am>YD5rLkBySoGN~H6)VvP`{JbU(3iz$ zH9iU!IZ@&-`|3{KzjR|)a%8C=hxqh37fSqlI(ElgIN4Nk)Sa5|R&5+heAF2B(2nES zl`$Sm9qOuYJWu$ZeN^o$aqg&}HuaB^(@ZZpo{K;(0=Wp}BG6R?#GX%4$lWW!0L;ZB z7Y{W8xq48ek((d6ddSs-8i8CrsL{x+54n2C)q@&=Ts^4K$gK~#ddSs-8i8CrsL{x+ z54n2C)q@&=Ts^4KxP^X5&9shgqz&L3=xW?=ha{>krv!L{CToAD2>IyGp!euJ?F7=m zH5#eCN{v)YuY!I{|3!7Q0DJ-ck=`dijRqf0nl?x~m(Hg_+WB;fR;D#j6_sgKG(j7y zMX8j=YNZs>dTAF@0rk=f=nHz8E~85DO8PyKb^+ys=hI*5Cc1%EQdk>D6Tv4^Py+RMuF4_&gn|?w8Z30~Zeg#d_F4B&p-YI$_3_9=~|i|A9(C-fNwX$<%n`jGxY#pDI|(&zLx&7pbV^XPx*1Z_G^ z0-r=fv~gMuHPJY&iAuCdTAWH~l2$@r(+ad+bRrdKCz4M)Sv!v^=wz*ePSl2Jr_mWS zOgn={Xs^*#w1i#*{ecR#lc_g&Zz|S~kcYx_1oU?**Dj}};7h4gdzUVuuhYAr-%x*T zCQSpMMt!y8wP7@rj@O3L*_v1DPlL&;4W{ARDD4zFiAHHB(S_O>+GLtSXJ}LCG|i=* zP6NrM4WtXS)$}d;F0BS#gDTiScYxnPH=`QXBl0V$h(^#TDx@wKF`y1#XT7@e`)!@|> zLr*sVxzYPd3gMSMSq1r}G?xOvj6(Rm6jy-02L3hN-$UPr=l6i_pzqPG^ep(ZWYBYT z3%qNFp9D_Sms%ierf<*+phfs?!PN|TA9$_p91$+W?<{iR8V>9d_rIi{V?@6MJ&RsnKtC^FEG?J`4*<@c8M1GJ)x8u4WtH$l1TOhrY?gGCHPwuC?Q5W}ven@-ir_>7GO8amfK)m*W9)ff~ zJqrFPo*bYbBVGqUkJD51D|!k1B|1dU(2E$`GoXWz{yRMn{yd(%2>u-Sb9k~Iz1$6c zH~hXHz26CbC&u#-yxj=CQS`eJquB@A3s0Xz>svtV|MReVJLop_@Cdv(2zmxRKML;- zfu172HdPysOV_60ny8Jz71I2;#tX?9pmVhIwb8hWG&in1EgzQ$(sLkVNj^|N?M!Vj zuH&?`a1GQ3;5rG?evq+b0MN(u5BeLfkLUwjy|p%KqyMFkas5q5+JN4qcj!NG{f_<{ z*MHJsTyH@7CS)u*478Kh(6zYM(iU7lpsl#l^dzn)=mA_0LSrYM^V6+D{s8W`0PUoO zl?6s&{~ghD5BJqST-aaWEBC(~)gJ$Cn&rb4`AxqYA#_sD7wS^~X!!X)y79yd4F}lH zFV4#o_CL8}m<11*HQ2b~@gc&d)Y;~LBdTKdjqO}pdta0>>mT>(KcbPb?+8D)LSM!C zsa8V+H zgYiUE>NA!)g!XLJy;$QV?OG`Ua&TUmJb=VH_r7QUo*vwZ{$(N9u`O=jf z9Tg*Ax{Mp*FYK84%3|b8SMnv~X1=l*@f3E>FwGQYBNyLAW(IbYb0isjs4J5tVV zRV;PbjxxX4Pf^cizC`U|9m~qie91W_mnhzbtI%wl^Bk=mS*~fJp2gWP|={9oxXWt!VytU`C zDE}&$<+>u5SpUt`6~?2BHwgQW%vx$3dhOb1W94?HG-Jr{{})+oOuFgyjyh>YN1U5v zJ8X~rWPNVOwoE$)+cNE^p{L7!p{GmxioUMsiyWEuxfZ2;y`*ZHv191!=u7Y2&Xi^h znf{M&7aHfierpuJs!m$bF%%tx+sn4xUfSgL(vG5IC^~6H$0;u?x69){ldo*toMPn= zPfPqchIaWYP$>Pv@5P|SQ{D&D@VB) zd{t^7_jlfPV*kbOi_E{=y^KUI9vp#OJ>=>^jXm#AU+$?52t7dbRzhPGz@$g&d(6&Z1A&*&p-{p2_g-2GWf}Ou7OSgKLzKVG|)is zfpi}DdC={J^Dr)O7f!wO0-X@D|415@T?*keNJ{0Zxg7U!gpgRI5no7V+ zaF%2Q&O1fHqmYfjiK9~RQpiT&**NfVkmcj-jSjBk3{*Z&f|Y`oLY9v+DrMkhkmcjq zWbnz5jl>zSN#K)kifSZI0AuGrEv}NGSAS=hS z8t@v(rs6EtQt+j8Irw}$p9=aq_yU|`nhKf^emPEfO$9B$iLEPeer+1)O7MkvJ`IF3 zYdD`)30?`=G(3xe#~`aff6Kr#CyD03ml>c-X*%>O!7JhaO!QF=UJY3-&KF$=ejP0b zUyjo-wV)N?D{%g$7Ss&hj8j6jpcGE;t-{HfI?zh+m3UqUY5{M-X`edK8t^qZ9aab8 zlS^0QR8T!=HTY^guLrFKUyHMZ^`Ld&>u~y}9&|O%5?+flI0?`-;Md@J0<<1{J^V_5 zn!uZI?koYi7ALXR!rnJPEjVS^0$&JN2f!b|nVwCc zo!~oho@WziH~4Ox@7V;}1-=Wqn{hhmLGTB0LToc=H~4OxA=(Vu55Ax70>2AqsWyY| z6sO7df$zf!qnknd!S~~w)6Jm0;Cpe#>1NPF;1A*C*%q9C+5^4^C$F}E_JZ%lS*R@_ zK4Y^Jr?R$yc7X4I?)PD5Klpz1|2@!d@ZIozD`+S9PPE$w+6%rHy5@Sk1OH8DKi@EE z=6`<(n7(LR`y-7AB;I4+ri3_d9`~0Dc+xUH-e4zH4Xy4&UgIeo6l!cKh4f+I%0ht;LeRPXDUi^O%rh zL0@hx3S_@5lXtd#D*mR;_e(E-QvAJ?u{RH|CiCCw7eCF)-#GGF7B}=elEt5&-j>B` wTfO<6tbG5h9a+5K_eEKJLL`{=0bL5;K5SciKkz8Tax=&Ct9H+0`u{-x2bn(06951J literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Launch round button.png b/examples/3d-truck-extreme/assets/Launch round button.png new file mode 100644 index 0000000000000000000000000000000000000000..7ad8ce67f18057d9facefef85738eb33d20cadde GIT binary patch literal 1117 zcmV-j1fu(iP)BV9Z9u9|aHk(N><+*jf58x$oy6!{Jaya4kJq0Ki_!Znq0ZqmkBRgLUMw*=)jh0#lz(r~1jnhQN6|9*0Hccs#QE z$sd8W4e2VFC;?QjvsksQu)3kw|LnS61VS2z)8kJ3fj~ z()=GtfCIQh&gV0&AC$89g`XqfXB6# zPeximx#|weG5>+CbYioCrzlcm6!|_ zr*(M}_sHLR;ApyD&UF$^+*^O{TwndTr~aCQa4;u)aI4k&7t}#w&77qE2IEo&tmJPo zFo($&@BaZ1A2V0IpT_3^001p?MObuGZ)S9NVRB^vVtFoNY;SL5WO*)Qa(QrcZ!T$V jVP|D7P)Z)9b1s0M%T00000NkvXXu0mjf5qt+H literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Road Side.glb b/examples/3d-truck-extreme/assets/Road Side.glb new file mode 100644 index 0000000000000000000000000000000000000000..1160788fd542aff90cf680274030919e583976ea GIT binary patch literal 6192 zcmd5<&2QX96rVP28baIjo6?rBI1=h%8$4r=KcXnnHndV8%~nZNfkIR{yH2uVzvOiS z?J83KgC0;Nid6Mbao`Hqsv(>J6~v7rN3K0ot$Kp@X6^NOy_@WcBJkFkH*emz-}~8J zEiPQ$PY6-Z5_0$`As@_VXX}bntGT{1R##Ttvg)PSlfV~cgA?393~%!{+MQm*7( zJfKUPOVO^bl-$~yPz~h0ij%)tE96~plxrF@4PCQLs;Q=CLL_ZihN@Z2)VRrPMoq4zAzO?#2+yfi*PLRn zt|{j>GjxO7mPNTuE$~fE-Ox>4<)*Fy-`0W0bjB=7xn|lHRW+@H_bd5TtZgsJtCp^r z1_S4s4q538ys5UPa?3Uhs;YQGF)B@^8pdTCCU7mYCI4ap+N3wv%wUYGhD{C5n2o73 zo0_I-7={Hg*^C*$)2V4$T(xzm5Y)ufg=1_1=q}NA&1Y~8I4QZws$QW~@CzG(nB)6i zVR_xhZC$yZou6Kq&d!PsUAXemR5m;J{!LXGqiJO}J9jNJql~f5v{ESN3prHLqP7Da zeD<9T>S;wb$RmS>Y|xYq(%lSNaf5bbkU}6)h!kQEM?*y4IY!FjHYubRrcL#jQHVb> zs%?rXcXCjZTE%M&;PU#)itF7dxSxq?<|?IXr3{m}aH|SH!6`gRC0AL8(HvutOUd~h zhkKM`vr)Toan5XmQv>_mQUy*sI_@QEr120W zec@BNab-#a0E3a2VuSMR6(d zaSLJ7Y%ooW>kQr~cD!q$)00Zjvbx&1xNWEa{CjmUjQ$>RMrBGiFopMc*XqeCBfKQl zqcS6=1nxVO86}byqB=u|$2vG!vUYXsuF}c+?}Zj^2R0V$uEpMCT;VuUZ&U2H6BQL3 z;%KQgq!WRi49o(Qmv8y*j9Xsy;hRj;KpPp^l@;-!2z}u@-YR}GYVeAO_g)B`30=k@ za9LLv>sCAAnHxR$wpv`nM@l?!ZI{5cR&Cqr!8PM8CBx65xbxkrmT*oD)`NGdw`9&# zwZ;2xsbiVsN5-fQh}P{h!#rc!45R5*JKe*1o=WSpOb zbthOeYu|l5f%{<15V9rCgSF@Lz3dO)>AQ^nf;IE}_T3%ahiiB~@!(H5yPpZ=g8k0Z z7oW=VnP3mHcXuGi;M&6H*$a*R63TZ&|BLoT>|2dsx}q`OQ2v$D`^i2qy^riCeWafp zBnRN`Cx^%&d5sLfJxE?BN68U#81AEFh@2qD$uYQ3kdx#LIZaN%eTKY2&XG6CS-8)U z^O#mk&o*aB@bMgPX+D5IGXB-Qd(D}H{iBARk#Rf=>E{_l_kz%}gCus_4TZSBwSUDxuC6YsWH zRrgMI4#L3!xDSda(GOUU^*@B-A|Dxh0y^Y3aSm|>^9<)PoWlTLg1JMJ-S-l{bqL(p GAAbW~QOj=t literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Road Slant Curve.glb b/examples/3d-truck-extreme/assets/Road Slant Curve.glb new file mode 100644 index 0000000000000000000000000000000000000000..b9ff61fcbef1a9b3ab074289f0ecaa57d91e668f GIT binary patch literal 35472 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 Nc)I$ztaD0e0symVQbhm& literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Square Green Slider Fill Bar.png b/examples/3d-truck-extreme/assets/Square Green Slider Fill Bar.png new file mode 100644 index 0000000000000000000000000000000000000000..fe0550fe741de4f8afead0fdae15a0d185b6eda7 GIT binary patch literal 170 zcmeAS@N?(olHy`uVBq!ia0vp^7lD|YgAGVNoS(4_NO2Z;L>2?Zgg}__(%rg0K*1PK z7srr{dv9-UQ_5_}vuxKwA*EGUub7CW+*`5G#N^7l%gsqWNgAd+Ee`{o z-FcTzU6^I)7h))o!gnJe;v>7z0+GYKEsPTwmP(|FF>uw{ysvJW-2*h9!PC{xWt~$( F69C5VG4ucc literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Tile High.glb b/examples/3d-truck-extreme/assets/Tile High.glb new file mode 100644 index 0000000000000000000000000000000000000000..7a3a9e8b6066a88a2a9c17ef7ae1d7f4b9a7d750 GIT binary patch literal 1968 zcmb7ETTdE66h2<6t*y4Tt$ii)yrs)7u*gFVQcY=53=q?V7_-0tn=HFzcc4{5!k_T5 zkA3eyF#ai@d(ObZDqe8Ru-}~Xo!hswHtq8MA^`kb1;{T0d@mIa`^@xxE?BzHn%v=@ zDO``G*^idzI<6mSVn}4y=1!e^k=*A(q^Cy{QC(#U>v7MwTnEWoRAmE&`87bp#)IO`4KF_+g>+PF0DN03+CUjjhl5ss{#B|lr4eaC&Q&QDanxQ8QZCi^O30=Wy zWhXeKoPHw90a_yASv#K9wuIFi(@Y^etJ)QG?6adnDOb)F4y91#y`R}aq4@PwW$Bp0 z4hzMDOrE7Rd=ZvYw`vrkPp8M2fz;frq04u@ksQ@-qrtsni~o{IYi_&aI;czetb?yD z5z~?itGQhiDy_vS+i#LOn!v#|`bm($7U};P5Qp{_;wOsP9VihY-}3`3&+Z2^G459j;Eeb+qhNQNa7sf(mGw=kqBb}LQ|*W zbhRRp$hRec-P|Gmhk;9g;TL@Fj4+u3EbZtgj$HR)ilt49H~|jZ$9PgJ;9QRQch(AX zkT>C=J&dVr(DMWb9Lf>I-iOgo@!{S^`LECaWUkNGujq;X9eg5|=d1A<{TI@Ief}3Q z`Q;g(qw}q}AP;hH=AGsn<)70(sdK9j%zr^W(rmPb^I=J)806EE@k0sk#6#3gt|4;g zz+?8bFEmVgd2urX6&tMt%3ar8!ynyGp*We{=z&gCb Zy#cRb6W+ob+?((Yw%`N2$Grs~;Xe#N2WkKS literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Tile Slant High.glb b/examples/3d-truck-extreme/assets/Tile Slant High.glb new file mode 100644 index 0000000000000000000000000000000000000000..0dc905a7fc9bd24984d830da58e2a6229b15ed7e GIT binary patch literal 1992 zcmb7EPfrs;6o32|R8&-q7t_pnt=rwU+cpML5CRI603n)&kZn6{H`(qsy8{XhNxy-K zi6=um7(am*Z-kScy!r+F3~=?m=`O4kVi}ms@BM%8H?ytT8}t1D@N)#9G6?W;y|B_^ zrtfpXaxGTl4);vqdMw9Y)jij7{a6h{Vly^(D%^`LJ}bm_^>`|-t4v|L-19BhL1!(l zvIB+rWlX?wYJhx}E4G+pHc-dbrA=XuTj69#Y#nT!OD)#meqDwJ{=%~Pwr`t`Sg>k! ztR_6uL0QO(MODGSxRKgAP+F{9x9p0?v6G@oNjnuqqq%CLRxqm6Fa`H4)BdNarn$=- z`Nq@FPnx@zbKc5;a- zt?C)g&{Kw%)e=TZS8!z62~H|0IOAp+HL^1QMQwc4tu(G>@Y~{2hWqU__$5S+YB1!G(IJF5x9Ccq zN*{#|)Crl5ZO+Z=_+*gZNLB3pe^t-JwXSgOI^o^bk)iJDQYmNFar~hA`fPqFzb2p6 zdHYckC4r?q!I!vG6Zo#ROh#d(C{(NRW5aJmm|l&(J3X0A<5h)Jbj2pJI9N1RChIl2 zt8y}PjoQYA(ncERh?dsrMR!OD2#8FbNzy}$#bOHs05gj#_{#%F-=7Rk<4OC76u2Y~ z^rQ>*S7Gv}O^bX&9Mwxa_WR58z#jS>ksRm=)21c$9Vl_w=SBbNz=uw<(IOn?l=|q5 zmtcyE`iJ=FWdAV#{>P_dIsw|#cpeAxaUkbU_CHGd$^KWwhlr(&XGad>>fhc>Me^h? z$Y=S&{8!ln{aGK|kAKPf!Fl|7^aJ&grxR<3oV0tx$V4Xw{b|YgwuG1BHt|cVjsHDh z=}YcmU%lcmH~C+QtEYdas;3pQw|l|;(1)&l&<_JJ3_~!8dl*Jw3`XGw?lHIt<8T{p a;U0%OFah`AF764q50mf^9^jsYNAMRXA0jgV literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Tile Slant.glb b/examples/3d-truck-extreme/assets/Tile Slant.glb new file mode 100644 index 0000000000000000000000000000000000000000..40896032a1e47e747624598f437e1a1206f58793 GIT binary patch literal 1984 zcmb7E-A)rh6h8b2ivNh1c-2f|;>B9GyKT2^lv*k%3KW45OeJJnhIW(fZnHZe(2(@n zdoPI>h9~d=kf-n^yyn_-rn|6Eh-F|hXU=@z`T1tHHG6rw9{_$21AG|-_^?!(Z!y#N zxnQ{#t8s^Wrf@x$V;}3D>$rZbhLqT(&7BSI#b#cXV%vH=71vd!ux;-7mg^u`i>qv3 zVSW_@u$&rLKFgI`%rP72V@vW(VUD}O=^(MTzjn53u?F|+k{aNJW%G64HXVVPgl9Tv z3z@B~D)<*SQfvE4i&g8Ez2R}JqO4NDPBzhKE|};QjIuOL!9B~g&lS`(w|RpQ3Tsxp zIWA1wwyKNnR;})EAE7N)F@0WiZP%MNt5TJ+8c*rEW~7sP#z^R@p&MAqC9brpXEZ}k z8Cq6L7%5%Bc4Z~lrELFHmpSyr&NbWgtcE45?Eq&A;aQa}LE9EvC@sw_&y?n+RLfJV z#ZqbU?Yhcx35Cs<7Uv4HET`dBSk8u3C5nF5K63V@>Sh&>eAnyfQQ6wur==PsxJCEzLV^@p z&?jU#wlY=J@vWe^k+fL+|I(h(wJy4L9eQ_ml&Cwqbjqf6>_5o9R4mLE7Ui2dD?h5D zRIsuu_$+s70w1)N$ta8*rOi$GmEp%BOs_^CoSw|4@vcHCy10ofHWuZ|V7;=tGAA?F z$ZcFmZKSb}Xlk9Fb4P?gfJoPwB)zm)?EL`16a*u0gU;p)ag80FD$_x2n+;AVp4|x~Q z!#E-CUF}fj57y&nZ+=i61zM3CYSQk_MzuN|#M6-cwlpub+oTtbHvacuODw^|x_Y(4 z*o42*{`+ZXVs~|i&fC4%{m_TdKIn%57=jxxh;s;rVFYf$O`Ice8}7kfxP$W^+=o$k T2oG?M!Xp@m$1sL-9G<{GC@>a} literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Transperent.png b/examples/3d-truck-extreme/assets/Transperent.png new file mode 100644 index 0000000000000000000000000000000000000000..a99bc2185cce8269055bc7bffc8acef9e71191b3 GIT binary patch literal 198 zcmeAS@N?(olHy`uVBq!ia0vp^4j|0I1|(Ny7TyC=jKx9jP7LeL$-D$|8a!PbLn`9l zUT+j+P~c%Q-1Yy0)rsSR7T$f;x1)c|W%$FOzJU3Vtc9uvBUeBJlL&`;gCkFpK(hpo zasp2xkUpZoW+>su0A;uxkOB#G0M!`GVSqAv8caa~AjJt5j8KLIW41tZDVsg-jQWGD To9#G(Zej3r^>bP0l+XkKqa8N? literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Yellow Button_Hovered.png b/examples/3d-truck-extreme/assets/Yellow Button_Hovered.png new file mode 100644 index 0000000000000000000000000000000000000000..d575c5e6104c3f4f77ab0e19c6f700bef0819c25 GIT binary patch literal 2270 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 literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/Yellow Button_Idle.png b/examples/3d-truck-extreme/assets/Yellow Button_Idle.png new file mode 100644 index 0000000000000000000000000000000000000000..b8b5b35afdfca3753c93e298416b3fd085d2922d GIT binary patch literal 2285 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 literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/assets/spikesLarge.glb b/examples/3d-truck-extreme/assets/spikesLarge.glb new file mode 100644 index 0000000000000000000000000000000000000000..722c544b12f86002041a87f60efc4b8648597ee9 GIT binary patch literal 19304 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 literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/motor sound.wav b/examples/3d-truck-extreme/motor sound.wav new file mode 100644 index 0000000000000000000000000000000000000000..e4ef1306c82e44ff03f14659ab662293ff80a2a4 GIT binary patch literal 453714 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≀k<}H?JTSaHYS+P*ES1Q+ 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 From d4ac7ee00ac3499b02c189a340924cc37d158299 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 4 Nov 2024 10:15:15 +0100 Subject: [PATCH 09/10] Add description and tags. --- examples/3d-truck-extreme/README.md | 1 + examples/3d-truck-extreme/TAGS.md | 1 + 2 files changed, 2 insertions(+) create mode 100644 examples/3d-truck-extreme/README.md create mode 100644 examples/3d-truck-extreme/TAGS.md diff --git a/examples/3d-truck-extreme/README.md b/examples/3d-truck-extreme/README.md new file mode 100644 index 000000000..801396851 --- /dev/null +++ b/examples/3d-truck-extreme/README.md @@ -0,0 +1 @@ +Rush over the hills while landing on your 4 wheels. \ No newline at end of file diff --git a/examples/3d-truck-extreme/TAGS.md b/examples/3d-truck-extreme/TAGS.md new file mode 100644 index 000000000..09ba07039 --- /dev/null +++ b/examples/3d-truck-extreme/TAGS.md @@ -0,0 +1 @@ +game, advanced \ No newline at end of file From c89f9b9fac1d408653c65da99255c6a32552c00f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 4 Nov 2024 10:21:06 +0100 Subject: [PATCH 10/10] Allow to always send a score to the leaderboard. --- .../3d-truck-extreme/3d-truck-extreme.json | 27 +++---------------- 1 file changed, 3 insertions(+), 24 deletions(-) diff --git a/examples/3d-truck-extreme/3d-truck-extreme.json b/examples/3d-truck-extreme/3d-truck-extreme.json index dd7e6c6ea..bdb78e46b 100644 --- a/examples/3d-truck-extreme/3d-truck-extreme.json +++ b/examples/3d-truck-extreme/3d-truck-extreme.json @@ -2556,7 +2556,7 @@ "gridColor": 10401023, "gridAlpha": 0.8, "snap": false, - "zoomFactor": 1.1726229638177725, + "zoomFactor": 0.6455105703311529, "windowMask": false }, "objectsGroups": [ @@ -6576,7 +6576,7 @@ }, "parameters": [ "SubmitButton", - "no", + "yes", "" ] }, @@ -6588,7 +6588,7 @@ "SubmitButton", "Effect", "\"Disabled\"", - "yes" + "" ] } ], @@ -6685,27 +6685,6 @@ "\"high_score/\" + LeaderboardId", "Score" ] - }, - { - "type": { - "value": "PanelSpriteButton::PanelSpriteButton::Activate" - }, - "parameters": [ - "SubmitButton", - "yes", - "" - ] - }, - { - "type": { - "value": "EffectCapability::EffectBehavior::EnableEffect" - }, - "parameters": [ - "SubmitButton", - "Effect", - "\"Disabled\"", - "" - ] } ] }

    R-Du>3}W4CV3+Wr?yX@wg{U-7t0_JcFPf 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 literal 0 HcmV?d00001 From 08d9b6d3e574de2e258204d4e1f80096b65bb527 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 28 Oct 2024 16:48:46 +0100 Subject: [PATCH 02/10] Use a custom object to handle leaderboards. --- examples/3d-truck-extreme/Truck Extreme.json | 2549 +++++++++++------- 1 file changed, 1649 insertions(+), 900 deletions(-) diff --git a/examples/3d-truck-extreme/Truck Extreme.json b/examples/3d-truck-extreme/Truck Extreme.json index c890045bb..2faf3d768 100644 --- a/examples/3d-truck-extreme/Truck Extreme.json +++ b/examples/3d-truck-extreme/Truck Extreme.json @@ -2590,6 +2590,11 @@ } ], "variables": [ + { + "name": "GameState", + "type": "string", + "value": "ReadyToStart" + }, { "folded": true, "name": "WheelJoint1", @@ -2612,70 +2617,6 @@ "name": "WheelJoint4", "type": "number", "value": 0 - }, - { - "folded": true, - "name": "GameOver", - "type": "boolean", - "value": false - }, - { - "folded": true, - "name": "LevelComplete", - "type": "boolean", - "value": false - }, - { - "folded": true, - "name": "Time", - "type": "number", - "value": 0 - }, - { - "folded": true, - "name": "BestTime", - "type": "number", - "value": 0 - }, - { - "name": "Leaderboard", - "type": "structure", - "children": [ - { - "name": "1", - "type": "string", - "value": "5280857f-acae-4566-b785-13de133f7e4a" - }, - { - "folded": true, - "name": "2", - "type": "string", - "value": "e1dda3f2-2999-4ada-b58f-51775f6cbcd4" - }, - { - "folded": true, - "name": "3", - "type": "string", - "value": "b94c733a-f461-4a98-b037-acdcd6c1c12e" - }, - { - "folded": true, - "name": "4", - "type": "string", - "value": "7892fee8-8873-4d99-a6e1-2a90f395a0ea" - }, - { - "folded": true, - "name": "5", - "type": "string", - "value": "da66c58c-54e6-4bfb-8e9c-7a9341073013" - }, - { - "name": "6", - "type": "string", - "value": "69da9595-f7f2-45c2-ac8f-66f87931a215" - } - ] } ], "instances": [ @@ -2863,119 +2804,6 @@ "stringProperties": [], "initialVariables": [] }, - { - "angle": 0, - "customSize": true, - "depth": 0, - "height": 720, - "layer": "Level Complete", - "name": "Black", - "opacity": 191, - "persistentUuid": "bde77877-c367-4a0d-98fb-de25956129d1", - "width": 1280, - "x": 0, - "y": 0, - "zOrder": 13, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "depth": 0, - "height": 115, - "layer": "Level Complete", - "name": "LevelCompleteText", - "persistentUuid": "4fad3591-1cf1-4c33-b8cc-061be6b823dd", - "width": 1280, - "x": 0, - "y": 108, - "zOrder": 17, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "depth": 48, - "height": 80, - "layer": "Level Complete", - "name": "MenuButton", - "persistentUuid": "ef23678a-fe72-4a1a-9b4c-313b56a92f68", - "width": 256, - "x": 128, - "y": 504, - "zOrder": 18, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "depth": 48, - "height": 80, - "layer": "Level Complete", - "name": "SubmitTimeButton", - "persistentUuid": "3b781dbf-5d46-4b59-b08b-f62fbac52c76", - "width": 384, - "x": 455, - "y": 504, - "zOrder": 19, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "depth": 48, - "height": 80, - "layer": "Level Complete", - "name": "NextButton", - "persistentUuid": "abb202e9-a232-478e-9360-13679c1c6557", - "width": 256, - "x": 896, - "y": 504, - "zOrder": 20, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "depth": 0, - "height": 66, - "layer": "Level Complete", - "name": "LevelCompleteTimeText", - "persistentUuid": "8c33781f-df07-48d4-843e-8302b6cd629f", - "width": 1280, - "x": 0, - "y": 261, - "zOrder": 21, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "depth": 0, - "height": 66, - "layer": "Level Complete", - "name": "LevelCompleteBestTimeText", - "persistentUuid": "acd50a72-44b5-4333-be9d-90de77b50fb7", - "width": 1280, - "x": 0, - "y": 362, - "zOrder": 22, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, { "angle": 0, "customSize": true, @@ -3048,6 +2876,26 @@ } ], "objects": [ + { + "assetStoreId": "", + "name": "LeaderboardDialog", + "type": "LeaderboardDialog::LeaderboardDialog", + "variables": [], + "effects": [], + "behaviors": [ + { + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "name": "Anchor", + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "type": "AnchorBehavior::AnchorBehavior", + "useLegacyBottomAndRightAnchors": false + } + ], + "content": {} + }, { "assetStoreId": "", "name": "CarBody", @@ -4040,355 +3888,6 @@ } } }, - { - "assetStoreId": "", - "bold": true, - "italic": false, - "name": "LevelCompleteText", - "smoothed": true, - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Anchor", - "type": "AnchorBehavior::AnchorBehavior", - "bottomEdgeAnchor": 0, - "leftEdgeAnchor": 4, - "relativeToOriginalWindowSize": true, - "rightEdgeAnchor": 4, - "topEdgeAnchor": 0, - "useLegacyBottomAndRightAnchors": false - } - ], - "string": "Level Complete!", - "font": "", - "textAlignment": "center", - "characterSize": 100, - "color": { - "b": 255, - "g": 255, - "r": 255 - }, - "content": { - "bold": true, - "isOutlineEnabled": false, - "isShadowEnabled": false, - "italic": false, - "outlineColor": "255;255;255", - "outlineThickness": 2, - "shadowAngle": 90, - "shadowBlurRadius": 2, - "shadowColor": "0;0;0", - "shadowDistance": 4, - "shadowOpacity": 127, - "smoothed": true, - "underlined": false, - "text": "Level Complete!", - "font": "", - "textAlignment": "center", - "verticalTextAlignment": "top", - "characterSize": 100, - "color": "255;255;255" - } - }, - { - "assetStoreId": "615de0316452630b9f4f6a39decc82e2449b82c1afd1ff24d6470dad2922177b", - "name": "SubmitTimeButton", - "type": "PanelSpriteButton::PanelSpriteButton", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Anchor", - "type": "AnchorBehavior::AnchorBehavior", - "leftEdgeAnchor": 4, - "rightEdgeAnchor": 4, - "bottomEdgeAnchor": 0, - "relativeToOriginalWindowSize": true, - "topEdgeAnchor": 0, - "useLegacyBottomAndRightAnchors": false - } - ], - "content": { - "LeftPadding": 16, - "RightPadding": 16, - "PressedLabelOffsetY": 10, - "BottomPadding": 32, - "TopPadding": 16, - "HoveredFadeOutDuration": 0.25 - }, - "childrenContent": { - "Hovered": { - "bottomMargin": 32, - "height": 106, - "leftMargin": 16, - "rightMargin": 16, - "texture": "Yellow Button_Hovered.png", - "tiled": true, - "topMargin": 16, - "width": 256 - }, - "Idle": { - "bottomMargin": 32, - "height": 106, - "leftMargin": 16, - "rightMargin": 16, - "texture": "Yellow Button_Idle.png", - "tiled": true, - "topMargin": 16, - "width": 256 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "SUBMIT TIME", - "font": "", - "textAlignment": "center", - "characterSize": 50, - "color": { - "b": 255, - "g": 255, - "r": 255 - }, - "content": { - "bold": false, - "isOutlineEnabled": true, - "isShadowEnabled": false, - "italic": false, - "outlineColor": "0;0;0", - "outlineThickness": 4, - "shadowAngle": 90, - "shadowBlurRadius": 2, - "shadowColor": "0;0;0", - "shadowDistance": 4, - "shadowOpacity": 127, - "smoothed": true, - "underlined": false, - "text": "SUBMIT TIME", - "font": "", - "textAlignment": "center", - "verticalTextAlignment": "top", - "characterSize": 50, - "color": "255;255;255" - } - }, - "Pressed": { - "bottomMargin": 16, - "height": 106, - "leftMargin": 16, - "rightMargin": 16, - "texture": "Yellow Button_Pressed.png", - "tiled": true, - "topMargin": 32, - "width": 256 - } - } - }, - { - "assetStoreId": "615de0316452630b9f4f6a39decc82e2449b82c1afd1ff24d6470dad2922177b", - "name": "NextButton", - "type": "PanelSpriteButton::PanelSpriteButton", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Anchor", - "type": "AnchorBehavior::AnchorBehavior", - "leftEdgeAnchor": 0, - "rightEdgeAnchor": 3, - "bottomEdgeAnchor": 0, - "relativeToOriginalWindowSize": true, - "topEdgeAnchor": 0, - "useLegacyBottomAndRightAnchors": false - } - ], - "content": { - "LeftPadding": 16, - "RightPadding": 16, - "PressedLabelOffsetY": 10, - "BottomPadding": 32, - "TopPadding": 16, - "HoveredFadeOutDuration": 0.25 - }, - "childrenContent": { - "Hovered": { - "bottomMargin": 32, - "height": 106, - "leftMargin": 16, - "rightMargin": 16, - "texture": "Yellow Button_Hovered.png", - "tiled": true, - "topMargin": 16, - "width": 256 - }, - "Idle": { - "bottomMargin": 32, - "height": 106, - "leftMargin": 16, - "rightMargin": 16, - "texture": "Yellow Button_Idle.png", - "tiled": true, - "topMargin": 16, - "width": 256 - }, - "Label": { - "bold": false, - "italic": false, - "smoothed": true, - "underlined": false, - "string": "NEXT", - "font": "", - "textAlignment": "center", - "characterSize": 50, - "color": { - "b": 255, - "g": 255, - "r": 255 - }, - "content": { - "bold": false, - "isOutlineEnabled": true, - "isShadowEnabled": false, - "italic": false, - "outlineColor": "0;0;0", - "outlineThickness": 4, - "shadowAngle": 90, - "shadowBlurRadius": 2, - "shadowColor": "0;0;0", - "shadowDistance": 4, - "shadowOpacity": 127, - "smoothed": true, - "underlined": false, - "text": "NEXT", - "font": "", - "textAlignment": "center", - "verticalTextAlignment": "top", - "characterSize": 50, - "color": "255;255;255" - } - }, - "Pressed": { - "bottomMargin": 16, - "height": 106, - "leftMargin": 16, - "rightMargin": 16, - "texture": "Yellow Button_Pressed.png", - "tiled": true, - "topMargin": 32, - "width": 256 - } - } - }, - { - "assetStoreId": "", - "bold": false, - "italic": false, - "name": "LevelCompleteTimeText", - "smoothed": true, - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Anchor", - "type": "AnchorBehavior::AnchorBehavior", - "bottomEdgeAnchor": 0, - "leftEdgeAnchor": 4, - "relativeToOriginalWindowSize": true, - "rightEdgeAnchor": 4, - "topEdgeAnchor": 0, - "useLegacyBottomAndRightAnchors": false - } - ], - "string": "Time:", - "font": "", - "textAlignment": "center", - "characterSize": 60, - "color": { - "b": 255, - "g": 255, - "r": 255 - }, - "content": { - "bold": false, - "isOutlineEnabled": false, - "isShadowEnabled": false, - "italic": false, - "outlineColor": "255;255;255", - "outlineThickness": 2, - "shadowAngle": 90, - "shadowBlurRadius": 2, - "shadowColor": "0;0;0", - "shadowDistance": 4, - "shadowOpacity": 127, - "smoothed": true, - "underlined": false, - "text": "Time:", - "font": "", - "textAlignment": "center", - "verticalTextAlignment": "top", - "characterSize": 60, - "color": "255;255;255" - } - }, - { - "assetStoreId": "", - "bold": false, - "italic": false, - "name": "LevelCompleteBestTimeText", - "smoothed": true, - "type": "TextObject::Text", - "underlined": false, - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Anchor", - "type": "AnchorBehavior::AnchorBehavior", - "bottomEdgeAnchor": 0, - "leftEdgeAnchor": 4, - "relativeToOriginalWindowSize": true, - "rightEdgeAnchor": 4, - "topEdgeAnchor": 0, - "useLegacyBottomAndRightAnchors": false - } - ], - "string": "Best time:", - "font": "", - "textAlignment": "center", - "characterSize": 60, - "color": { - "b": 255, - "g": 255, - "r": 255 - }, - "content": { - "bold": false, - "isOutlineEnabled": false, - "isShadowEnabled": false, - "italic": false, - "outlineColor": "255;255;255", - "outlineThickness": 2, - "shadowAngle": 90, - "shadowBlurRadius": 2, - "shadowColor": "0;0;0", - "shadowDistance": 4, - "shadowOpacity": 127, - "smoothed": true, - "underlined": false, - "text": "Best time:", - "font": "", - "textAlignment": "center", - "verticalTextAlignment": "top", - "characterSize": 60, - "color": "255;255;255" - } - }, { "adaptCollisionMaskAutomatically": true, "assetStoreId": "0a047f540abdcd214da0055256042cf0dd0f81cf779e1cbf4334ee8f892edf51", @@ -4937,24 +4436,7 @@ ] }, { - "folderName": "Level complete", - "children": [ - { - "objectName": "LevelCompleteText" - }, - { - "objectName": "LevelCompleteTimeText" - }, - { - "objectName": "LevelCompleteBestTimeText" - }, - { - "objectName": "SubmitTimeButton" - }, - { - "objectName": "NextButton" - } - ] + "objectName": "LeaderboardDialog" }, { "objectName": "Background" @@ -5353,33 +4835,6 @@ } ] }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "GroupExists" - }, - "parameters": [ - "\"Save\"", - "\"BestTimeLevel\"+SelectedLevel" - ] - } - ], - "actions": [ - { - "type": { - "value": "ReadNumberFromStorage" - }, - "parameters": [ - "\"Save\"", - "\"BestTimeLevel\" + SelectedLevel", - "", - "BestTime" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ @@ -5418,22 +4873,12 @@ "conditions": [ { "type": { - "value": "BooleanVariable" - }, - "parameters": [ - "LevelComplete", - "False", - "" - ] - }, - { - "type": { - "value": "BooleanVariable" + "value": "StringVariable" }, "parameters": [ - "GameOver", + "GameState", "=", - "" + "\"Playing\"" ] } ], @@ -5466,6 +4911,16 @@ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "GameState", + "=", + "\"ReadyToStart\"" + ] + }, { "type": { "value": "BuiltinCommonInstructions::Or" @@ -5619,6 +5074,16 @@ } ], "actions": [ + { + "type": { + "value": "SetStringVariable" + }, + "parameters": [ + "GameState", + "=", + "\"Playing\"" + ] + }, { "type": { "value": "UnPauseTimer" @@ -5673,22 +5138,12 @@ "conditions": [ { "type": { - "value": "BooleanVariable" + "value": "StringVariable" }, "parameters": [ - "GameOver", + "GameState", "=", - "" - ] - }, - { - "type": { - "value": "BooleanVariable" - }, - "parameters": [ - "LevelComplete", - "False", - "" + "\"Playing\"" ] } ], @@ -6502,6 +5957,16 @@ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "GameState", + "=", + "\"Playing\"" + ] + }, { "type": { "value": "BuiltinCommonInstructions::Or" @@ -6581,27 +6046,17 @@ ] } ] - }, - { - "type": { - "value": "BooleanVariable" - }, - "parameters": [ - "GameOver", - "False", - "" - ] } ], "actions": [ { "type": { - "value": "SetBooleanVariable" + "value": "SetStringVariable" }, "parameters": [ - "GameOver", - "True", - "" + "GameState", + "=", + "\"GameOver\"" ] } ] @@ -6753,12 +6208,12 @@ "conditions": [ { "type": { - "value": "BooleanVariable" + "value": "StringVariable" }, "parameters": [ - "GameOver", - "True", - "" + "GameState", + "=", + "\"GameOver\"" ] }, { @@ -6994,50 +6449,34 @@ "conditions": [ { "type": { - "value": "PosX" + "value": "StringVariable" }, "parameters": [ - "CarBody", - ">", - "GoalFlag.X()" + "GameState", + "=", + "\"Playing\"" ] }, { "type": { - "value": "BooleanVariable" + "value": "PosX" }, "parameters": [ - "GameOver", - "False", - "" + "CarBody", + ">", + "GoalFlag.X()" ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] } ], "actions": [ { "type": { - "value": "SetBooleanVariable" + "value": "SetStringVariable" }, "parameters": [ - "LevelComplete", - "True", - "" - ] - }, - { - "type": { - "value": "SetNumberVariable" - }, - "parameters": [ - "Time", + "GameState", "=", - "TimerElapsedTime(\"TimeCounter\")" + "\"LevelComplete\"" ] }, { @@ -7048,15 +6487,6 @@ "2" ] }, - { - "type": { - "value": "ShowLayer" - }, - "parameters": [ - "", - "\"Level Complete\"" - ] - }, { "type": { "value": "HideLayer" @@ -7074,173 +6504,101 @@ "", "\"Mobile Controls\"" ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { "type": { - "value": "LayerVisible" + "value": "Create" }, "parameters": [ "", + "LeaderboardDialog", + "0", + "0", "\"Level Complete\"" ] } ], - "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "BuiltinCommonInstructions::Once" + "value": "NumberVariable" }, - "parameters": [] + "parameters": [ + "SelectedLevel", + "=", + "1" + ] } ], "actions": [ { "type": { - "value": "TextContainerCapability::TextContainerBehavior::SetValue" + "value": "LeaderboardDialog::LeaderboardDialog::SetLeaderboardId" }, "parameters": [ - "LevelCompleteText", - "Text", + "LeaderboardDialog", "=", - "\"Level \" + SelectedLevel + \" Complete!\"" + "\"5280857f-acae-4566-b785-13de133f7e4a\"", + "" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "PanelSpriteButton::PanelSpriteButton::Activate" + "value": "NumberVariable" }, "parameters": [ - "SubmitTimeButton", - "no", - "" + "SelectedLevel", + "=", + "2" ] } ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "NumberVariable" - }, - "parameters": [ - "BestTime", - "=", - "0" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetNumberVariable" - }, - "parameters": [ - "BestTime", - "=", - "Time" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "TextContainerCapability::TextContainerBehavior::SetValue" - }, - "parameters": [ - "LevelCompleteTimeText", - "Text", - "=", - "\"Time: \" + TimeText.Text::Value()" - ] - }, - { - "type": { - "value": "TextContainerCapability::TextContainerBehavior::SetValue" - }, - "parameters": [ - "LevelCompleteBestTimeText", - "Text", - "=", - "\"Best time: \" + TimeFormatter::SecondsToHHMMSS000(BestTime)" - ] - } - ] - }, + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "NumberVariable" - }, - "parameters": [ - "Time", - "<=", - "BestTime" - ] - } - ], - "actions": [ - { - "type": { - "value": "PanelSpriteButton::PanelSpriteButton::Activate" - }, - "parameters": [ - "SubmitTimeButton", - "yes", - "" - ] - }, - { - "type": { - "value": "PlayerAuthentication::DisplayAuthenticationBanner" - }, - "parameters": [ - "" - ] - }, - { - "type": { - "value": "EcrireFichierExp" - }, - "parameters": [ - "\"Save\"", - "\"BestTimeLevel\"+SelectedLevel", - "Time" - ] - } + "type": { + "value": "LeaderboardDialog::LeaderboardDialog::SetLeaderboardId" + }, + "parameters": [ + "LeaderboardDialog", + "=", + "\"e1dda3f2-2999-4ada-b58f-51775f6cbcd4\"", + "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "NumberVariable" + }, + "parameters": [ + "SelectedLevel", + "=", + "3" + ] + } + ], "actions": [ { "type": { - "value": "ResizableCapability::ResizableBehavior::SetSize" + "value": "LeaderboardDialog::LeaderboardDialog::SetLeaderboardId" }, "parameters": [ - "Black", - "Resizable", - "SceneWindowWidth()", - "SceneWindowHeight()" + "LeaderboardDialog", + "=", + "\"b94c733a-f461-4a98-b037-acdcd6c1c12e\"", + "" ] } ] @@ -7250,30 +6608,24 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + "value": "NumberVariable" }, "parameters": [ - "MenuButton", - "" + "SelectedLevel", + "=", + "4" ] } ], "actions": [ { "type": { - "value": "Scene" - }, - "parameters": [ - "", - "\"Menu\"", - "" - ] - }, - { - "type": { - "value": "PlayerAuthentication::HideAuthenticationBanner" + "value": "LeaderboardDialog::LeaderboardDialog::SetLeaderboardId" }, "parameters": [ + "LeaderboardDialog", + "=", + "\"7892fee8-8873-4d99-a6e1-2a90f395a0ea\"", "" ] } @@ -7284,92 +6636,25 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + "value": "NumberVariable" }, "parameters": [ - "SubmitTimeButton", - "" + "SelectedLevel", + "=", + "5" ] } ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PlayerAuthentication::IsPlayerAuthenticated" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "await": true, - "value": "Leaderboards::SaveConnectedPlayerScore" - }, - "parameters": [ - "", - "Leaderboard[SelectedLevel]", - "Time" - ] - }, - { - "type": { - "value": "Leaderboards::DisplayLeaderboard" - }, - "parameters": [ - "", - "Leaderboard[SelectedLevel]", - "yes" - ] - } - ] - }, + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "PlayerAuthentication::IsPlayerAuthenticated" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "await": true, - "value": "PlayerAuthentication::OpenAuthenticationWindow" - }, - "parameters": [ - "" - ] - }, - { - "type": { - "await": true, - "value": "Leaderboards::SaveConnectedPlayerScore" - }, - "parameters": [ - "", - "Leaderboard[SelectedLevel]", - "Time" - ] - }, - { - "type": { - "value": "Leaderboards::DisplayLeaderboard" - }, - "parameters": [ - "", - "Leaderboard[SelectedLevel]", - "yes" - ] - } + "type": { + "value": "LeaderboardDialog::LeaderboardDialog::SetLeaderboardId" + }, + "parameters": [ + "LeaderboardDialog", + "=", + "\"da66c58c-54e6-4bfb-8e9c-7a9341073013\"", + "" ] } ] @@ -7379,53 +6664,85 @@ "conditions": [ { "type": { - "value": "Leaderboards::HasLastSaveErrored" + "value": "NumberVariable" }, "parameters": [ - "Leaderboard[SelectedLevel]" + "SelectedLevel", + "=", + "6" ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] } ], "actions": [ { "type": { - "value": "PlayerAuthentication::DisplayAuthenticationBanner" + "value": "LeaderboardDialog::LeaderboardDialog::SetLeaderboardId" }, "parameters": [ + "LeaderboardDialog", + "=", + "\"69da9595-f7f2-45c2-ac8f-66f87931a215\"", "" ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ { "type": { - "value": "PanelSpriteButton::PanelSpriteButton::SetLabelText" + "value": "LeaderboardDialog::LeaderboardDialog::SetScore" }, "parameters": [ - "SubmitTimeButton", - "\"ERROR!\"", + "LeaderboardDialog", + "=", + "TimerElapsedTime(\"TimeCounter\")", "" ] - }, + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "GameState", + "=", + "\"LevelComplete\"" + ] + } + ], + "actions": [], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "Wait" + "value": "LeaderboardDialog::LeaderboardDialog::IsRestartClicked" }, "parameters": [ - "5" + "LeaderboardDialog", + "" ] - }, + } + ], + "actions": [ { "type": { - "value": "PanelSpriteButton::PanelSpriteButton::SetLabelText" + "value": "Scene" }, "parameters": [ - "SubmitTimeButton", - "\"SUBMIT TIME\"", + "", + "\"Menu\"", "" ] } @@ -7436,10 +6753,10 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + "value": "LeaderboardDialog::LeaderboardDialog::IsNextClicked" }, "parameters": [ - "NextButton", + "LeaderboardDialog", "" ] } @@ -7464,14 +6781,6 @@ "+", "1" ] - }, - { - "type": { - "value": "PlayerAuthentication::HideAuthenticationBanner" - }, - "parameters": [ - "" - ] } ], "events": [ @@ -7700,7 +7009,7 @@ "isLocked": false, "name": "Level Complete", "renderingType": "", - "visibility": false, + "visibility": true, "cameras": [], "effects": [ { @@ -7784,6 +7093,1446 @@ ], "externalEvents": [], "eventsFunctionsExtensions": [ + { + "author": "", + "category": "", + "extensionNamespace": "", + "fullName": "", + "helpPath": "", + "iconUrl": "", + "name": "LeaderboardDialog", + "previewIconUrl": "", + "shortDescription": "", + "version": "", + "description": "", + "tags": [], + "authorIds": [], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [], + "eventsBasedObjects": [ + { + "areaMaxX": 1280, + "areaMaxY": 720, + "areaMaxZ": 48, + "areaMinX": 0, + "areaMinY": 0, + "areaMinZ": 0, + "defaultName": "", + "description": "", + "fullName": "", + "isInnerAreaFollowingParentSize": true, + "isUsingLegacyInstancesRenderer": false, + "name": "LeaderboardDialog", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "onCreated", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "PlayerAuthentication::DisplayAuthenticationBanner" + }, + "parameters": [ + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "LeaderboardDialog::LeaderboardDialog", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "Action", + "name": "doStepPostEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PlayerAuthentication::HasPlayerLoggedIn" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PlayerAuthentication::DisplayAuthenticationBanner" + }, + "parameters": [ + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Leaderboards::IsLeaderboardViewErrored" + }, + "parameters": [] + } + ], + "actions": [ + { + "type": { + "value": "PlayerAuthentication::DisplayAuthenticationBanner" + }, + "parameters": [ + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Handle leaderboards.\nTo create a leaderboard, make sure your game is registered in Home > Profile > Games Dashboard and then, click on \"Manage game\" > Leaderboards. When a leaderboard is created, it should be available in the actions." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "SubmitButton", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Leaderboards::SaveConnectedPlayerScore" + }, + "parameters": [ + "", + "LeaderboardId", + "Score" + ] + }, + { + "type": { + "value": "PlayerAuthentication::HideAuthenticationBanner" + }, + "parameters": [ + "" + ] + }, + { + "type": { + "value": "Leaderboards::DisplayLeaderboard" + }, + "parameters": [ + "", + "LeaderboardId", + "yes" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::Activate" + }, + "parameters": [ + "SubmitButton", + "no", + "" + ] + }, + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "SubmitButton", + "Effect", + "\"Disabled\"", + "yes" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Allow to try and submit again in case of error." + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Leaderboards::HasPlayerJustClosedLeaderboardView" + }, + "parameters": [] + }, + { + "type": { + "value": "Leaderboards::HasLastSaveErrored" + }, + "parameters": [ + "LeaderboardId" + ] + } + ], + "actions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::Activate" + }, + "parameters": [ + "SubmitButton", + "yes", + "" + ] + }, + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "SubmitButton", + "Effect", + "\"Disabled\"", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "LeaderboardDialog::LeaderboardDialog", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the score.", + "fullName": "Score", + "functionType": "ExpressionAndCondition", + "name": "Score", + "sentence": "the score", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "Score" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "LeaderboardDialog::LeaderboardDialog", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "Score", + "name": "SetScore", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "LeaderboardDialog::LeaderboardDialog::SetPropertyScore" + }, + "parameters": [ + "Object", + "=", + "Value" + ] + }, + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "ScoreLabel", + "Text", + "=", + "\"Time: \" + TimeFormatter::SecondsToHHMMSS000(Score)" + ] + }, + { + "type": { + "value": "SetNumberVariable" + }, + "parameters": [ + "PreviousBestScore", + "=", + "Score" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::Activate" + }, + "parameters": [ + "SubmitButton", + "no", + "" + ] + }, + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "SubmitButton", + "Effect", + "\"Disabled\"", + "yes" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Read the previous best score from the storage" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "GroupExists" + }, + "parameters": [ + "\"save\"", + "\"high_score/\" + LeaderboardId" + ] + } + ], + "actions": [ + { + "type": { + "value": "ReadNumberFromStorage" + }, + "parameters": [ + "\"save\"", + "\"high_score/\" + LeaderboardId", + "", + "PreviousBestScore" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "HighScore", + "Text", + "=", + "\"Best time: \" + TimeFormatter::SecondsToHHMMSS000(PreviousBestScore)" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Check if this is a new best score" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "LeaderboardDialog::LeaderboardDialog::PropertyScore" + }, + "parameters": [ + "Object", + "<=", + "PreviousBestScore" + ] + } + ], + "actions": [ + { + "type": { + "value": "EcrireFichierExp" + }, + "parameters": [ + "\"save\"", + "\"high_score/\" + LeaderboardId", + "Score" + ] + }, + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::Activate" + }, + "parameters": [ + "SubmitButton", + "yes", + "" + ] + }, + { + "type": { + "value": "EffectCapability::EffectBehavior::EnableEffect" + }, + "parameters": [ + "SubmitButton", + "Effect", + "\"Disabled\"", + "" + ] + } + ] + } + ], + "variables": [ + { + "name": "PreviousBestScore", + "type": "number", + "value": 0 + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "LeaderboardDialog::LeaderboardDialog", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the menu button of the dialog is clicked.", + "fullName": "Menu button clicked", + "functionType": "Condition", + "name": "IsRestartClicked", + "sentence": "Menu button of _PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "MenuButton", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlayerAuthentication::HideAuthenticationBanner" + }, + "parameters": [ + "" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "LeaderboardDialog::LeaderboardDialog", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the next level button of the dialog is clicked.", + "fullName": "Next level button clicked", + "functionType": "Condition", + "name": "IsNextClicked", + "sentence": "Next level button of _PARAM0_ is clicked", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "NextButton", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "PlayerAuthentication::HideAuthenticationBanner" + }, + "parameters": [ + "" + ] + }, + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "LeaderboardDialog::LeaderboardDialog", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "Check if the score has been sucessfully submitted by the dialog.", + "fullName": "Score is submitted", + "functionType": "Condition", + "name": "IsScoreSubmitted", + "sentence": "_PARAM0_ submitted a score", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "Leaderboards::HasPlayerJustClosedLeaderboardView" + }, + "parameters": [] + }, + { + "type": { + "value": "Leaderboards::HasLastSaveSucceeded" + }, + "parameters": [ + "LeaderboardId" + ] + } + ], + "actions": [ + { + "type": { + "value": "SetReturnBoolean" + }, + "parameters": [ + "True" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "LeaderboardDialog::LeaderboardDialog", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "description": "the leaderboard of the object.", + "fullName": "Leaderboard", + "functionType": "ExpressionAndCondition", + "name": "LeaderboardId", + "sentence": "the leaderboard", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnString" + }, + "parameters": [ + "LeaderboardId" + ] + } + ] + } + ], + "expressionType": { + "type": "leaderboardId" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "LeaderboardDialog::LeaderboardDialog", + "type": "object" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "LeaderboardId", + "name": "SetLeaderboardId", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "LeaderboardDialog::LeaderboardDialog::SetPropertyLeaderboardId" + }, + "parameters": [ + "Object", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "supplementaryInformation": "LeaderboardDialog::LeaderboardDialog", + "type": "object" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "LeaderboardId", + "label": "Leaderboard", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "LeaderboardId" + }, + { + "value": "0", + "type": "Number", + "unit": "Dimensionless", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "Score" + } + ], + "objects": [ + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "HighScore", + "smoothed": true, + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 4, + "topEdgeAnchor": 4, + "leftEdgeAnchor": 4, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 4, + "useLegacyBottomAndRightAnchors": false + } + ], + "string": "Best time:", + "font": "", + "textAlignment": "center", + "characterSize": 60, + "color": { + "b": 255, + "g": 255, + "r": 255 + }, + "content": { + "bold": false, + "isOutlineEnabled": false, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "255;255;255", + "outlineThickness": 2, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "Best time:", + "font": "", + "textAlignment": "center", + "verticalTextAlignment": "top", + "characterSize": 60, + "color": "255;255;255" + } + }, + { + "assetStoreId": "", + "bold": false, + "italic": false, + "name": "ScoreLabel", + "smoothed": true, + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 4, + "topEdgeAnchor": 4, + "leftEdgeAnchor": 4, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 4, + "useLegacyBottomAndRightAnchors": false + } + ], + "string": "Time:", + "font": "", + "textAlignment": "center", + "characterSize": 60, + "color": { + "b": 255, + "g": 255, + "r": 255 + }, + "content": { + "bold": false, + "isOutlineEnabled": false, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "255;255;255", + "outlineThickness": 2, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "Time:", + "font": "", + "textAlignment": "center", + "verticalTextAlignment": "top", + "characterSize": 60, + "color": "255;255;255" + } + }, + { + "assetStoreId": "615de0316452630b9f4f6a39decc82e2449b82c1afd1ff24d6470dad2922177b", + "name": "NextButton", + "type": "PanelSpriteButton::PanelSpriteButton", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 4, + "topEdgeAnchor": 4, + "leftEdgeAnchor": 4, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 4, + "useLegacyBottomAndRightAnchors": false + } + ], + "content": { + "LeftPadding": 16, + "RightPadding": 16, + "PressedLabelOffsetY": 10, + "BottomPadding": 32, + "TopPadding": 16, + "HoveredFadeOutDuration": 0.25 + }, + "childrenContent": { + "Hovered": { + "bottomMargin": 32, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Hovered.png", + "tiled": true, + "topMargin": 16, + "width": 256 + }, + "Idle": { + "bottomMargin": 32, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Idle.png", + "tiled": true, + "topMargin": 16, + "width": 256 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "NEXT", + "font": "", + "textAlignment": "center", + "characterSize": 50, + "color": { + "b": 255, + "g": 255, + "r": 255 + }, + "content": { + "bold": false, + "isOutlineEnabled": true, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "0;0;0", + "outlineThickness": 4, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "NEXT", + "font": "", + "textAlignment": "center", + "verticalTextAlignment": "top", + "characterSize": 50, + "color": "255;255;255" + } + }, + "Pressed": { + "bottomMargin": 16, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Pressed.png", + "tiled": true, + "topMargin": 32, + "width": 256 + } + } + }, + { + "assetStoreId": "615de0316452630b9f4f6a39decc82e2449b82c1afd1ff24d6470dad2922177b", + "name": "SubmitButton", + "type": "PanelSpriteButton::PanelSpriteButton", + "variables": [], + "effects": [ + { + "effectType": "Adjustment", + "name": "Disabled", + "doubleParameters": { + "alpha": 1, + "blue": 1, + "brightness": 1, + "contrast": 1, + "gamma": 1, + "green": 1, + "red": 1, + "saturation": 0 + }, + "stringParameters": {}, + "booleanParameters": {} + } + ], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 4, + "topEdgeAnchor": 4, + "leftEdgeAnchor": 4, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 4, + "useLegacyBottomAndRightAnchors": false + } + ], + "content": { + "LeftPadding": 16, + "RightPadding": 16, + "PressedLabelOffsetY": 10, + "BottomPadding": 32, + "TopPadding": 16, + "HoveredFadeOutDuration": 0.25 + }, + "childrenContent": { + "Hovered": { + "bottomMargin": 32, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Hovered.png", + "tiled": true, + "topMargin": 16, + "width": 256 + }, + "Idle": { + "bottomMargin": 32, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Idle.png", + "tiled": true, + "topMargin": 16, + "width": 256 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "SUBMIT TIME", + "font": "", + "textAlignment": "center", + "characterSize": 50, + "color": { + "b": 255, + "g": 255, + "r": 255 + }, + "content": { + "bold": false, + "isOutlineEnabled": true, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "0;0;0", + "outlineThickness": 4, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "SUBMIT TIME", + "font": "", + "textAlignment": "center", + "verticalTextAlignment": "top", + "characterSize": 50, + "color": "255;255;255" + } + }, + "Pressed": { + "bottomMargin": 16, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Pressed.png", + "tiled": true, + "topMargin": 32, + "width": 256 + } + } + }, + { + "assetStoreId": "615de0316452630b9f4f6a39decc82e2449b82c1afd1ff24d6470dad2922177b", + "name": "MenuButton", + "type": "PanelSpriteButton::PanelSpriteButton", + "variables": [], + "effects": [], + "behaviors": [ + { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 4, + "topEdgeAnchor": 4, + "leftEdgeAnchor": 4, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 4, + "useLegacyBottomAndRightAnchors": false + } + ], + "content": { + "LeftPadding": 16, + "RightPadding": 16, + "PressedLabelOffsetY": 10, + "BottomPadding": 32, + "TopPadding": 16, + "HoveredFadeOutDuration": 0.25 + }, + "childrenContent": { + "Hovered": { + "bottomMargin": 32, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Hovered.png", + "tiled": true, + "topMargin": 16, + "width": 256 + }, + "Idle": { + "bottomMargin": 32, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Idle.png", + "tiled": true, + "topMargin": 16, + "width": 256 + }, + "Label": { + "bold": false, + "italic": false, + "smoothed": true, + "underlined": false, + "string": "MENU", + "font": "", + "textAlignment": "center", + "characterSize": 50, + "color": { + "b": 255, + "g": 255, + "r": 255 + }, + "content": { + "bold": false, + "isOutlineEnabled": true, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "0;0;0", + "outlineThickness": 4, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "MENU", + "font": "", + "textAlignment": "center", + "verticalTextAlignment": "top", + "characterSize": 50, + "color": "255;255;255" + } + }, + "Pressed": { + "bottomMargin": 16, + "height": 106, + "leftMargin": 16, + "rightMargin": 16, + "texture": "Yellow Button_Pressed.png", + "tiled": true, + "topMargin": 32, + "width": 256 + } + } + }, + { + "assetStoreId": "", + "bold": true, + "italic": false, + "name": "LevelCompleteText", + "smoothed": true, + "type": "TextObject::Text", + "underlined": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "bottomEdgeAnchor": 4, + "name": "Anchor", + "topEdgeAnchor": 4, + "type": "AnchorBehavior::AnchorBehavior", + "leftEdgeAnchor": 4, + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 4, + "useLegacyBottomAndRightAnchors": false + } + ], + "string": "Level Complete!", + "font": "", + "textAlignment": "center", + "characterSize": 100, + "color": { + "b": 255, + "g": 255, + "r": 255 + }, + "content": { + "bold": true, + "isOutlineEnabled": false, + "isShadowEnabled": false, + "italic": false, + "outlineColor": "255;255;255", + "outlineThickness": 2, + "shadowAngle": 90, + "shadowBlurRadius": 2, + "shadowColor": "0;0;0", + "shadowDistance": 4, + "shadowOpacity": 127, + "smoothed": true, + "underlined": false, + "text": "Level Complete!", + "font": "", + "textAlignment": "center", + "verticalTextAlignment": "top", + "characterSize": 100, + "color": "255;255;255" + } + }, + { + "adaptCollisionMaskAutomatically": true, + "assetStoreId": "", + "name": "Black", + "type": "Sprite", + "updateIfNotVisible": false, + "variables": [], + "effects": [], + "behaviors": [ + { + "bottomEdgeAnchor": 2, + "leftEdgeAnchor": 1, + "name": "Anchor", + "relativeToOriginalWindowSize": true, + "rightEdgeAnchor": 2, + "topEdgeAnchor": 1, + "type": "AnchorBehavior::AnchorBehavior", + "useLegacyBottomAndRightAnchors": false + } + ], + "animations": [ + { + "name": "", + "useMultipleDirections": false, + "directions": [ + { + "looping": false, + "timeBetweenFrames": 0.08, + "sprites": [ + { + "hasCustomCollisionMask": true, + "image": "Black.png", + "points": [], + "originPoint": { + "name": "origine", + "x": 0, + "y": 0 + }, + "centerPoint": { + "automatic": true, + "name": "centre", + "x": 0, + "y": 0 + }, + "customCollisionMask": [ + [ + { + "x": 0, + "y": 0 + }, + { + "x": 64, + "y": 0 + }, + { + "x": 64, + "y": 64 + }, + { + "x": 0, + "y": 64 + } + ] + ] + } + ] + } + ] + } + ] + } + ], + "objectsFolderStructure": { + "folderName": "__ROOT", + "children": [ + { + "objectName": "Black" + }, + { + "objectName": "LevelCompleteText" + }, + { + "objectName": "MenuButton" + }, + { + "objectName": "SubmitButton" + }, + { + "objectName": "NextButton" + }, + { + "objectName": "ScoreLabel" + }, + { + "objectName": "HighScore" + } + ] + }, + "objectsGroups": [], + "layers": [ + { + "ambientLightColorB": 200, + "ambientLightColorG": 200, + "ambientLightColorR": 200, + "camera3DFarPlaneDistance": 10000, + "camera3DFieldOfView": 45, + "camera3DNearPlaneDistance": 3, + "cameraType": "", + "followBaseLayerCamera": false, + "isLightingLayer": false, + "isLocked": false, + "name": "", + "renderingType": "", + "visibility": true, + "cameras": [ + { + "defaultSize": true, + "defaultViewport": true, + "height": 0, + "viewportBottom": 1, + "viewportLeft": 0, + "viewportRight": 1, + "viewportTop": 0, + "width": 0 + } + ], + "effects": [] + } + ], + "instances": [ + { + "angle": 0, + "customSize": true, + "depth": 0, + "height": 720, + "layer": "", + "name": "Black", + "opacity": 191, + "persistentUuid": "8301327c-74a8-4182-b76b-d70d1fca37b5", + "width": 1280, + "x": 0, + "y": 0, + "zOrder": 13, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 0, + "height": 115, + "layer": "", + "name": "LevelCompleteText", + "persistentUuid": "6bd644ea-102b-405c-bfe5-f4b451449bb8", + "width": 1280, + "x": 0, + "y": 108, + "zOrder": 17, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 48, + "height": 80, + "layer": "", + "name": "MenuButton", + "persistentUuid": "679925ad-b183-496f-ab6d-61f5aeeacde8", + "width": 256, + "x": 128, + "y": 504, + "zOrder": 18, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 48, + "height": 80, + "layer": "", + "name": "SubmitButton", + "persistentUuid": "8ba23d03-cb93-4c80-8d26-7fc2f56a738b", + "width": 384, + "x": 455, + "y": 504, + "zOrder": 19, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 48, + "height": 80, + "layer": "", + "name": "NextButton", + "persistentUuid": "f1772519-c094-4c48-83e4-39ac684ca215", + "width": 256, + "x": 896, + "y": 504, + "zOrder": 20, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 0, + "height": 66, + "layer": "", + "name": "ScoreLabel", + "persistentUuid": "2d78db8c-3ca4-466c-8159-46831ca35af5", + "width": 1280, + "x": 0, + "y": 261, + "zOrder": 21, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 0, + "height": 66, + "layer": "", + "name": "HighScore", + "persistentUuid": "3c0b4bcd-9649-4020-9e0a-3016e4cb0568", + "width": 1280, + "x": 0, + "y": 362, + "zOrder": 22, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ] + } + ] + }, { "author": "", "category": "Text", @@ -37640,7 +38389,7 @@ "gridColor": 10401023, "gridAlpha": 0.8, "snap": false, - "zoomFactor": 0.06768546898536278, + "zoomFactor": 0.18923010380623428, "windowMask": false } }, From 2825d08007b1f5b3cfd9b299b0e8bac8daba69f5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 28 Oct 2024 17:56:08 +0100 Subject: [PATCH 03/10] Simplify events - Use a FSM - simplify angle check - Create touch controls when needed --- examples/3d-truck-extreme/Truck Extreme.json | 1308 ++++++++---------- 1 file changed, 550 insertions(+), 758 deletions(-) diff --git a/examples/3d-truck-extreme/Truck Extreme.json b/examples/3d-truck-extreme/Truck Extreme.json index 2faf3d768..822b076e9 100644 --- a/examples/3d-truck-extreme/Truck Extreme.json +++ b/examples/3d-truck-extreme/Truck Extreme.json @@ -2803,76 +2803,6 @@ "numberProperties": [], "stringProperties": [], "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "depth": 0, - "height": 150, - "keepRatio": true, - "layer": "Mobile Controls", - "name": "CarPedalGas", - "persistentUuid": "18a247cf-0e70-49b7-bd6b-0278965af5fb", - "width": 150, - "x": 1080, - "y": 548, - "zOrder": 23, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 0, - "customSize": true, - "depth": 0, - "flippedX": true, - "height": 150, - "keepRatio": true, - "layer": "Mobile Controls", - "name": "CarPedalBrake", - "persistentUuid": "c23a37e5-3d5d-419b-b596-64b708f81df2", - "width": 150, - "x": 50, - "y": 546, - "zOrder": 24, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 99, - "customSize": true, - "depth": 0, - "height": 125, - "keepRatio": true, - "layer": "Mobile Controls", - "name": "CarRotateRight", - "persistentUuid": "9435b249-4fb1-4966-b188-bdd1b6f40433", - "width": 125, - "x": 195, - "y": 461, - "zOrder": 25, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] - }, - { - "angle": 311, - "customSize": true, - "depth": 0, - "flippedX": true, - "height": 125, - "keepRatio": true, - "layer": "Mobile Controls", - "name": "CarRotateLeft", - "persistentUuid": "432b837c-44e7-4946-ae94-cb44aac53820", - "width": 125, - "x": 54, - "y": 405, - "zOrder": 26, - "numberProperties": [], - "stringProperties": [], - "initialVariables": [] } ], "objects": [ @@ -4793,48 +4723,6 @@ } ] }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "ResetTimer" - }, - "parameters": [ - "", - "\"TimeCounter\"" - ] - }, - { - "type": { - "value": "PauseTimer" - }, - "parameters": [ - "", - "\"TimeCounter\"" - ] - }, - { - "type": { - "value": "ResetTimer" - }, - "parameters": [ - "", - "\"SpikesTimerText\"" - ] - }, - { - "type": { - "value": "PauseTimer" - }, - "parameters": [ - "", - "\"SpikesTimerText\"" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ @@ -4848,11 +4736,14 @@ "actions": [ { "type": { - "value": "ShowLayer" + "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" }, "parameters": [ "", - "\"Mobile Controls\"" + "\"TouchControls\"", + "0", + "0", + "0" ] } ] @@ -4927,15 +4818,6 @@ }, "parameters": [], "subInstructions": [ - { - "type": { - "value": "KeyPressed" - }, - "parameters": [ - "", - "Right" - ] - }, { "type": { "value": "KeyPressed" @@ -4945,15 +4827,6 @@ "Up" ] }, - { - "type": { - "value": "KeyPressed" - }, - "parameters": [ - "", - "Left" - ] - }, { "type": { "value": "KeyPressed" @@ -4983,94 +4856,25 @@ }, { "type": { - "value": "KeyPressed" + "value": "ButtonStates::ButtonFSM::IsPressed" }, "parameters": [ - "", - "a" + "CarPedalGas", + "ButtonFSM", + "" ] }, { "type": { - "value": "KeyPressed" + "value": "ButtonStates::ButtonFSM::IsPressed" }, "parameters": [ - "", - "d" - ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::And" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarPedalGas", - "ButtonFSM", - "" - ] - }, - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarPedalBrake", - "ButtonFSM", - "" - ] - }, - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarRotateRight", - "ButtonFSM", - "" - ] - }, - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarRotateLeft", - "ButtonFSM", - "" - ] - } - ] - }, - { - "type": { - "value": "SystemInfo::IsMobile" - }, - "parameters": [] - } + "CarPedalBrake", + "ButtonFSM", + "" ] } ] - }, - { - "type": { - "value": "TimerPaused" - }, - "parameters": [ - "", - "\"TimeCounter\"" - ] } ], "actions": [ @@ -5086,7 +4890,7 @@ }, { "type": { - "value": "UnPauseTimer" + "value": "ResetTimer" }, "parameters": [ "", @@ -5095,7 +4899,7 @@ }, { "type": { - "value": "UnPauseTimer" + "value": "ResetTimer" }, "parameters": [ "", @@ -5190,26 +4994,12 @@ }, { "type": { - "value": "BuiltinCommonInstructions::And" + "value": "ButtonStates::ButtonFSM::IsPressed" }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarPedalGas", - "ButtonFSM", - "" - ] - }, - { - "type": { - "value": "SystemInfo::IsMobile" - }, - "parameters": [] - } + "parameters": [ + "CarPedalGas", + "ButtonFSM", + "" ] } ] @@ -5382,26 +5172,12 @@ }, { "type": { - "value": "BuiltinCommonInstructions::And" + "value": "ButtonStates::ButtonFSM::IsPressed" }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarPedalBrake", - "ButtonFSM", - "" - ] - }, - { - "type": { - "value": "SystemInfo::IsMobile" - }, - "parameters": [] - } + "parameters": [ + "CarPedalBrake", + "ButtonFSM", + "" ] } ] @@ -5535,6 +5311,67 @@ } ] }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BooleanVariable" + }, + "parameters": [ + "MotorIsUsed", + "=", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Physics2::EnableWheelJointMotor" + }, + "parameters": [ + "Wheel1", + "Physics2", + "WheelJoint1", + "no" + ] + }, + { + "type": { + "value": "Physics2::EnableWheelJointMotor" + }, + "parameters": [ + "Wheel2", + "Physics2", + "WheelJoint2", + "no" + ] + }, + { + "type": { + "value": "Physics2::EnableWheelJointMotor" + }, + "parameters": [ + "Wheel3", + "Physics2", + "WheelJoint3", + "no" + ] + }, + { + "type": { + "value": "Physics2::EnableWheelJointMotor" + }, + "parameters": [ + "Wheel4", + "Physics2", + "WheelJoint4", + "no" + ] + } + ] + }, { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -5576,26 +5413,12 @@ }, { "type": { - "value": "BuiltinCommonInstructions::And" + "value": "ButtonStates::ButtonFSM::IsPressed" }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarRotateRight", - "ButtonFSM", - "" - ] - }, - { - "type": { - "value": "SystemInfo::IsMobile" - }, - "parameters": [] - } + "parameters": [ + "CarRotateRight", + "ButtonFSM", + "" ] } ] @@ -5643,26 +5466,12 @@ }, { "type": { - "value": "BuiltinCommonInstructions::And" + "value": "ButtonStates::ButtonFSM::IsPressed" }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarRotateLeft", - "ButtonFSM", - "" - ] - }, - { - "type": { - "value": "SystemInfo::IsMobile" - }, - "parameters": [] - } + "parameters": [ + "CarRotateLeft", + "ButtonFSM", + "" ] } ] @@ -5682,133 +5491,6 @@ ] } ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BooleanVariable" - }, - "parameters": [ - "MotorIsUsed", - "=", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel1", - "Physics2", - "WheelJoint1", - "no" - ] - }, - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel2", - "Physics2", - "WheelJoint2", - "no" - ] - }, - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel3", - "Physics2", - "WheelJoint3", - "no" - ] - }, - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel4", - "Physics2", - "WheelJoint4", - "no" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Сontrol the angle of the car so that the collision condition with obstacles works correctly" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "CarBody.Angle()", - "<=", - "-270" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "CarBody", - "=", - "90" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::CompareNumbers" - }, - "parameters": [ - "CarBody.Angle()", - ">=", - "270" - ] - } - ], - "actions": [ - { - "type": { - "value": "SetAngle" - }, - "parameters": [ - "CarBody", - "=", - "-90" - ] - } - ] } ], "variables": [ @@ -5832,122 +5514,270 @@ "source": "", "type": "BuiltinCommonInstructions::Group", "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 - }, - "comment": "Periodic activation/deactivation of spikes" - }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "inverted": true, - "value": "TimerPaused" + "value": "StringVariable" }, "parameters": [ - "", - "\"SpikesTimerText\"" + "GameState", + "!=", + "\"ReadyToStart\"" ] } ], "actions": [], "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Periodic activation/deactivation of spikes" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "RepeatEveryXSeconds::Repeat" + "inverted": true, + "value": "TimerPaused" }, "parameters": [ "", - "\"Spikes\"", - "3.0", - "" + "\"SpikesTimerText\"" ] } ], - "actions": [ + "actions": [], + "events": [ { - "type": { - "value": "AnimatableCapability::AnimatableBehavior::SetName" - }, - "parameters": [ - "HazardSpikeTrap", - "Animation", - "=", - "\"Activate\"" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "RepeatEveryXSeconds::Repeat" + }, + "parameters": [ + "", + "\"Spikes\"", + "3.0", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "AnimatableCapability::AnimatableBehavior::SetName" + }, + "parameters": [ + "HazardSpikeTrap", + "Animation", + "=", + "\"Activate\"" + ] + }, + { + "type": { + "value": "PauseTimer" + }, + "parameters": [ + "", + "\"SpikesTimerText\"" + ] + }, + { + "type": { + "value": "Wait" + }, + "parameters": [ + "0.4" + ] + }, + { + "type": { + "value": "UnPauseTimer" + }, + "parameters": [ + "", + "\"SpikesTimerText\"" + ] + }, + { + "type": { + "value": "ResetTimer" + }, + "parameters": [ + "", + "\"SpikesTimerText\"" + ] + }, + { + "type": { + "value": "AnimatableCapability::AnimatableBehavior::SetName" + }, + "parameters": [ + "HazardSpikeTrap", + "Animation", + "=", + "\"Idle\"" + ] + } ] }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "SpikesTimerText", + "Text", + "=", + "ToString(roundTo(3-TimerElapsedTime(\"SpikesTimerText\"),2))" + ] + } + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "PauseTimer" + "value": "TimerPaused" }, "parameters": [ "", "\"SpikesTimerText\"" ] - }, + } + ], + "actions": [], + "events": [ { - "type": { - "value": "Wait" - }, - "parameters": [ - "0.4" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "TimerPaused" + }, + "parameters": [ + "", + "\"TimeCounter\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "SpikesTimerText", + "Text", + "=", + "\"0.00\"" + ] + } ] }, { - "type": { - "value": "UnPauseTimer" - }, - "parameters": [ - "", - "\"SpikesTimerText\"" + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "TimerPaused" + }, + "parameters": [ + "", + "\"TimeCounter\"" + ] + } + ], + "actions": [ + { + "type": { + "value": "TextContainerCapability::TextContainerBehavior::SetValue" + }, + "parameters": [ + "SpikesTimerText", + "Text", + "=", + "\"3.00\"" + ] + } ] - }, + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { "type": { - "value": "ResetTimer" + "value": "CompareTimer" }, "parameters": [ "", - "\"SpikesTimerText\"" + "\"SpikesTimerText\"", + "<=", + "1.5" ] - }, + } + ], + "actions": [ { "type": { - "value": "AnimatableCapability::AnimatableBehavior::SetName" + "value": "Text3D::Text3D::SetOutlineColor" }, "parameters": [ - "HazardSpikeTrap", - "Animation", + "SpikesTimerText", "=", - "\"Idle\"" + "\"38;187;32\"", + "" ] } ] }, { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "CompareTimer" + }, + "parameters": [ + "", + "\"SpikesTimerText\"", + ">", + "1.5" + ] + } + ], "actions": [ { "type": { - "value": "TextContainerCapability::TextContainerBehavior::SetValue" + "value": "Text3D::Text3D::SetOutlineColor" }, "parameters": [ "SpikesTimerText", - "Text", "=", - "ToString(roundTo(3-TimerElapsedTime(\"SpikesTimerText\"),2))" + "\"208;2;27\"", + "" ] } ] @@ -5995,7 +5825,7 @@ "value": "BuiltinCommonInstructions::CompareNumbers" }, "parameters": [ - "abs(CarBody.Angle())", + "abs(AngleDifference(CarBody.Angle(), 0))", ">", "90" ] @@ -6060,136 +5890,6 @@ ] } ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "TimerPaused" - }, - "parameters": [ - "", - "\"SpikesTimerText\"" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "inverted": true, - "value": "TimerPaused" - }, - "parameters": [ - "", - "\"TimeCounter\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "TextContainerCapability::TextContainerBehavior::SetValue" - }, - "parameters": [ - "SpikesTimerText", - "Text", - "=", - "\"0.00\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "TimerPaused" - }, - "parameters": [ - "", - "\"TimeCounter\"" - ] - } - ], - "actions": [ - { - "type": { - "value": "TextContainerCapability::TextContainerBehavior::SetValue" - }, - "parameters": [ - "SpikesTimerText", - "Text", - "=", - "\"3.00\"" - ] - } - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CompareTimer" - }, - "parameters": [ - "", - "\"SpikesTimerText\"", - "<=", - "1.5" - ] - } - ], - "actions": [ - { - "type": { - "value": "Text3D::Text3D::SetOutlineColor" - }, - "parameters": [ - "SpikesTimerText", - "=", - "\"38;187;32\"", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "CompareTimer" - }, - "parameters": [ - "", - "\"SpikesTimerText\"", - ">", - "1.5" - ] - } - ], - "actions": [ - { - "type": { - "value": "Text3D::Text3D::SetOutlineColor" - }, - "parameters": [ - "SpikesTimerText", - "=", - "\"208;2;27\"", - "" - ] - } - ] } ], "parameters": [] @@ -6215,179 +5915,127 @@ "=", "\"GameOver\"" ] - }, - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "StopSoundCanal" - }, - "parameters": [ - "", - "0" - ] - }, - { - "type": { - "value": "PlaySound" - }, - "parameters": [ - "", - "Vehicle_Car_Door_Opening_Interior_Mono_02.wav", - "1", - "50", - "1" - ] - }, - { - "type": { - "value": "PlaySound" - }, - "parameters": [ - "", - "Vehicle_Car_Stop_Engine_Exterior_Mono.wav", - "", - "30", - "1" - ] - }, - { - "type": { - "value": "Physics2::Remove joint" - }, - "parameters": [ - "CarBody", - "Physics2", - "WheelJoint1" - ] - }, - { - "type": { - "value": "Physics2::Remove joint" - }, - "parameters": [ - "CarBody", - "Physics2", - "WheelJoint2" - ] - }, - { - "type": { - "value": "Physics2::Remove joint" - }, - "parameters": [ - "CarBody", - "Physics2", - "WheelJoint3" - ] - }, - { - "type": { - "value": "Physics2::Remove joint" - }, - "parameters": [ - "CarBody", - "Physics2", - "WheelJoint4" - ] - }, - { - "type": { - "value": "Wait" - }, - "parameters": [ - "2" - ] - }, - { - "type": { - "value": "ShowLayer" - }, - "parameters": [ - "", - "\"Game Over\"" - ] - }, - { - "type": { - "value": "HideLayer" - }, - "parameters": [ - "", - "\"UI\"" - ] - }, - { - "type": { - "value": "HideLayer" - }, - "parameters": [ - "", - "\"Mobile Controls\"" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "LayerVisible" - }, - "parameters": [ - "", - "\"Game Over\"" - ] } ], "actions": [], "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Once" + }, + "parameters": [] + } + ], "actions": [ { "type": { - "value": "ResizableCapability::ResizableBehavior::SetSize" + "value": "StopSoundCanal" }, "parameters": [ - "Black", - "Resizable", - "SceneWindowWidth()", - "SceneWindowHeight()" + "", + "0" ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { "type": { - "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + "value": "PlaySound" }, "parameters": [ - "RetryButton", - "" + "", + "Vehicle_Car_Door_Opening_Interior_Mono_02.wav", + "1", + "50", + "1" ] - } - ], - "actions": [ + }, { "type": { - "value": "Scene" + "value": "PlaySound" }, "parameters": [ "", - "\"Game\"", - "" + "Vehicle_Car_Stop_Engine_Exterior_Mono.wav", + "", + "30", + "1" + ] + }, + { + "type": { + "value": "Physics2::Remove joint" + }, + "parameters": [ + "CarBody", + "Physics2", + "WheelJoint1" + ] + }, + { + "type": { + "value": "Physics2::Remove joint" + }, + "parameters": [ + "CarBody", + "Physics2", + "WheelJoint2" + ] + }, + { + "type": { + "value": "Physics2::Remove joint" + }, + "parameters": [ + "CarBody", + "Physics2", + "WheelJoint3" + ] + }, + { + "type": { + "value": "Physics2::Remove joint" + }, + "parameters": [ + "CarBody", + "Physics2", + "WheelJoint4" + ] + }, + { + "type": { + "value": "Wait" + }, + "parameters": [ + "2" + ] + }, + { + "type": { + "value": "ShowLayer" + }, + "parameters": [ + "", + "\"Game Over\"" + ] + }, + { + "type": { + "value": "HideLayer" + }, + "parameters": [ + "", + "\"UI\"" + ] + }, + { + "type": { + "value": "HideLayer" + }, + "parameters": [ + "", + "\"Mobile Controls\"" ] } ] @@ -6397,23 +6045,78 @@ "conditions": [ { "type": { - "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + "value": "LayerVisible" }, "parameters": [ - "MenuButton", - "" + "", + "\"Game Over\"" ] } ], "actions": [ { "type": { - "value": "Scene" + "value": "ResizableCapability::ResizableBehavior::SetSize" }, "parameters": [ - "", - "\"Menu\"", - "" + "Black", + "Resizable", + "SceneWindowWidth()", + "SceneWindowHeight()" + ] + } + ], + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "RetryButton", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Scene" + }, + "parameters": [ + "", + "\"Game\"", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" + }, + "parameters": [ + "MenuButton", + "" + ] + } + ], + "actions": [ + { + "type": { + "value": "Scene" + }, + "parameters": [ + "", + "\"Menu\"", + "" + ] + } ] } ] @@ -6910,7 +6613,7 @@ "isLocked": false, "name": "Mobile Controls", "renderingType": "", - "visibility": false, + "visibility": true, "cameras": [], "effects": [ { @@ -41735,6 +41438,95 @@ "zoomFactor": 0.34375202416123213, "windowMask": false } + }, + { + "associatedLayout": "Game", + "name": "TouchControls", + "instances": [ + { + "angle": 0, + "customSize": true, + "depth": 0, + "height": 150, + "keepRatio": true, + "layer": "Mobile Controls", + "name": "CarPedalGas", + "persistentUuid": "781ee8b9-901f-4faf-a1d5-7a5c866d6969", + "width": 150, + "x": 1080, + "y": 548, + "zOrder": 23, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 0, + "customSize": true, + "depth": 0, + "flippedX": true, + "height": 150, + "keepRatio": true, + "layer": "Mobile Controls", + "name": "CarPedalBrake", + "persistentUuid": "71e1fef7-30ba-4de1-8b1f-8fb6a1894243", + "width": 150, + "x": 50, + "y": 546, + "zOrder": 24, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 99, + "customSize": true, + "depth": 0, + "height": 125, + "keepRatio": true, + "layer": "Mobile Controls", + "name": "CarRotateRight", + "persistentUuid": "05e517e2-1ace-40e5-8d00-21f097963ab3", + "width": 125, + "x": 195, + "y": 461, + "zOrder": 25, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + }, + { + "angle": 311, + "customSize": true, + "depth": 0, + "flippedX": true, + "height": 125, + "keepRatio": true, + "layer": "Mobile Controls", + "name": "CarRotateLeft", + "persistentUuid": "476d5898-112a-4f77-90db-3d99a391a073", + "width": 125, + "x": 54, + "y": 405, + "zOrder": 26, + "numberProperties": [], + "stringProperties": [], + "initialVariables": [] + } + ], + "editionSettings": { + "grid": false, + "gridType": "rectangular", + "gridWidth": 32, + "gridHeight": 32, + "gridOffsetX": 0, + "gridOffsetY": 0, + "gridColor": 10401023, + "gridAlpha": 0.8, + "snap": false, + "zoomFactor": 0.546875, + "windowMask": false + } } ], "externalSourceFiles": [] From 73d617ac2bb78286f3992940e6397f797ce72cb6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Mon, 28 Oct 2024 18:08:04 +0100 Subject: [PATCH 04/10] Add quick customization settings. --- examples/3d-truck-extreme/Truck Extreme.json | 28 +++++++++++++------- 1 file changed, 18 insertions(+), 10 deletions(-) diff --git a/examples/3d-truck-extreme/Truck Extreme.json b/examples/3d-truck-extreme/Truck Extreme.json index 822b076e9..e2bdd50e0 100644 --- a/examples/3d-truck-extreme/Truck Extreme.json +++ b/examples/3d-truck-extreme/Truck Extreme.json @@ -2814,13 +2814,13 @@ "effects": [], "behaviors": [ { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", "bottomEdgeAnchor": 2, "leftEdgeAnchor": 1, - "name": "Anchor", "relativeToOriginalWindowSize": true, "rightEdgeAnchor": 2, "topEdgeAnchor": 1, - "type": "AnchorBehavior::AnchorBehavior", "useLegacyBottomAndRightAnchors": false } ], @@ -4294,7 +4294,13 @@ "folderName": "Level objects", "children": [ { - "objectName": "Hitbox" + "folderName": "HitBox", + "quickCustomizationVisibility": "hidden", + "children": [ + { + "objectName": "Hitbox" + } + ] }, { "objectName": "ConstructionBarrier" @@ -4339,6 +4345,7 @@ }, { "folderName": "Mobile controls", + "quickCustomizationVisibility": "hidden", "children": [ { "objectName": "CarRotateRight" @@ -4356,12 +4363,16 @@ }, { "folderName": "Game over", + "quickCustomizationVisibility": "hidden", "children": [ { "objectName": "RetryButton" }, { "objectName": "GameOverText" + }, + { + "objectName": "Black" } ] }, @@ -4374,9 +4385,6 @@ { "objectName": "TimeText" }, - { - "objectName": "Black" - }, { "objectName": "MenuButton" }, @@ -7948,10 +7956,10 @@ "effects": [], "behaviors": [ { - "bottomEdgeAnchor": 4, "name": "Anchor", - "topEdgeAnchor": 4, "type": "AnchorBehavior::AnchorBehavior", + "bottomEdgeAnchor": 4, + "topEdgeAnchor": 4, "leftEdgeAnchor": 4, "relativeToOriginalWindowSize": true, "rightEdgeAnchor": 4, @@ -7999,13 +8007,13 @@ "effects": [], "behaviors": [ { + "name": "Anchor", + "type": "AnchorBehavior::AnchorBehavior", "bottomEdgeAnchor": 2, "leftEdgeAnchor": 1, - "name": "Anchor", "relativeToOriginalWindowSize": true, "rightEdgeAnchor": 2, "topEdgeAnchor": 1, - "type": "AnchorBehavior::AnchorBehavior", "useLegacyBottomAndRightAnchors": false } ], From 3b25240b02b2017c659bddfc7c6bed3d035ac5b2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 29 Oct 2024 11:58:39 +0100 Subject: [PATCH 05/10] Add a behavior for the car. --- examples/3d-truck-extreme/Truck Extreme.json | 2039 ++++++++++-------- 1 file changed, 1094 insertions(+), 945 deletions(-) diff --git a/examples/3d-truck-extreme/Truck Extreme.json b/examples/3d-truck-extreme/Truck Extreme.json index e2bdd50e0..27ddcd670 100644 --- a/examples/3d-truck-extreme/Truck Extreme.json +++ b/examples/3d-truck-extreme/Truck Extreme.json @@ -2570,23 +2570,6 @@ "name": "Hitbox" } ] - }, - { - "name": "Wheels", - "objects": [ - { - "name": "Wheel1" - }, - { - "name": "Wheel2" - }, - { - "name": "Wheel3" - }, - { - "name": "Wheel4" - } - ] } ], "variables": [ @@ -2644,7 +2627,7 @@ "height": 0, "keepRatio": true, "layer": "", - "name": "Wheel1", + "name": "Wheel", "persistentUuid": "41e27c14-a165-437d-96a9-0421db059dcb", "width": 0, "x": 589, @@ -2661,7 +2644,7 @@ "height": 0, "keepRatio": true, "layer": "", - "name": "Wheel2", + "name": "Wheel", "persistentUuid": "a09486d6-6efb-4568-84ae-b464984cf0b3", "width": 0, "x": 589, @@ -2679,7 +2662,7 @@ "height": 0, "keepRatio": true, "layer": "", - "name": "Wheel3", + "name": "Wheel", "persistentUuid": "3a242184-472d-42fb-90c0-268f4597722e", "width": 0, "x": 736, @@ -2696,7 +2679,7 @@ "height": 0, "keepRatio": true, "layer": "", - "name": "Wheel4", + "name": "Wheel", "persistentUuid": "8060ac82-0ec9-471e-885f-3b461d21b5d4", "width": 0, "x": 736, @@ -2856,6 +2839,12 @@ "layers": 16384, "masks": 32768 }, + { + "name": "SideViewCar", + "type": "SideViewCar::SideViewCar", + "Physics2": "Physics2", + "Acceleration": 12000 + }, { "name": "SmoothCamera", "type": "SmoothCamera::SmoothCamera", @@ -2926,7 +2915,7 @@ }, { "assetStoreId": "", - "name": "Wheel1", + "name": "Wheel", "type": "Scene3D::Model3DObject", "variables": [], "effects": [], @@ -2953,52 +2942,12 @@ "gravityScale": 1, "layers": 16384, "masks": 32768 - } - ], - "content": { - "centerLocation": "ObjectCenter", - "depth": 100, - "height": 100, - "keepAspectRatio": true, - "materialType": "StandardWithoutMetalness", - "modelResourceName": "Wheel0.glb", - "originLocation": "ObjectCenter", - "rotationX": 0, - "rotationY": 90, - "rotationZ": 0, - "width": 100, - "animations": [] - } - }, - { - "assetStoreId": "", - "name": "Wheel2", - "type": "Scene3D::Model3DObject", - "variables": [], - "effects": [], - "behaviors": [ + }, { - "name": "Physics2", - "type": "Physics2::Physics2Behavior", - "bodyType": "Dynamic", - "bullet": false, - "fixedRotation": false, - "canSleep": false, - "shape": "Circle", - "shapeDimensionA": 0, - "shapeDimensionB": 0, - "shapeOffsetX": 0, - "shapeOffsetY": 0, - "polygonOrigin": "Center", - "vertices": [], - "density": 3, - "friction": 0.95, - "restitution": 0.1, - "linearDamping": 0, - "angularDamping": 0, - "gravityScale": 1, - "layers": 16384, - "masks": 32768 + "name": "SideViewWheel", + "type": "SideViewCar::SideViewWheel", + "Physics2": "Physics2", + "JointId": 0 } ], "content": { @@ -3062,98 +3011,6 @@ "animations": [] } }, - { - "assetStoreId": "", - "name": "Wheel3", - "type": "Scene3D::Model3DObject", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Physics2", - "type": "Physics2::Physics2Behavior", - "bodyType": "Dynamic", - "bullet": false, - "fixedRotation": false, - "canSleep": false, - "shape": "Circle", - "shapeDimensionA": 0, - "shapeDimensionB": 0, - "shapeOffsetX": 0, - "shapeOffsetY": 0, - "polygonOrigin": "Center", - "vertices": [], - "density": 3, - "friction": 0.95, - "restitution": 0.1, - "linearDamping": 0, - "angularDamping": 0, - "gravityScale": 1, - "layers": 16384, - "masks": 32768 - } - ], - "content": { - "centerLocation": "ObjectCenter", - "depth": 100, - "height": 100, - "keepAspectRatio": true, - "materialType": "StandardWithoutMetalness", - "modelResourceName": "Wheel0.glb", - "originLocation": "ObjectCenter", - "rotationX": 0, - "rotationY": 90, - "rotationZ": 0, - "width": 100, - "animations": [] - } - }, - { - "assetStoreId": "", - "name": "Wheel4", - "type": "Scene3D::Model3DObject", - "variables": [], - "effects": [], - "behaviors": [ - { - "name": "Physics2", - "type": "Physics2::Physics2Behavior", - "bodyType": "Dynamic", - "bullet": false, - "fixedRotation": false, - "canSleep": false, - "shape": "Circle", - "shapeDimensionA": 0, - "shapeDimensionB": 0, - "shapeOffsetX": 0, - "shapeOffsetY": 0, - "polygonOrigin": "Center", - "vertices": [], - "density": 3, - "friction": 0.95, - "restitution": 0.1, - "linearDamping": 0, - "angularDamping": 0, - "gravityScale": 1, - "layers": 16384, - "masks": 32768 - } - ], - "content": { - "centerLocation": "ObjectCenter", - "depth": 100, - "height": 100, - "keepAspectRatio": true, - "materialType": "StandardWithoutMetalness", - "modelResourceName": "Wheel0.glb", - "originLocation": "ObjectCenter", - "rotationX": 0, - "rotationY": 90, - "rotationZ": 0, - "width": 100, - "animations": [] - } - }, { "assetStoreId": "27d7fc507123c9279bd39232d0f48d0dcdfc5c1b09b5ba85179ca0d19eb8513e", "name": "Base", @@ -4277,16 +4134,7 @@ "objectName": "CarBody" }, { - "objectName": "Wheel1" - }, - { - "objectName": "Wheel2" - }, - { - "objectName": "Wheel3" - }, - { - "objectName": "Wheel4" + "objectName": "Wheel" } ] }, @@ -4419,115 +4267,33 @@ "30", "1" ] - } - ], - "events": [ + }, { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "SideViewCar::SideViewCar::AttachWheel" }, - "comment": "Adding a joint between the wheels and the car body" + "parameters": [ + "CarBody", + "SideViewCar", + "Wheel", + "SideViewWheel", + "" + ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Physics2::AddWheelJoint" - }, - "parameters": [ - "CarBody", - "Physics2", - "Wheel1.CenterX()", - "Wheel1.CenterY()", - "Wheel1", - "Wheel1.CenterX()", - "Wheel1.CenterY()", - "335", - "14", - "1", - "no", - "", - "1", - "", - "WheelJoint1" - ] - }, - { - "type": { - "value": "Physics2::AddWheelJoint" - }, - "parameters": [ - "CarBody", - "Physics2", - "Wheel2.CenterX()", - "Wheel2.CenterY()", - "Wheel2", - "Wheel2.CenterX()", - "Wheel2.CenterY()", - "335", - "14", - "1", - "no", - "", - "1", - "", - "WheelJoint2" - ] - }, - { - "type": { - "value": "Physics2::AddWheelJoint" - }, - "parameters": [ - "CarBody", - "Physics2", - "Wheel3.CenterX()", - "Wheel3.CenterY()", - "Wheel3", - "Wheel3.CenterX()", - "Wheel3.CenterY()", - "335", - "14", - "1", - "no", - "", - "1", - "", - "WheelJoint3" - ] - }, - { - "type": { - "value": "Physics2::AddWheelJoint" - }, - "parameters": [ - "CarBody", - "Physics2", - "Wheel4.CenterX()", - "Wheel4.CenterY()", - "Wheel4", - "Wheel4.CenterX()", - "Wheel4.CenterY()", - "335", - "14", - "1", - "no", - "", - "1", - "", - "WheelJoint4" - ] - } + "type": { + "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" + }, + "parameters": [ + "", + "\"Level\" + SelectedLevel", + "0", + "0", + "0" ] - }, + } + ], + "events": [ { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -4570,24 +4336,6 @@ } ] }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "BuiltinExternalLayouts::CreateObjectsFromExternalLayout" - }, - "parameters": [ - "", - "\"Level\" + SelectedLevel", - "0", - "0", - "0" - ] - } - ] - }, { "type": "BuiltinCommonInstructions::Comment", "color": { @@ -4930,7 +4678,18 @@ "events": [ { "type": "BuiltinCommonInstructions::Standard", - "conditions": [], + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "GameState", + "!=", + "\"GameOver\"" + ] + } + ], "actions": [ { "type": { @@ -4943,571 +4702,278 @@ "max((CarBody.Physics2::LinearVelocity() / 500), 1)" ] } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "StringVariable" + }, + "parameters": [ + "GameState", + "=", + "\"Playing\"" + ] + } ], + "actions": [], "events": [ + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move forward" + }, { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "StringVariable" - }, - "parameters": [ - "GameState", - "=", - "\"Playing\"" - ] - } - ], - "actions": [], - "events": [ - { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "value": "BuiltinCommonInstructions::Or" }, - "comment": "Move forward" - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "parameters": [], + "subInstructions": [ { "type": { - "value": "BuiltinCommonInstructions::Or" + "value": "KeyPressed" }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "KeyPressed" - }, - "parameters": [ - "", - "Up" - ] - }, - { - "type": { - "value": "KeyPressed" - }, - "parameters": [ - "", - "w" - ] - }, - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarPedalGas", - "ButtonFSM", - "" - ] - } + "parameters": [ + "", + "Up" ] - } - ], - "actions": [ + }, { "type": { - "value": "SetBooleanVariable" + "value": "KeyPressed" }, "parameters": [ - "MotorIsUsed", - "True", - "" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel1", - "Physics2", - "WheelJoint1", - "yes" - ] - }, - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel2", - "Physics2", - "WheelJoint2", - "yes" - ] - }, - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel3", - "Physics2", - "WheelJoint3", - "yes" - ] - }, - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel4", - "Physics2", - "WheelJoint4", - "yes" - ] - } + "", + "w" ] }, { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Physics2::WheelJointMotorSpeed" - }, - "parameters": [ - "Wheel1", - "Physics2", - "WheelJoint1", - "+", - "12000 * TimeDelta()" - ] - }, - { - "type": { - "value": "Physics2::WheelJointMotorSpeed" - }, - "parameters": [ - "Wheel2", - "Physics2", - "WheelJoint2", - "+", - "12000 * TimeDelta()" - ] - }, - { - "type": { - "value": "Physics2::WheelJointMotorSpeed" - }, - "parameters": [ - "Wheel3", - "Physics2", - "WheelJoint3", - "+", - "12000 * TimeDelta()" - ] - }, - { - "type": { - "value": "Physics2::WheelJointMotorSpeed" - }, - "parameters": [ - "Wheel4", - "Physics2", - "WheelJoint4", - "+", - "12000 * TimeDelta()" - ] - } + "type": { + "value": "ButtonStates::ButtonFSM::IsPressed" + }, + "parameters": [ + "CarPedalGas", + "ButtonFSM", + "" ] } ] - }, + } + ], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "SideViewCar::SideViewCar::SimulateAccelerationKey" }, - "comment": "Move backward" - }, + "parameters": [ + "CarBody", + "SideViewCar", + "Wheel", + "SideViewWheel", + "Physics2", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Move backward" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ { "type": { - "value": "BuiltinCommonInstructions::Or" + "value": "KeyPressed" }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "KeyPressed" - }, - "parameters": [ - "", - "Down" - ] - }, - { - "type": { - "value": "KeyPressed" - }, - "parameters": [ - "", - "s" - ] - }, - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarPedalBrake", - "ButtonFSM", - "" - ] - } + "parameters": [ + "", + "Down" ] - } - ], - "actions": [ + }, + { + "type": { + "value": "KeyPressed" + }, + "parameters": [ + "", + "s" + ] + }, { "type": { - "value": "SetBooleanVariable" + "value": "ButtonStates::ButtonFSM::IsPressed" }, "parameters": [ - "MotorIsUsed", - "True", + "CarPedalBrake", + "ButtonFSM", "" ] } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Once" - }, - "parameters": [] - } - ], - "actions": [ - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel1", - "Physics2", - "WheelJoint1", - "yes" - ] - }, - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel2", - "Physics2", - "WheelJoint2", - "yes" - ] - }, - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel3", - "Physics2", - "WheelJoint3", - "yes" - ] - }, - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel4", - "Physics2", - "WheelJoint4", - "yes" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [], - "actions": [ - { - "type": { - "value": "Physics2::WheelJointMotorSpeed" - }, - "parameters": [ - "Wheel1", - "Physics2", - "WheelJoint1", - "=", - "-1500" - ] - }, - { - "type": { - "value": "Physics2::WheelJointMotorSpeed" - }, - "parameters": [ - "Wheel2", - "Physics2", - "WheelJoint2", - "=", - "-1500" - ] - }, - { - "type": { - "value": "Physics2::WheelJointMotorSpeed" - }, - "parameters": [ - "Wheel3", - "Physics2", - "WheelJoint3", - "=", - "-1500" - ] - }, - { - "type": { - "value": "Physics2::WheelJointMotorSpeed" - }, - "parameters": [ - "Wheel4", - "Physics2", - "WheelJoint4", - "=", - "-1500" - ] - } - ] - } - ] - } ] - }, + } + ], + "actions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BooleanVariable" - }, - "parameters": [ - "MotorIsUsed", - "=", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Physics2::EnableWheelJointMotor" - }, - "parameters": [ - "Wheel1", - "Physics2", - "WheelJoint1", - "no" - ] - }, + "type": { + "value": "SideViewCar::SideViewCar::SimulateReverseKey" + }, + "parameters": [ + "CarBody", + "SideViewCar", + "Wheel", + "SideViewWheel", + "Physics2", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Comment", + "color": { + "b": 109, + "g": 230, + "r": 255, + "textB": 0, + "textG": 0, + "textR": 0 + }, + "comment": "Air control" + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ { "type": { - "value": "Physics2::EnableWheelJointMotor" + "value": "KeyPressed" }, "parameters": [ - "Wheel2", - "Physics2", - "WheelJoint2", - "no" + "", + "Right" ] }, { "type": { - "value": "Physics2::EnableWheelJointMotor" + "value": "KeyPressed" }, "parameters": [ - "Wheel3", - "Physics2", - "WheelJoint3", - "no" + "", + "d" ] }, { "type": { - "value": "Physics2::EnableWheelJointMotor" + "value": "ButtonStates::ButtonFSM::IsPressed" }, "parameters": [ - "Wheel4", - "Physics2", - "WheelJoint4", - "no" + "CarRotateRight", + "ButtonFSM", + "" ] } ] - }, + } + ], + "actions": [ { - "type": "BuiltinCommonInstructions::Comment", - "color": { - "b": 109, - "g": 230, - "r": 255, - "textB": 0, - "textG": 0, - "textR": 0 + "type": { + "value": "SideViewCar::SideViewCar::SimulateRotateDownwardKey" }, - "comment": "Air control" - }, + "parameters": [ + "CarBody", + "SideViewCar", + "" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "BuiltinCommonInstructions::Or" - }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "KeyPressed" - }, - "parameters": [ - "", - "Right" - ] - }, - { - "type": { - "value": "KeyPressed" - }, - "parameters": [ - "", - "d" - ] - }, - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarRotateRight", - "ButtonFSM", - "" - ] - } - ] - } - ], - "actions": [ + "type": { + "value": "BuiltinCommonInstructions::Or" + }, + "parameters": [], + "subInstructions": [ { "type": { - "value": "Physics2::ApplyTorque" + "value": "KeyPressed" }, "parameters": [ - "CarBody", - "Physics2", - "5" + "", + "Left" ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ + }, { "type": { - "value": "BuiltinCommonInstructions::Or" + "value": "KeyPressed" }, - "parameters": [], - "subInstructions": [ - { - "type": { - "value": "KeyPressed" - }, - "parameters": [ - "", - "Left" - ] - }, - { - "type": { - "value": "KeyPressed" - }, - "parameters": [ - "", - "a" - ] - }, - { - "type": { - "value": "ButtonStates::ButtonFSM::IsPressed" - }, - "parameters": [ - "CarRotateLeft", - "ButtonFSM", - "" - ] - } + "parameters": [ + "", + "a" ] - } - ], - "actions": [ + }, { "type": { - "value": "Physics2::ApplyTorque" + "value": "ButtonStates::ButtonFSM::IsPressed" }, "parameters": [ - "CarBody", - "Physics2", - "-5" + "CarRotateLeft", + "ButtonFSM", + "" ] } ] } + ], + "actions": [ + { + "type": { + "value": "SideViewCar::SideViewCar::SimulateRotateUpwardKey" + }, + "parameters": [ + "CarBody", + "SideViewCar", + "" + ] + } ] } - ], - "variables": [ - { - "folded": true, - "name": "MotorIsUsed", - "type": "boolean", - "value": false - } ] } ], @@ -5851,7 +5317,7 @@ "value": "CollisionNP" }, "parameters": [ - "Wheels", + "Wheel", "HazardSpikeTrap", "", "", @@ -5896,6 +5362,104 @@ "=", "\"GameOver\"" ] + }, + { + "type": { + "value": "StopSoundCanal" + }, + "parameters": [ + "", + "0" + ] + }, + { + "type": { + "value": "PlaySound" + }, + "parameters": [ + "", + "Vehicle_Car_Door_Opening_Interior_Mono_02.wav", + "1", + "50", + "1" + ] + }, + { + "type": { + "value": "PlaySound" + }, + "parameters": [ + "", + "Vehicle_Car_Stop_Engine_Exterior_Mono.wav", + "", + "30", + "1" + ] + }, + { + "type": { + "value": "AjoutObjConcern" + }, + "parameters": [ + "", + "CarBody" + ] + }, + { + "type": { + "value": "AjoutObjConcern" + }, + "parameters": [ + "", + "Wheel" + ] + }, + { + "type": { + "value": "SideViewCar::SideViewCar::UnattachWheel" + }, + "parameters": [ + "CarBody", + "SideViewCar", + "Wheel", + "SideViewWheel", + "" + ] + }, + { + "type": { + "value": "Wait" + }, + "parameters": [ + "2" + ] + }, + { + "type": { + "value": "ShowLayer" + }, + "parameters": [ + "", + "\"Game Over\"" + ] + }, + { + "type": { + "value": "HideLayer" + }, + "parameters": [ + "", + "\"UI\"" + ] + }, + { + "type": { + "value": "HideLayer" + }, + "parameters": [ + "", + "\"Mobile Controls\"" + ] } ] } @@ -5925,125 +5489,42 @@ ] } ], - "actions": [], + "actions": [ + { + "type": { + "value": "ResizableCapability::ResizableBehavior::SetSize" + }, + "parameters": [ + "Black", + "Resizable", + "SceneWindowWidth()", + "SceneWindowHeight()" + ] + } + ], "events": [ { "type": "BuiltinCommonInstructions::Standard", "conditions": [ { "type": { - "value": "BuiltinCommonInstructions::Once" + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" }, - "parameters": [] + "parameters": [ + "RetryButton", + "" + ] } ], "actions": [ { "type": { - "value": "StopSoundCanal" - }, - "parameters": [ - "", - "0" - ] - }, - { - "type": { - "value": "PlaySound" - }, - "parameters": [ - "", - "Vehicle_Car_Door_Opening_Interior_Mono_02.wav", - "1", - "50", - "1" - ] - }, - { - "type": { - "value": "PlaySound" - }, - "parameters": [ - "", - "Vehicle_Car_Stop_Engine_Exterior_Mono.wav", - "", - "30", - "1" - ] - }, - { - "type": { - "value": "Physics2::Remove joint" - }, - "parameters": [ - "CarBody", - "Physics2", - "WheelJoint1" - ] - }, - { - "type": { - "value": "Physics2::Remove joint" - }, - "parameters": [ - "CarBody", - "Physics2", - "WheelJoint2" - ] - }, - { - "type": { - "value": "Physics2::Remove joint" - }, - "parameters": [ - "CarBody", - "Physics2", - "WheelJoint3" - ] - }, - { - "type": { - "value": "Physics2::Remove joint" - }, - "parameters": [ - "CarBody", - "Physics2", - "WheelJoint4" - ] - }, - { - "type": { - "value": "Wait" - }, - "parameters": [ - "2" - ] - }, - { - "type": { - "value": "ShowLayer" - }, - "parameters": [ - "", - "\"Game Over\"" - ] - }, - { - "type": { - "value": "HideLayer" - }, - "parameters": [ - "", - "\"UI\"" - ] - }, - { - "type": { - "value": "HideLayer" + "value": "Scene" }, "parameters": [ "", - "\"Mobile Controls\"" + "\"Game\"", + "" ] } ] @@ -6053,78 +5534,23 @@ "conditions": [ { "type": { - "value": "LayerVisible" + "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" }, "parameters": [ - "", - "\"Game Over\"" + "MenuButton", + "" ] } ], "actions": [ { "type": { - "value": "ResizableCapability::ResizableBehavior::SetSize" + "value": "Scene" }, "parameters": [ - "Black", - "Resizable", - "SceneWindowWidth()", - "SceneWindowHeight()" - ] - } - ], - "events": [ - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" - }, - "parameters": [ - "RetryButton", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Scene" - }, - "parameters": [ - "", - "\"Game\"", - "" - ] - } - ] - }, - { - "type": "BuiltinCommonInstructions::Standard", - "conditions": [ - { - "type": { - "value": "PanelSpriteButton::PanelSpriteButton::IsClicked" - }, - "parameters": [ - "MenuButton", - "" - ] - } - ], - "actions": [ - { - "type": { - "value": "Scene" - }, - "parameters": [ - "", - "\"Menu\"", - "" - ] - } + "", + "\"Menu\"", + "" ] } ] @@ -6791,6 +6217,14 @@ "name": "Scale", "type": "ScalableCapability::ScalableBehavior" }, + { + "name": "SideViewCar", + "type": "SideViewCar::SideViewCar" + }, + { + "name": "SideViewWheel", + "type": "SideViewCar::SideViewWheel" + }, { "name": "SmoothCamera", "type": "SmoothCamera::SmoothCamera" @@ -37762,6 +37196,721 @@ } ], "eventsBasedObjects": [] + }, + { + "author": "", + "category": "", + "extensionNamespace": "", + "fullName": "", + "helpPath": "", + "iconUrl": "", + "name": "SideViewCar", + "previewIconUrl": "", + "shortDescription": "", + "version": "", + "description": "", + "tags": [], + "authorIds": [], + "dependencies": [], + "globalVariables": [], + "sceneVariables": [], + "eventsFunctions": [], + "eventsBasedBehaviors": [ + { + "description": "", + "fullName": "Side view car", + "name": "SideViewCar", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "Attach wheel", + "functionType": "Action", + "name": "AttachWheel", + "sentence": "Attach _PARAM2_ to _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::ForEach", + "object": "Wheel", + "conditions": [], + "actions": [ + { + "type": { + "value": "Physics2::AddWheelJoint" + }, + "parameters": [ + "Object", + "Physics2", + "Wheel.CenterX()", + "Wheel.CenterY()", + "Wheel", + "Wheel.CenterX()", + "Wheel.CenterY()", + "335", + "14", + "1", + "no", + "", + "1", + "", + "_SideViewCar.JointId" + ] + }, + { + "type": { + "value": "SideViewCar::SideViewWheel::SetJointId" + }, + "parameters": [ + "Wheel", + "SideViewWheel", + "=", + "Variable(_SideViewCar.JointId)", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewCar", + "type": "behavior" + }, + { + "description": "Wheel", + "name": "Wheel", + "type": "objectList" + }, + { + "description": "Side view wheel", + "name": "SideViewWheel", + "supplementaryInformation": "SideViewCar::SideViewWheel", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Unattach wheel", + "functionType": "Action", + "name": "UnattachWheel", + "sentence": "Unattach _PARAM2_ from _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::ForEach", + "object": "Wheel", + "conditions": [], + "actions": [ + { + "type": { + "value": "Physics2::Remove joint" + }, + "parameters": [ + "Object", + "Physics2", + "Wheel.SideViewWheel::JointId()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewCar", + "type": "behavior" + }, + { + "description": "Wheel", + "name": "Wheel", + "type": "objectList" + }, + { + "description": "Side view wheel", + "name": "SideViewWheel", + "supplementaryInformation": "SideViewCar::SideViewWheel", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Simulate acceleration key", + "functionType": "Action", + "name": "SimulateAccelerationKey", + "sentence": "Simulate pressing Acceleration key of _PARAM0_ using _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SideViewCar::SideViewCar::SetPropertyIsMotorUsed" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "SideViewCar::SideViewWheel::SimulateAccelerationKey" + }, + "parameters": [ + "Wheel", + "SideViewWheel", + "Acceleration", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewCar", + "type": "behavior" + }, + { + "description": "Wheel", + "name": "Wheel", + "type": "objectList" + }, + { + "description": "Side view wheel", + "name": "SideViewWheel", + "supplementaryInformation": "SideViewCar::SideViewWheel", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Simulate reverse key", + "functionType": "Action", + "name": "SimulateReverseKey", + "sentence": "Simulate pressing Reverse key of _PARAM0_ using _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SideViewCar::SideViewCar::SetPropertyIsMotorUsed" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "SideViewCar::SideViewWheel::SimulateReverseKey" + }, + "parameters": [ + "Wheel", + "SideViewWheel", + "1500", + "" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewCar", + "type": "behavior" + }, + { + "description": "Wheel", + "name": "Wheel", + "type": "objectList" + }, + { + "description": "Side view wheel", + "name": "SideViewWheel", + "supplementaryInformation": "SideViewCar::SideViewWheel", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Simulate rotate downward key", + "functionType": "Action", + "name": "SimulateRotateDownwardKey", + "sentence": "Simulate pressing rotate downward key of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Physics2::ApplyTorque" + }, + "parameters": [ + "Object", + "Physics2", + "AirControlTorque" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewCar", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Simulate rotate upward key", + "functionType": "Action", + "name": "SimulateRotateUpwardKey", + "sentence": "Simulate pressing rotate upward key of _PARAM0_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "Physics2::ApplyTorque" + }, + "parameters": [ + "Object", + "Physics2", + "-AirControlTorque" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewCar", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Physics Engine 2.0", + "description": "", + "group": "", + "extraInformation": [ + "Physics2::Physics2Behavior" + ], + "name": "Physics2" + }, + { + "value": "12000", + "type": "Number", + "label": "Wheel acceleration (in degree per second, per second)", + "description": "", + "group": "", + "extraInformation": [], + "name": "Acceleration" + }, + { + "value": "5", + "type": "Number", + "label": "Air control torque", + "description": "", + "group": "", + "extraInformation": [], + "name": "AirControlTorque" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsMotorUsed" + } + ], + "sharedPropertyDescriptors": [] + }, + { + "description": "", + "fullName": "Side view wheel", + "name": "SideViewWheel", + "objectType": "", + "eventsFunctions": [ + { + "fullName": "", + "functionType": "Action", + "name": "doStepPreEvents", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [ + { + "type": { + "inverted": true, + "value": "SideViewCar::SideViewWheel::PropertyIsMotorUsed" + }, + "parameters": [ + "Object", + "Behavior" + ] + } + ], + "actions": [ + { + "type": { + "value": "Physics2::EnableWheelJointMotor" + }, + "parameters": [ + "Wheel", + "Physics2", + "JointId", + "no" + ] + } + ] + }, + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SideViewCar::SideViewWheel::SetPropertyIsMotorUsed" + }, + "parameters": [ + "Object", + "Behavior", + "no" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewWheel", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "Simulate acceleration key", + "functionType": "Action", + "name": "SimulateAccelerationKey", + "private": true, + "sentence": "Simulate pressing Acceleration key of _PARAM0_ with acceleration _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SideViewCar::SideViewWheel::SetPropertyIsMotorUsed" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "Physics2::EnableWheelJointMotor" + }, + "parameters": [ + "Object", + "Physics2", + "JointId", + "yes" + ] + }, + { + "type": { + "value": "Physics2::WheelJointMotorSpeed" + }, + "parameters": [ + "Object", + "Physics2", + "JointId", + "+", + "Acceleration * TimeDelta()" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewWheel", + "type": "behavior" + }, + { + "description": "Acceleration", + "name": "Acceleration", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "fullName": "Simulate reverse key", + "functionType": "Action", + "name": "SimulateReverseKey", + "private": true, + "sentence": "Simulate pressing Reverse key of _PARAM0_ with speed _PARAM2_", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SideViewCar::SideViewWheel::SetPropertyIsMotorUsed" + }, + "parameters": [ + "Object", + "Behavior", + "yes" + ] + }, + { + "type": { + "value": "Physics2::EnableWheelJointMotor" + }, + "parameters": [ + "Object", + "Physics2", + "JointId", + "yes" + ] + }, + { + "type": { + "value": "Physics2::WheelJointMotorSpeed" + }, + "parameters": [ + "Object", + "Physics2", + "JointId", + "=", + "-Speed" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewWheel", + "type": "behavior" + }, + { + "description": "Speed", + "name": "Speed", + "type": "expression" + } + ], + "objectGroups": [] + }, + { + "description": "the joint id of the object.", + "fullName": "Joint id", + "functionType": "ExpressionAndCondition", + "group": "Side view wheel configuration", + "name": "JointId", + "sentence": "the joint id", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SetReturnNumber" + }, + "parameters": [ + "JointId" + ] + } + ] + } + ], + "expressionType": { + "type": "expression" + }, + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewWheel", + "type": "behavior" + } + ], + "objectGroups": [] + }, + { + "fullName": "", + "functionType": "ActionWithOperator", + "getterName": "JointId", + "name": "SetJointId", + "sentence": "", + "events": [ + { + "type": "BuiltinCommonInstructions::Standard", + "conditions": [], + "actions": [ + { + "type": { + "value": "SideViewCar::SideViewWheel::SetPropertyJointId" + }, + "parameters": [ + "Object", + "Behavior", + "=", + "Value" + ] + } + ] + } + ], + "parameters": [ + { + "description": "Object", + "name": "Object", + "type": "object" + }, + { + "description": "Behavior", + "name": "Behavior", + "supplementaryInformation": "SideViewCar::SideViewWheel", + "type": "behavior" + } + ], + "objectGroups": [] + } + ], + "propertyDescriptors": [ + { + "value": "", + "type": "Behavior", + "label": "Physics Engine 2.0", + "description": "", + "group": "", + "extraInformation": [ + "Physics2::Physics2Behavior" + ], + "name": "Physics2" + }, + { + "value": "0", + "type": "Number", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "JointId" + }, + { + "value": "", + "type": "Boolean", + "label": "", + "description": "", + "group": "", + "extraInformation": [], + "hidden": true, + "name": "IsMotorUsed" + } + ], + "sharedPropertyDescriptors": [] + } + ], + "eventsBasedObjects": [] } ], "externalLayouts": [ From 8e8aa735de275aac5ed8435e458314e873a788be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Davy=20H=C3=A9lard?= Date: Tue, 29 Oct 2024 12:51:01 +0100 Subject: [PATCH 06/10] Add a fake asset store id for the car. --- examples/3d-truck-extreme/Car2.glb | Bin 95964 -> 95976 bytes examples/3d-truck-extreme/Truck Extreme.json | 10 +++++----- examples/3d-truck-extreme/Wheel4.glb | Bin 41716 -> 41704 bytes 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/examples/3d-truck-extreme/Car2.glb b/examples/3d-truck-extreme/Car2.glb index f6e2dd2931f695b3f4ac9a9e253aa8ceb0de0fde..e0551379c3d0a5225a04cdd64cc8d846292246f6 100644 GIT binary patch literal 95976 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 delta 18088 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 YA~XVi>(7Noz@K#Ztv?}3cRnThKVJ&=F8}}l literal 41716 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 s(w_nigeN@%;LkvK?vv_#8k7o8goePU{# Date: Tue, 29 Oct 2024 12:57:12 +0100 Subject: [PATCH 07/10] Rename the project file. --- .../{Truck Extreme.json => 3d-truck-extreme.json} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename examples/3d-truck-extreme/{Truck Extreme.json => 3d-truck-extreme.json} (100%) diff --git a/examples/3d-truck-extreme/Truck Extreme.json b/examples/3d-truck-extreme/3d-truck-extreme.json similarity index 100% rename from examples/3d-truck-extreme/Truck Extreme.json rename to examples/3d-truck-extreme/3d-truck-extreme.json From 19d83d53e948e001d638a4699016c8fbd3a763ef Mon Sep 17 00:00:00 2001 From: Yaroslav Nazarenko <64281856+Jurfix@users.noreply.github.com> Date: Fri, 1 Nov 2024 17:47:22 +0200 Subject: [PATCH 08/10] Audio files except motor sound have been replaced with .AAC --- .../3d-truck-extreme/3d-truck-extreme.json | 4 ++-- ...hicle_Car_Door_Opening_Interior_Mono_02.aac | Bin 0 -> 3200 bytes ...hicle_Car_Door_Opening_Interior_Mono_02.wav | Bin 63168 -> 0 bytes .../Vehicle_Car_Stop_Engine_Exterior_Mono.aac | Bin 0 -> 14364 bytes .../Vehicle_Car_Stop_Engine_Exterior_Mono.wav | Bin 332470 -> 0 bytes 5 files changed, 2 insertions(+), 2 deletions(-) create mode 100644 examples/3d-truck-extreme/Vehicle_Car_Door_Opening_Interior_Mono_02.aac delete mode 100644 examples/3d-truck-extreme/Vehicle_Car_Door_Opening_Interior_Mono_02.wav create mode 100644 examples/3d-truck-extreme/Vehicle_Car_Stop_Engine_Exterior_Mono.aac delete mode 100644 examples/3d-truck-extreme/Vehicle_Car_Stop_Engine_Exterior_Mono.wav diff --git a/examples/3d-truck-extreme/3d-truck-extreme.json b/examples/3d-truck-extreme/3d-truck-extreme.json index b659f33f1..dd7e6c6ea 100644 --- a/examples/3d-truck-extreme/3d-truck-extreme.json +++ b/examples/3d-truck-extreme/3d-truck-extreme.json @@ -216,7 +216,7 @@ } }, { - "file": "Vehicle_Car_Door_Opening_Interior_Mono_02.wav", + "file": "Vehicle_Car_Door_Opening_Interior_Mono_02.aac", "kind": "audio", "metadata": "", "name": "Vehicle_Car_Door_Opening_Interior_Mono_02.wav", @@ -226,7 +226,7 @@ "userAdded": true }, { - "file": "Vehicle_Car_Stop_Engine_Exterior_Mono.wav", + "file": "Vehicle_Car_Stop_Engine_Exterior_Mono.aac", "kind": "audio", "metadata": "", "name": "Vehicle_Car_Stop_Engine_Exterior_Mono.wav", diff --git a/examples/3d-truck-extreme/Vehicle_Car_Door_Opening_Interior_Mono_02.aac b/examples/3d-truck-extreme/Vehicle_Car_Door_Opening_Interior_Mono_02.aac new file mode 100644 index 0000000000000000000000000000000000000000..fd56066bc2a6a26c4b5c7789f54a3eb724ecaaea GIT binary patch literal 3200 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 apsif#kKofwkmco7iu_%l34BShDdfKzfW#C4 literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/Vehicle_Car_Door_Opening_Interior_Mono_02.wav b/examples/3d-truck-extreme/Vehicle_Car_Door_Opening_Interior_Mono_02.wav deleted file mode 100644 index 4b08feb28e1dd9acce1df188c254476421b7da28..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 63168 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 literal 0 HcmV?d00001 diff --git a/examples/3d-truck-extreme/Vehicle_Car_Stop_Engine_Exterior_Mono.wav b/examples/3d-truck-extreme/Vehicle_Car_Stop_Engine_Exterior_Mono.wav deleted file mode 100644 index ffe97e936abb8ec95a81cd7123cc4dff7be7cc12..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332470 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