├── img ├── social.png ├── unity-sample.PNG ├── squiggle-blue.png ├── squiggle-white.png └── squiggle-blue-long.png ├── Squiggle.Test ├── Sprache.dll ├── Squiggle.dll ├── Squiggle.Test.csproj └── Program.cs ├── squiggle_0_1.unitypackage ├── Squiggle.Unity ├── ProjectSettings │ ├── ProjectVersion.txt │ ├── ClusterInputManager.asset │ ├── PresetManager.asset │ ├── EditorBuildSettings.asset │ ├── XRSettings.asset │ ├── TimeManager.asset │ ├── VFXManager.asset │ ├── AudioManager.asset │ ├── TagManager.asset │ ├── UnityConnectSettings.asset │ ├── EditorSettings.asset │ ├── DynamicsManager.asset │ ├── NavMeshAreas.asset │ ├── Physics2DSettings.asset │ ├── GraphicsSettings.asset │ ├── InputManager.asset │ ├── QualitySettings.asset │ └── ProjectSettings.asset ├── Assets │ ├── Squiggle │ │ ├── Plugins │ │ │ ├── Sprache.dll │ │ │ └── Squiggle.dll │ │ ├── squiggle-blue-long.png │ │ ├── Sample Scenes │ │ │ ├── 3 - ScriptableObject │ │ │ │ ├── SquiggleScriptableObject.cs │ │ │ │ ├── SampleSquiggleCodeSO.asset │ │ │ │ ├── ScriptableObjectSample.cs │ │ │ │ └── ScriptableObjectSample.unity │ │ │ ├── 2 -TextBox │ │ │ │ └── SquiggleTextBoxSample.cs │ │ │ ├── 1 - Monobehaviour │ │ │ │ └── SquiggleMonobehaviourSample.cs │ │ │ ├── 4 - StreamingAssetsSample │ │ │ │ ├── SquiggleStreamingAssetsSample.cs │ │ │ │ └── StreamingAssetsSamplex.unity │ │ │ ├── 5 - DialogProgressionSample │ │ │ │ └── SquiggleDialogProgressionSample.cs │ │ │ └── 6 - CustomCommand │ │ │ │ └── SquiggleCustomCommandSample.cs │ │ └── Common │ │ │ ├── SquiggleUnityRunner.cs │ │ │ └── SquiggleUtils.cs │ └── StreamingAssets │ │ ├── sampleSquiggleScript.txt │ │ ├── dialogProgressionSample.txt │ │ └── customCommandSample.txt ├── Squiggle.Unity.sln └── .vscode │ └── settings.json ├── Squiggle ├── src │ ├── Events.cs │ ├── Commands │ │ ├── Attributes.cs │ │ ├── SquiggleCommand.cs │ │ └── BuiltInCommands.cs │ ├── Core.cs │ ├── Parser │ │ └── Grammar.cs │ ├── Internal.cs │ └── Runner.cs └── Squiggle.csproj ├── LICENSE ├── .vscode └── tasks.json ├── readme.md └── .gitignore /img/social.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/img/social.png -------------------------------------------------------------------------------- /img/unity-sample.PNG: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/img/unity-sample.PNG -------------------------------------------------------------------------------- /img/squiggle-blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/img/squiggle-blue.png -------------------------------------------------------------------------------- /img/squiggle-white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/img/squiggle-white.png -------------------------------------------------------------------------------- /Squiggle.Test/Sprache.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/Squiggle.Test/Sprache.dll -------------------------------------------------------------------------------- /squiggle_0_1.unitypackage: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/squiggle_0_1.unitypackage -------------------------------------------------------------------------------- /Squiggle.Test/Squiggle.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/Squiggle.Test/Squiggle.dll -------------------------------------------------------------------------------- /img/squiggle-blue-long.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/img/squiggle-blue-long.png -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/ProjectVersion.txt: -------------------------------------------------------------------------------- 1 | m_EditorVersion: 2019.4.8f1 2 | m_EditorVersionWithRevision: 2019.4.8f1 (60781d942082) 3 | -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Plugins/Sprache.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/Squiggle.Unity/Assets/Squiggle/Plugins/Sprache.dll -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Plugins/Squiggle.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/Squiggle.Unity/Assets/Squiggle/Plugins/Squiggle.dll -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/squiggle-blue-long.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/afterschoolstudio/squiggle/HEAD/Squiggle.Unity/Assets/Squiggle/squiggle-blue-long.png -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/ClusterInputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!236 &1 4 | ClusterInputManager: 5 | m_ObjectHideFlags: 0 6 | m_Inputs: [] 7 | -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/PresetManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1386491679 &1 4 | PresetManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_DefaultPresets: {} 8 | -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/EditorBuildSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1045 &1 4 | EditorBuildSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Scenes: [] 8 | m_configObjects: {} 9 | -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/StreamingAssets/sampleSquiggleScript.txt: -------------------------------------------------------------------------------- 1 | Speaker: Hello from StreamingAssets! 2 | [wait 1000] 3 | Speaker: I just waited 1 second until I said this. 4 | [wait 1000] 5 | Speaker: Now the runner will exit in 1 second 6 | [wait 1000] -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/XRSettings.asset: -------------------------------------------------------------------------------- 1 | { 2 | "m_SettingKeys": [ 3 | "VR Device Disabled", 4 | "VR Device User Alert" 5 | ], 6 | "m_SettingValues": [ 7 | "False", 8 | "False" 9 | ] 10 | } -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/TimeManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!5 &1 4 | TimeManager: 5 | m_ObjectHideFlags: 0 6 | Fixed Timestep: 0.02 7 | Maximum Allowed Timestep: 0.33333334 8 | m_TimeScale: 1 9 | Maximum Particle Timestep: 0.03 10 | -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/StreamingAssets/dialogProgressionSample.txt: -------------------------------------------------------------------------------- 1 | Speaker: Hello from StreamingAssets! I'll wait until you press next to continue. 2 | Speaker: I'll wait until you press next to continue 3 | Speaker: And when you press next I'll show you some more 4 | Speaker: Now when you press next I'll exit -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/StreamingAssets/customCommandSample.txt: -------------------------------------------------------------------------------- 1 | Speaker: Hello from StreamingAssets! I'll wait until you press next to continue. 2 | Speaker: When you press next, this text will change to yellow 3 | [setTextColor yellow] 4 | Speaker: When you press next, this text will change to green 5 | [setTextColor green] 6 | Speaker: When you press next, this text will exit. -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/VFXManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!937362698 &1 4 | VFXManager: 5 | m_ObjectHideFlags: 0 6 | m_IndirectShader: {fileID: 0} 7 | m_CopyBufferShader: {fileID: 0} 8 | m_SortShader: {fileID: 0} 9 | m_StripUpdateShader: {fileID: 0} 10 | m_RenderPipeSettingsPath: 11 | m_FixedTimeStep: 0.016666668 12 | m_MaxDeltaTime: 0.05 13 | -------------------------------------------------------------------------------- /Squiggle/src/Events.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Squiggle.Commands; 3 | using DialogCommand = Squiggle.Commands.Dialog; 4 | 5 | namespace Squiggle.Events 6 | { 7 | public static class Commands 8 | { 9 | public static Action CompleteDialog; 10 | } 11 | internal static class Dialog 12 | { 13 | internal static Action EmitDialog; 14 | } 15 | } -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Sample Scenes/3 - ScriptableObject/SquiggleScriptableObject.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using System.Collections.Generic; 3 | using UnityEngine; 4 | 5 | [CreateAssetMenu(fileName = "SquiggleCode", menuName = "ScriptableObjects/SquiggleCode", order = 1)] 6 | public class SquiggleScriptableObject : ScriptableObject 7 | { 8 | [TextArea] 9 | public string SquiggleText; 10 | } 11 | -------------------------------------------------------------------------------- /Squiggle.Unity/Squiggle.Unity.sln: -------------------------------------------------------------------------------- 1 | 2 | Microsoft Visual Studio Solution File, Format Version 11.00 3 | # Visual Studio 2010 4 | 5 | Global 6 | GlobalSection(SolutionConfigurationPlatforms) = preSolution 7 | Debug|Any CPU = Debug|Any CPU 8 | EndGlobalSection 9 | GlobalSection(ProjectConfigurationPlatforms) = postSolution 10 | 11 | EndGlobalSection 12 | GlobalSection(SolutionProperties) = preSolution 13 | HideSolutionNode = FALSE 14 | EndGlobalSection 15 | EndGlobal 16 | -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/AudioManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!11 &1 4 | AudioManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Volume: 1 8 | Rolloff Scale: 1 9 | Doppler Factor: 1 10 | Default Speaker Mode: 2 11 | m_SampleRate: 0 12 | m_DSPBufferSize: 1024 13 | m_VirtualVoiceCount: 512 14 | m_RealVoiceCount: 32 15 | m_SpatializerPlugin: 16 | m_AmbisonicDecoderPlugin: 17 | m_DisableAudio: 0 18 | m_VirtualizeEffects: 1 19 | m_RequestedDSPBufferSize: 1024 20 | -------------------------------------------------------------------------------- /Squiggle.Test/Squiggle.Test.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Exe 5 | net6.0 6 | enable 7 | enable 8 | 9 | 10 | 11 | 12 | $(ProjectDir)Squiggle.dll 13 | 14 | 15 | $(ProjectDir)Sprache.dll 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/TagManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!78 &1 4 | TagManager: 5 | serializedVersion: 2 6 | tags: [] 7 | layers: 8 | - Default 9 | - TransparentFX 10 | - Ignore Raycast 11 | - 12 | - Water 13 | - UI 14 | - 15 | - 16 | - 17 | - 18 | - 19 | - 20 | - 21 | - 22 | - 23 | - 24 | - 25 | - 26 | - 27 | - 28 | - 29 | - 30 | - 31 | - 32 | - 33 | - 34 | - 35 | - 36 | - 37 | - 38 | - 39 | - 40 | m_SortingLayers: 41 | - name: Default 42 | uniqueID: 0 43 | locked: 0 44 | -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Common/SquiggleUnityRunner.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | public class SquiggleUnityRunner : MonoBehaviour 4 | { 5 | 6 | } 7 | // public class Runner : MonoBehaviour 8 | // { 9 | 10 | // } 11 | // public static void UnityWaitOverride(Squiggle.Commands.Wait waitCommand) 12 | // { 13 | // StartCoroutine(WaitMs(waitCommand)); 14 | // } 15 | 16 | // static IEnumerator WaitMs(Squiggle.Commands.Wait waitCommand) 17 | // { 18 | // yield return new WaitForSeconds(waitCommand.WaitMS / 1000f); 19 | // waitCommand.CommandExecutionComplete?.Invoke(); 20 | // } -------------------------------------------------------------------------------- /Squiggle/src/Commands/Attributes.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace Squiggle 4 | { 5 | [System.AttributeUsage(System.AttributeTargets.Class)] 6 | public class SquiggleCommandAttribute : Attribute 7 | { 8 | public string CommandTrigger {get; protected set;} 9 | public SquiggleCommandAttribute(string commandStart) 10 | { 11 | CommandTrigger = commandStart; 12 | } 13 | } 14 | 15 | [System.AttributeUsage(System.AttributeTargets.Field | System.AttributeTargets.Property)] 16 | public class ArgAttribute : Attribute 17 | { 18 | public int ArgumentIndex {get; protected set;} 19 | public ArgAttribute(int argIndex) 20 | { 21 | ArgumentIndex = argIndex; 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Sample Scenes/3 - ScriptableObject/SampleSquiggleCodeSO.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!114 &11400000 4 | MonoBehaviour: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | m_GameObject: {fileID: 0} 10 | m_Enabled: 1 11 | m_EditorHideFlags: 0 12 | m_Script: {fileID: 11500000, guid: f4dc56b56ecd4194e9e7c8187c1eb795, type: 3} 13 | m_Name: SampleSquiggleCodeSO 14 | m_EditorClassIdentifier: 15 | SquiggleText: 'Speaker: Hello! I''m going to wait 1 second. 16 | 17 | [wait 1000] 18 | 19 | Speaker: 20 | Now that I''ve waited a second, I''ll wait 2. 21 | 22 | [wait 2000] 23 | 24 | Speaker: 25 | I''m done now and will clear in 1 second. 26 | 27 | [wait 1000]' 28 | -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Sample Scenes/2 -TextBox/SquiggleTextBoxSample.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | using UnityEngine.UI; 3 | using UnityEngine.EventSystems; 4 | using Squiggle; 5 | 6 | public class SquiggleTextBoxSample : MonoBehaviour 7 | { 8 | public InputField InputField; 9 | public Button RunSquiggle; 10 | void OnEnable() 11 | { 12 | RunSquiggle.onClick.AddListener(() => { 13 | EventSystem.current.SetSelectedGameObject(null); 14 | TryExecuteSquiggle(); 15 | }); 16 | } 17 | void OnDisable() 18 | { 19 | RunSquiggle.onClick.RemoveAllListeners(); 20 | } 21 | 22 | void TryExecuteSquiggle() 23 | { 24 | Squiggle.Core.Run( squiggleText : InputField.text, 25 | runnerOptions : new Squiggle.Runner.Options(){ 26 | Debug = true, 27 | LogHandler = (text) => Debug.Log(text) 28 | }); 29 | } 30 | } 31 | -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/UnityConnectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!310 &1 4 | UnityConnectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 1 7 | m_Enabled: 0 8 | m_TestMode: 0 9 | m_EventOldUrl: https://api.uca.cloud.unity3d.com/v1/events 10 | m_EventUrl: https://cdp.cloud.unity3d.com/v1/events 11 | m_ConfigUrl: https://config.uca.cloud.unity3d.com 12 | m_TestInitMode: 0 13 | CrashReportingSettings: 14 | m_EventUrl: https://perf-events.cloud.unity3d.com 15 | m_Enabled: 0 16 | m_LogBufferSize: 10 17 | m_CaptureEditorExceptions: 1 18 | UnityPurchasingSettings: 19 | m_Enabled: 0 20 | m_TestMode: 0 21 | UnityAnalyticsSettings: 22 | m_Enabled: 0 23 | m_TestMode: 0 24 | m_InitializeOnStartup: 1 25 | UnityAdsSettings: 26 | m_Enabled: 0 27 | m_InitializeOnStartup: 1 28 | m_TestMode: 0 29 | m_IosGameId: 30 | m_AndroidGameId: 31 | m_GameIds: {} 32 | m_GameId: 33 | PerformanceReportingSettings: 34 | m_Enabled: 0 35 | -------------------------------------------------------------------------------- /Squiggle/src/Core.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Squiggle.Commands; 3 | using Squiggle.Parser; 4 | using Sprache; 5 | 6 | namespace Squiggle 7 | { 8 | public static class Core 9 | { 10 | public static SquiggleCommandGroup Parse(string squiggleText) 11 | { 12 | squiggleText = squiggleText.Replace("\r\n", "\\r\\n"); //need to replace these due to serialization 13 | // Clog.L($"text to parse: {Text.Replace("\n", "D")}"); also works - may need to do this as well for OSX line endings 14 | return SquiggleGrammar.Commands.Parse(squiggleText); 15 | } 16 | public static Runner Run(string squiggleText, Runner.Options runnerOptions = null) => Run(Parse(squiggleText),runnerOptions); 17 | public static Runner Run(SquiggleCommandGroup group, Runner.Options runnerOptions = null) 18 | { 19 | var options = runnerOptions; 20 | if(options == null) 21 | { 22 | options = new Runner.Options(); 23 | } 24 | return new Runner(group.SquiggleCommands,options); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /Squiggle.Test/Program.cs: -------------------------------------------------------------------------------- 1 | using Squiggle; 2 | using Squiggle.Commands; 3 | 4 | string testScript = @" 5 | Test: Hello, I'm speaking 6 | [wait 1000] 7 | Another: Now It's me 8 | [wait 1000] 9 | Another: Here's a sample command 10 | [sampleCustom someArgForACustomCommand] 11 | Final: And Now I'm Here 12 | "; 13 | 14 | 15 | // Squiggle.Core.Run(squiggleText : testScript, 16 | // runnerOptions : new Squiggle.Runner.Options(){Debug = true}, 17 | // dialogHandler : (command) => {Squiggle.Events.Commands.CompleteDialog?.Invoke(command);}); 18 | 19 | string myScript = "Speaker: Hello! The Speaker is talking!"; 20 | Squiggle.Core.Run( squiggleText : myScript, 21 | runnerOptions : new Squiggle.Runner.Options(){Debug = true}); 22 | 23 | [SquiggleCommand("sampleCustom")] 24 | public class SampleCustom : SquiggleCommand 25 | { 26 | [Arg(1)] public string LogText; 27 | public override void Execute() 28 | { 29 | Console.WriteLine($"you passed the arg: {LogText} to your custom command"); 30 | CommandExecutionComplete?.Invoke(); 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Afterschool 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /Squiggle/src/Commands/SquiggleCommand.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Collections.Generic; 4 | using System.Reflection; 5 | using System.Threading.Tasks; 6 | 7 | namespace Squiggle.Commands 8 | { 9 | public abstract class Command 10 | { 11 | public Action CommandExecutionComplete; 12 | public virtual void Execute() 13 | { 14 | CommandExecutionComplete?.Invoke(); 15 | } 16 | public virtual void Cleanup() {} 17 | } 18 | 19 | public class SquiggleCommand : Command 20 | { 21 | public string[] Args; 22 | public string Parsed 23 | { 24 | get 25 | { 26 | var s = ""; 27 | for (int i = 0; i < Args.Length; i++) 28 | { 29 | s += $"({i}){Args[i]} "; 30 | } 31 | return s; 32 | } 33 | } 34 | } 35 | 36 | public class SquiggleCommandGroup 37 | { 38 | public List SquiggleCommands = new List(); 39 | public SquiggleCommandGroup(List commands) 40 | { 41 | SquiggleCommands = commands; 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/EditorSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!159 &1 4 | EditorSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 9 7 | m_ExternalVersionControlSupport: Visible Meta Files 8 | m_SerializationMode: 2 9 | m_LineEndingsForNewScripts: 0 10 | m_DefaultBehaviorMode: 0 11 | m_PrefabRegularEnvironment: {fileID: 0} 12 | m_PrefabUIEnvironment: {fileID: 0} 13 | m_SpritePackerMode: 0 14 | m_SpritePackerPaddingPower: 1 15 | m_EtcTextureCompressorBehavior: 1 16 | m_EtcTextureFastCompressor: 1 17 | m_EtcTextureNormalCompressor: 2 18 | m_EtcTextureBestCompressor: 4 19 | m_ProjectGenerationIncludedExtensions: txt;xml;fnt;cd;asmdef;rsp;asmref 20 | m_ProjectGenerationRootNamespace: 21 | m_CollabEditorSettings: 22 | inProgressEnabled: 1 23 | m_EnableTextureStreamingInEditMode: 1 24 | m_EnableTextureStreamingInPlayMode: 1 25 | m_AsyncShaderCompilation: 1 26 | m_EnterPlayModeOptionsEnabled: 0 27 | m_EnterPlayModeOptions: 3 28 | m_ShowLightmapResolutionOverlay: 1 29 | m_UseLegacyProbeSampleCount: 0 30 | m_AssetPipelineMode: 1 31 | m_CacheServerMode: 0 32 | m_CacheServerEndpoint: 33 | m_CacheServerNamespacePrefix: default 34 | m_CacheServerEnableDownload: 1 35 | m_CacheServerEnableUpload: 1 36 | -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/DynamicsManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!55 &1 4 | PhysicsManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 11 7 | m_Gravity: {x: 0, y: -9.81, z: 0} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_BounceThreshold: 2 10 | m_SleepThreshold: 0.005 11 | m_DefaultContactOffset: 0.01 12 | m_DefaultSolverIterations: 6 13 | m_DefaultSolverVelocityIterations: 1 14 | m_QueriesHitBackfaces: 0 15 | m_QueriesHitTriggers: 1 16 | m_EnableAdaptiveForce: 0 17 | m_ClothInterCollisionDistance: 0 18 | m_ClothInterCollisionStiffness: 0 19 | m_ContactsGeneration: 1 20 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 21 | m_AutoSimulation: 1 22 | m_AutoSyncTransforms: 0 23 | m_ReuseCollisionCallbacks: 1 24 | m_ClothInterCollisionSettingsToggle: 0 25 | m_ContactPairsMode: 0 26 | m_BroadphaseType: 0 27 | m_WorldBounds: 28 | m_Center: {x: 0, y: 0, z: 0} 29 | m_Extent: {x: 250, y: 250, z: 250} 30 | m_WorldSubdivisions: 8 31 | m_FrictionType: 0 32 | m_EnableEnhancedDeterminism: 0 33 | m_EnableUnifiedHeightmaps: 1 34 | m_DefaultMaxAngluarSpeed: 7 35 | -------------------------------------------------------------------------------- /Squiggle/src/Commands/BuiltInCommands.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading; 3 | using Squiggle.Events; 4 | 5 | namespace Squiggle.Commands 6 | { 7 | 8 | //speaker commands are used directly by the parser, no need for attribute 9 | public class Dialog : SquiggleCommand 10 | { 11 | public string Speaker; 12 | public string Text; 13 | public Dialog(string speaker, string text) 14 | { 15 | Speaker = speaker; 16 | Text = text; 17 | Args = new string[]{Speaker,Text}; 18 | } 19 | public override void Execute() 20 | { 21 | Squiggle.Events.Commands.CompleteDialog += OnDialogComplete; 22 | Squiggle.Events.Dialog.EmitDialog?.Invoke(this); 23 | } 24 | 25 | void OnDialogComplete(Dialog dialogCommand) 26 | { 27 | if(dialogCommand == this) 28 | { 29 | Squiggle.Events.Commands.CompleteDialog -= OnDialogComplete; 30 | CommandExecutionComplete?.Invoke(); 31 | } 32 | } 33 | public override void Cleanup() 34 | { 35 | Squiggle.Events.Commands.CompleteDialog -= OnDialogComplete; 36 | } 37 | 38 | } 39 | 40 | [SquiggleCommand("wait")] 41 | public class Wait : SquiggleCommand 42 | { 43 | [Arg(1)] public int WaitMS; 44 | public override void Execute() 45 | { 46 | Thread.Sleep(WaitMS); 47 | CommandExecutionComplete?.Invoke(); 48 | } 49 | } 50 | 51 | 52 | } -------------------------------------------------------------------------------- /Squiggle.Unity/.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "files.exclude": 3 | { 4 | "**/.DS_Store":true, 5 | "**/.git":true, 6 | "**/.gitignore":true, 7 | "**/.gitmodules":true, 8 | "**/*.booproj":true, 9 | "**/*.pidb":true, 10 | "**/*.suo":true, 11 | "**/*.user":true, 12 | "**/*.userprefs":true, 13 | "**/*.unityproj":true, 14 | "**/*.dll":true, 15 | "**/*.exe":true, 16 | "**/*.pdf":true, 17 | "**/*.mid":true, 18 | "**/*.midi":true, 19 | "**/*.wav":true, 20 | "**/*.gif":true, 21 | "**/*.ico":true, 22 | "**/*.jpg":true, 23 | "**/*.jpeg":true, 24 | "**/*.png":true, 25 | "**/*.psd":true, 26 | "**/*.tga":true, 27 | "**/*.tif":true, 28 | "**/*.tiff":true, 29 | "**/*.3ds":true, 30 | "**/*.3DS":true, 31 | "**/*.fbx":true, 32 | "**/*.FBX":true, 33 | "**/*.lxo":true, 34 | "**/*.LXO":true, 35 | "**/*.ma":true, 36 | "**/*.MA":true, 37 | "**/*.obj":true, 38 | "**/*.OBJ":true, 39 | "**/*.asset":true, 40 | "**/*.cubemap":true, 41 | "**/*.flare":true, 42 | "**/*.mat":true, 43 | "**/*.meta":true, 44 | "**/*.prefab":true, 45 | "**/*.unity":true, 46 | "build/":true, 47 | "Build/":true, 48 | "Library/":true, 49 | "library/":true, 50 | "obj/":true, 51 | "Obj/":true, 52 | "ProjectSettings/":true, 53 | "temp/":true, 54 | "Temp/":true 55 | } 56 | } -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/NavMeshAreas.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!126 &1 4 | NavMeshProjectSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | areas: 8 | - name: Walkable 9 | cost: 1 10 | - name: Not Walkable 11 | cost: 1 12 | - name: Jump 13 | cost: 2 14 | - name: 15 | cost: 1 16 | - name: 17 | cost: 1 18 | - name: 19 | cost: 1 20 | - name: 21 | cost: 1 22 | - name: 23 | cost: 1 24 | - name: 25 | cost: 1 26 | - name: 27 | cost: 1 28 | - name: 29 | cost: 1 30 | - name: 31 | cost: 1 32 | - name: 33 | cost: 1 34 | - name: 35 | cost: 1 36 | - name: 37 | cost: 1 38 | - name: 39 | cost: 1 40 | - name: 41 | cost: 1 42 | - name: 43 | cost: 1 44 | - name: 45 | cost: 1 46 | - name: 47 | cost: 1 48 | - name: 49 | cost: 1 50 | - name: 51 | cost: 1 52 | - name: 53 | cost: 1 54 | - name: 55 | cost: 1 56 | - name: 57 | cost: 1 58 | - name: 59 | cost: 1 60 | - name: 61 | cost: 1 62 | - name: 63 | cost: 1 64 | - name: 65 | cost: 1 66 | - name: 67 | cost: 1 68 | - name: 69 | cost: 1 70 | - name: 71 | cost: 1 72 | m_LastAgentTypeID: -887442657 73 | m_Settings: 74 | - serializedVersion: 2 75 | agentTypeID: 0 76 | agentRadius: 0.5 77 | agentHeight: 2 78 | agentSlope: 45 79 | agentClimb: 0.75 80 | ledgeDropHeight: 0 81 | maxJumpAcrossDistance: 0 82 | minRegionArea: 2 83 | manualCellSize: 0 84 | cellSize: 0.16666667 85 | manualTileSize: 0 86 | tileSize: 256 87 | accuratePlacement: 0 88 | debug: 89 | m_Flags: 0 90 | m_SettingNames: 91 | - Humanoid 92 | -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Common/SquiggleUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using UnityEngine; 4 | using UnityEngine.EventSystems; 5 | using System.IO; 6 | 7 | namespace Squiggle.Unity 8 | { 9 | public static class Utils 10 | { 11 | public static string ReadTextFileFromStreamingAssets(string sFileName) 12 | { 13 | //Debug.Log("Reading " + sFileName); 14 | //Check to see if the filename specified exists, if not try adding '.txt', otherwise fail 15 | string sFileNameFound = ""; 16 | if (File.Exists(Application.streamingAssetsPath + "/" + sFileName)) 17 | { 18 | //Debug.Log("Reading '" + sFileName + "'."); 19 | sFileNameFound = Application.streamingAssetsPath + "/" + sFileName; //file found 20 | } 21 | else if (File.Exists(Application.streamingAssetsPath + "/" + sFileName + ".txt")) 22 | { 23 | sFileNameFound = Application.streamingAssetsPath + "/" + sFileName + ".txt"; 24 | } 25 | else 26 | { 27 | Debug.Log("Could not find file '" + sFileName + "'."); 28 | return null; 29 | } 30 | 31 | StreamReader sr; 32 | try 33 | { 34 | sr = new StreamReader(sFileNameFound); 35 | } 36 | catch (System.Exception e) 37 | { 38 | Debug.LogWarning("Something went wrong with read. " + e.Message); 39 | return null; 40 | } 41 | 42 | string fileContents = sr.ReadToEnd(); 43 | sr.Close(); 44 | 45 | return fileContents; 46 | } 47 | } 48 | } -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/Physics2DSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!19 &1 4 | Physics2DSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 4 7 | m_Gravity: {x: 0, y: -9.81} 8 | m_DefaultMaterial: {fileID: 0} 9 | m_VelocityIterations: 8 10 | m_PositionIterations: 3 11 | m_VelocityThreshold: 1 12 | m_MaxLinearCorrection: 0.2 13 | m_MaxAngularCorrection: 8 14 | m_MaxTranslationSpeed: 100 15 | m_MaxRotationSpeed: 360 16 | m_BaumgarteScale: 0.2 17 | m_BaumgarteTimeOfImpactScale: 0.75 18 | m_TimeToSleep: 0.5 19 | m_LinearSleepTolerance: 0.01 20 | m_AngularSleepTolerance: 2 21 | m_DefaultContactOffset: 0.01 22 | m_JobOptions: 23 | serializedVersion: 2 24 | useMultithreading: 0 25 | useConsistencySorting: 0 26 | m_InterpolationPosesPerJob: 100 27 | m_NewContactsPerJob: 30 28 | m_CollideContactsPerJob: 100 29 | m_ClearFlagsPerJob: 200 30 | m_ClearBodyForcesPerJob: 200 31 | m_SyncDiscreteFixturesPerJob: 50 32 | m_SyncContinuousFixturesPerJob: 50 33 | m_FindNearestContactsPerJob: 100 34 | m_UpdateTriggerContactsPerJob: 100 35 | m_IslandSolverCostThreshold: 100 36 | m_IslandSolverBodyCostScale: 1 37 | m_IslandSolverContactCostScale: 10 38 | m_IslandSolverJointCostScale: 10 39 | m_IslandSolverBodiesPerJob: 50 40 | m_IslandSolverContactsPerJob: 50 41 | m_AutoSimulation: 1 42 | m_QueriesHitTriggers: 1 43 | m_QueriesStartInColliders: 1 44 | m_CallbacksOnDisable: 1 45 | m_ReuseCollisionCallbacks: 1 46 | m_AutoSyncTransforms: 0 47 | m_AlwaysShowColliders: 0 48 | m_ShowColliderSleep: 1 49 | m_ShowColliderContacts: 0 50 | m_ShowColliderAABB: 0 51 | m_ContactArrowScale: 0.2 52 | m_ColliderAwakeColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.7529412} 53 | m_ColliderAsleepColor: {r: 0.5686275, g: 0.95686275, b: 0.54509807, a: 0.36078432} 54 | m_ColliderContactColor: {r: 1, g: 0, b: 1, a: 0.6862745} 55 | m_ColliderAABBColor: {r: 1, g: 1, b: 0, a: 0.2509804} 56 | m_LayerCollisionMatrix: ffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffffff 57 | -------------------------------------------------------------------------------- /Squiggle/Squiggle.csproj: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | netstandard2.0 5 | 6 | true 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/GraphicsSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!30 &1 4 | GraphicsSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 13 7 | m_Deferred: 8 | m_Mode: 1 9 | m_Shader: {fileID: 69, guid: 0000000000000000f000000000000000, type: 0} 10 | m_DeferredReflections: 11 | m_Mode: 1 12 | m_Shader: {fileID: 74, guid: 0000000000000000f000000000000000, type: 0} 13 | m_ScreenSpaceShadows: 14 | m_Mode: 1 15 | m_Shader: {fileID: 64, guid: 0000000000000000f000000000000000, type: 0} 16 | m_LegacyDeferred: 17 | m_Mode: 1 18 | m_Shader: {fileID: 63, guid: 0000000000000000f000000000000000, type: 0} 19 | m_DepthNormals: 20 | m_Mode: 1 21 | m_Shader: {fileID: 62, guid: 0000000000000000f000000000000000, type: 0} 22 | m_MotionVectors: 23 | m_Mode: 1 24 | m_Shader: {fileID: 75, guid: 0000000000000000f000000000000000, type: 0} 25 | m_LightHalo: 26 | m_Mode: 1 27 | m_Shader: {fileID: 105, guid: 0000000000000000f000000000000000, type: 0} 28 | m_LensFlare: 29 | m_Mode: 1 30 | m_Shader: {fileID: 102, guid: 0000000000000000f000000000000000, type: 0} 31 | m_AlwaysIncludedShaders: 32 | - {fileID: 7, guid: 0000000000000000f000000000000000, type: 0} 33 | - {fileID: 15104, guid: 0000000000000000f000000000000000, type: 0} 34 | - {fileID: 15105, guid: 0000000000000000f000000000000000, type: 0} 35 | - {fileID: 15106, guid: 0000000000000000f000000000000000, type: 0} 36 | - {fileID: 10753, guid: 0000000000000000f000000000000000, type: 0} 37 | - {fileID: 10770, guid: 0000000000000000f000000000000000, type: 0} 38 | m_PreloadedShaders: [] 39 | m_SpritesDefaultMaterial: {fileID: 10754, guid: 0000000000000000f000000000000000, 40 | type: 0} 41 | m_CustomRenderPipeline: {fileID: 0} 42 | m_TransparencySortMode: 0 43 | m_TransparencySortAxis: {x: 0, y: 0, z: 1} 44 | m_DefaultRenderingPath: 1 45 | m_DefaultMobileRenderingPath: 1 46 | m_TierSettings: [] 47 | m_LightmapStripping: 0 48 | m_FogStripping: 0 49 | m_InstancingStripping: 0 50 | m_LightmapKeepPlain: 1 51 | m_LightmapKeepDirCombined: 1 52 | m_LightmapKeepDynamicPlain: 1 53 | m_LightmapKeepDynamicDirCombined: 1 54 | m_LightmapKeepShadowMask: 1 55 | m_LightmapKeepSubtractive: 1 56 | m_FogKeepLinear: 1 57 | m_FogKeepExp: 1 58 | m_FogKeepExp2: 1 59 | m_AlbedoSwatchInfos: [] 60 | m_LightsUseLinearIntensity: 0 61 | m_LightsUseColorTemperature: 0 62 | m_LogWhenShaderIsCompiled: 0 63 | m_AllowEnlightenSupportForUpgradedProject: 0 64 | -------------------------------------------------------------------------------- /.vscode/tasks.json: -------------------------------------------------------------------------------- 1 | { 2 | // See https://go.microsoft.com/fwlink/?LinkId=733558 3 | // for the documentation about the tasks.json format 4 | "version": "2.0.0", 5 | "tasks": [ 6 | { 7 | "label": "build squiggle", 8 | "command": "dotnet", 9 | "type": "shell", 10 | "args": [ 11 | "build", 12 | "'Squiggle/Squiggle.csproj'", 13 | // Ask dotnet build to generate full paths for file names. 14 | "/property:GenerateFullPaths=true", 15 | // Do not generate summary otherwise it leads to duplicate errors in Problems panel 16 | "/consoleloggerparameters:NoSummary" 17 | ], 18 | "group": "build", 19 | "presentation": { 20 | "reveal": "always" 21 | }, 22 | "problemMatcher": "$msCompile" 23 | }, 24 | { 25 | "label": "build test", 26 | "command": "dotnet", 27 | "type": "shell", 28 | "args": [ 29 | "build", 30 | "'Squiggle.Test/Squiggle.Test.csproj'", 31 | // Ask dotnet build to generate full paths for file names. 32 | "/property:GenerateFullPaths=true", 33 | // Do not generate summary otherwise it leads to duplicate errors in Problems panel 34 | "/consoleloggerparameters:NoSummary" 35 | ], 36 | "group": "build", 37 | "presentation": { 38 | "reveal": "always" 39 | }, 40 | "problemMatcher": "$msCompile" 41 | }, 42 | { 43 | "label": "test squiggle", 44 | "command": "dotnet", 45 | "type": "shell", 46 | "args": [ 47 | "run", 48 | "--project", 49 | "'Squiggle.Test/Squiggle.Test.csproj'", 50 | // Ask dotnet build to generate full paths for file names. 51 | // "/property:GenerateFullPaths=true", 52 | // Do not generate summary otherwise it leads to duplicate errors in Problems panel 53 | // "/consoleloggerparameters:NoSummary" 54 | ], 55 | "group": "build", 56 | "presentation": { 57 | "reveal": "always" 58 | }, 59 | "problemMatcher": "$msCompile" 60 | }, 61 | { 62 | "label": "rebuild and test", 63 | "type": "shell", 64 | "dependsOrder": "sequence", 65 | "group": "build", 66 | "dependsOn": ["build squiggle", "build test", "test squiggle"] 67 | } 68 | ] 69 | } -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Sample Scenes/1 - Monobehaviour/SquiggleMonobehaviourSample.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | using UnityEngine.EventSystems; 6 | using Squiggle; 7 | 8 | public class SquiggleMonobehaviourSample : MonoBehaviour 9 | { 10 | public Text SpeakerName; 11 | public Text SpeakerText; 12 | public Button RunSquiggle; 13 | [TextArea] 14 | public string SquiggleCode; 15 | void OnEnable() 16 | { 17 | SpeakerName.text = ""; 18 | SpeakerText.text = ""; 19 | 20 | RunSquiggle.onClick.AddListener(() => { 21 | EventSystem.current.SetSelectedGameObject(null); 22 | StartCoroutine(TryExecuteSquiggle()); 23 | }); 24 | } 25 | void OnDisable() 26 | { 27 | RunSquiggle.onClick.RemoveAllListeners(); 28 | } 29 | 30 | Squiggle.Runner currentRunner; 31 | bool currentlyRunning = false; 32 | IEnumerator TryExecuteSquiggle() 33 | { 34 | if(currentlyRunning) 35 | { 36 | yield return null; 37 | } 38 | 39 | currentlyRunning = true; 40 | currentRunner = Squiggle.Core.Run( squiggleText : SquiggleCode, 41 | runnerOptions : new Squiggle.Runner.Options(){ 42 | AutoStart = false, 43 | Debug = true, 44 | LogHandler = (text) => Debug.Log(text), 45 | WaitOverride = (command) => StartCoroutine(WaitMs(command)), 46 | DialogHandler = (command) => { 47 | SpeakerName.text = command.Speaker; 48 | SpeakerText.text = command.Text; 49 | command.CommandExecutionComplete?.Invoke(); 50 | }, 51 | }); 52 | 53 | currentRunner.CompletedExecution += OnRunnerComplete; 54 | currentRunner.Start(); 55 | yield return null; 56 | } 57 | 58 | IEnumerator WaitMs(Squiggle.Commands.Wait waitCommand) 59 | { 60 | Debug.Log("inside wait ms"); 61 | yield return new WaitForSeconds(waitCommand.WaitMS / 1000f); 62 | waitCommand.CommandExecutionComplete?.Invoke(); 63 | } 64 | 65 | void OnRunnerComplete() 66 | { 67 | currentRunner.CompletedExecution -= OnRunnerComplete; 68 | currentRunner = null; 69 | currentlyRunning = false; 70 | SpeakerName.text = ""; 71 | SpeakerText.text = ""; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Sample Scenes/3 - ScriptableObject/ScriptableObjectSample.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | using UnityEngine.EventSystems; 6 | using Squiggle; 7 | using Squiggle.Unity; 8 | 9 | public class ScriptableObjectSample : MonoBehaviour 10 | { 11 | public Text SpeakerName; 12 | public Text SpeakerText; 13 | public Button RunSquiggle; 14 | public SquiggleScriptableObject ScriptableObject; 15 | void OnEnable() 16 | { 17 | SpeakerName.text = ""; 18 | SpeakerText.text = ""; 19 | 20 | RunSquiggle.onClick.AddListener(() => { 21 | EventSystem.current.SetSelectedGameObject(null); 22 | StartCoroutine(TryExecuteSquiggle()); 23 | }); 24 | } 25 | void OnDisable() 26 | { 27 | RunSquiggle.onClick.RemoveAllListeners(); 28 | } 29 | 30 | Squiggle.Runner currentRunner; 31 | bool currentlyRunning = false; 32 | IEnumerator TryExecuteSquiggle() 33 | { 34 | if(currentlyRunning) 35 | { 36 | yield return null; 37 | } 38 | 39 | currentlyRunning = true; 40 | currentRunner = Squiggle.Core.Run( squiggleText : ScriptableObject.SquiggleText, 41 | runnerOptions : new Squiggle.Runner.Options(){ 42 | AutoStart = false, 43 | Debug = true, 44 | LogHandler = (text) => Debug.Log(text), 45 | WaitOverride = (command) => StartCoroutine(WaitMs(command)), 46 | DialogHandler = (command) => { 47 | SpeakerName.text = command.Speaker; 48 | SpeakerText.text = command.Text; 49 | command.CommandExecutionComplete?.Invoke(); 50 | }, 51 | }); 52 | 53 | currentRunner.CompletedExecution += OnRunnerComplete; 54 | currentRunner.Start(); 55 | yield return null; 56 | } 57 | 58 | IEnumerator WaitMs(Squiggle.Commands.Wait waitCommand) 59 | { 60 | Debug.Log("inside wait ms"); 61 | yield return new WaitForSeconds(waitCommand.WaitMS / 1000f); 62 | waitCommand.CommandExecutionComplete?.Invoke(); 63 | } 64 | 65 | void OnRunnerComplete() 66 | { 67 | currentRunner.CompletedExecution -= OnRunnerComplete; 68 | currentRunner = null; 69 | currentlyRunning = false; 70 | SpeakerName.text = ""; 71 | SpeakerText.text = ""; 72 | } 73 | } 74 | -------------------------------------------------------------------------------- /Squiggle/src/Parser/Grammar.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Collections.Generic; 3 | using Sprache; 4 | using Squiggle.Commands; 5 | 6 | namespace Squiggle.Parser 7 | { 8 | 9 | public class SquiggleGrammar 10 | { 11 | // static readonly Parser NewLine = 12 | // Parse.String(Environment.NewLine).Text(); 13 | // static readonly Parser LineTerminator = 14 | // Parse.Return("").End().XOr( 15 | // Line.End()).Or( 16 | // Line); 17 | 18 | static readonly Parser LiteralLineContent = Parse.AnyChar.Except(Parse.LineTerminator).Except(Parse.LineEnd); 19 | static readonly Parser Line = LiteralLineContent.AtLeastOnce().Text(); 20 | static readonly Parser> LineEnd = Parse.LineEnd.XOr(Parse.LineTerminator).XOr(Parse.String("\\r\\n")).XOr(Parse.String("\\n")).XOr(Parse.String("\n")).XOr(Parse.String("\r\n")); 21 | public static readonly Parser Commands = 22 | from introLines in LineEnd.Many() 23 | from commands in Parse.Ref(()=>SpeakerText).XOr(Parse.Ref(() => Instruction)).Many() 24 | from outroLines in LineEnd.Many() 25 | select new SquiggleCommandGroup(commands.ToList()); 26 | public static readonly Parser CommandParameter = 27 | (from content in Parse.CharExcept(' ').Until(Parse.LineTerminator).Text() 28 | select content).Token(); 29 | public static readonly Parser Identifier = Parse.Letter.AtLeastOnce().Text().Token(); 30 | public static readonly Parser BigIdentifier = 31 | (Parse.Chars(":/_") 32 | .XOr(Parse.LetterOrDigit)) 33 | .AtLeastOnce().Text().Token(); 34 | public static readonly Parser Colon = Parse.Char(':'); 35 | public static readonly Parser OpenBracket = Parse.Char('['); 36 | public static readonly Parser CloseBracket = Parse.Char(']'); 37 | public static readonly Parser Instruction = 38 | from startBuffer in LineEnd.Many() 39 | from open in OpenBracket.AtLeastOnce().Token() 40 | from commandParams in BigIdentifier.Many() 41 | from close in CloseBracket.Token() 42 | from endBuffer in LineEnd.Many() 43 | select Internal.CreateCommandForCommandTrigger(commandParams.ToArray()); 44 | // select new SquiggleCommand(){Args = commandParams.ToArray()}; 45 | public static readonly Parser SpeakerText = 46 | from startBuffer in LineEnd.Many() 47 | from lead in Parse.LetterOrDigit.AtLeastOnce().Text() 48 | from speaker in Parse.AnyChar.Until(Colon).Token().Text() 49 | from dialog in Parse.AnyChar.Until(LineEnd).Text() 50 | from endBuffer in LineEnd.Many() 51 | 52 | select new Dialog(lead+speaker,dialog); 53 | } 54 | } -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Sample Scenes/4 - StreamingAssetsSample/SquiggleStreamingAssetsSample.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | using UnityEngine.EventSystems; 6 | using Squiggle; 7 | 8 | public class SquiggleStreamingAssetsSample : MonoBehaviour 9 | { 10 | public Text SpeakerName; 11 | public Text SpeakerText; 12 | public Button RunSquiggle; 13 | string SquiggleCode; 14 | void OnEnable() 15 | { 16 | SpeakerName.text = ""; 17 | SpeakerText.text = ""; 18 | 19 | SquiggleCode = Squiggle.Unity.Utils.ReadTextFileFromStreamingAssets("sampleSquiggleScript.txt"); 20 | //VERY IMPORTANT - you need to replace line endings of loaded in files: 21 | SquiggleCode = SquiggleCode.Replace("\r\n", "\\r\\n"); //need to replace these due to serialization 22 | // {Text.Replace("\n", "D")}"); also works - may need to do this as well for OSX line endings 23 | 24 | 25 | RunSquiggle.onClick.AddListener(() => { 26 | EventSystem.current.SetSelectedGameObject(null); 27 | StartCoroutine(TryExecuteSquiggle()); 28 | }); 29 | } 30 | void OnDisable() 31 | { 32 | RunSquiggle.onClick.RemoveAllListeners(); 33 | } 34 | 35 | Squiggle.Runner currentRunner; 36 | bool currentlyRunning = false; 37 | IEnumerator TryExecuteSquiggle() 38 | { 39 | if(currentlyRunning) 40 | { 41 | yield return null; 42 | } 43 | 44 | currentlyRunning = true; 45 | currentRunner = Squiggle.Core.Run( squiggleText : SquiggleCode, 46 | runnerOptions : new Squiggle.Runner.Options(){ 47 | AutoStart = false, 48 | Debug = true, 49 | LogHandler = (text) => Debug.Log(text), 50 | WaitOverride = (command) => StartCoroutine(WaitMs(command)), 51 | DialogHandler = (command) => { 52 | SpeakerName.text = command.Speaker; 53 | SpeakerText.text = command.Text; 54 | command.CommandExecutionComplete?.Invoke(); 55 | }, 56 | }); 57 | 58 | currentRunner.CompletedExecution += OnRunnerComplete; 59 | currentRunner.Start(); 60 | yield return null; 61 | } 62 | 63 | IEnumerator WaitMs(Squiggle.Commands.Wait waitCommand) 64 | { 65 | Debug.Log("inside wait ms"); 66 | yield return new WaitForSeconds(waitCommand.WaitMS / 1000f); 67 | waitCommand.CommandExecutionComplete?.Invoke(); 68 | } 69 | 70 | void OnRunnerComplete() 71 | { 72 | currentRunner.CompletedExecution -= OnRunnerComplete; 73 | currentRunner = null; 74 | currentlyRunning = false; 75 | SpeakerName.text = ""; 76 | SpeakerText.text = ""; 77 | } 78 | } 79 | -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Sample Scenes/5 - DialogProgressionSample/SquiggleDialogProgressionSample.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | using UnityEngine.EventSystems; 6 | using Squiggle; 7 | using Squiggle.Commands; 8 | 9 | public class SquiggleDialogProgressionSample : MonoBehaviour 10 | { 11 | public Text SpeakerName; 12 | public Text SpeakerText; 13 | public Button RunSquiggle; 14 | string SquiggleCode; 15 | public Button NextCommandButton; 16 | void OnEnable() 17 | { 18 | SpeakerName.text = ""; 19 | SpeakerText.text = ""; 20 | NextCommandButton.gameObject.SetActive(false); 21 | 22 | SquiggleCode = Squiggle.Unity.Utils.ReadTextFileFromStreamingAssets("dialogProgressionSample.txt"); 23 | //VERY IMPORTANT - you need to replace line endings of loaded in files: 24 | SquiggleCode = SquiggleCode.Replace("\r\n", "\\r\\n"); //need to replace these due to serialization 25 | // {Text.Replace("\n", "D")}"); also works - may need to do this as well for OSX line endings 26 | 27 | RunSquiggle.onClick.AddListener(() => { 28 | EventSystem.current.SetSelectedGameObject(null); 29 | StartCoroutine(TryExecuteSquiggle()); 30 | }); 31 | } 32 | void OnDisable() 33 | { 34 | RunSquiggle.onClick.RemoveAllListeners(); 35 | NextCommandButton.onClick.RemoveAllListeners(); 36 | } 37 | 38 | Squiggle.Runner currentRunner; 39 | bool currentlyRunning = false; 40 | Squiggle.Commands.Dialog activeDialogCommand; 41 | IEnumerator TryExecuteSquiggle() 42 | { 43 | if(currentlyRunning) 44 | { 45 | yield return null; 46 | } 47 | 48 | currentlyRunning = true; 49 | currentRunner = Squiggle.Core.Run( squiggleText : SquiggleCode, 50 | runnerOptions : new Squiggle.Runner.Options(){ 51 | AutoStart = false, 52 | Debug = true, 53 | LogHandler = (text) => Debug.Log(text), 54 | WaitOverride = (command) => StartCoroutine(WaitMs(command)), 55 | DialogHandler = (command) => { 56 | SpeakerName.text = command.Speaker; 57 | SpeakerText.text = command.Text; 58 | NextCommandButton.onClick.AddListener(() => { 59 | EventSystem.current.SetSelectedGameObject(null); 60 | command.CommandExecutionComplete?.Invoke(); 61 | }); 62 | activeDialogCommand = command; 63 | }, 64 | }); 65 | 66 | currentRunner.CompletedExecution += OnRunnerComplete; 67 | 68 | currentRunner.CommandExecutionStarted += OnCommandExecutionStarted; 69 | 70 | currentRunner.Start(); 71 | yield return null; 72 | } 73 | 74 | IEnumerator WaitMs(Squiggle.Commands.Wait waitCommand) 75 | { 76 | yield return new WaitForSeconds(waitCommand.WaitMS / 1000f); 77 | waitCommand.CommandExecutionComplete?.Invoke(); 78 | } 79 | 80 | void OnCommandExecutionStarted(SquiggleCommand c) 81 | { 82 | NextCommandButton.gameObject.SetActive(c is Dialog); 83 | } 84 | 85 | void OnRunnerComplete() 86 | { 87 | currentRunner.CompletedExecution -= OnRunnerComplete; 88 | currentRunner.CommandExecutionStarted -= OnCommandExecutionStarted; 89 | 90 | currentRunner = null; 91 | currentlyRunning = false; 92 | SpeakerName.text = ""; 93 | SpeakerText.text = ""; 94 | NextCommandButton.gameObject.SetActive(false); 95 | } 96 | } 97 | -------------------------------------------------------------------------------- /Squiggle/src/Internal.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System; 3 | using System.Linq; 4 | using System.Reflection; 5 | using Squiggle.Commands; 6 | 7 | namespace Squiggle 8 | { 9 | internal static class Internal 10 | { 11 | public static Dictionary CustomCommandMap() 12 | { 13 | var dict = new Dictionary(); 14 | var customClasses = AppDomain.CurrentDomain.GetAssemblies().SelectMany(x => x.GetTypes().Where(t => t.IsSubclassOf(typeof(SquiggleCommand)) && !t.IsAbstract)); 15 | foreach (var c in customClasses) 16 | { 17 | var attr = (SquiggleCommandAttribute) Attribute.GetCustomAttribute(c, typeof (SquiggleCommandAttribute)); 18 | if(attr != null) 19 | { 20 | dict.Add(attr.CommandTrigger,c); 21 | } 22 | else 23 | { 24 | if(c.Name != "Dialog") 25 | { 26 | Console.WriteLine($"Unreachable Squiggle Command class detected: {c.Name}"); 27 | } 28 | } 29 | } 30 | return dict; 31 | } 32 | 33 | public static SquiggleCommand CreateCommandForCommandTrigger(string[] args) 34 | { 35 | var trigger = args[0]; 36 | var map = CustomCommandMap(); 37 | var returnCommand = ((SquiggleCommand)Activator.CreateInstance(map[trigger])); 38 | returnCommand.Args = args; 39 | 40 | foreach (var prop in returnCommand.GetType().GetProperties(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)) 41 | { 42 | var bindAttr = (ArgAttribute) Attribute.GetCustomAttribute(prop, typeof (ArgAttribute)); 43 | if(bindAttr != null && bindAttr.ArgumentIndex <= returnCommand.Args.Length && bindAttr.ArgumentIndex > 0) 44 | { 45 | switch (prop.PropertyType.Name) 46 | { 47 | case nameof(String): 48 | prop.SetValue(returnCommand,returnCommand.Args[bindAttr.ArgumentIndex]); 49 | break; 50 | case nameof(Int32): 51 | prop.SetValue(returnCommand,Int32.Parse(returnCommand.Args[bindAttr.ArgumentIndex])); 52 | break; 53 | case nameof(Single): 54 | prop.SetValue(returnCommand,Single.Parse(returnCommand.Args[bindAttr.ArgumentIndex])); 55 | break; 56 | case nameof(Boolean): 57 | prop.SetValue(returnCommand,Boolean.Parse(returnCommand.Args[bindAttr.ArgumentIndex])); 58 | break; 59 | default: 60 | Console.WriteLine($"Tried to bind property {prop.Name} on {returnCommand.GetType().Name} with invalid type {prop.PropertyType.Name} - No value will be set"); 61 | break; 62 | } 63 | } 64 | } 65 | foreach (var field in returnCommand.GetType().GetFields(BindingFlags.Instance | BindingFlags.Public | BindingFlags.FlattenHierarchy)) 66 | { 67 | var bindAttr = (ArgAttribute) Attribute.GetCustomAttribute(field, typeof (ArgAttribute)); 68 | if(bindAttr != null && bindAttr.ArgumentIndex <= returnCommand.Args.Length && bindAttr.ArgumentIndex > 0) 69 | { 70 | switch (field.FieldType.Name) 71 | { 72 | case nameof(String): 73 | field.SetValue(returnCommand,returnCommand.Args[bindAttr.ArgumentIndex]); 74 | break; 75 | case nameof(Int32): 76 | field.SetValue(returnCommand,Int32.Parse(returnCommand.Args[bindAttr.ArgumentIndex])); 77 | break; 78 | case nameof(Single): 79 | field.SetValue(returnCommand,Single.Parse(returnCommand.Args[bindAttr.ArgumentIndex])); 80 | break; 81 | case nameof(Boolean): 82 | field.SetValue(returnCommand,Boolean.Parse(returnCommand.Args[bindAttr.ArgumentIndex])); 83 | break; 84 | default: 85 | Console.WriteLine($"Tried to bind field {field.Name} on {returnCommand.GetType().Name} with invalid type {field.FieldType.Name} - No value will be set"); 86 | break; 87 | } 88 | } 89 | } 90 | 91 | return returnCommand; 92 | } 93 | } 94 | 95 | } -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Sample Scenes/6 - CustomCommand/SquiggleCustomCommandSample.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections; 3 | using UnityEngine; 4 | using UnityEngine.UI; 5 | using UnityEngine.EventSystems; 6 | using Squiggle; 7 | using Squiggle.Commands; 8 | 9 | public class SquiggleCustomCommandSample : MonoBehaviour 10 | { 11 | public Text SpeakerName; 12 | public Text SpeakerText; 13 | public Button RunSquiggle; 14 | string SquiggleCode; 15 | public Button NextCommandButton; 16 | void OnEnable() 17 | { 18 | SpeakerName.text = ""; 19 | SpeakerText.text = ""; 20 | NextCommandButton.gameObject.SetActive(false); 21 | 22 | SquiggleCode = Squiggle.Unity.Utils.ReadTextFileFromStreamingAssets("customCommandSample.txt"); 23 | //VERY IMPORTANT - you need to replace line endings of loaded in files: 24 | SquiggleCode = SquiggleCode.Replace("\r\n", "\\r\\n"); //need to replace these due to serialization 25 | // {Text.Replace("\n", "D")}"); also works - may need to do this as well for OSX line endings 26 | 27 | RunSquiggle.onClick.AddListener(() => { 28 | EventSystem.current.SetSelectedGameObject(null); 29 | StartCoroutine(TryExecuteSquiggle()); 30 | }); 31 | 32 | Events.SetTextColor += OnSetTextColor; 33 | } 34 | void OnDisable() 35 | { 36 | RunSquiggle.onClick.RemoveAllListeners(); 37 | NextCommandButton.onClick.RemoveAllListeners(); 38 | Events.SetTextColor -= OnSetTextColor; 39 | } 40 | 41 | Squiggle.Runner currentRunner; 42 | bool currentlyRunning = false; 43 | Squiggle.Commands.Dialog activeDialogCommand; 44 | IEnumerator TryExecuteSquiggle() 45 | { 46 | if(currentlyRunning) 47 | { 48 | yield return null; 49 | } 50 | 51 | currentlyRunning = true; 52 | currentRunner = Squiggle.Core.Run( squiggleText : SquiggleCode, 53 | runnerOptions : new Squiggle.Runner.Options(){ 54 | AutoStart = false, 55 | Debug = true, 56 | LogHandler = (text) => Debug.Log(text), 57 | WaitOverride = (command) => StartCoroutine(WaitMs(command)), 58 | DialogHandler = (command) => { 59 | SpeakerName.text = command.Speaker; 60 | SpeakerText.text = command.Text; 61 | NextCommandButton.onClick.AddListener(() => { 62 | EventSystem.current.SetSelectedGameObject(null); 63 | command.CommandExecutionComplete?.Invoke(); 64 | }); 65 | activeDialogCommand = command; 66 | }, 67 | }); 68 | 69 | currentRunner.CompletedExecution += OnRunnerComplete; 70 | 71 | currentRunner.CommandExecutionStarted += OnCommandExecutionStarted; 72 | 73 | currentRunner.Start(); 74 | yield return null; 75 | } 76 | 77 | IEnumerator WaitMs(Squiggle.Commands.Wait waitCommand) 78 | { 79 | yield return new WaitForSeconds(waitCommand.WaitMS / 1000f); 80 | waitCommand.CommandExecutionComplete?.Invoke(); 81 | } 82 | 83 | void OnSetTextColor(string color) 84 | { 85 | switch (color) 86 | { 87 | case "red": 88 | SpeakerText.color = Color.red; 89 | break; 90 | case "blue": 91 | SpeakerText.color = Color.blue; 92 | break; 93 | case "green": 94 | SpeakerText.color = Color.green; 95 | break; 96 | case "yellow": 97 | SpeakerText.color = Color.yellow; 98 | break; 99 | default: 100 | Debug.Log("unrecgonized color for text " + color); 101 | break; 102 | } 103 | } 104 | 105 | void OnCommandExecutionStarted(SquiggleCommand c) 106 | { 107 | NextCommandButton.gameObject.SetActive(c is Dialog); 108 | } 109 | 110 | void OnRunnerComplete() 111 | { 112 | currentRunner.CompletedExecution -= OnRunnerComplete; 113 | currentRunner.CommandExecutionStarted -= OnCommandExecutionStarted; 114 | 115 | currentRunner = null; 116 | currentlyRunning = false; 117 | SpeakerName.text = ""; 118 | SpeakerText.text = ""; 119 | NextCommandButton.gameObject.SetActive(false); 120 | } 121 | } 122 | 123 | public static class Events 124 | { 125 | public static Action SetTextColor; 126 | } 127 | 128 | [SquiggleCommand("setTextColor")] 129 | public class SampleCustom : SquiggleCommand 130 | { 131 | [Arg(1)] public string color; 132 | public override void Execute() 133 | { 134 | Events.SetTextColor?.Invoke(color); 135 | CommandExecutionComplete?.Invoke(); 136 | } 137 | } 138 | -------------------------------------------------------------------------------- /Squiggle/src/Runner.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Linq; 3 | using System.Collections.Generic; 4 | using Squiggle.Commands; 5 | using Squiggle.Events; 6 | 7 | namespace Squiggle 8 | { 9 | public class Runner 10 | { 11 | List commands; 12 | SquiggleCommand workingCommand; 13 | Options options; 14 | string GUID; 15 | 16 | public Action BeganExecution; 17 | public Action CompletedExecution; 18 | public Action CommandExecutionStarted; 19 | public Action CommandExecutionCompleted; 20 | public Runner(List commands, Options runnerOptions) 21 | { 22 | GUID = Convert.ToBase64String(Guid.NewGuid().ToByteArray()); 23 | this.commands = commands; 24 | options = runnerOptions; 25 | Squiggle.Events.Dialog.EmitDialog += options.DialogHandler; 26 | 27 | if(runnerOptions.AutoStart) 28 | { 29 | Start(); 30 | } 31 | } 32 | 33 | public void Start() 34 | { 35 | Log($"Beginning Runner Execution With {commands.Count} Commands"); 36 | BeganExecution?.Invoke(); 37 | workingCommand = commands.FirstOrDefault(); 38 | if(workingCommand == null) 39 | { 40 | Log($"No Commands Found, Exiting Runner"); 41 | //empty list, end the runner 42 | Cleanup(); 43 | CompletedExecution?.Invoke(); 44 | } 45 | else 46 | { 47 | workingCommand.CommandExecutionComplete += OnCurrentCommandComplete; 48 | Log($"Starting Execution for Command Type {workingCommand.GetType().Name} With Args: {workingCommand.Parsed}"); 49 | CommandExecutionStarted?.Invoke(workingCommand); 50 | if(!(workingCommand is Wait)) 51 | { 52 | workingCommand.Execute(); 53 | } 54 | else 55 | { 56 | if(options.WaitOverride == null) 57 | { 58 | workingCommand.Execute(); 59 | } 60 | else 61 | { 62 | options.WaitOverride?.Invoke(workingCommand as Wait); 63 | } 64 | } 65 | } 66 | } 67 | 68 | void TryExecuteNextCommand() 69 | { 70 | var commandIndex = commands.IndexOf(workingCommand); 71 | if(commandIndex == commands.Count - 1) 72 | { 73 | Log($"Execution Complete, Exiting"); 74 | //we're at the end of the list, end the runner 75 | Cleanup(); 76 | CompletedExecution?.Invoke(); 77 | } 78 | else 79 | { 80 | //grab the next command 81 | workingCommand = commands[commandIndex+1]; 82 | workingCommand.CommandExecutionComplete += OnCurrentCommandComplete; 83 | Log($"Starting Execution for Command Type {workingCommand.GetType().Name} With Args: {workingCommand.Parsed}"); 84 | //execute the command 85 | if(!(workingCommand is Wait)) 86 | { 87 | workingCommand.Execute(); 88 | } 89 | else 90 | { 91 | if(options.WaitOverride == null) 92 | { 93 | workingCommand.Execute(); 94 | } 95 | else 96 | { 97 | options.WaitOverride?.Invoke(workingCommand as Wait); 98 | } 99 | } 100 | 101 | } 102 | } 103 | 104 | void OnCurrentCommandComplete() 105 | { 106 | Log($"Completed Execution for Command Type {workingCommand.GetType().Name} With Args: {workingCommand.Parsed}"); 107 | workingCommand.CommandExecutionComplete -= OnCurrentCommandComplete; 108 | CommandExecutionCompleted?.Invoke(workingCommand); 109 | TryExecuteNextCommand(); 110 | } 111 | 112 | public void Cleanup() 113 | { 114 | Squiggle.Events.Dialog.EmitDialog -= options.DialogHandler; 115 | foreach (var command in commands) 116 | { 117 | workingCommand.CommandExecutionComplete -= OnCurrentCommandComplete; 118 | workingCommand.Cleanup(); 119 | } 120 | } 121 | 122 | void Log(string text) 123 | { 124 | var logtext = $"Squiggle Runner {GUID}: {text}"; 125 | if(options.Debug) 126 | { 127 | Console.WriteLine(logtext); 128 | if(options.LogHandler != null) 129 | { 130 | options.LogHandler?.Invoke(logtext); 131 | } 132 | } 133 | } 134 | 135 | public class Options 136 | { 137 | public bool AutoStart = true; 138 | public bool Debug = false; 139 | public Action DialogHandler = (command) => {Squiggle.Events.Commands.CompleteDialog?.Invoke(command);}; 140 | public Action LogHandler = null; 141 | public Action WaitOverride = null; 142 | } 143 | } 144 | } -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/InputManager.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!13 &1 4 | InputManager: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_Axes: 8 | - serializedVersion: 3 9 | m_Name: Horizontal 10 | descriptiveName: 11 | descriptiveNegativeName: 12 | negativeButton: left 13 | positiveButton: right 14 | altNegativeButton: a 15 | altPositiveButton: d 16 | gravity: 3 17 | dead: 0.001 18 | sensitivity: 3 19 | snap: 1 20 | invert: 0 21 | type: 0 22 | axis: 0 23 | joyNum: 0 24 | - serializedVersion: 3 25 | m_Name: Vertical 26 | descriptiveName: 27 | descriptiveNegativeName: 28 | negativeButton: down 29 | positiveButton: up 30 | altNegativeButton: s 31 | altPositiveButton: w 32 | gravity: 3 33 | dead: 0.001 34 | sensitivity: 3 35 | snap: 1 36 | invert: 0 37 | type: 0 38 | axis: 0 39 | joyNum: 0 40 | - serializedVersion: 3 41 | m_Name: Fire1 42 | descriptiveName: 43 | descriptiveNegativeName: 44 | negativeButton: 45 | positiveButton: left ctrl 46 | altNegativeButton: 47 | altPositiveButton: mouse 0 48 | gravity: 1000 49 | dead: 0.001 50 | sensitivity: 1000 51 | snap: 0 52 | invert: 0 53 | type: 0 54 | axis: 0 55 | joyNum: 0 56 | - serializedVersion: 3 57 | m_Name: Fire2 58 | descriptiveName: 59 | descriptiveNegativeName: 60 | negativeButton: 61 | positiveButton: left alt 62 | altNegativeButton: 63 | altPositiveButton: mouse 1 64 | gravity: 1000 65 | dead: 0.001 66 | sensitivity: 1000 67 | snap: 0 68 | invert: 0 69 | type: 0 70 | axis: 0 71 | joyNum: 0 72 | - serializedVersion: 3 73 | m_Name: Fire3 74 | descriptiveName: 75 | descriptiveNegativeName: 76 | negativeButton: 77 | positiveButton: left shift 78 | altNegativeButton: 79 | altPositiveButton: mouse 2 80 | gravity: 1000 81 | dead: 0.001 82 | sensitivity: 1000 83 | snap: 0 84 | invert: 0 85 | type: 0 86 | axis: 0 87 | joyNum: 0 88 | - serializedVersion: 3 89 | m_Name: Jump 90 | descriptiveName: 91 | descriptiveNegativeName: 92 | negativeButton: 93 | positiveButton: space 94 | altNegativeButton: 95 | altPositiveButton: 96 | gravity: 1000 97 | dead: 0.001 98 | sensitivity: 1000 99 | snap: 0 100 | invert: 0 101 | type: 0 102 | axis: 0 103 | joyNum: 0 104 | - serializedVersion: 3 105 | m_Name: Mouse X 106 | descriptiveName: 107 | descriptiveNegativeName: 108 | negativeButton: 109 | positiveButton: 110 | altNegativeButton: 111 | altPositiveButton: 112 | gravity: 0 113 | dead: 0 114 | sensitivity: 0.1 115 | snap: 0 116 | invert: 0 117 | type: 1 118 | axis: 0 119 | joyNum: 0 120 | - serializedVersion: 3 121 | m_Name: Mouse Y 122 | descriptiveName: 123 | descriptiveNegativeName: 124 | negativeButton: 125 | positiveButton: 126 | altNegativeButton: 127 | altPositiveButton: 128 | gravity: 0 129 | dead: 0 130 | sensitivity: 0.1 131 | snap: 0 132 | invert: 0 133 | type: 1 134 | axis: 1 135 | joyNum: 0 136 | - serializedVersion: 3 137 | m_Name: Mouse ScrollWheel 138 | descriptiveName: 139 | descriptiveNegativeName: 140 | negativeButton: 141 | positiveButton: 142 | altNegativeButton: 143 | altPositiveButton: 144 | gravity: 0 145 | dead: 0 146 | sensitivity: 0.1 147 | snap: 0 148 | invert: 0 149 | type: 1 150 | axis: 2 151 | joyNum: 0 152 | - serializedVersion: 3 153 | m_Name: Horizontal 154 | descriptiveName: 155 | descriptiveNegativeName: 156 | negativeButton: 157 | positiveButton: 158 | altNegativeButton: 159 | altPositiveButton: 160 | gravity: 0 161 | dead: 0.19 162 | sensitivity: 1 163 | snap: 0 164 | invert: 0 165 | type: 2 166 | axis: 0 167 | joyNum: 0 168 | - serializedVersion: 3 169 | m_Name: Vertical 170 | descriptiveName: 171 | descriptiveNegativeName: 172 | negativeButton: 173 | positiveButton: 174 | altNegativeButton: 175 | altPositiveButton: 176 | gravity: 0 177 | dead: 0.19 178 | sensitivity: 1 179 | snap: 0 180 | invert: 1 181 | type: 2 182 | axis: 1 183 | joyNum: 0 184 | - serializedVersion: 3 185 | m_Name: Fire1 186 | descriptiveName: 187 | descriptiveNegativeName: 188 | negativeButton: 189 | positiveButton: joystick button 0 190 | altNegativeButton: 191 | altPositiveButton: 192 | gravity: 1000 193 | dead: 0.001 194 | sensitivity: 1000 195 | snap: 0 196 | invert: 0 197 | type: 0 198 | axis: 0 199 | joyNum: 0 200 | - serializedVersion: 3 201 | m_Name: Fire2 202 | descriptiveName: 203 | descriptiveNegativeName: 204 | negativeButton: 205 | positiveButton: joystick button 1 206 | altNegativeButton: 207 | altPositiveButton: 208 | gravity: 1000 209 | dead: 0.001 210 | sensitivity: 1000 211 | snap: 0 212 | invert: 0 213 | type: 0 214 | axis: 0 215 | joyNum: 0 216 | - serializedVersion: 3 217 | m_Name: Fire3 218 | descriptiveName: 219 | descriptiveNegativeName: 220 | negativeButton: 221 | positiveButton: joystick button 2 222 | altNegativeButton: 223 | altPositiveButton: 224 | gravity: 1000 225 | dead: 0.001 226 | sensitivity: 1000 227 | snap: 0 228 | invert: 0 229 | type: 0 230 | axis: 0 231 | joyNum: 0 232 | - serializedVersion: 3 233 | m_Name: Jump 234 | descriptiveName: 235 | descriptiveNegativeName: 236 | negativeButton: 237 | positiveButton: joystick button 3 238 | altNegativeButton: 239 | altPositiveButton: 240 | gravity: 1000 241 | dead: 0.001 242 | sensitivity: 1000 243 | snap: 0 244 | invert: 0 245 | type: 0 246 | axis: 0 247 | joyNum: 0 248 | - serializedVersion: 3 249 | m_Name: Submit 250 | descriptiveName: 251 | descriptiveNegativeName: 252 | negativeButton: 253 | positiveButton: return 254 | altNegativeButton: 255 | altPositiveButton: joystick button 0 256 | gravity: 1000 257 | dead: 0.001 258 | sensitivity: 1000 259 | snap: 0 260 | invert: 0 261 | type: 0 262 | axis: 0 263 | joyNum: 0 264 | - serializedVersion: 3 265 | m_Name: Submit 266 | descriptiveName: 267 | descriptiveNegativeName: 268 | negativeButton: 269 | positiveButton: enter 270 | altNegativeButton: 271 | altPositiveButton: space 272 | gravity: 1000 273 | dead: 0.001 274 | sensitivity: 1000 275 | snap: 0 276 | invert: 0 277 | type: 0 278 | axis: 0 279 | joyNum: 0 280 | - serializedVersion: 3 281 | m_Name: Cancel 282 | descriptiveName: 283 | descriptiveNegativeName: 284 | negativeButton: 285 | positiveButton: escape 286 | altNegativeButton: 287 | altPositiveButton: joystick button 1 288 | gravity: 1000 289 | dead: 0.001 290 | sensitivity: 1000 291 | snap: 0 292 | invert: 0 293 | type: 0 294 | axis: 0 295 | joyNum: 0 296 | -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/QualitySettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!47 &1 4 | QualitySettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 5 7 | m_CurrentQuality: 5 8 | m_QualitySettings: 9 | - serializedVersion: 2 10 | name: Very Low 11 | pixelLightCount: 0 12 | shadows: 0 13 | shadowResolution: 0 14 | shadowProjection: 1 15 | shadowCascades: 1 16 | shadowDistance: 15 17 | shadowNearPlaneOffset: 3 18 | shadowCascade2Split: 0.33333334 19 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 20 | shadowmaskMode: 0 21 | blendWeights: 1 22 | textureQuality: 1 23 | anisotropicTextures: 0 24 | antiAliasing: 0 25 | softParticles: 0 26 | softVegetation: 0 27 | realtimeReflectionProbes: 0 28 | billboardsFaceCameraPosition: 0 29 | vSyncCount: 0 30 | lodBias: 0.3 31 | maximumLODLevel: 0 32 | streamingMipmapsActive: 0 33 | streamingMipmapsAddAllCameras: 1 34 | streamingMipmapsMemoryBudget: 512 35 | streamingMipmapsRenderersPerFrame: 512 36 | streamingMipmapsMaxLevelReduction: 2 37 | streamingMipmapsMaxFileIORequests: 1024 38 | particleRaycastBudget: 4 39 | asyncUploadTimeSlice: 2 40 | asyncUploadBufferSize: 16 41 | asyncUploadPersistentBuffer: 1 42 | resolutionScalingFixedDPIFactor: 1 43 | excludedTargetPlatforms: [] 44 | - serializedVersion: 2 45 | name: Low 46 | pixelLightCount: 0 47 | shadows: 0 48 | shadowResolution: 0 49 | shadowProjection: 1 50 | shadowCascades: 1 51 | shadowDistance: 20 52 | shadowNearPlaneOffset: 3 53 | shadowCascade2Split: 0.33333334 54 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 55 | shadowmaskMode: 0 56 | blendWeights: 2 57 | textureQuality: 0 58 | anisotropicTextures: 0 59 | antiAliasing: 0 60 | softParticles: 0 61 | softVegetation: 0 62 | realtimeReflectionProbes: 0 63 | billboardsFaceCameraPosition: 0 64 | vSyncCount: 0 65 | lodBias: 0.4 66 | maximumLODLevel: 0 67 | streamingMipmapsActive: 0 68 | streamingMipmapsAddAllCameras: 1 69 | streamingMipmapsMemoryBudget: 512 70 | streamingMipmapsRenderersPerFrame: 512 71 | streamingMipmapsMaxLevelReduction: 2 72 | streamingMipmapsMaxFileIORequests: 1024 73 | particleRaycastBudget: 16 74 | asyncUploadTimeSlice: 2 75 | asyncUploadBufferSize: 16 76 | asyncUploadPersistentBuffer: 1 77 | resolutionScalingFixedDPIFactor: 1 78 | excludedTargetPlatforms: [] 79 | - serializedVersion: 2 80 | name: Medium 81 | pixelLightCount: 1 82 | shadows: 1 83 | shadowResolution: 0 84 | shadowProjection: 1 85 | shadowCascades: 1 86 | shadowDistance: 20 87 | shadowNearPlaneOffset: 3 88 | shadowCascade2Split: 0.33333334 89 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 90 | shadowmaskMode: 0 91 | blendWeights: 2 92 | textureQuality: 0 93 | anisotropicTextures: 1 94 | antiAliasing: 0 95 | softParticles: 0 96 | softVegetation: 0 97 | realtimeReflectionProbes: 0 98 | billboardsFaceCameraPosition: 0 99 | vSyncCount: 1 100 | lodBias: 0.7 101 | maximumLODLevel: 0 102 | streamingMipmapsActive: 0 103 | streamingMipmapsAddAllCameras: 1 104 | streamingMipmapsMemoryBudget: 512 105 | streamingMipmapsRenderersPerFrame: 512 106 | streamingMipmapsMaxLevelReduction: 2 107 | streamingMipmapsMaxFileIORequests: 1024 108 | particleRaycastBudget: 64 109 | asyncUploadTimeSlice: 2 110 | asyncUploadBufferSize: 16 111 | asyncUploadPersistentBuffer: 1 112 | resolutionScalingFixedDPIFactor: 1 113 | excludedTargetPlatforms: [] 114 | - serializedVersion: 2 115 | name: High 116 | pixelLightCount: 2 117 | shadows: 2 118 | shadowResolution: 1 119 | shadowProjection: 1 120 | shadowCascades: 2 121 | shadowDistance: 40 122 | shadowNearPlaneOffset: 3 123 | shadowCascade2Split: 0.33333334 124 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 125 | shadowmaskMode: 1 126 | blendWeights: 2 127 | textureQuality: 0 128 | anisotropicTextures: 1 129 | antiAliasing: 0 130 | softParticles: 0 131 | softVegetation: 1 132 | realtimeReflectionProbes: 1 133 | billboardsFaceCameraPosition: 1 134 | vSyncCount: 1 135 | lodBias: 1 136 | maximumLODLevel: 0 137 | streamingMipmapsActive: 0 138 | streamingMipmapsAddAllCameras: 1 139 | streamingMipmapsMemoryBudget: 512 140 | streamingMipmapsRenderersPerFrame: 512 141 | streamingMipmapsMaxLevelReduction: 2 142 | streamingMipmapsMaxFileIORequests: 1024 143 | particleRaycastBudget: 256 144 | asyncUploadTimeSlice: 2 145 | asyncUploadBufferSize: 16 146 | asyncUploadPersistentBuffer: 1 147 | resolutionScalingFixedDPIFactor: 1 148 | excludedTargetPlatforms: [] 149 | - serializedVersion: 2 150 | name: Very High 151 | pixelLightCount: 3 152 | shadows: 2 153 | shadowResolution: 2 154 | shadowProjection: 1 155 | shadowCascades: 2 156 | shadowDistance: 70 157 | shadowNearPlaneOffset: 3 158 | shadowCascade2Split: 0.33333334 159 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 160 | shadowmaskMode: 1 161 | blendWeights: 4 162 | textureQuality: 0 163 | anisotropicTextures: 2 164 | antiAliasing: 2 165 | softParticles: 1 166 | softVegetation: 1 167 | realtimeReflectionProbes: 1 168 | billboardsFaceCameraPosition: 1 169 | vSyncCount: 1 170 | lodBias: 1.5 171 | maximumLODLevel: 0 172 | streamingMipmapsActive: 0 173 | streamingMipmapsAddAllCameras: 1 174 | streamingMipmapsMemoryBudget: 512 175 | streamingMipmapsRenderersPerFrame: 512 176 | streamingMipmapsMaxLevelReduction: 2 177 | streamingMipmapsMaxFileIORequests: 1024 178 | particleRaycastBudget: 1024 179 | asyncUploadTimeSlice: 2 180 | asyncUploadBufferSize: 16 181 | asyncUploadPersistentBuffer: 1 182 | resolutionScalingFixedDPIFactor: 1 183 | excludedTargetPlatforms: [] 184 | - serializedVersion: 2 185 | name: Ultra 186 | pixelLightCount: 4 187 | shadows: 2 188 | shadowResolution: 2 189 | shadowProjection: 1 190 | shadowCascades: 4 191 | shadowDistance: 150 192 | shadowNearPlaneOffset: 3 193 | shadowCascade2Split: 0.33333334 194 | shadowCascade4Split: {x: 0.06666667, y: 0.2, z: 0.46666667} 195 | shadowmaskMode: 1 196 | blendWeights: 4 197 | textureQuality: 0 198 | anisotropicTextures: 2 199 | antiAliasing: 2 200 | softParticles: 1 201 | softVegetation: 1 202 | realtimeReflectionProbes: 1 203 | billboardsFaceCameraPosition: 1 204 | vSyncCount: 1 205 | lodBias: 2 206 | maximumLODLevel: 0 207 | streamingMipmapsActive: 0 208 | streamingMipmapsAddAllCameras: 1 209 | streamingMipmapsMemoryBudget: 512 210 | streamingMipmapsRenderersPerFrame: 512 211 | streamingMipmapsMaxLevelReduction: 2 212 | streamingMipmapsMaxFileIORequests: 1024 213 | particleRaycastBudget: 4096 214 | asyncUploadTimeSlice: 2 215 | asyncUploadBufferSize: 16 216 | asyncUploadPersistentBuffer: 1 217 | resolutionScalingFixedDPIFactor: 1 218 | excludedTargetPlatforms: [] 219 | m_PerPlatformDefaultQuality: 220 | Android: 2 221 | Lumin: 5 222 | Nintendo 3DS: 5 223 | Nintendo Switch: 5 224 | PS4: 5 225 | PSP2: 2 226 | Stadia: 5 227 | Standalone: 5 228 | WebGL: 3 229 | Windows Store Apps: 5 230 | XboxOne: 5 231 | iPhone: 2 232 | tvOS: 2 233 | -------------------------------------------------------------------------------- /readme.md: -------------------------------------------------------------------------------- 1 | ![Squiggle Wordmark](img/squiggle-blue-long.png) 2 | 3 | --- 4 | 5 | **NOTE: Squiggle is currently in preview mode - docs are incomplete and being actively added to. That said, there should be enough below to get started. The code of Squiggle itself is stable and used in production games.** 6 | 7 | --- 8 | 9 | Squiggle ("**S**uper **Q**uick **G**ame **L**anguage") is a simple scripting language and runtime parser built for use inside of any C# game engine or framework (Unity, Monogame, etc.). With very little setup, you can easily get started adding custom dialog scripts and commands to your game. 10 | 11 | Here's an example: 12 | ``` 13 | [playSound knock 1] 14 | Carol: Hello! I've arrived! 15 | Carol: And I've brought something special! 16 | [playAnimation move carol door] 17 | [setLights dim] 18 | ``` 19 | 20 | If you're familar with tools like [Yarn](https://yarnspinner.dev/) or [Twine](https://twinery.org/), Squiggle is "lite" version of those tool. It trades their robust feature sets for ultimate flexibility in order to be as quick and simple as possible. 21 | 22 | ## Use Cases 23 | While Squiggle was primarily designed as a light scripting/dialog tool, you can think of it a *bit* like a code calling "playbook". From this lens, you can see how it could be used for many other use cases: 24 | 25 | * Dialog Systems 26 | * AI Routines 27 | * Unit Testing 28 | * Build Instructions 29 | * etc. 30 | 31 | Note: Squiggle is *not* a replacement for C# code in your game. Instead, it provides a way for you to interact with code you've already written. This also means that Squiggle is slighly more advanced that the aforementiond tools — you get less "out of the box" but can easily customize to your needs. 32 | 33 | If instead you're looking for an easy-to-use, plug-and-play dialog system, I highly recommend looking into either [Yarn](https://yarnspinner.dev/), [Twine](https://twinery.org/), or [Ink](https://www.inklestudios.com/ink/)! However, if you've read the above and are still interested, keep reading for an overview of Squiggle and how to get started using it! 34 | 35 | # Getting Started 36 | To get started in Unity, you can download the latest Unity package here. 37 | 38 | If you want to use Squiggle outside of Unity, you can directly download the DLLs here (Nuget coming soon). 39 | 40 | ## Unity Sample Scenes 41 | ![Unity Sample Screenshot](img/unity-sample.PNG) 42 | The Unity packages contain sample scenes that you can use as a starting point for integrating Squiggle into your game, or as a template to copy for other projects. 43 | 44 | You'll find four example scenes in the project, each demonstrating a different way to load and execute Squiggle code: 45 | * Input Text Box - Write and execute Squiggle directly in play mode 46 | * Monobehaviour - Write squiggle in a public monobeahvior string field 47 | * Scriptable Object - Author squiggle in a ScriptableObject 48 | * Streaming Assets - Load a squiggle file from StreamingAssets 49 | * Dialog Progression - Show how to progress a squiggle script manually 50 | * Custom Commands - Sample custom command that changes text color 51 | 52 | ## Absolute Basics 53 | 54 | Squiggle code is a collection of `commands`, with **one** command on each line. The simplest command is a Dialog Command, which looks like this: 55 | 56 | ``` 57 | Speaker: Hello! The Speaker is talking! 58 | ``` 59 | 60 | You can pass this to Squiggle by calling a single function: 61 | ```cs 62 | using Squiggle; 63 | 64 | string myScript = "Speaker: Hello! The Speaker is talking!"; 65 | Squiggle.Core.Run(myScript); 66 | ``` 67 | The above code will read the text in `myScript` as Squiggle code and attempt to execute it. Squiggle will see that someone name `Speaker` is talking, and they are saying `Hello! The Speaker is talking!`. 68 | 69 | ### Runner Options / Printing to Console 70 | Squiggle is "silent" by default, meaning if you run the above code, especially in Unity, it can seem like its not working. To get baseline "visibility", you can pass options to the Runner: 71 | 72 | ```cs 73 | using Squiggle; 74 | 75 | string myScript = "Speaker: Hello! The Speaker is talking!"; 76 | var options = new Squiggle.Runner.Options(){ 77 | Debug = true 78 | }; 79 | Squiggle.Core.Run( squiggleText : myScript, 80 | runnerOptions : options); 81 | ``` 82 | 83 | The above code will now print debug information that looks like this to the console (NOTE: Unity users need to do a second step, see below): 84 | 85 | ``` 86 | Squiggle Runner J+NeBhab4UGr6GBTW9BBBQ==: Beginning Runner Execution With 1 Commands 87 | Squiggle Runner J+NeBhab4UGr6GBTW9BBBQ==: Starting Execution for Command Type Dialog With Args: (0)Speaker (1)Hello! The Speaker is talking! 88 | Squiggle Runner J+NeBhab4UGr6GBTW9BBBQ==: Completed Execution for Command Type Dialog With Args: (0)Speaker (1)Hello! The Speaker is talking! 89 | Squiggle Runner J+NeBhab4UGr6GBTW9BBBQ==: Execution Complete, Exiting 90 | ``` 91 | 92 | **If you're using Unity, you'll also need to specify a logging callback function in the options**: 93 | 94 | ```cs 95 | using Squiggle; 96 | 97 | string myScript = "Speaker: Hello! The Speaker is talking!"; 98 | var options = new Squiggle.Runner.Options(){ 99 | Debug = true, 100 | LogHandler = (text) => Debug.Log(text) 101 | }; 102 | Squiggle.Core.Run( squiggleText : myScript, 103 | runnerOptions : options); 104 | ``` 105 | 106 | If you use the above code, the code will run and then immediately exit. This may not be desireable, as you'll likely want to "catch" the dialog, and handle it somewhere else in your code. You can specify a dialog callback with the `DialogHandler` parameter to handle dialog when running Squiggle code to achieve this: 107 | 108 | ```cs 109 | using Squiggle; 110 | 111 | string myScript = "Speaker: Hello! The Speaker is talking!"; 112 | var options = new Squiggle.Runner.Options(){ 113 | Debug = true, 114 | LogHandler = (text) => {Debug.Log(text)}, 115 | DialogHandler : (command) => { 116 | // This will automatically complete the dialog 117 | Squiggle.Events.Commands.CompleteDialog?.Invoke(command); 118 | } 119 | }; 120 | Squiggle.Core.Run( squiggleText : myScript, 121 | runnerOptions : options); 122 | ``` 123 | 124 | The above code will still immediately "complete" the dialog, but you can see how you could instead call out to other functions to process the dialog, then call `Squiggle.Events.Commands.CompleteDialog?.Invoke(command)` elsewhere when finished (like when a player presses the "advance" button in a dialog UI). 125 | 126 | You can see more robust examples like this in the Unity package sample scenes. 127 | 128 | ## Multiple Commands 129 | Squiggle code can contain as many lines as you like, with a single command being on each line (read more here about what constitutes valid Squiggle source). 130 | 131 | ```cs 132 | using Squiggle; 133 | 134 | string myScript = @" 135 | Speaker: Hello! The Speaker is talking! 136 | Speaker 2: Now Speaker 2 is talking. 137 | Speaker 3: And here's a word from Speaker 3. 138 | "; 139 | 140 | Squiggle.Core.Run(testScript); 141 | ``` 142 | 143 | ## Non-Dialog Commands 144 | In addition to Dialog, Squiggle gives you the ability to call other types of commands inside of your scripts. 145 | 146 | Non-Dialog commands take the form: 147 | ``` 148 | [commandName commandArgument1] 149 | ``` 150 | `commandName` above is the name of the command, and `commandArgument1` is an argument to pass to that command. Squiggle ships with a small set of commands that provide some utility for script execution: 151 | 152 | ### Wait 153 | You can call the `wait` command in your scripts to pause execution of the script from some number of milliseconds: 154 | 155 | ```cs 156 | using Squiggle; 157 | 158 | string myScript = @" 159 | [wait 1000] 160 | Speaker: I've waited 1 second to start speaking 161 | [wait 1000] 162 | Speaker: Now afer a second I'm speaking again 163 | [wait 1000] 164 | "; 165 | 166 | Squiggle.Core.Run(testScript); 167 | ``` 168 | 169 | The code above will wait for 1 second, execute the first speaker text, wait another second and execute the second speaker text, then wait another second and end the execution of the code. 170 | 171 | **If you're using Unity, you'll also need to specify a wait override callback function in the options**: 172 | 173 | ```cs 174 | using Squiggle; 175 | 176 | string myScript = @" 177 | [wait 1000] 178 | Speaker: I've waited 1 second to start speaking 179 | [wait 1000] 180 | Speaker: Now afer a second I'm speaking again 181 | [wait 1000] 182 | "; 183 | 184 | string myScript = "Speaker: Hello! The Speaker is talking!"; 185 | var options = new Squiggle.Runner.Options(){ 186 | Debug = true, 187 | WaitOverride = (command) => StartCoroutine(WaitMs(command)) 188 | LogHandler = (text) => {Debug.Log(text)}, 189 | DialogHandler : (command) => { 190 | // This will automatically complete the dialog 191 | Squiggle.Events.Commands.CompleteDialog?.Invoke(command); 192 | } 193 | }; 194 | Squiggle.Core.Run( squiggleText : myScript, 195 | runnerOptions : options); 196 | 197 | IEnumerator WaitMs(Squiggle.Commands.Wait waitCommand) 198 | { 199 | yield return new WaitForSeconds(waitCommand.WaitMS / 1000f); 200 | waitCommand.CommandExecutionComplete?.Invoke(); 201 | } 202 | ``` 203 | 204 | For more on async/syncronous execution of Squiggle, see the wiki page here. 205 | 206 | 207 | ### Custom Commands 208 | Squiggle's flexibility lies in its ease of authoring custom behaviour to tie into from scripts. To learn about custom command authoring, view the wiki page here. 209 | 210 | ## Documentation 211 | For a deeper dive on Squiggle's features and operation, view the wiki here. In it you can find: 212 | * General Squiggle Overview 213 | * Instructions for custom command authoring 214 | * Comparison to Yarn 215 | * Command Execution Control 216 | 217 | 218 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | ## Ignore Visual Studio temporary files, build results, and 2 | ## files generated by popular Visual Studio add-ons. 3 | ## 4 | ## Get latest from https://github.com/github/gitignore/blob/master/VisualStudio.gitignore 5 | 6 | # User-specific files 7 | *.rsuser 8 | *.suo 9 | *.user 10 | *.userosscache 11 | *.sln.docstates 12 | 13 | # User-specific files (MonoDevelop/Xamarin Studio) 14 | *.userprefs 15 | 16 | # Mono auto generated files 17 | mono_crash.* 18 | 19 | # Build results 20 | [Dd]ebug/ 21 | [Dd]ebugPublic/ 22 | [Rr]elease/ 23 | [Rr]eleases/ 24 | x64/ 25 | x86/ 26 | [Ww][Ii][Nn]32/ 27 | [Aa][Rr][Mm]/ 28 | [Aa][Rr][Mm]64/ 29 | bld/ 30 | [Bb]in/ 31 | [Oo]bj/ 32 | [Ll]og/ 33 | [Ll]ogs/ 34 | 35 | # Visual Studio 2015/2017 cache/options directory 36 | .vs/ 37 | # Uncomment if you have tasks that create the project's static files in wwwroot 38 | #wwwroot/ 39 | 40 | # Visual Studio 2017 auto generated files 41 | Generated\ Files/ 42 | 43 | # MSTest test Results 44 | [Tt]est[Rr]esult*/ 45 | [Bb]uild[Ll]og.* 46 | 47 | # NUnit 48 | *.VisualState.xml 49 | TestResult.xml 50 | nunit-*.xml 51 | 52 | # Build Results of an ATL Project 53 | [Dd]ebugPS/ 54 | [Rr]eleasePS/ 55 | dlldata.c 56 | 57 | # Benchmark Results 58 | BenchmarkDotNet.Artifacts/ 59 | 60 | # .NET Core 61 | project.lock.json 62 | project.fragment.lock.json 63 | artifacts/ 64 | 65 | # Tye 66 | .tye/ 67 | 68 | # ASP.NET Scaffolding 69 | ScaffoldingReadMe.txt 70 | 71 | # StyleCop 72 | StyleCopReport.xml 73 | 74 | # Files built by Visual Studio 75 | *_i.c 76 | *_p.c 77 | *_h.h 78 | *.ilk 79 | *.meta 80 | *.obj 81 | *.iobj 82 | *.pch 83 | *.pdb 84 | *.ipdb 85 | *.pgc 86 | *.pgd 87 | *.rsp 88 | *.sbr 89 | *.tlb 90 | *.tli 91 | *.tlh 92 | *.tmp 93 | *.tmp_proj 94 | *_wpftmp.csproj 95 | *.log 96 | *.vspscc 97 | *.vssscc 98 | .builds 99 | *.pidb 100 | *.svclog 101 | *.scc 102 | 103 | # Chutzpah Test files 104 | _Chutzpah* 105 | 106 | # Visual C++ cache files 107 | ipch/ 108 | *.aps 109 | *.ncb 110 | *.opendb 111 | *.opensdf 112 | *.sdf 113 | *.cachefile 114 | *.VC.db 115 | *.VC.VC.opendb 116 | 117 | # Visual Studio profiler 118 | *.psess 119 | *.vsp 120 | *.vspx 121 | *.sap 122 | 123 | # Visual Studio Trace Files 124 | *.e2e 125 | 126 | # TFS 2012 Local Workspace 127 | $tf/ 128 | 129 | # Guidance Automation Toolkit 130 | *.gpState 131 | 132 | # ReSharper is a .NET coding add-in 133 | _ReSharper*/ 134 | *.[Rr]e[Ss]harper 135 | *.DotSettings.user 136 | 137 | # TeamCity is a build add-in 138 | _TeamCity* 139 | 140 | # DotCover is a Code Coverage Tool 141 | *.dotCover 142 | 143 | # AxoCover is a Code Coverage Tool 144 | .axoCover/* 145 | !.axoCover/settings.json 146 | 147 | # Coverlet is a free, cross platform Code Coverage Tool 148 | coverage*.json 149 | coverage*.xml 150 | coverage*.info 151 | 152 | # Visual Studio code coverage results 153 | *.coverage 154 | *.coveragexml 155 | 156 | # NCrunch 157 | _NCrunch_* 158 | .*crunch*.local.xml 159 | nCrunchTemp_* 160 | 161 | # MightyMoose 162 | *.mm.* 163 | AutoTest.Net/ 164 | 165 | # Web workbench (sass) 166 | .sass-cache/ 167 | 168 | # Installshield output folder 169 | [Ee]xpress/ 170 | 171 | # DocProject is a documentation generator add-in 172 | DocProject/buildhelp/ 173 | DocProject/Help/*.HxT 174 | DocProject/Help/*.HxC 175 | DocProject/Help/*.hhc 176 | DocProject/Help/*.hhk 177 | DocProject/Help/*.hhp 178 | DocProject/Help/Html2 179 | DocProject/Help/html 180 | 181 | # Click-Once directory 182 | publish/ 183 | 184 | # Publish Web Output 185 | *.[Pp]ublish.xml 186 | *.azurePubxml 187 | # Note: Comment the next line if you want to checkin your web deploy settings, 188 | # but database connection strings (with potential passwords) will be unencrypted 189 | *.pubxml 190 | *.publishproj 191 | 192 | # Microsoft Azure Web App publish settings. Comment the next line if you want to 193 | # checkin your Azure Web App publish settings, but sensitive information contained 194 | # in these scripts will be unencrypted 195 | PublishScripts/ 196 | 197 | # NuGet Packages 198 | *.nupkg 199 | # NuGet Symbol Packages 200 | *.snupkg 201 | # The packages folder can be ignored because of Package Restore 202 | **/[Pp]ackages/* 203 | # except build/, which is used as an MSBuild target. 204 | !**/[Pp]ackages/build/ 205 | # Uncomment if necessary however generally it will be regenerated when needed 206 | #!**/[Pp]ackages/repositories.config 207 | # NuGet v3's project.json files produces more ignorable files 208 | *.nuget.props 209 | *.nuget.targets 210 | 211 | # Microsoft Azure Build Output 212 | csx/ 213 | *.build.csdef 214 | 215 | # Microsoft Azure Emulator 216 | ecf/ 217 | rcf/ 218 | 219 | # Windows Store app package directories and files 220 | AppPackages/ 221 | BundleArtifacts/ 222 | Package.StoreAssociation.xml 223 | _pkginfo.txt 224 | *.appx 225 | *.appxbundle 226 | *.appxupload 227 | 228 | # Visual Studio cache files 229 | # files ending in .cache can be ignored 230 | *.[Cc]ache 231 | # but keep track of directories ending in .cache 232 | !?*.[Cc]ache/ 233 | 234 | # Others 235 | ClientBin/ 236 | ~$* 237 | *~ 238 | *.dbmdl 239 | *.dbproj.schemaview 240 | *.jfm 241 | *.pfx 242 | *.publishsettings 243 | orleans.codegen.cs 244 | 245 | # Including strong name files can present a security risk 246 | # (https://github.com/github/gitignore/pull/2483#issue-259490424) 247 | #*.snk 248 | 249 | # Since there are multiple workflows, uncomment next line to ignore bower_components 250 | # (https://github.com/github/gitignore/pull/1529#issuecomment-104372622) 251 | #bower_components/ 252 | 253 | # RIA/Silverlight projects 254 | Generated_Code/ 255 | 256 | # Backup & report files from converting an old project file 257 | # to a newer Visual Studio version. Backup files are not needed, 258 | # because we have git ;-) 259 | _UpgradeReport_Files/ 260 | Backup*/ 261 | UpgradeLog*.XML 262 | UpgradeLog*.htm 263 | ServiceFabricBackup/ 264 | *.rptproj.bak 265 | 266 | # SQL Server files 267 | *.mdf 268 | *.ldf 269 | *.ndf 270 | 271 | # Business Intelligence projects 272 | *.rdl.data 273 | *.bim.layout 274 | *.bim_*.settings 275 | *.rptproj.rsuser 276 | *- [Bb]ackup.rdl 277 | *- [Bb]ackup ([0-9]).rdl 278 | *- [Bb]ackup ([0-9][0-9]).rdl 279 | 280 | # Microsoft Fakes 281 | FakesAssemblies/ 282 | 283 | # GhostDoc plugin setting file 284 | *.GhostDoc.xml 285 | 286 | # Node.js Tools for Visual Studio 287 | .ntvs_analysis.dat 288 | node_modules/ 289 | 290 | # Visual Studio 6 build log 291 | *.plg 292 | 293 | # Visual Studio 6 workspace options file 294 | *.opt 295 | 296 | # Visual Studio 6 auto-generated workspace file (contains which files were open etc.) 297 | *.vbw 298 | 299 | # Visual Studio LightSwitch build output 300 | **/*.HTMLClient/GeneratedArtifacts 301 | **/*.DesktopClient/GeneratedArtifacts 302 | **/*.DesktopClient/ModelManifest.xml 303 | **/*.Server/GeneratedArtifacts 304 | **/*.Server/ModelManifest.xml 305 | _Pvt_Extensions 306 | 307 | # Paket dependency manager 308 | .paket/paket.exe 309 | paket-files/ 310 | 311 | # FAKE - F# Make 312 | .fake/ 313 | 314 | # CodeRush personal settings 315 | .cr/personal 316 | 317 | # Python Tools for Visual Studio (PTVS) 318 | __pycache__/ 319 | *.pyc 320 | 321 | # Cake - Uncomment if you are using it 322 | # tools/** 323 | # !tools/packages.config 324 | 325 | # Tabs Studio 326 | *.tss 327 | 328 | # Telerik's JustMock configuration file 329 | *.jmconfig 330 | 331 | # BizTalk build output 332 | *.btp.cs 333 | *.btm.cs 334 | *.odx.cs 335 | *.xsd.cs 336 | 337 | # OpenCover UI analysis results 338 | OpenCover/ 339 | 340 | # Azure Stream Analytics local run output 341 | ASALocalRun/ 342 | 343 | # MSBuild Binary and Structured Log 344 | *.binlog 345 | 346 | # NVidia Nsight GPU debugger configuration file 347 | *.nvuser 348 | 349 | # MFractors (Xamarin productivity tool) working folder 350 | .mfractor/ 351 | 352 | # Local History for Visual Studio 353 | .localhistory/ 354 | 355 | # BeatPulse healthcheck temp database 356 | healthchecksdb 357 | 358 | # Backup folder for Package Reference Convert tool in Visual Studio 2017 359 | MigrationBackup/ 360 | 361 | # Ionide (cross platform F# VS Code tools) working folder 362 | .ionide/ 363 | 364 | # Fody - auto-generated XML schema 365 | FodyWeavers.xsd 366 | 367 | ## 368 | ## Visual studio for Mac 369 | ## 370 | 371 | 372 | # globs 373 | Makefile.in 374 | *.userprefs 375 | *.usertasks 376 | config.make 377 | config.status 378 | aclocal.m4 379 | install-sh 380 | autom4te.cache/ 381 | *.tar.gz 382 | tarballs/ 383 | test-results/ 384 | 385 | # Mac bundle stuff 386 | *.dmg 387 | *.app 388 | 389 | # content below from: https://github.com/github/gitignore/blob/master/Global/macOS.gitignore 390 | # General 391 | .DS_Store 392 | .AppleDouble 393 | .LSOverride 394 | 395 | # Icon must end with two \r 396 | Icon 397 | 398 | 399 | # Thumbnails 400 | ._* 401 | 402 | # Files that might appear in the root of a volume 403 | .DocumentRevisions-V100 404 | .fseventsd 405 | .Spotlight-V100 406 | .TemporaryItems 407 | .Trashes 408 | .VolumeIcon.icns 409 | .com.apple.timemachine.donotpresent 410 | 411 | # Directories potentially created on remote AFP share 412 | .AppleDB 413 | .AppleDesktop 414 | Network Trash Folder 415 | Temporary Items 416 | .apdisk 417 | 418 | # content below from: https://github.com/github/gitignore/blob/master/Global/Windows.gitignore 419 | # Windows thumbnail cache files 420 | Thumbs.db 421 | ehthumbs.db 422 | ehthumbs_vista.db 423 | 424 | # Dump file 425 | *.stackdump 426 | 427 | # Folder config file 428 | [Dd]esktop.ini 429 | 430 | # Recycle Bin used on file shares 431 | $RECYCLE.BIN/ 432 | 433 | # Windows Installer files 434 | *.cab 435 | *.msi 436 | *.msix 437 | *.msm 438 | *.msp 439 | 440 | # Windows shortcuts 441 | *.lnk 442 | 443 | # JetBrains Rider 444 | .idea/ 445 | *.sln.iml 446 | 447 | ## 448 | ## Visual Studio Code 449 | ## 450 | .vscode/* 451 | !.vscode/settings.json 452 | !.vscode/tasks.json 453 | !.vscode/launch.json 454 | !.vscode/extensions.json 455 | 456 | # Unity 457 | [Ll]ibrary/ 458 | [Tt]emp/ 459 | [Oo]bj/ 460 | [Bb]in/ -------------------------------------------------------------------------------- /Squiggle.Unity/ProjectSettings/ProjectSettings.asset: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!129 &1 4 | PlayerSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 20 7 | productGUID: 6fafe2a9624d3624395bdfb03e30e14f 8 | AndroidProfiler: 0 9 | AndroidFilterTouchesWhenObscured: 0 10 | AndroidEnableSustainedPerformanceMode: 0 11 | defaultScreenOrientation: 4 12 | targetDevice: 2 13 | useOnDemandResources: 0 14 | accelerometerFrequency: 60 15 | companyName: DefaultCompany 16 | productName: Squiggle.Unity 17 | defaultCursor: {fileID: 0} 18 | cursorHotspot: {x: 0, y: 0} 19 | m_SplashScreenBackgroundColor: {r: 0.13725491, g: 0.12156863, b: 0.1254902, a: 1} 20 | m_ShowUnitySplashScreen: 1 21 | m_ShowUnitySplashLogo: 1 22 | m_SplashScreenOverlayOpacity: 1 23 | m_SplashScreenAnimation: 1 24 | m_SplashScreenLogoStyle: 1 25 | m_SplashScreenDrawMode: 0 26 | m_SplashScreenBackgroundAnimationZoom: 1 27 | m_SplashScreenLogoAnimationZoom: 1 28 | m_SplashScreenBackgroundLandscapeAspect: 1 29 | m_SplashScreenBackgroundPortraitAspect: 1 30 | m_SplashScreenBackgroundLandscapeUvs: 31 | serializedVersion: 2 32 | x: 0 33 | y: 0 34 | width: 1 35 | height: 1 36 | m_SplashScreenBackgroundPortraitUvs: 37 | serializedVersion: 2 38 | x: 0 39 | y: 0 40 | width: 1 41 | height: 1 42 | m_SplashScreenLogos: [] 43 | m_VirtualRealitySplashScreen: {fileID: 0} 44 | m_HolographicTrackingLossScreen: {fileID: 0} 45 | defaultScreenWidth: 1024 46 | defaultScreenHeight: 768 47 | defaultScreenWidthWeb: 960 48 | defaultScreenHeightWeb: 600 49 | m_StereoRenderingPath: 0 50 | m_ActiveColorSpace: 0 51 | m_MTRendering: 1 52 | m_StackTraceTypes: 010000000100000001000000010000000100000001000000 53 | iosShowActivityIndicatorOnLoading: -1 54 | androidShowActivityIndicatorOnLoading: -1 55 | iosUseCustomAppBackgroundBehavior: 0 56 | iosAllowHTTPDownload: 1 57 | allowedAutorotateToPortrait: 1 58 | allowedAutorotateToPortraitUpsideDown: 1 59 | allowedAutorotateToLandscapeRight: 1 60 | allowedAutorotateToLandscapeLeft: 1 61 | useOSAutorotation: 1 62 | use32BitDisplayBuffer: 1 63 | preserveFramebufferAlpha: 0 64 | disableDepthAndStencilBuffers: 0 65 | androidStartInFullscreen: 1 66 | androidRenderOutsideSafeArea: 1 67 | androidUseSwappy: 0 68 | androidBlitType: 0 69 | defaultIsNativeResolution: 1 70 | macRetinaSupport: 1 71 | runInBackground: 1 72 | captureSingleScreen: 0 73 | muteOtherAudioSources: 0 74 | Prepare IOS For Recording: 0 75 | Force IOS Speakers When Recording: 0 76 | deferSystemGesturesMode: 0 77 | hideHomeButton: 0 78 | submitAnalytics: 1 79 | usePlayerLog: 1 80 | bakeCollisionMeshes: 0 81 | forceSingleInstance: 0 82 | useFlipModelSwapchain: 1 83 | resizableWindow: 0 84 | useMacAppStoreValidation: 0 85 | macAppStoreCategory: public.app-category.games 86 | gpuSkinning: 1 87 | xboxPIXTextureCapture: 0 88 | xboxEnableAvatar: 0 89 | xboxEnableKinect: 0 90 | xboxEnableKinectAutoTracking: 0 91 | xboxEnableFitness: 0 92 | visibleInBackground: 1 93 | allowFullscreenSwitch: 1 94 | fullscreenMode: 1 95 | xboxSpeechDB: 0 96 | xboxEnableHeadOrientation: 0 97 | xboxEnableGuest: 0 98 | xboxEnablePIXSampling: 0 99 | metalFramebufferOnly: 0 100 | xboxOneResolution: 0 101 | xboxOneSResolution: 0 102 | xboxOneXResolution: 3 103 | xboxOneMonoLoggingLevel: 0 104 | xboxOneLoggingLevel: 1 105 | xboxOneDisableEsram: 0 106 | xboxOneEnableTypeOptimization: 0 107 | xboxOnePresentImmediateThreshold: 0 108 | switchQueueCommandMemory: 0 109 | switchQueueControlMemory: 16384 110 | switchQueueComputeMemory: 262144 111 | switchNVNShaderPoolsGranularity: 33554432 112 | switchNVNDefaultPoolsGranularity: 16777216 113 | switchNVNOtherPoolsGranularity: 16777216 114 | switchNVNMaxPublicTextureIDCount: 0 115 | switchNVNMaxPublicSamplerIDCount: 0 116 | stadiaPresentMode: 0 117 | stadiaTargetFramerate: 0 118 | vulkanNumSwapchainBuffers: 3 119 | vulkanEnableSetSRGBWrite: 0 120 | vulkanEnableLateAcquireNextImage: 0 121 | m_SupportedAspectRatios: 122 | 4:3: 1 123 | 5:4: 1 124 | 16:10: 1 125 | 16:9: 1 126 | Others: 1 127 | bundleVersion: 0.1 128 | preloadedAssets: [] 129 | metroInputSource: 0 130 | wsaTransparentSwapchain: 0 131 | m_HolographicPauseOnTrackingLoss: 1 132 | xboxOneDisableKinectGpuReservation: 1 133 | xboxOneEnable7thCore: 1 134 | vrSettings: 135 | cardboard: 136 | depthFormat: 0 137 | enableTransitionView: 0 138 | daydream: 139 | depthFormat: 0 140 | useSustainedPerformanceMode: 0 141 | enableVideoLayer: 0 142 | useProtectedVideoMemory: 0 143 | minimumSupportedHeadTracking: 0 144 | maximumSupportedHeadTracking: 1 145 | hololens: 146 | depthFormat: 1 147 | depthBufferSharingEnabled: 1 148 | lumin: 149 | depthFormat: 0 150 | frameTiming: 2 151 | enableGLCache: 0 152 | glCacheMaxBlobSize: 524288 153 | glCacheMaxFileSize: 8388608 154 | oculus: 155 | sharedDepthBuffer: 1 156 | dashSupport: 1 157 | lowOverheadMode: 0 158 | protectedContext: 0 159 | v2Signing: 1 160 | enable360StereoCapture: 0 161 | isWsaHolographicRemotingEnabled: 0 162 | enableFrameTimingStats: 0 163 | useHDRDisplay: 0 164 | D3DHDRBitDepth: 0 165 | m_ColorGamuts: 00000000 166 | targetPixelDensity: 30 167 | resolutionScalingMode: 0 168 | androidSupportedAspectRatio: 1 169 | androidMaxAspectRatio: 2.1 170 | applicationIdentifier: {} 171 | buildNumber: {} 172 | AndroidBundleVersionCode: 1 173 | AndroidMinSdkVersion: 19 174 | AndroidTargetSdkVersion: 0 175 | AndroidPreferredInstallLocation: 1 176 | aotOptions: 177 | stripEngineCode: 1 178 | iPhoneStrippingLevel: 0 179 | iPhoneScriptCallOptimization: 0 180 | ForceInternetPermission: 0 181 | ForceSDCardPermission: 0 182 | CreateWallpaper: 0 183 | APKExpansionFiles: 0 184 | keepLoadedShadersAlive: 0 185 | StripUnusedMeshComponents: 1 186 | VertexChannelCompressionMask: 4054 187 | iPhoneSdkVersion: 988 188 | iOSTargetOSVersionString: 10.0 189 | tvOSSdkVersion: 0 190 | tvOSRequireExtendedGameController: 0 191 | tvOSTargetOSVersionString: 10.0 192 | uIPrerenderedIcon: 0 193 | uIRequiresPersistentWiFi: 0 194 | uIRequiresFullScreen: 1 195 | uIStatusBarHidden: 1 196 | uIExitOnSuspend: 0 197 | uIStatusBarStyle: 0 198 | appleTVSplashScreen: {fileID: 0} 199 | appleTVSplashScreen2x: {fileID: 0} 200 | tvOSSmallIconLayers: [] 201 | tvOSSmallIconLayers2x: [] 202 | tvOSLargeIconLayers: [] 203 | tvOSLargeIconLayers2x: [] 204 | tvOSTopShelfImageLayers: [] 205 | tvOSTopShelfImageLayers2x: [] 206 | tvOSTopShelfImageWideLayers: [] 207 | tvOSTopShelfImageWideLayers2x: [] 208 | iOSLaunchScreenType: 0 209 | iOSLaunchScreenPortrait: {fileID: 0} 210 | iOSLaunchScreenLandscape: {fileID: 0} 211 | iOSLaunchScreenBackgroundColor: 212 | serializedVersion: 2 213 | rgba: 0 214 | iOSLaunchScreenFillPct: 100 215 | iOSLaunchScreenSize: 100 216 | iOSLaunchScreenCustomXibPath: 217 | iOSLaunchScreeniPadType: 0 218 | iOSLaunchScreeniPadImage: {fileID: 0} 219 | iOSLaunchScreeniPadBackgroundColor: 220 | serializedVersion: 2 221 | rgba: 0 222 | iOSLaunchScreeniPadFillPct: 100 223 | iOSLaunchScreeniPadSize: 100 224 | iOSLaunchScreeniPadCustomXibPath: 225 | iOSUseLaunchScreenStoryboard: 0 226 | iOSLaunchScreenCustomStoryboardPath: 227 | iOSDeviceRequirements: [] 228 | iOSURLSchemes: [] 229 | iOSBackgroundModes: 0 230 | iOSMetalForceHardShadows: 0 231 | metalEditorSupport: 1 232 | metalAPIValidation: 1 233 | iOSRenderExtraFrameOnPause: 0 234 | appleDeveloperTeamID: 235 | iOSManualSigningProvisioningProfileID: 236 | tvOSManualSigningProvisioningProfileID: 237 | iOSManualSigningProvisioningProfileType: 0 238 | tvOSManualSigningProvisioningProfileType: 0 239 | appleEnableAutomaticSigning: 0 240 | iOSRequireARKit: 0 241 | iOSAutomaticallyDetectAndAddCapabilities: 1 242 | appleEnableProMotion: 0 243 | clonedFromGUID: c0afd0d1d80e3634a9dac47e8a0426ea 244 | templatePackageId: com.unity.template.3d@4.2.8 245 | templateDefaultScene: Assets/Scenes/SampleScene.unity 246 | AndroidTargetArchitectures: 1 247 | AndroidSplashScreenScale: 0 248 | androidSplashScreen: {fileID: 0} 249 | AndroidKeystoreName: 250 | AndroidKeyaliasName: 251 | AndroidBuildApkPerCpuArchitecture: 0 252 | AndroidTVCompatibility: 0 253 | AndroidIsGame: 1 254 | AndroidEnableTango: 0 255 | androidEnableBanner: 1 256 | androidUseLowAccuracyLocation: 0 257 | androidUseCustomKeystore: 0 258 | m_AndroidBanners: 259 | - width: 320 260 | height: 180 261 | banner: {fileID: 0} 262 | androidGamepadSupportLevel: 0 263 | AndroidValidateAppBundleSize: 1 264 | AndroidAppBundleSizeToValidate: 150 265 | m_BuildTargetIcons: [] 266 | m_BuildTargetPlatformIcons: [] 267 | m_BuildTargetBatching: 268 | - m_BuildTarget: Standalone 269 | m_StaticBatching: 1 270 | m_DynamicBatching: 0 271 | - m_BuildTarget: tvOS 272 | m_StaticBatching: 1 273 | m_DynamicBatching: 0 274 | - m_BuildTarget: Android 275 | m_StaticBatching: 1 276 | m_DynamicBatching: 0 277 | - m_BuildTarget: iPhone 278 | m_StaticBatching: 1 279 | m_DynamicBatching: 0 280 | - m_BuildTarget: WebGL 281 | m_StaticBatching: 0 282 | m_DynamicBatching: 0 283 | m_BuildTargetGraphicsJobs: 284 | - m_BuildTarget: MacStandaloneSupport 285 | m_GraphicsJobs: 0 286 | - m_BuildTarget: Switch 287 | m_GraphicsJobs: 1 288 | - m_BuildTarget: MetroSupport 289 | m_GraphicsJobs: 1 290 | - m_BuildTarget: AppleTVSupport 291 | m_GraphicsJobs: 0 292 | - m_BuildTarget: BJMSupport 293 | m_GraphicsJobs: 1 294 | - m_BuildTarget: LinuxStandaloneSupport 295 | m_GraphicsJobs: 1 296 | - m_BuildTarget: PS4Player 297 | m_GraphicsJobs: 1 298 | - m_BuildTarget: iOSSupport 299 | m_GraphicsJobs: 0 300 | - m_BuildTarget: WindowsStandaloneSupport 301 | m_GraphicsJobs: 1 302 | - m_BuildTarget: XboxOnePlayer 303 | m_GraphicsJobs: 1 304 | - m_BuildTarget: LuminSupport 305 | m_GraphicsJobs: 0 306 | - m_BuildTarget: AndroidPlayer 307 | m_GraphicsJobs: 0 308 | - m_BuildTarget: WebGLSupport 309 | m_GraphicsJobs: 0 310 | m_BuildTargetGraphicsJobMode: 311 | - m_BuildTarget: PS4Player 312 | m_GraphicsJobMode: 0 313 | - m_BuildTarget: XboxOnePlayer 314 | m_GraphicsJobMode: 0 315 | m_BuildTargetGraphicsAPIs: 316 | - m_BuildTarget: AndroidPlayer 317 | m_APIs: 150000000b000000 318 | m_Automatic: 0 319 | - m_BuildTarget: iOSSupport 320 | m_APIs: 10000000 321 | m_Automatic: 1 322 | - m_BuildTarget: AppleTVSupport 323 | m_APIs: 10000000 324 | m_Automatic: 0 325 | - m_BuildTarget: WebGLSupport 326 | m_APIs: 0b000000 327 | m_Automatic: 1 328 | m_BuildTargetVRSettings: 329 | - m_BuildTarget: Standalone 330 | m_Enabled: 0 331 | m_Devices: 332 | - Oculus 333 | - OpenVR 334 | openGLRequireES31: 0 335 | openGLRequireES31AEP: 0 336 | openGLRequireES32: 0 337 | m_TemplateCustomTags: {} 338 | mobileMTRendering: 339 | Android: 1 340 | iPhone: 1 341 | tvOS: 1 342 | m_BuildTargetGroupLightmapEncodingQuality: [] 343 | m_BuildTargetGroupLightmapSettings: [] 344 | playModeTestRunnerEnabled: 0 345 | runPlayModeTestAsEditModeTest: 0 346 | actionOnDotNetUnhandledException: 1 347 | enableInternalProfiler: 0 348 | logObjCUncaughtExceptions: 1 349 | enableCrashReportAPI: 0 350 | cameraUsageDescription: 351 | locationUsageDescription: 352 | microphoneUsageDescription: 353 | switchNetLibKey: 354 | switchSocketMemoryPoolSize: 6144 355 | switchSocketAllocatorPoolSize: 128 356 | switchSocketConcurrencyLimit: 14 357 | switchScreenResolutionBehavior: 2 358 | switchUseCPUProfiler: 0 359 | switchApplicationID: 0x01004b9000490000 360 | switchNSODependencies: 361 | switchTitleNames_0: 362 | switchTitleNames_1: 363 | switchTitleNames_2: 364 | switchTitleNames_3: 365 | switchTitleNames_4: 366 | switchTitleNames_5: 367 | switchTitleNames_6: 368 | switchTitleNames_7: 369 | switchTitleNames_8: 370 | switchTitleNames_9: 371 | switchTitleNames_10: 372 | switchTitleNames_11: 373 | switchTitleNames_12: 374 | switchTitleNames_13: 375 | switchTitleNames_14: 376 | switchPublisherNames_0: 377 | switchPublisherNames_1: 378 | switchPublisherNames_2: 379 | switchPublisherNames_3: 380 | switchPublisherNames_4: 381 | switchPublisherNames_5: 382 | switchPublisherNames_6: 383 | switchPublisherNames_7: 384 | switchPublisherNames_8: 385 | switchPublisherNames_9: 386 | switchPublisherNames_10: 387 | switchPublisherNames_11: 388 | switchPublisherNames_12: 389 | switchPublisherNames_13: 390 | switchPublisherNames_14: 391 | switchIcons_0: {fileID: 0} 392 | switchIcons_1: {fileID: 0} 393 | switchIcons_2: {fileID: 0} 394 | switchIcons_3: {fileID: 0} 395 | switchIcons_4: {fileID: 0} 396 | switchIcons_5: {fileID: 0} 397 | switchIcons_6: {fileID: 0} 398 | switchIcons_7: {fileID: 0} 399 | switchIcons_8: {fileID: 0} 400 | switchIcons_9: {fileID: 0} 401 | switchIcons_10: {fileID: 0} 402 | switchIcons_11: {fileID: 0} 403 | switchIcons_12: {fileID: 0} 404 | switchIcons_13: {fileID: 0} 405 | switchIcons_14: {fileID: 0} 406 | switchSmallIcons_0: {fileID: 0} 407 | switchSmallIcons_1: {fileID: 0} 408 | switchSmallIcons_2: {fileID: 0} 409 | switchSmallIcons_3: {fileID: 0} 410 | switchSmallIcons_4: {fileID: 0} 411 | switchSmallIcons_5: {fileID: 0} 412 | switchSmallIcons_6: {fileID: 0} 413 | switchSmallIcons_7: {fileID: 0} 414 | switchSmallIcons_8: {fileID: 0} 415 | switchSmallIcons_9: {fileID: 0} 416 | switchSmallIcons_10: {fileID: 0} 417 | switchSmallIcons_11: {fileID: 0} 418 | switchSmallIcons_12: {fileID: 0} 419 | switchSmallIcons_13: {fileID: 0} 420 | switchSmallIcons_14: {fileID: 0} 421 | switchManualHTML: 422 | switchAccessibleURLs: 423 | switchLegalInformation: 424 | switchMainThreadStackSize: 1048576 425 | switchPresenceGroupId: 426 | switchLogoHandling: 0 427 | switchReleaseVersion: 0 428 | switchDisplayVersion: 1.0.0 429 | switchStartupUserAccount: 0 430 | switchTouchScreenUsage: 0 431 | switchSupportedLanguagesMask: 0 432 | switchLogoType: 0 433 | switchApplicationErrorCodeCategory: 434 | switchUserAccountSaveDataSize: 0 435 | switchUserAccountSaveDataJournalSize: 0 436 | switchApplicationAttribute: 0 437 | switchCardSpecSize: -1 438 | switchCardSpecClock: -1 439 | switchRatingsMask: 0 440 | switchRatingsInt_0: 0 441 | switchRatingsInt_1: 0 442 | switchRatingsInt_2: 0 443 | switchRatingsInt_3: 0 444 | switchRatingsInt_4: 0 445 | switchRatingsInt_5: 0 446 | switchRatingsInt_6: 0 447 | switchRatingsInt_7: 0 448 | switchRatingsInt_8: 0 449 | switchRatingsInt_9: 0 450 | switchRatingsInt_10: 0 451 | switchRatingsInt_11: 0 452 | switchRatingsInt_12: 0 453 | switchLocalCommunicationIds_0: 454 | switchLocalCommunicationIds_1: 455 | switchLocalCommunicationIds_2: 456 | switchLocalCommunicationIds_3: 457 | switchLocalCommunicationIds_4: 458 | switchLocalCommunicationIds_5: 459 | switchLocalCommunicationIds_6: 460 | switchLocalCommunicationIds_7: 461 | switchParentalControl: 0 462 | switchAllowsScreenshot: 1 463 | switchAllowsVideoCapturing: 1 464 | switchAllowsRuntimeAddOnContentInstall: 0 465 | switchDataLossConfirmation: 0 466 | switchUserAccountLockEnabled: 0 467 | switchSystemResourceMemory: 16777216 468 | switchSupportedNpadStyles: 22 469 | switchNativeFsCacheSize: 32 470 | switchIsHoldTypeHorizontal: 0 471 | switchSupportedNpadCount: 8 472 | switchSocketConfigEnabled: 0 473 | switchTcpInitialSendBufferSize: 32 474 | switchTcpInitialReceiveBufferSize: 64 475 | switchTcpAutoSendBufferSizeMax: 256 476 | switchTcpAutoReceiveBufferSizeMax: 256 477 | switchUdpSendBufferSize: 9 478 | switchUdpReceiveBufferSize: 42 479 | switchSocketBufferEfficiency: 4 480 | switchSocketInitializeEnabled: 1 481 | switchNetworkInterfaceManagerInitializeEnabled: 1 482 | switchPlayerConnectionEnabled: 1 483 | ps4NPAgeRating: 12 484 | ps4NPTitleSecret: 485 | ps4NPTrophyPackPath: 486 | ps4ParentalLevel: 11 487 | ps4ContentID: ED1633-NPXX51362_00-0000000000000000 488 | ps4Category: 0 489 | ps4MasterVersion: 01.00 490 | ps4AppVersion: 01.00 491 | ps4AppType: 0 492 | ps4ParamSfxPath: 493 | ps4VideoOutPixelFormat: 0 494 | ps4VideoOutInitialWidth: 1920 495 | ps4VideoOutBaseModeInitialWidth: 1920 496 | ps4VideoOutReprojectionRate: 60 497 | ps4PronunciationXMLPath: 498 | ps4PronunciationSIGPath: 499 | ps4BackgroundImagePath: 500 | ps4StartupImagePath: 501 | ps4StartupImagesFolder: 502 | ps4IconImagesFolder: 503 | ps4SaveDataImagePath: 504 | ps4SdkOverride: 505 | ps4BGMPath: 506 | ps4ShareFilePath: 507 | ps4ShareOverlayImagePath: 508 | ps4PrivacyGuardImagePath: 509 | ps4ExtraSceSysFile: 510 | ps4NPtitleDatPath: 511 | ps4RemotePlayKeyAssignment: -1 512 | ps4RemotePlayKeyMappingDir: 513 | ps4PlayTogetherPlayerCount: 0 514 | ps4EnterButtonAssignment: 1 515 | ps4ApplicationParam1: 0 516 | ps4ApplicationParam2: 0 517 | ps4ApplicationParam3: 0 518 | ps4ApplicationParam4: 0 519 | ps4DownloadDataSize: 0 520 | ps4GarlicHeapSize: 2048 521 | ps4ProGarlicHeapSize: 2560 522 | playerPrefsMaxSize: 32768 523 | ps4Passcode: frAQBc8Wsa1xVPfvJcrgRYwTiizs2trQ 524 | ps4pnSessions: 1 525 | ps4pnPresence: 1 526 | ps4pnFriends: 1 527 | ps4pnGameCustomData: 1 528 | playerPrefsSupport: 0 529 | enableApplicationExit: 0 530 | resetTempFolder: 1 531 | restrictedAudioUsageRights: 0 532 | ps4UseResolutionFallback: 0 533 | ps4ReprojectionSupport: 0 534 | ps4UseAudio3dBackend: 0 535 | ps4UseLowGarlicFragmentationMode: 1 536 | ps4SocialScreenEnabled: 0 537 | ps4ScriptOptimizationLevel: 0 538 | ps4Audio3dVirtualSpeakerCount: 14 539 | ps4attribCpuUsage: 0 540 | ps4PatchPkgPath: 541 | ps4PatchLatestPkgPath: 542 | ps4PatchChangeinfoPath: 543 | ps4PatchDayOne: 0 544 | ps4attribUserManagement: 0 545 | ps4attribMoveSupport: 0 546 | ps4attrib3DSupport: 0 547 | ps4attribShareSupport: 0 548 | ps4attribExclusiveVR: 0 549 | ps4disableAutoHideSplash: 0 550 | ps4videoRecordingFeaturesUsed: 0 551 | ps4contentSearchFeaturesUsed: 0 552 | ps4CompatibilityPS5: 0 553 | ps4GPU800MHz: 1 554 | ps4attribEyeToEyeDistanceSettingVR: 0 555 | ps4IncludedModules: [] 556 | ps4attribVROutputEnabled: 0 557 | monoEnv: 558 | splashScreenBackgroundSourceLandscape: {fileID: 0} 559 | splashScreenBackgroundSourcePortrait: {fileID: 0} 560 | blurSplashScreenBackground: 1 561 | spritePackerPolicy: 562 | webGLMemorySize: 16 563 | webGLExceptionSupport: 1 564 | webGLNameFilesAsHashes: 0 565 | webGLDataCaching: 1 566 | webGLDebugSymbols: 0 567 | webGLEmscriptenArgs: 568 | webGLModulesDirectory: 569 | webGLTemplate: APPLICATION:Default 570 | webGLAnalyzeBuildSize: 0 571 | webGLUseEmbeddedResources: 0 572 | webGLCompressionFormat: 1 573 | webGLLinkerTarget: 1 574 | webGLThreadsSupport: 0 575 | webGLWasmStreaming: 0 576 | scriptingDefineSymbols: {} 577 | platformArchitecture: {} 578 | scriptingBackend: {} 579 | il2cppCompilerConfiguration: {} 580 | managedStrippingLevel: {} 581 | incrementalIl2cppBuild: {} 582 | allowUnsafeCode: 0 583 | additionalIl2CppArgs: 584 | scriptingRuntimeVersion: 1 585 | gcIncremental: 0 586 | gcWBarrierValidation: 0 587 | apiCompatibilityLevelPerPlatform: {} 588 | m_RenderingPath: 1 589 | m_MobileRenderingPath: 1 590 | metroPackageName: Template_3D 591 | metroPackageVersion: 592 | metroCertificatePath: 593 | metroCertificatePassword: 594 | metroCertificateSubject: 595 | metroCertificateIssuer: 596 | metroCertificateNotAfter: 0000000000000000 597 | metroApplicationDescription: Template_3D 598 | wsaImages: {} 599 | metroTileShortName: 600 | metroTileShowName: 0 601 | metroMediumTileShowName: 0 602 | metroLargeTileShowName: 0 603 | metroWideTileShowName: 0 604 | metroSupportStreamingInstall: 0 605 | metroLastRequiredScene: 0 606 | metroDefaultTileSize: 1 607 | metroTileForegroundText: 2 608 | metroTileBackgroundColor: {r: 0.13333334, g: 0.17254902, b: 0.21568628, a: 0} 609 | metroSplashScreenBackgroundColor: {r: 0.12941177, g: 0.17254902, b: 0.21568628, 610 | a: 1} 611 | metroSplashScreenUseBackgroundColor: 0 612 | platformCapabilities: {} 613 | metroTargetDeviceFamilies: {} 614 | metroFTAName: 615 | metroFTAFileTypes: [] 616 | metroProtocolName: 617 | XboxOneProductId: 618 | XboxOneUpdateKey: 619 | XboxOneSandboxId: 620 | XboxOneContentId: 621 | XboxOneTitleId: 622 | XboxOneSCId: 623 | XboxOneGameOsOverridePath: 624 | XboxOnePackagingOverridePath: 625 | XboxOneAppManifestOverridePath: 626 | XboxOneVersion: 1.0.0.0 627 | XboxOnePackageEncryption: 0 628 | XboxOnePackageUpdateGranularity: 2 629 | XboxOneDescription: 630 | XboxOneLanguage: 631 | - enus 632 | XboxOneCapability: [] 633 | XboxOneGameRating: {} 634 | XboxOneIsContentPackage: 0 635 | XboxOneEnableGPUVariability: 1 636 | XboxOneSockets: {} 637 | XboxOneSplashScreen: {fileID: 0} 638 | XboxOneAllowedProductIds: [] 639 | XboxOnePersistentLocalStorageSize: 0 640 | XboxOneXTitleMemory: 8 641 | XboxOneOverrideIdentityName: 642 | XboxOneOverrideIdentityPublisher: 643 | vrEditorSettings: 644 | daydream: 645 | daydreamIconForeground: {fileID: 0} 646 | daydreamIconBackground: {fileID: 0} 647 | cloudServicesEnabled: 648 | UNet: 1 649 | luminIcon: 650 | m_Name: 651 | m_ModelFolderPath: 652 | m_PortalFolderPath: 653 | luminCert: 654 | m_CertPath: 655 | m_SignPackage: 1 656 | luminIsChannelApp: 0 657 | luminVersion: 658 | m_VersionCode: 1 659 | m_VersionName: 660 | apiCompatibilityLevel: 6 661 | cloudProjectId: 662 | framebufferDepthMemorylessMode: 0 663 | projectName: 664 | organizationId: 665 | cloudEnabled: 0 666 | enableNativePlatformBackendsForNewInputSystem: 0 667 | disableOldInputManagerSupport: 0 668 | legacyClampBlendShapeWeights: 0 669 | -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Sample Scenes/4 - StreamingAssetsSample/StreamingAssetsSamplex.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_UseShadowmask: 1 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | debug: 122 | m_Flags: 0 123 | m_NavMeshData: {fileID: 0} 124 | --- !u!1 &5173931 125 | GameObject: 126 | m_ObjectHideFlags: 0 127 | m_CorrespondingSourceObject: {fileID: 0} 128 | m_PrefabInstance: {fileID: 0} 129 | m_PrefabAsset: {fileID: 0} 130 | serializedVersion: 6 131 | m_Component: 132 | - component: {fileID: 5173932} 133 | - component: {fileID: 5173933} 134 | m_Layer: 0 135 | m_Name: SquiggleStreamingAssetsSample 136 | m_TagString: Untagged 137 | m_Icon: {fileID: 0} 138 | m_NavMeshLayer: 0 139 | m_StaticEditorFlags: 0 140 | m_IsActive: 1 141 | --- !u!4 &5173932 142 | Transform: 143 | m_ObjectHideFlags: 0 144 | m_CorrespondingSourceObject: {fileID: 0} 145 | m_PrefabInstance: {fileID: 0} 146 | m_PrefabAsset: {fileID: 0} 147 | m_GameObject: {fileID: 5173931} 148 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 149 | m_LocalPosition: {x: 1031.7043, y: 674.87836, z: 0} 150 | m_LocalScale: {x: 1, y: 1, z: 1} 151 | m_Children: [] 152 | m_Father: {fileID: 0} 153 | m_RootOrder: 1 154 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 155 | --- !u!114 &5173933 156 | MonoBehaviour: 157 | m_ObjectHideFlags: 0 158 | m_CorrespondingSourceObject: {fileID: 0} 159 | m_PrefabInstance: {fileID: 0} 160 | m_PrefabAsset: {fileID: 0} 161 | m_GameObject: {fileID: 5173931} 162 | m_Enabled: 1 163 | m_EditorHideFlags: 0 164 | m_Script: {fileID: 11500000, guid: d5ceb16c5ee4f6e43b87251d86f7307f, type: 3} 165 | m_Name: 166 | m_EditorClassIdentifier: 167 | SpeakerName: {fileID: 217686103} 168 | SpeakerText: {fileID: 337963672} 169 | RunSquiggle: {fileID: 2054484118} 170 | --- !u!1 &9069187 171 | GameObject: 172 | m_ObjectHideFlags: 0 173 | m_CorrespondingSourceObject: {fileID: 0} 174 | m_PrefabInstance: {fileID: 0} 175 | m_PrefabAsset: {fileID: 0} 176 | serializedVersion: 6 177 | m_Component: 178 | - component: {fileID: 9069188} 179 | m_Layer: 5 180 | m_Name: SampleContents 181 | m_TagString: Untagged 182 | m_Icon: {fileID: 0} 183 | m_NavMeshLayer: 0 184 | m_StaticEditorFlags: 0 185 | m_IsActive: 1 186 | --- !u!224 &9069188 187 | RectTransform: 188 | m_ObjectHideFlags: 0 189 | m_CorrespondingSourceObject: {fileID: 0} 190 | m_PrefabInstance: {fileID: 0} 191 | m_PrefabAsset: {fileID: 0} 192 | m_GameObject: {fileID: 9069187} 193 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 194 | m_LocalPosition: {x: 0, y: 0, z: 0} 195 | m_LocalScale: {x: 1, y: 1, z: 1} 196 | m_Children: 197 | - {fileID: 1284801022} 198 | - {fileID: 1222348851} 199 | - {fileID: 217686102} 200 | - {fileID: 337963671} 201 | - {fileID: 2054484117} 202 | m_Father: {fileID: 124348625} 203 | m_RootOrder: 2 204 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 205 | m_AnchorMin: {x: 0.5, y: 0.5} 206 | m_AnchorMax: {x: 0.5, y: 0.5} 207 | m_AnchoredPosition: {x: 0, y: 0} 208 | m_SizeDelta: {x: 800, y: 600} 209 | m_Pivot: {x: 0.5, y: 0.5} 210 | --- !u!1 &124348621 211 | GameObject: 212 | m_ObjectHideFlags: 0 213 | m_CorrespondingSourceObject: {fileID: 0} 214 | m_PrefabInstance: {fileID: 0} 215 | m_PrefabAsset: {fileID: 0} 216 | serializedVersion: 6 217 | m_Component: 218 | - component: {fileID: 124348625} 219 | - component: {fileID: 124348624} 220 | - component: {fileID: 124348623} 221 | - component: {fileID: 124348622} 222 | m_Layer: 5 223 | m_Name: Canvas 224 | m_TagString: Untagged 225 | m_Icon: {fileID: 0} 226 | m_NavMeshLayer: 0 227 | m_StaticEditorFlags: 0 228 | m_IsActive: 1 229 | --- !u!114 &124348622 230 | MonoBehaviour: 231 | m_ObjectHideFlags: 0 232 | m_CorrespondingSourceObject: {fileID: 0} 233 | m_PrefabInstance: {fileID: 0} 234 | m_PrefabAsset: {fileID: 0} 235 | m_GameObject: {fileID: 124348621} 236 | m_Enabled: 1 237 | m_EditorHideFlags: 0 238 | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} 239 | m_Name: 240 | m_EditorClassIdentifier: 241 | m_IgnoreReversedGraphics: 1 242 | m_BlockingObjects: 0 243 | m_BlockingMask: 244 | serializedVersion: 2 245 | m_Bits: 4294967295 246 | --- !u!114 &124348623 247 | MonoBehaviour: 248 | m_ObjectHideFlags: 0 249 | m_CorrespondingSourceObject: {fileID: 0} 250 | m_PrefabInstance: {fileID: 0} 251 | m_PrefabAsset: {fileID: 0} 252 | m_GameObject: {fileID: 124348621} 253 | m_Enabled: 1 254 | m_EditorHideFlags: 0 255 | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} 256 | m_Name: 257 | m_EditorClassIdentifier: 258 | m_UiScaleMode: 0 259 | m_ReferencePixelsPerUnit: 100 260 | m_ScaleFactor: 1 261 | m_ReferenceResolution: {x: 800, y: 600} 262 | m_ScreenMatchMode: 0 263 | m_MatchWidthOrHeight: 0 264 | m_PhysicalUnit: 3 265 | m_FallbackScreenDPI: 96 266 | m_DefaultSpriteDPI: 96 267 | m_DynamicPixelsPerUnit: 1 268 | --- !u!223 &124348624 269 | Canvas: 270 | m_ObjectHideFlags: 0 271 | m_CorrespondingSourceObject: {fileID: 0} 272 | m_PrefabInstance: {fileID: 0} 273 | m_PrefabAsset: {fileID: 0} 274 | m_GameObject: {fileID: 124348621} 275 | m_Enabled: 1 276 | serializedVersion: 3 277 | m_RenderMode: 0 278 | m_Camera: {fileID: 0} 279 | m_PlaneDistance: 100 280 | m_PixelPerfect: 0 281 | m_ReceivesEvents: 1 282 | m_OverrideSorting: 0 283 | m_OverridePixelPerfect: 0 284 | m_SortingBucketNormalizedSize: 0 285 | m_AdditionalShaderChannelsFlag: 0 286 | m_SortingLayerID: 0 287 | m_SortingOrder: 0 288 | m_TargetDisplay: 0 289 | --- !u!224 &124348625 290 | RectTransform: 291 | m_ObjectHideFlags: 0 292 | m_CorrespondingSourceObject: {fileID: 0} 293 | m_PrefabInstance: {fileID: 0} 294 | m_PrefabAsset: {fileID: 0} 295 | m_GameObject: {fileID: 124348621} 296 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 297 | m_LocalPosition: {x: 0, y: 0, z: 0} 298 | m_LocalScale: {x: 0, y: 0, z: 0} 299 | m_Children: 300 | - {fileID: 156993267} 301 | - {fileID: 1303495870} 302 | - {fileID: 9069188} 303 | m_Father: {fileID: 0} 304 | m_RootOrder: 2 305 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 306 | m_AnchorMin: {x: 0, y: 0} 307 | m_AnchorMax: {x: 0, y: 0} 308 | m_AnchoredPosition: {x: 0, y: 0} 309 | m_SizeDelta: {x: 0, y: 0} 310 | m_Pivot: {x: 0, y: 0} 311 | --- !u!1 &156993266 312 | GameObject: 313 | m_ObjectHideFlags: 0 314 | m_CorrespondingSourceObject: {fileID: 0} 315 | m_PrefabInstance: {fileID: 0} 316 | m_PrefabAsset: {fileID: 0} 317 | serializedVersion: 6 318 | m_Component: 319 | - component: {fileID: 156993267} 320 | - component: {fileID: 156993270} 321 | - component: {fileID: 156993269} 322 | - component: {fileID: 156993268} 323 | m_Layer: 5 324 | m_Name: BG 325 | m_TagString: Untagged 326 | m_Icon: {fileID: 0} 327 | m_NavMeshLayer: 0 328 | m_StaticEditorFlags: 0 329 | m_IsActive: 1 330 | --- !u!224 &156993267 331 | RectTransform: 332 | m_ObjectHideFlags: 0 333 | m_CorrespondingSourceObject: {fileID: 0} 334 | m_PrefabInstance: {fileID: 0} 335 | m_PrefabAsset: {fileID: 0} 336 | m_GameObject: {fileID: 156993266} 337 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 338 | m_LocalPosition: {x: 0, y: 0, z: 0} 339 | m_LocalScale: {x: 1, y: 1, z: 1} 340 | m_Children: [] 341 | m_Father: {fileID: 124348625} 342 | m_RootOrder: 0 343 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 344 | m_AnchorMin: {x: 0, y: 0} 345 | m_AnchorMax: {x: 1, y: 1} 346 | m_AnchoredPosition: {x: 0, y: 0} 347 | m_SizeDelta: {x: -30, y: -30} 348 | m_Pivot: {x: 0.5, y: 0.5} 349 | --- !u!114 &156993268 350 | MonoBehaviour: 351 | m_ObjectHideFlags: 0 352 | m_CorrespondingSourceObject: {fileID: 0} 353 | m_PrefabInstance: {fileID: 0} 354 | m_PrefabAsset: {fileID: 0} 355 | m_GameObject: {fileID: 156993266} 356 | m_Enabled: 1 357 | m_EditorHideFlags: 0 358 | m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} 359 | m_Name: 360 | m_EditorClassIdentifier: 361 | m_EffectColor: {r: 0.08627451, g: 0.57254905, b: 0.8509804, a: 1} 362 | m_EffectDistance: {x: 15, y: 15} 363 | m_UseGraphicAlpha: 1 364 | --- !u!114 &156993269 365 | MonoBehaviour: 366 | m_ObjectHideFlags: 0 367 | m_CorrespondingSourceObject: {fileID: 0} 368 | m_PrefabInstance: {fileID: 0} 369 | m_PrefabAsset: {fileID: 0} 370 | m_GameObject: {fileID: 156993266} 371 | m_Enabled: 1 372 | m_EditorHideFlags: 0 373 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 374 | m_Name: 375 | m_EditorClassIdentifier: 376 | m_Material: {fileID: 0} 377 | m_Color: {r: 0.10980392, g: 0.11372549, b: 0.12941177, a: 1} 378 | m_RaycastTarget: 1 379 | m_Maskable: 1 380 | m_OnCullStateChanged: 381 | m_PersistentCalls: 382 | m_Calls: [] 383 | m_Sprite: {fileID: 0} 384 | m_Type: 0 385 | m_PreserveAspect: 0 386 | m_FillCenter: 1 387 | m_FillMethod: 4 388 | m_FillAmount: 1 389 | m_FillClockwise: 1 390 | m_FillOrigin: 0 391 | m_UseSpriteMesh: 0 392 | m_PixelsPerUnitMultiplier: 1 393 | --- !u!222 &156993270 394 | CanvasRenderer: 395 | m_ObjectHideFlags: 0 396 | m_CorrespondingSourceObject: {fileID: 0} 397 | m_PrefabInstance: {fileID: 0} 398 | m_PrefabAsset: {fileID: 0} 399 | m_GameObject: {fileID: 156993266} 400 | m_CullTransparentMesh: 0 401 | --- !u!1 &217686101 402 | GameObject: 403 | m_ObjectHideFlags: 0 404 | m_CorrespondingSourceObject: {fileID: 0} 405 | m_PrefabInstance: {fileID: 0} 406 | m_PrefabAsset: {fileID: 0} 407 | serializedVersion: 6 408 | m_Component: 409 | - component: {fileID: 217686102} 410 | - component: {fileID: 217686104} 411 | - component: {fileID: 217686103} 412 | m_Layer: 5 413 | m_Name: SpeakerFromSquiggle 414 | m_TagString: Untagged 415 | m_Icon: {fileID: 0} 416 | m_NavMeshLayer: 0 417 | m_StaticEditorFlags: 0 418 | m_IsActive: 1 419 | --- !u!224 &217686102 420 | RectTransform: 421 | m_ObjectHideFlags: 0 422 | m_CorrespondingSourceObject: {fileID: 0} 423 | m_PrefabInstance: {fileID: 0} 424 | m_PrefabAsset: {fileID: 0} 425 | m_GameObject: {fileID: 217686101} 426 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 427 | m_LocalPosition: {x: 0, y: 0, z: 0} 428 | m_LocalScale: {x: 1, y: 1, z: 1} 429 | m_Children: [] 430 | m_Father: {fileID: 9069188} 431 | m_RootOrder: 2 432 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 433 | m_AnchorMin: {x: 0, y: 1} 434 | m_AnchorMax: {x: 1, y: 1} 435 | m_AnchoredPosition: {x: 0, y: -147} 436 | m_SizeDelta: {x: 0, y: 99.99994} 437 | m_Pivot: {x: 0.5, y: 1} 438 | --- !u!114 &217686103 439 | MonoBehaviour: 440 | m_ObjectHideFlags: 0 441 | m_CorrespondingSourceObject: {fileID: 0} 442 | m_PrefabInstance: {fileID: 0} 443 | m_PrefabAsset: {fileID: 0} 444 | m_GameObject: {fileID: 217686101} 445 | m_Enabled: 1 446 | m_EditorHideFlags: 0 447 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 448 | m_Name: 449 | m_EditorClassIdentifier: 450 | m_Material: {fileID: 0} 451 | m_Color: {r: 1, g: 1, b: 1, a: 1} 452 | m_RaycastTarget: 1 453 | m_Maskable: 1 454 | m_OnCullStateChanged: 455 | m_PersistentCalls: 456 | m_Calls: [] 457 | m_FontData: 458 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 459 | m_FontSize: 37 460 | m_FontStyle: 0 461 | m_BestFit: 0 462 | m_MinSize: 10 463 | m_MaxSize: 40 464 | m_Alignment: 0 465 | m_AlignByGeometry: 0 466 | m_RichText: 1 467 | m_HorizontalOverflow: 0 468 | m_VerticalOverflow: 0 469 | m_LineSpacing: 1 470 | m_Text: Speaker 471 | --- !u!222 &217686104 472 | CanvasRenderer: 473 | m_ObjectHideFlags: 0 474 | m_CorrespondingSourceObject: {fileID: 0} 475 | m_PrefabInstance: {fileID: 0} 476 | m_PrefabAsset: {fileID: 0} 477 | m_GameObject: {fileID: 217686101} 478 | m_CullTransparentMesh: 0 479 | --- !u!1 &291900678 480 | GameObject: 481 | m_ObjectHideFlags: 0 482 | m_CorrespondingSourceObject: {fileID: 0} 483 | m_PrefabInstance: {fileID: 0} 484 | m_PrefabAsset: {fileID: 0} 485 | serializedVersion: 6 486 | m_Component: 487 | - component: {fileID: 291900679} 488 | - component: {fileID: 291900681} 489 | - component: {fileID: 291900680} 490 | m_Layer: 5 491 | m_Name: Logo 492 | m_TagString: Untagged 493 | m_Icon: {fileID: 0} 494 | m_NavMeshLayer: 0 495 | m_StaticEditorFlags: 0 496 | m_IsActive: 1 497 | --- !u!224 &291900679 498 | RectTransform: 499 | m_ObjectHideFlags: 0 500 | m_CorrespondingSourceObject: {fileID: 0} 501 | m_PrefabInstance: {fileID: 0} 502 | m_PrefabAsset: {fileID: 0} 503 | m_GameObject: {fileID: 291900678} 504 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 505 | m_LocalPosition: {x: 0, y: 0, z: 0} 506 | m_LocalScale: {x: 1, y: 1, z: 1} 507 | m_Children: [] 508 | m_Father: {fileID: 1303495870} 509 | m_RootOrder: 0 510 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 511 | m_AnchorMin: {x: 0.5, y: 1} 512 | m_AnchorMax: {x: 0.5, y: 1} 513 | m_AnchoredPosition: {x: 0.000061035156, y: -49} 514 | m_SizeDelta: {x: 1288.4536, y: 171.87195} 515 | m_Pivot: {x: 0.5, y: 1} 516 | --- !u!114 &291900680 517 | MonoBehaviour: 518 | m_ObjectHideFlags: 0 519 | m_CorrespondingSourceObject: {fileID: 0} 520 | m_PrefabInstance: {fileID: 0} 521 | m_PrefabAsset: {fileID: 0} 522 | m_GameObject: {fileID: 291900678} 523 | m_Enabled: 1 524 | m_EditorHideFlags: 0 525 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 526 | m_Name: 527 | m_EditorClassIdentifier: 528 | m_Material: {fileID: 0} 529 | m_Color: {r: 1, g: 1, b: 1, a: 1} 530 | m_RaycastTarget: 1 531 | m_Maskable: 1 532 | m_OnCullStateChanged: 533 | m_PersistentCalls: 534 | m_Calls: [] 535 | m_Sprite: {fileID: 21300000, guid: 32d0040765e002d419d9464be49c383e, type: 3} 536 | m_Type: 0 537 | m_PreserveAspect: 1 538 | m_FillCenter: 1 539 | m_FillMethod: 4 540 | m_FillAmount: 1 541 | m_FillClockwise: 1 542 | m_FillOrigin: 0 543 | m_UseSpriteMesh: 0 544 | m_PixelsPerUnitMultiplier: 1 545 | --- !u!222 &291900681 546 | CanvasRenderer: 547 | m_ObjectHideFlags: 0 548 | m_CorrespondingSourceObject: {fileID: 0} 549 | m_PrefabInstance: {fileID: 0} 550 | m_PrefabAsset: {fileID: 0} 551 | m_GameObject: {fileID: 291900678} 552 | m_CullTransparentMesh: 0 553 | --- !u!1 &337963670 554 | GameObject: 555 | m_ObjectHideFlags: 0 556 | m_CorrespondingSourceObject: {fileID: 0} 557 | m_PrefabInstance: {fileID: 0} 558 | m_PrefabAsset: {fileID: 0} 559 | serializedVersion: 6 560 | m_Component: 561 | - component: {fileID: 337963671} 562 | - component: {fileID: 337963673} 563 | - component: {fileID: 337963672} 564 | m_Layer: 5 565 | m_Name: TextFromSquiggle 566 | m_TagString: Untagged 567 | m_Icon: {fileID: 0} 568 | m_NavMeshLayer: 0 569 | m_StaticEditorFlags: 0 570 | m_IsActive: 1 571 | --- !u!224 &337963671 572 | RectTransform: 573 | m_ObjectHideFlags: 0 574 | m_CorrespondingSourceObject: {fileID: 0} 575 | m_PrefabInstance: {fileID: 0} 576 | m_PrefabAsset: {fileID: 0} 577 | m_GameObject: {fileID: 337963670} 578 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 579 | m_LocalPosition: {x: 0, y: 0, z: 0} 580 | m_LocalScale: {x: 1, y: 1, z: 1} 581 | m_Children: [] 582 | m_Father: {fileID: 9069188} 583 | m_RootOrder: 3 584 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 585 | m_AnchorMin: {x: 0, y: 1} 586 | m_AnchorMax: {x: 1, y: 1} 587 | m_AnchoredPosition: {x: 0, y: -190} 588 | m_SizeDelta: {x: 0, y: 99.99994} 589 | m_Pivot: {x: 0.5, y: 1} 590 | --- !u!114 &337963672 591 | MonoBehaviour: 592 | m_ObjectHideFlags: 0 593 | m_CorrespondingSourceObject: {fileID: 0} 594 | m_PrefabInstance: {fileID: 0} 595 | m_PrefabAsset: {fileID: 0} 596 | m_GameObject: {fileID: 337963670} 597 | m_Enabled: 1 598 | m_EditorHideFlags: 0 599 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 600 | m_Name: 601 | m_EditorClassIdentifier: 602 | m_Material: {fileID: 0} 603 | m_Color: {r: 1, g: 1, b: 1, a: 1} 604 | m_RaycastTarget: 1 605 | m_Maskable: 1 606 | m_OnCullStateChanged: 607 | m_PersistentCalls: 608 | m_Calls: [] 609 | m_FontData: 610 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 611 | m_FontSize: 24 612 | m_FontStyle: 0 613 | m_BestFit: 0 614 | m_MinSize: 10 615 | m_MaxSize: 40 616 | m_Alignment: 0 617 | m_AlignByGeometry: 0 618 | m_RichText: 1 619 | m_HorizontalOverflow: 0 620 | m_VerticalOverflow: 0 621 | m_LineSpacing: 1 622 | m_Text: Placeholder 623 | --- !u!222 &337963673 624 | CanvasRenderer: 625 | m_ObjectHideFlags: 0 626 | m_CorrespondingSourceObject: {fileID: 0} 627 | m_PrefabInstance: {fileID: 0} 628 | m_PrefabAsset: {fileID: 0} 629 | m_GameObject: {fileID: 337963670} 630 | m_CullTransparentMesh: 0 631 | --- !u!1 &963194225 632 | GameObject: 633 | m_ObjectHideFlags: 0 634 | m_CorrespondingSourceObject: {fileID: 0} 635 | m_PrefabInstance: {fileID: 0} 636 | m_PrefabAsset: {fileID: 0} 637 | serializedVersion: 6 638 | m_Component: 639 | - component: {fileID: 963194228} 640 | - component: {fileID: 963194227} 641 | - component: {fileID: 963194226} 642 | m_Layer: 0 643 | m_Name: Main Camera 644 | m_TagString: MainCamera 645 | m_Icon: {fileID: 0} 646 | m_NavMeshLayer: 0 647 | m_StaticEditorFlags: 0 648 | m_IsActive: 1 649 | --- !u!81 &963194226 650 | AudioListener: 651 | m_ObjectHideFlags: 0 652 | m_CorrespondingSourceObject: {fileID: 0} 653 | m_PrefabInstance: {fileID: 0} 654 | m_PrefabAsset: {fileID: 0} 655 | m_GameObject: {fileID: 963194225} 656 | m_Enabled: 1 657 | --- !u!20 &963194227 658 | Camera: 659 | m_ObjectHideFlags: 0 660 | m_CorrespondingSourceObject: {fileID: 0} 661 | m_PrefabInstance: {fileID: 0} 662 | m_PrefabAsset: {fileID: 0} 663 | m_GameObject: {fileID: 963194225} 664 | m_Enabled: 1 665 | serializedVersion: 2 666 | m_ClearFlags: 1 667 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 668 | m_projectionMatrixMode: 1 669 | m_GateFitMode: 2 670 | m_FOVAxisMode: 0 671 | m_SensorSize: {x: 36, y: 24} 672 | m_LensShift: {x: 0, y: 0} 673 | m_FocalLength: 50 674 | m_NormalizedViewPortRect: 675 | serializedVersion: 2 676 | x: 0 677 | y: 0 678 | width: 1 679 | height: 1 680 | near clip plane: 0.3 681 | far clip plane: 1000 682 | field of view: 60 683 | orthographic: 0 684 | orthographic size: 5 685 | m_Depth: -1 686 | m_CullingMask: 687 | serializedVersion: 2 688 | m_Bits: 4294967295 689 | m_RenderingPath: -1 690 | m_TargetTexture: {fileID: 0} 691 | m_TargetDisplay: 0 692 | m_TargetEye: 3 693 | m_HDR: 1 694 | m_AllowMSAA: 1 695 | m_AllowDynamicResolution: 0 696 | m_ForceIntoRT: 0 697 | m_OcclusionCulling: 1 698 | m_StereoConvergence: 10 699 | m_StereoSeparation: 0.022 700 | --- !u!4 &963194228 701 | Transform: 702 | m_ObjectHideFlags: 0 703 | m_CorrespondingSourceObject: {fileID: 0} 704 | m_PrefabInstance: {fileID: 0} 705 | m_PrefabAsset: {fileID: 0} 706 | m_GameObject: {fileID: 963194225} 707 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 708 | m_LocalPosition: {x: 0, y: 1, z: -10} 709 | m_LocalScale: {x: 1, y: 1, z: 1} 710 | m_Children: [] 711 | m_Father: {fileID: 0} 712 | m_RootOrder: 0 713 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 714 | --- !u!1 &1222348850 715 | GameObject: 716 | m_ObjectHideFlags: 0 717 | m_CorrespondingSourceObject: {fileID: 0} 718 | m_PrefabInstance: {fileID: 0} 719 | m_PrefabAsset: {fileID: 0} 720 | serializedVersion: 6 721 | m_Component: 722 | - component: {fileID: 1222348851} 723 | - component: {fileID: 1222348853} 724 | - component: {fileID: 1222348852} 725 | m_Layer: 5 726 | m_Name: SampleDescription 727 | m_TagString: Untagged 728 | m_Icon: {fileID: 0} 729 | m_NavMeshLayer: 0 730 | m_StaticEditorFlags: 0 731 | m_IsActive: 1 732 | --- !u!224 &1222348851 733 | RectTransform: 734 | m_ObjectHideFlags: 0 735 | m_CorrespondingSourceObject: {fileID: 0} 736 | m_PrefabInstance: {fileID: 0} 737 | m_PrefabAsset: {fileID: 0} 738 | m_GameObject: {fileID: 1222348850} 739 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 740 | m_LocalPosition: {x: 0, y: 0, z: 0} 741 | m_LocalScale: {x: 1, y: 1, z: 1} 742 | m_Children: [] 743 | m_Father: {fileID: 9069188} 744 | m_RootOrder: 1 745 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 746 | m_AnchorMin: {x: 0, y: 1} 747 | m_AnchorMax: {x: 1, y: 1} 748 | m_AnchoredPosition: {x: 0, y: 0} 749 | m_SizeDelta: {x: 0, y: 99.99994} 750 | m_Pivot: {x: 0.5, y: 1} 751 | --- !u!114 &1222348852 752 | MonoBehaviour: 753 | m_ObjectHideFlags: 0 754 | m_CorrespondingSourceObject: {fileID: 0} 755 | m_PrefabInstance: {fileID: 0} 756 | m_PrefabAsset: {fileID: 0} 757 | m_GameObject: {fileID: 1222348850} 758 | m_Enabled: 1 759 | m_EditorHideFlags: 0 760 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 761 | m_Name: 762 | m_EditorClassIdentifier: 763 | m_Material: {fileID: 0} 764 | m_Color: {r: 1, g: 1, b: 1, a: 1} 765 | m_RaycastTarget: 1 766 | m_Maskable: 1 767 | m_OnCullStateChanged: 768 | m_PersistentCalls: 769 | m_Calls: [] 770 | m_FontData: 771 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 772 | m_FontSize: 24 773 | m_FontStyle: 0 774 | m_BestFit: 0 775 | m_MinSize: 10 776 | m_MaxSize: 40 777 | m_Alignment: 0 778 | m_AlignByGeometry: 0 779 | m_RichText: 1 780 | m_HorizontalOverflow: 0 781 | m_VerticalOverflow: 0 782 | m_LineSpacing: 1 783 | m_Text: A text file in StreamingAssets containing Squiggle text is called in the 784 | SquiggleStreamingAssetsSample GameObject. When you click run, Squiggle will read 785 | from that file and show you text below. 786 | --- !u!222 &1222348853 787 | CanvasRenderer: 788 | m_ObjectHideFlags: 0 789 | m_CorrespondingSourceObject: {fileID: 0} 790 | m_PrefabInstance: {fileID: 0} 791 | m_PrefabAsset: {fileID: 0} 792 | m_GameObject: {fileID: 1222348850} 793 | m_CullTransparentMesh: 0 794 | --- !u!1 &1284801021 795 | GameObject: 796 | m_ObjectHideFlags: 0 797 | m_CorrespondingSourceObject: {fileID: 0} 798 | m_PrefabInstance: {fileID: 0} 799 | m_PrefabAsset: {fileID: 0} 800 | serializedVersion: 6 801 | m_Component: 802 | - component: {fileID: 1284801022} 803 | - component: {fileID: 1284801024} 804 | - component: {fileID: 1284801023} 805 | m_Layer: 5 806 | m_Name: SampleTitle 807 | m_TagString: Untagged 808 | m_Icon: {fileID: 0} 809 | m_NavMeshLayer: 0 810 | m_StaticEditorFlags: 0 811 | m_IsActive: 1 812 | --- !u!224 &1284801022 813 | RectTransform: 814 | m_ObjectHideFlags: 0 815 | m_CorrespondingSourceObject: {fileID: 0} 816 | m_PrefabInstance: {fileID: 0} 817 | m_PrefabAsset: {fileID: 0} 818 | m_GameObject: {fileID: 1284801021} 819 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 820 | m_LocalPosition: {x: 0, y: 0, z: 0} 821 | m_LocalScale: {x: 1, y: 1, z: 1} 822 | m_Children: [] 823 | m_Father: {fileID: 9069188} 824 | m_RootOrder: 0 825 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 826 | m_AnchorMin: {x: 0.5, y: 1} 827 | m_AnchorMax: {x: 0.5, y: 1} 828 | m_AnchoredPosition: {x: 0, y: 59} 829 | m_SizeDelta: {x: 353.2749, y: 61.08618} 830 | m_Pivot: {x: 0.5, y: 1} 831 | --- !u!114 &1284801023 832 | MonoBehaviour: 833 | m_ObjectHideFlags: 0 834 | m_CorrespondingSourceObject: {fileID: 0} 835 | m_PrefabInstance: {fileID: 0} 836 | m_PrefabAsset: {fileID: 0} 837 | m_GameObject: {fileID: 1284801021} 838 | m_Enabled: 1 839 | m_EditorHideFlags: 0 840 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 841 | m_Name: 842 | m_EditorClassIdentifier: 843 | m_Material: {fileID: 0} 844 | m_Color: {r: 0.9245283, g: 0.90613705, b: 0.15263437, a: 1} 845 | m_RaycastTarget: 1 846 | m_Maskable: 1 847 | m_OnCullStateChanged: 848 | m_PersistentCalls: 849 | m_Calls: [] 850 | m_FontData: 851 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 852 | m_FontSize: 41 853 | m_FontStyle: 0 854 | m_BestFit: 0 855 | m_MinSize: 10 856 | m_MaxSize: 50 857 | m_Alignment: 4 858 | m_AlignByGeometry: 0 859 | m_RichText: 1 860 | m_HorizontalOverflow: 0 861 | m_VerticalOverflow: 0 862 | m_LineSpacing: 1 863 | m_Text: StreamingAssets 864 | --- !u!222 &1284801024 865 | CanvasRenderer: 866 | m_ObjectHideFlags: 0 867 | m_CorrespondingSourceObject: {fileID: 0} 868 | m_PrefabInstance: {fileID: 0} 869 | m_PrefabAsset: {fileID: 0} 870 | m_GameObject: {fileID: 1284801021} 871 | m_CullTransparentMesh: 0 872 | --- !u!1 &1303495869 873 | GameObject: 874 | m_ObjectHideFlags: 0 875 | m_CorrespondingSourceObject: {fileID: 0} 876 | m_PrefabInstance: {fileID: 0} 877 | m_PrefabAsset: {fileID: 0} 878 | serializedVersion: 6 879 | m_Component: 880 | - component: {fileID: 1303495870} 881 | m_Layer: 5 882 | m_Name: Decor 883 | m_TagString: Untagged 884 | m_Icon: {fileID: 0} 885 | m_NavMeshLayer: 0 886 | m_StaticEditorFlags: 0 887 | m_IsActive: 1 888 | --- !u!224 &1303495870 889 | RectTransform: 890 | m_ObjectHideFlags: 0 891 | m_CorrespondingSourceObject: {fileID: 0} 892 | m_PrefabInstance: {fileID: 0} 893 | m_PrefabAsset: {fileID: 0} 894 | m_GameObject: {fileID: 1303495869} 895 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 896 | m_LocalPosition: {x: 0, y: 0, z: 0} 897 | m_LocalScale: {x: 1, y: 1, z: 1} 898 | m_Children: 899 | - {fileID: 291900679} 900 | m_Father: {fileID: 124348625} 901 | m_RootOrder: 1 902 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 903 | m_AnchorMin: {x: 0, y: 0} 904 | m_AnchorMax: {x: 1, y: 1} 905 | m_AnchoredPosition: {x: 0, y: 0} 906 | m_SizeDelta: {x: 0, y: 0} 907 | m_Pivot: {x: 0.5, y: 0.5} 908 | --- !u!1 &1501698439 909 | GameObject: 910 | m_ObjectHideFlags: 0 911 | m_CorrespondingSourceObject: {fileID: 0} 912 | m_PrefabInstance: {fileID: 0} 913 | m_PrefabAsset: {fileID: 0} 914 | serializedVersion: 6 915 | m_Component: 916 | - component: {fileID: 1501698442} 917 | - component: {fileID: 1501698441} 918 | - component: {fileID: 1501698440} 919 | m_Layer: 0 920 | m_Name: EventSystem 921 | m_TagString: Untagged 922 | m_Icon: {fileID: 0} 923 | m_NavMeshLayer: 0 924 | m_StaticEditorFlags: 0 925 | m_IsActive: 1 926 | --- !u!114 &1501698440 927 | MonoBehaviour: 928 | m_ObjectHideFlags: 0 929 | m_CorrespondingSourceObject: {fileID: 0} 930 | m_PrefabInstance: {fileID: 0} 931 | m_PrefabAsset: {fileID: 0} 932 | m_GameObject: {fileID: 1501698439} 933 | m_Enabled: 1 934 | m_EditorHideFlags: 0 935 | m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} 936 | m_Name: 937 | m_EditorClassIdentifier: 938 | m_HorizontalAxis: Horizontal 939 | m_VerticalAxis: Vertical 940 | m_SubmitButton: Submit 941 | m_CancelButton: Cancel 942 | m_InputActionsPerSecond: 10 943 | m_RepeatDelay: 0.5 944 | m_ForceModuleActive: 0 945 | --- !u!114 &1501698441 946 | MonoBehaviour: 947 | m_ObjectHideFlags: 0 948 | m_CorrespondingSourceObject: {fileID: 0} 949 | m_PrefabInstance: {fileID: 0} 950 | m_PrefabAsset: {fileID: 0} 951 | m_GameObject: {fileID: 1501698439} 952 | m_Enabled: 1 953 | m_EditorHideFlags: 0 954 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} 955 | m_Name: 956 | m_EditorClassIdentifier: 957 | m_FirstSelected: {fileID: 0} 958 | m_sendNavigationEvents: 1 959 | m_DragThreshold: 10 960 | --- !u!4 &1501698442 961 | Transform: 962 | m_ObjectHideFlags: 0 963 | m_CorrespondingSourceObject: {fileID: 0} 964 | m_PrefabInstance: {fileID: 0} 965 | m_PrefabAsset: {fileID: 0} 966 | m_GameObject: {fileID: 1501698439} 967 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 968 | m_LocalPosition: {x: 0, y: 0, z: 0} 969 | m_LocalScale: {x: 1, y: 1, z: 1} 970 | m_Children: [] 971 | m_Father: {fileID: 0} 972 | m_RootOrder: 3 973 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 974 | --- !u!1 &1593106311 975 | GameObject: 976 | m_ObjectHideFlags: 0 977 | m_CorrespondingSourceObject: {fileID: 0} 978 | m_PrefabInstance: {fileID: 0} 979 | m_PrefabAsset: {fileID: 0} 980 | serializedVersion: 6 981 | m_Component: 982 | - component: {fileID: 1593106312} 983 | - component: {fileID: 1593106314} 984 | - component: {fileID: 1593106313} 985 | m_Layer: 5 986 | m_Name: Text 987 | m_TagString: Untagged 988 | m_Icon: {fileID: 0} 989 | m_NavMeshLayer: 0 990 | m_StaticEditorFlags: 0 991 | m_IsActive: 1 992 | --- !u!224 &1593106312 993 | RectTransform: 994 | m_ObjectHideFlags: 0 995 | m_CorrespondingSourceObject: {fileID: 0} 996 | m_PrefabInstance: {fileID: 0} 997 | m_PrefabAsset: {fileID: 0} 998 | m_GameObject: {fileID: 1593106311} 999 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 1000 | m_LocalPosition: {x: 0, y: 0, z: 0} 1001 | m_LocalScale: {x: 1, y: 1, z: 1} 1002 | m_Children: [] 1003 | m_Father: {fileID: 2054484117} 1004 | m_RootOrder: 0 1005 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1006 | m_AnchorMin: {x: 0, y: 0} 1007 | m_AnchorMax: {x: 1, y: 1} 1008 | m_AnchoredPosition: {x: 0, y: 0} 1009 | m_SizeDelta: {x: 0, y: 0} 1010 | m_Pivot: {x: 0.5, y: 0.5} 1011 | --- !u!114 &1593106313 1012 | MonoBehaviour: 1013 | m_ObjectHideFlags: 0 1014 | m_CorrespondingSourceObject: {fileID: 0} 1015 | m_PrefabInstance: {fileID: 0} 1016 | m_PrefabAsset: {fileID: 0} 1017 | m_GameObject: {fileID: 1593106311} 1018 | m_Enabled: 1 1019 | m_EditorHideFlags: 0 1020 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 1021 | m_Name: 1022 | m_EditorClassIdentifier: 1023 | m_Material: {fileID: 0} 1024 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 1025 | m_RaycastTarget: 1 1026 | m_Maskable: 1 1027 | m_OnCullStateChanged: 1028 | m_PersistentCalls: 1029 | m_Calls: [] 1030 | m_FontData: 1031 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 1032 | m_FontSize: 35 1033 | m_FontStyle: 0 1034 | m_BestFit: 0 1035 | m_MinSize: 10 1036 | m_MaxSize: 40 1037 | m_Alignment: 4 1038 | m_AlignByGeometry: 0 1039 | m_RichText: 1 1040 | m_HorizontalOverflow: 0 1041 | m_VerticalOverflow: 0 1042 | m_LineSpacing: 1 1043 | m_Text: Run 1044 | --- !u!222 &1593106314 1045 | CanvasRenderer: 1046 | m_ObjectHideFlags: 0 1047 | m_CorrespondingSourceObject: {fileID: 0} 1048 | m_PrefabInstance: {fileID: 0} 1049 | m_PrefabAsset: {fileID: 0} 1050 | m_GameObject: {fileID: 1593106311} 1051 | m_CullTransparentMesh: 0 1052 | --- !u!1 &2054484116 1053 | GameObject: 1054 | m_ObjectHideFlags: 0 1055 | m_CorrespondingSourceObject: {fileID: 0} 1056 | m_PrefabInstance: {fileID: 0} 1057 | m_PrefabAsset: {fileID: 0} 1058 | serializedVersion: 6 1059 | m_Component: 1060 | - component: {fileID: 2054484117} 1061 | - component: {fileID: 2054484120} 1062 | - component: {fileID: 2054484119} 1063 | - component: {fileID: 2054484118} 1064 | m_Layer: 5 1065 | m_Name: RunSquiggleCodeButton 1066 | m_TagString: Untagged 1067 | m_Icon: {fileID: 0} 1068 | m_NavMeshLayer: 0 1069 | m_StaticEditorFlags: 0 1070 | m_IsActive: 1 1071 | --- !u!224 &2054484117 1072 | RectTransform: 1073 | m_ObjectHideFlags: 0 1074 | m_CorrespondingSourceObject: {fileID: 0} 1075 | m_PrefabInstance: {fileID: 0} 1076 | m_PrefabAsset: {fileID: 0} 1077 | m_GameObject: {fileID: 2054484116} 1078 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1079 | m_LocalPosition: {x: 0, y: 0, z: 0} 1080 | m_LocalScale: {x: 1, y: 1, z: 1} 1081 | m_Children: 1082 | - {fileID: 1593106312} 1083 | m_Father: {fileID: 9069188} 1084 | m_RootOrder: 4 1085 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1086 | m_AnchorMin: {x: 0.5, y: 0} 1087 | m_AnchorMax: {x: 0.5, y: 0} 1088 | m_AnchoredPosition: {x: 0, y: 0} 1089 | m_SizeDelta: {x: 400, y: 100} 1090 | m_Pivot: {x: 0.5, y: 0} 1091 | --- !u!114 &2054484118 1092 | MonoBehaviour: 1093 | m_ObjectHideFlags: 0 1094 | m_CorrespondingSourceObject: {fileID: 0} 1095 | m_PrefabInstance: {fileID: 0} 1096 | m_PrefabAsset: {fileID: 0} 1097 | m_GameObject: {fileID: 2054484116} 1098 | m_Enabled: 1 1099 | m_EditorHideFlags: 0 1100 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} 1101 | m_Name: 1102 | m_EditorClassIdentifier: 1103 | m_Navigation: 1104 | m_Mode: 3 1105 | m_SelectOnUp: {fileID: 0} 1106 | m_SelectOnDown: {fileID: 0} 1107 | m_SelectOnLeft: {fileID: 0} 1108 | m_SelectOnRight: {fileID: 0} 1109 | m_Transition: 1 1110 | m_Colors: 1111 | m_NormalColor: {r: 0.8207547, g: 0.8207547, b: 0.8207547, a: 1} 1112 | m_HighlightedColor: {r: 0.2121433, g: 0.735849, b: 0.13536847, a: 1} 1113 | m_PressedColor: {r: 0.8679245, g: 0.84548014, b: 0.061409745, a: 1} 1114 | m_SelectedColor: {r: 0.21176471, g: 0.7372549, b: 0.13725491, a: 1} 1115 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 1116 | m_ColorMultiplier: 1 1117 | m_FadeDuration: 0.1 1118 | m_SpriteState: 1119 | m_HighlightedSprite: {fileID: 0} 1120 | m_PressedSprite: {fileID: 0} 1121 | m_SelectedSprite: {fileID: 0} 1122 | m_DisabledSprite: {fileID: 0} 1123 | m_AnimationTriggers: 1124 | m_NormalTrigger: Normal 1125 | m_HighlightedTrigger: Highlighted 1126 | m_PressedTrigger: Pressed 1127 | m_SelectedTrigger: Selected 1128 | m_DisabledTrigger: Disabled 1129 | m_Interactable: 1 1130 | m_TargetGraphic: {fileID: 2054484119} 1131 | m_OnClick: 1132 | m_PersistentCalls: 1133 | m_Calls: [] 1134 | --- !u!114 &2054484119 1135 | MonoBehaviour: 1136 | m_ObjectHideFlags: 0 1137 | m_CorrespondingSourceObject: {fileID: 0} 1138 | m_PrefabInstance: {fileID: 0} 1139 | m_PrefabAsset: {fileID: 0} 1140 | m_GameObject: {fileID: 2054484116} 1141 | m_Enabled: 1 1142 | m_EditorHideFlags: 0 1143 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 1144 | m_Name: 1145 | m_EditorClassIdentifier: 1146 | m_Material: {fileID: 0} 1147 | m_Color: {r: 1, g: 1, b: 1, a: 1} 1148 | m_RaycastTarget: 1 1149 | m_Maskable: 1 1150 | m_OnCullStateChanged: 1151 | m_PersistentCalls: 1152 | m_Calls: [] 1153 | m_Sprite: {fileID: 0} 1154 | m_Type: 1 1155 | m_PreserveAspect: 0 1156 | m_FillCenter: 1 1157 | m_FillMethod: 4 1158 | m_FillAmount: 1 1159 | m_FillClockwise: 1 1160 | m_FillOrigin: 0 1161 | m_UseSpriteMesh: 0 1162 | m_PixelsPerUnitMultiplier: 1 1163 | --- !u!222 &2054484120 1164 | CanvasRenderer: 1165 | m_ObjectHideFlags: 0 1166 | m_CorrespondingSourceObject: {fileID: 0} 1167 | m_PrefabInstance: {fileID: 0} 1168 | m_PrefabAsset: {fileID: 0} 1169 | m_GameObject: {fileID: 2054484116} 1170 | m_CullTransparentMesh: 0 1171 | -------------------------------------------------------------------------------- /Squiggle.Unity/Assets/Squiggle/Sample Scenes/3 - ScriptableObject/ScriptableObjectSample.unity: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!29 &1 4 | OcclusionCullingSettings: 5 | m_ObjectHideFlags: 0 6 | serializedVersion: 2 7 | m_OcclusionBakeSettings: 8 | smallestOccluder: 5 9 | smallestHole: 0.25 10 | backfaceThreshold: 100 11 | m_SceneGUID: 00000000000000000000000000000000 12 | m_OcclusionCullingData: {fileID: 0} 13 | --- !u!104 &2 14 | RenderSettings: 15 | m_ObjectHideFlags: 0 16 | serializedVersion: 9 17 | m_Fog: 0 18 | m_FogColor: {r: 0.5, g: 0.5, b: 0.5, a: 1} 19 | m_FogMode: 3 20 | m_FogDensity: 0.01 21 | m_LinearFogStart: 0 22 | m_LinearFogEnd: 300 23 | m_AmbientSkyColor: {r: 0.212, g: 0.227, b: 0.259, a: 1} 24 | m_AmbientEquatorColor: {r: 0.114, g: 0.125, b: 0.133, a: 1} 25 | m_AmbientGroundColor: {r: 0.047, g: 0.043, b: 0.035, a: 1} 26 | m_AmbientIntensity: 1 27 | m_AmbientMode: 0 28 | m_SubtractiveShadowColor: {r: 0.42, g: 0.478, b: 0.627, a: 1} 29 | m_SkyboxMaterial: {fileID: 10304, guid: 0000000000000000f000000000000000, type: 0} 30 | m_HaloStrength: 0.5 31 | m_FlareStrength: 1 32 | m_FlareFadeSpeed: 3 33 | m_HaloTexture: {fileID: 0} 34 | m_SpotCookie: {fileID: 10001, guid: 0000000000000000e000000000000000, type: 0} 35 | m_DefaultReflectionMode: 0 36 | m_DefaultReflectionResolution: 128 37 | m_ReflectionBounces: 1 38 | m_ReflectionIntensity: 1 39 | m_CustomReflection: {fileID: 0} 40 | m_Sun: {fileID: 0} 41 | m_IndirectSpecularColor: {r: 0, g: 0, b: 0, a: 1} 42 | m_UseRadianceAmbientProbe: 0 43 | --- !u!157 &3 44 | LightmapSettings: 45 | m_ObjectHideFlags: 0 46 | serializedVersion: 11 47 | m_GIWorkflowMode: 1 48 | m_GISettings: 49 | serializedVersion: 2 50 | m_BounceScale: 1 51 | m_IndirectOutputScale: 1 52 | m_AlbedoBoost: 1 53 | m_EnvironmentLightingMode: 0 54 | m_EnableBakedLightmaps: 1 55 | m_EnableRealtimeLightmaps: 0 56 | m_LightmapEditorSettings: 57 | serializedVersion: 12 58 | m_Resolution: 2 59 | m_BakeResolution: 40 60 | m_AtlasSize: 1024 61 | m_AO: 0 62 | m_AOMaxDistance: 1 63 | m_CompAOExponent: 1 64 | m_CompAOExponentDirect: 0 65 | m_ExtractAmbientOcclusion: 0 66 | m_Padding: 2 67 | m_LightmapParameters: {fileID: 0} 68 | m_LightmapsBakeMode: 1 69 | m_TextureCompression: 1 70 | m_FinalGather: 0 71 | m_FinalGatherFiltering: 1 72 | m_FinalGatherRayCount: 256 73 | m_ReflectionCompression: 2 74 | m_MixedBakeMode: 2 75 | m_BakeBackend: 1 76 | m_PVRSampling: 1 77 | m_PVRDirectSampleCount: 32 78 | m_PVRSampleCount: 500 79 | m_PVRBounces: 2 80 | m_PVREnvironmentSampleCount: 500 81 | m_PVREnvironmentReferencePointCount: 2048 82 | m_PVRFilteringMode: 2 83 | m_PVRDenoiserTypeDirect: 0 84 | m_PVRDenoiserTypeIndirect: 0 85 | m_PVRDenoiserTypeAO: 0 86 | m_PVRFilterTypeDirect: 0 87 | m_PVRFilterTypeIndirect: 0 88 | m_PVRFilterTypeAO: 0 89 | m_PVREnvironmentMIS: 0 90 | m_PVRCulling: 1 91 | m_PVRFilteringGaussRadiusDirect: 1 92 | m_PVRFilteringGaussRadiusIndirect: 5 93 | m_PVRFilteringGaussRadiusAO: 2 94 | m_PVRFilteringAtrousPositionSigmaDirect: 0.5 95 | m_PVRFilteringAtrousPositionSigmaIndirect: 2 96 | m_PVRFilteringAtrousPositionSigmaAO: 1 97 | m_ExportTrainingData: 0 98 | m_TrainingDataDestination: TrainingData 99 | m_LightProbeSampleCountMultiplier: 4 100 | m_LightingDataAsset: {fileID: 0} 101 | m_UseShadowmask: 1 102 | --- !u!196 &4 103 | NavMeshSettings: 104 | serializedVersion: 2 105 | m_ObjectHideFlags: 0 106 | m_BuildSettings: 107 | serializedVersion: 2 108 | agentTypeID: 0 109 | agentRadius: 0.5 110 | agentHeight: 2 111 | agentSlope: 45 112 | agentClimb: 0.4 113 | ledgeDropHeight: 0 114 | maxJumpAcrossDistance: 0 115 | minRegionArea: 2 116 | manualCellSize: 0 117 | cellSize: 0.16666667 118 | manualTileSize: 0 119 | tileSize: 256 120 | accuratePlacement: 0 121 | debug: 122 | m_Flags: 0 123 | m_NavMeshData: {fileID: 0} 124 | --- !u!1 &5173931 125 | GameObject: 126 | m_ObjectHideFlags: 0 127 | m_CorrespondingSourceObject: {fileID: 0} 128 | m_PrefabInstance: {fileID: 0} 129 | m_PrefabAsset: {fileID: 0} 130 | serializedVersion: 6 131 | m_Component: 132 | - component: {fileID: 5173932} 133 | - component: {fileID: 5173933} 134 | m_Layer: 0 135 | m_Name: SquiggleScriptableObjectSample 136 | m_TagString: Untagged 137 | m_Icon: {fileID: 0} 138 | m_NavMeshLayer: 0 139 | m_StaticEditorFlags: 0 140 | m_IsActive: 1 141 | --- !u!4 &5173932 142 | Transform: 143 | m_ObjectHideFlags: 0 144 | m_CorrespondingSourceObject: {fileID: 0} 145 | m_PrefabInstance: {fileID: 0} 146 | m_PrefabAsset: {fileID: 0} 147 | m_GameObject: {fileID: 5173931} 148 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 149 | m_LocalPosition: {x: 1031.7043, y: 674.87836, z: 0} 150 | m_LocalScale: {x: 1, y: 1, z: 1} 151 | m_Children: [] 152 | m_Father: {fileID: 0} 153 | m_RootOrder: 1 154 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 155 | --- !u!114 &5173933 156 | MonoBehaviour: 157 | m_ObjectHideFlags: 0 158 | m_CorrespondingSourceObject: {fileID: 0} 159 | m_PrefabInstance: {fileID: 0} 160 | m_PrefabAsset: {fileID: 0} 161 | m_GameObject: {fileID: 5173931} 162 | m_Enabled: 1 163 | m_EditorHideFlags: 0 164 | m_Script: {fileID: 11500000, guid: 17f17a0231ec0134fbb5589882ed8b9a, type: 3} 165 | m_Name: 166 | m_EditorClassIdentifier: 167 | SpeakerName: {fileID: 217686103} 168 | SpeakerText: {fileID: 337963672} 169 | RunSquiggle: {fileID: 2054484118} 170 | ScriptableObject: {fileID: 11400000, guid: b33e5eebb86798e4e9b9e1be85cf50de, type: 2} 171 | --- !u!1 &9069187 172 | GameObject: 173 | m_ObjectHideFlags: 0 174 | m_CorrespondingSourceObject: {fileID: 0} 175 | m_PrefabInstance: {fileID: 0} 176 | m_PrefabAsset: {fileID: 0} 177 | serializedVersion: 6 178 | m_Component: 179 | - component: {fileID: 9069188} 180 | m_Layer: 5 181 | m_Name: SampleContents 182 | m_TagString: Untagged 183 | m_Icon: {fileID: 0} 184 | m_NavMeshLayer: 0 185 | m_StaticEditorFlags: 0 186 | m_IsActive: 1 187 | --- !u!224 &9069188 188 | RectTransform: 189 | m_ObjectHideFlags: 0 190 | m_CorrespondingSourceObject: {fileID: 0} 191 | m_PrefabInstance: {fileID: 0} 192 | m_PrefabAsset: {fileID: 0} 193 | m_GameObject: {fileID: 9069187} 194 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 195 | m_LocalPosition: {x: 0, y: 0, z: 0} 196 | m_LocalScale: {x: 1, y: 1, z: 1} 197 | m_Children: 198 | - {fileID: 2084169941} 199 | - {fileID: 1222348851} 200 | - {fileID: 217686102} 201 | - {fileID: 337963671} 202 | - {fileID: 2054484117} 203 | m_Father: {fileID: 124348625} 204 | m_RootOrder: 2 205 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 206 | m_AnchorMin: {x: 0.5, y: 0.5} 207 | m_AnchorMax: {x: 0.5, y: 0.5} 208 | m_AnchoredPosition: {x: 0, y: 0} 209 | m_SizeDelta: {x: 800, y: 600} 210 | m_Pivot: {x: 0.5, y: 0.5} 211 | --- !u!1 &124348621 212 | GameObject: 213 | m_ObjectHideFlags: 0 214 | m_CorrespondingSourceObject: {fileID: 0} 215 | m_PrefabInstance: {fileID: 0} 216 | m_PrefabAsset: {fileID: 0} 217 | serializedVersion: 6 218 | m_Component: 219 | - component: {fileID: 124348625} 220 | - component: {fileID: 124348624} 221 | - component: {fileID: 124348623} 222 | - component: {fileID: 124348622} 223 | m_Layer: 5 224 | m_Name: Canvas 225 | m_TagString: Untagged 226 | m_Icon: {fileID: 0} 227 | m_NavMeshLayer: 0 228 | m_StaticEditorFlags: 0 229 | m_IsActive: 1 230 | --- !u!114 &124348622 231 | MonoBehaviour: 232 | m_ObjectHideFlags: 0 233 | m_CorrespondingSourceObject: {fileID: 0} 234 | m_PrefabInstance: {fileID: 0} 235 | m_PrefabAsset: {fileID: 0} 236 | m_GameObject: {fileID: 124348621} 237 | m_Enabled: 1 238 | m_EditorHideFlags: 0 239 | m_Script: {fileID: 11500000, guid: dc42784cf147c0c48a680349fa168899, type: 3} 240 | m_Name: 241 | m_EditorClassIdentifier: 242 | m_IgnoreReversedGraphics: 1 243 | m_BlockingObjects: 0 244 | m_BlockingMask: 245 | serializedVersion: 2 246 | m_Bits: 4294967295 247 | --- !u!114 &124348623 248 | MonoBehaviour: 249 | m_ObjectHideFlags: 0 250 | m_CorrespondingSourceObject: {fileID: 0} 251 | m_PrefabInstance: {fileID: 0} 252 | m_PrefabAsset: {fileID: 0} 253 | m_GameObject: {fileID: 124348621} 254 | m_Enabled: 1 255 | m_EditorHideFlags: 0 256 | m_Script: {fileID: 11500000, guid: 0cd44c1031e13a943bb63640046fad76, type: 3} 257 | m_Name: 258 | m_EditorClassIdentifier: 259 | m_UiScaleMode: 0 260 | m_ReferencePixelsPerUnit: 100 261 | m_ScaleFactor: 1 262 | m_ReferenceResolution: {x: 800, y: 600} 263 | m_ScreenMatchMode: 0 264 | m_MatchWidthOrHeight: 0 265 | m_PhysicalUnit: 3 266 | m_FallbackScreenDPI: 96 267 | m_DefaultSpriteDPI: 96 268 | m_DynamicPixelsPerUnit: 1 269 | --- !u!223 &124348624 270 | Canvas: 271 | m_ObjectHideFlags: 0 272 | m_CorrespondingSourceObject: {fileID: 0} 273 | m_PrefabInstance: {fileID: 0} 274 | m_PrefabAsset: {fileID: 0} 275 | m_GameObject: {fileID: 124348621} 276 | m_Enabled: 1 277 | serializedVersion: 3 278 | m_RenderMode: 0 279 | m_Camera: {fileID: 0} 280 | m_PlaneDistance: 100 281 | m_PixelPerfect: 0 282 | m_ReceivesEvents: 1 283 | m_OverrideSorting: 0 284 | m_OverridePixelPerfect: 0 285 | m_SortingBucketNormalizedSize: 0 286 | m_AdditionalShaderChannelsFlag: 0 287 | m_SortingLayerID: 0 288 | m_SortingOrder: 0 289 | m_TargetDisplay: 0 290 | --- !u!224 &124348625 291 | RectTransform: 292 | m_ObjectHideFlags: 0 293 | m_CorrespondingSourceObject: {fileID: 0} 294 | m_PrefabInstance: {fileID: 0} 295 | m_PrefabAsset: {fileID: 0} 296 | m_GameObject: {fileID: 124348621} 297 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 298 | m_LocalPosition: {x: 0, y: 0, z: 0} 299 | m_LocalScale: {x: 0, y: 0, z: 0} 300 | m_Children: 301 | - {fileID: 156993267} 302 | - {fileID: 1303495870} 303 | - {fileID: 9069188} 304 | m_Father: {fileID: 0} 305 | m_RootOrder: 2 306 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 307 | m_AnchorMin: {x: 0, y: 0} 308 | m_AnchorMax: {x: 0, y: 0} 309 | m_AnchoredPosition: {x: 0, y: 0} 310 | m_SizeDelta: {x: 0, y: 0} 311 | m_Pivot: {x: 0, y: 0} 312 | --- !u!1 &156993266 313 | GameObject: 314 | m_ObjectHideFlags: 0 315 | m_CorrespondingSourceObject: {fileID: 0} 316 | m_PrefabInstance: {fileID: 0} 317 | m_PrefabAsset: {fileID: 0} 318 | serializedVersion: 6 319 | m_Component: 320 | - component: {fileID: 156993267} 321 | - component: {fileID: 156993270} 322 | - component: {fileID: 156993269} 323 | - component: {fileID: 156993268} 324 | m_Layer: 5 325 | m_Name: BG 326 | m_TagString: Untagged 327 | m_Icon: {fileID: 0} 328 | m_NavMeshLayer: 0 329 | m_StaticEditorFlags: 0 330 | m_IsActive: 1 331 | --- !u!224 &156993267 332 | RectTransform: 333 | m_ObjectHideFlags: 0 334 | m_CorrespondingSourceObject: {fileID: 0} 335 | m_PrefabInstance: {fileID: 0} 336 | m_PrefabAsset: {fileID: 0} 337 | m_GameObject: {fileID: 156993266} 338 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 339 | m_LocalPosition: {x: 0, y: 0, z: 0} 340 | m_LocalScale: {x: 1, y: 1, z: 1} 341 | m_Children: [] 342 | m_Father: {fileID: 124348625} 343 | m_RootOrder: 0 344 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 345 | m_AnchorMin: {x: 0, y: 0} 346 | m_AnchorMax: {x: 1, y: 1} 347 | m_AnchoredPosition: {x: 0, y: 0} 348 | m_SizeDelta: {x: -30, y: -30} 349 | m_Pivot: {x: 0.5, y: 0.5} 350 | --- !u!114 &156993268 351 | MonoBehaviour: 352 | m_ObjectHideFlags: 0 353 | m_CorrespondingSourceObject: {fileID: 0} 354 | m_PrefabInstance: {fileID: 0} 355 | m_PrefabAsset: {fileID: 0} 356 | m_GameObject: {fileID: 156993266} 357 | m_Enabled: 1 358 | m_EditorHideFlags: 0 359 | m_Script: {fileID: 11500000, guid: e19747de3f5aca642ab2be37e372fb86, type: 3} 360 | m_Name: 361 | m_EditorClassIdentifier: 362 | m_EffectColor: {r: 0.08627451, g: 0.57254905, b: 0.8509804, a: 1} 363 | m_EffectDistance: {x: 15, y: 15} 364 | m_UseGraphicAlpha: 1 365 | --- !u!114 &156993269 366 | MonoBehaviour: 367 | m_ObjectHideFlags: 0 368 | m_CorrespondingSourceObject: {fileID: 0} 369 | m_PrefabInstance: {fileID: 0} 370 | m_PrefabAsset: {fileID: 0} 371 | m_GameObject: {fileID: 156993266} 372 | m_Enabled: 1 373 | m_EditorHideFlags: 0 374 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 375 | m_Name: 376 | m_EditorClassIdentifier: 377 | m_Material: {fileID: 0} 378 | m_Color: {r: 0.10980392, g: 0.11372549, b: 0.12941177, a: 1} 379 | m_RaycastTarget: 1 380 | m_Maskable: 1 381 | m_OnCullStateChanged: 382 | m_PersistentCalls: 383 | m_Calls: [] 384 | m_Sprite: {fileID: 0} 385 | m_Type: 0 386 | m_PreserveAspect: 0 387 | m_FillCenter: 1 388 | m_FillMethod: 4 389 | m_FillAmount: 1 390 | m_FillClockwise: 1 391 | m_FillOrigin: 0 392 | m_UseSpriteMesh: 0 393 | m_PixelsPerUnitMultiplier: 1 394 | --- !u!222 &156993270 395 | CanvasRenderer: 396 | m_ObjectHideFlags: 0 397 | m_CorrespondingSourceObject: {fileID: 0} 398 | m_PrefabInstance: {fileID: 0} 399 | m_PrefabAsset: {fileID: 0} 400 | m_GameObject: {fileID: 156993266} 401 | m_CullTransparentMesh: 0 402 | --- !u!1 &217686101 403 | GameObject: 404 | m_ObjectHideFlags: 0 405 | m_CorrespondingSourceObject: {fileID: 0} 406 | m_PrefabInstance: {fileID: 0} 407 | m_PrefabAsset: {fileID: 0} 408 | serializedVersion: 6 409 | m_Component: 410 | - component: {fileID: 217686102} 411 | - component: {fileID: 217686104} 412 | - component: {fileID: 217686103} 413 | m_Layer: 5 414 | m_Name: SpeakerFromSquiggle 415 | m_TagString: Untagged 416 | m_Icon: {fileID: 0} 417 | m_NavMeshLayer: 0 418 | m_StaticEditorFlags: 0 419 | m_IsActive: 1 420 | --- !u!224 &217686102 421 | RectTransform: 422 | m_ObjectHideFlags: 0 423 | m_CorrespondingSourceObject: {fileID: 0} 424 | m_PrefabInstance: {fileID: 0} 425 | m_PrefabAsset: {fileID: 0} 426 | m_GameObject: {fileID: 217686101} 427 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 428 | m_LocalPosition: {x: 0, y: 0, z: 0} 429 | m_LocalScale: {x: 1, y: 1, z: 1} 430 | m_Children: [] 431 | m_Father: {fileID: 9069188} 432 | m_RootOrder: 2 433 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 434 | m_AnchorMin: {x: 0, y: 1} 435 | m_AnchorMax: {x: 1, y: 1} 436 | m_AnchoredPosition: {x: 0, y: -147} 437 | m_SizeDelta: {x: 0, y: 99.99994} 438 | m_Pivot: {x: 0.5, y: 1} 439 | --- !u!114 &217686103 440 | MonoBehaviour: 441 | m_ObjectHideFlags: 0 442 | m_CorrespondingSourceObject: {fileID: 0} 443 | m_PrefabInstance: {fileID: 0} 444 | m_PrefabAsset: {fileID: 0} 445 | m_GameObject: {fileID: 217686101} 446 | m_Enabled: 1 447 | m_EditorHideFlags: 0 448 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 449 | m_Name: 450 | m_EditorClassIdentifier: 451 | m_Material: {fileID: 0} 452 | m_Color: {r: 1, g: 1, b: 1, a: 1} 453 | m_RaycastTarget: 1 454 | m_Maskable: 1 455 | m_OnCullStateChanged: 456 | m_PersistentCalls: 457 | m_Calls: [] 458 | m_FontData: 459 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 460 | m_FontSize: 37 461 | m_FontStyle: 0 462 | m_BestFit: 0 463 | m_MinSize: 10 464 | m_MaxSize: 40 465 | m_Alignment: 0 466 | m_AlignByGeometry: 0 467 | m_RichText: 1 468 | m_HorizontalOverflow: 0 469 | m_VerticalOverflow: 0 470 | m_LineSpacing: 1 471 | m_Text: Speaker 472 | --- !u!222 &217686104 473 | CanvasRenderer: 474 | m_ObjectHideFlags: 0 475 | m_CorrespondingSourceObject: {fileID: 0} 476 | m_PrefabInstance: {fileID: 0} 477 | m_PrefabAsset: {fileID: 0} 478 | m_GameObject: {fileID: 217686101} 479 | m_CullTransparentMesh: 0 480 | --- !u!1 &291900678 481 | GameObject: 482 | m_ObjectHideFlags: 0 483 | m_CorrespondingSourceObject: {fileID: 0} 484 | m_PrefabInstance: {fileID: 0} 485 | m_PrefabAsset: {fileID: 0} 486 | serializedVersion: 6 487 | m_Component: 488 | - component: {fileID: 291900679} 489 | - component: {fileID: 291900681} 490 | - component: {fileID: 291900680} 491 | m_Layer: 5 492 | m_Name: Logo 493 | m_TagString: Untagged 494 | m_Icon: {fileID: 0} 495 | m_NavMeshLayer: 0 496 | m_StaticEditorFlags: 0 497 | m_IsActive: 1 498 | --- !u!224 &291900679 499 | RectTransform: 500 | m_ObjectHideFlags: 0 501 | m_CorrespondingSourceObject: {fileID: 0} 502 | m_PrefabInstance: {fileID: 0} 503 | m_PrefabAsset: {fileID: 0} 504 | m_GameObject: {fileID: 291900678} 505 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 506 | m_LocalPosition: {x: 0, y: 0, z: 0} 507 | m_LocalScale: {x: 1, y: 1, z: 1} 508 | m_Children: [] 509 | m_Father: {fileID: 1303495870} 510 | m_RootOrder: 0 511 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 512 | m_AnchorMin: {x: 0.5, y: 1} 513 | m_AnchorMax: {x: 0.5, y: 1} 514 | m_AnchoredPosition: {x: 0.000061035156, y: -49} 515 | m_SizeDelta: {x: 1288.4536, y: 171.87195} 516 | m_Pivot: {x: 0.5, y: 1} 517 | --- !u!114 &291900680 518 | MonoBehaviour: 519 | m_ObjectHideFlags: 0 520 | m_CorrespondingSourceObject: {fileID: 0} 521 | m_PrefabInstance: {fileID: 0} 522 | m_PrefabAsset: {fileID: 0} 523 | m_GameObject: {fileID: 291900678} 524 | m_Enabled: 1 525 | m_EditorHideFlags: 0 526 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 527 | m_Name: 528 | m_EditorClassIdentifier: 529 | m_Material: {fileID: 0} 530 | m_Color: {r: 1, g: 1, b: 1, a: 1} 531 | m_RaycastTarget: 1 532 | m_Maskable: 1 533 | m_OnCullStateChanged: 534 | m_PersistentCalls: 535 | m_Calls: [] 536 | m_Sprite: {fileID: 21300000, guid: 32d0040765e002d419d9464be49c383e, type: 3} 537 | m_Type: 0 538 | m_PreserveAspect: 1 539 | m_FillCenter: 1 540 | m_FillMethod: 4 541 | m_FillAmount: 1 542 | m_FillClockwise: 1 543 | m_FillOrigin: 0 544 | m_UseSpriteMesh: 0 545 | m_PixelsPerUnitMultiplier: 1 546 | --- !u!222 &291900681 547 | CanvasRenderer: 548 | m_ObjectHideFlags: 0 549 | m_CorrespondingSourceObject: {fileID: 0} 550 | m_PrefabInstance: {fileID: 0} 551 | m_PrefabAsset: {fileID: 0} 552 | m_GameObject: {fileID: 291900678} 553 | m_CullTransparentMesh: 0 554 | --- !u!1 &337963670 555 | GameObject: 556 | m_ObjectHideFlags: 0 557 | m_CorrespondingSourceObject: {fileID: 0} 558 | m_PrefabInstance: {fileID: 0} 559 | m_PrefabAsset: {fileID: 0} 560 | serializedVersion: 6 561 | m_Component: 562 | - component: {fileID: 337963671} 563 | - component: {fileID: 337963673} 564 | - component: {fileID: 337963672} 565 | m_Layer: 5 566 | m_Name: TextFromSquiggle 567 | m_TagString: Untagged 568 | m_Icon: {fileID: 0} 569 | m_NavMeshLayer: 0 570 | m_StaticEditorFlags: 0 571 | m_IsActive: 1 572 | --- !u!224 &337963671 573 | RectTransform: 574 | m_ObjectHideFlags: 0 575 | m_CorrespondingSourceObject: {fileID: 0} 576 | m_PrefabInstance: {fileID: 0} 577 | m_PrefabAsset: {fileID: 0} 578 | m_GameObject: {fileID: 337963670} 579 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 580 | m_LocalPosition: {x: 0, y: 0, z: 0} 581 | m_LocalScale: {x: 1, y: 1, z: 1} 582 | m_Children: [] 583 | m_Father: {fileID: 9069188} 584 | m_RootOrder: 3 585 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 586 | m_AnchorMin: {x: 0, y: 1} 587 | m_AnchorMax: {x: 1, y: 1} 588 | m_AnchoredPosition: {x: 0, y: -190} 589 | m_SizeDelta: {x: 0, y: 99.99994} 590 | m_Pivot: {x: 0.5, y: 1} 591 | --- !u!114 &337963672 592 | MonoBehaviour: 593 | m_ObjectHideFlags: 0 594 | m_CorrespondingSourceObject: {fileID: 0} 595 | m_PrefabInstance: {fileID: 0} 596 | m_PrefabAsset: {fileID: 0} 597 | m_GameObject: {fileID: 337963670} 598 | m_Enabled: 1 599 | m_EditorHideFlags: 0 600 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 601 | m_Name: 602 | m_EditorClassIdentifier: 603 | m_Material: {fileID: 0} 604 | m_Color: {r: 1, g: 1, b: 1, a: 1} 605 | m_RaycastTarget: 1 606 | m_Maskable: 1 607 | m_OnCullStateChanged: 608 | m_PersistentCalls: 609 | m_Calls: [] 610 | m_FontData: 611 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 612 | m_FontSize: 24 613 | m_FontStyle: 0 614 | m_BestFit: 0 615 | m_MinSize: 10 616 | m_MaxSize: 40 617 | m_Alignment: 0 618 | m_AlignByGeometry: 0 619 | m_RichText: 1 620 | m_HorizontalOverflow: 0 621 | m_VerticalOverflow: 0 622 | m_LineSpacing: 1 623 | m_Text: Placeholder 624 | --- !u!222 &337963673 625 | CanvasRenderer: 626 | m_ObjectHideFlags: 0 627 | m_CorrespondingSourceObject: {fileID: 0} 628 | m_PrefabInstance: {fileID: 0} 629 | m_PrefabAsset: {fileID: 0} 630 | m_GameObject: {fileID: 337963670} 631 | m_CullTransparentMesh: 0 632 | --- !u!1 &963194225 633 | GameObject: 634 | m_ObjectHideFlags: 0 635 | m_CorrespondingSourceObject: {fileID: 0} 636 | m_PrefabInstance: {fileID: 0} 637 | m_PrefabAsset: {fileID: 0} 638 | serializedVersion: 6 639 | m_Component: 640 | - component: {fileID: 963194228} 641 | - component: {fileID: 963194227} 642 | - component: {fileID: 963194226} 643 | m_Layer: 0 644 | m_Name: Main Camera 645 | m_TagString: MainCamera 646 | m_Icon: {fileID: 0} 647 | m_NavMeshLayer: 0 648 | m_StaticEditorFlags: 0 649 | m_IsActive: 1 650 | --- !u!81 &963194226 651 | AudioListener: 652 | m_ObjectHideFlags: 0 653 | m_CorrespondingSourceObject: {fileID: 0} 654 | m_PrefabInstance: {fileID: 0} 655 | m_PrefabAsset: {fileID: 0} 656 | m_GameObject: {fileID: 963194225} 657 | m_Enabled: 1 658 | --- !u!20 &963194227 659 | Camera: 660 | m_ObjectHideFlags: 0 661 | m_CorrespondingSourceObject: {fileID: 0} 662 | m_PrefabInstance: {fileID: 0} 663 | m_PrefabAsset: {fileID: 0} 664 | m_GameObject: {fileID: 963194225} 665 | m_Enabled: 1 666 | serializedVersion: 2 667 | m_ClearFlags: 1 668 | m_BackGroundColor: {r: 0.19215687, g: 0.3019608, b: 0.4745098, a: 0} 669 | m_projectionMatrixMode: 1 670 | m_GateFitMode: 2 671 | m_FOVAxisMode: 0 672 | m_SensorSize: {x: 36, y: 24} 673 | m_LensShift: {x: 0, y: 0} 674 | m_FocalLength: 50 675 | m_NormalizedViewPortRect: 676 | serializedVersion: 2 677 | x: 0 678 | y: 0 679 | width: 1 680 | height: 1 681 | near clip plane: 0.3 682 | far clip plane: 1000 683 | field of view: 60 684 | orthographic: 0 685 | orthographic size: 5 686 | m_Depth: -1 687 | m_CullingMask: 688 | serializedVersion: 2 689 | m_Bits: 4294967295 690 | m_RenderingPath: -1 691 | m_TargetTexture: {fileID: 0} 692 | m_TargetDisplay: 0 693 | m_TargetEye: 3 694 | m_HDR: 1 695 | m_AllowMSAA: 1 696 | m_AllowDynamicResolution: 0 697 | m_ForceIntoRT: 0 698 | m_OcclusionCulling: 1 699 | m_StereoConvergence: 10 700 | m_StereoSeparation: 0.022 701 | --- !u!4 &963194228 702 | Transform: 703 | m_ObjectHideFlags: 0 704 | m_CorrespondingSourceObject: {fileID: 0} 705 | m_PrefabInstance: {fileID: 0} 706 | m_PrefabAsset: {fileID: 0} 707 | m_GameObject: {fileID: 963194225} 708 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 709 | m_LocalPosition: {x: 0, y: 1, z: -10} 710 | m_LocalScale: {x: 1, y: 1, z: 1} 711 | m_Children: [] 712 | m_Father: {fileID: 0} 713 | m_RootOrder: 0 714 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 715 | --- !u!1 &1222348850 716 | GameObject: 717 | m_ObjectHideFlags: 0 718 | m_CorrespondingSourceObject: {fileID: 0} 719 | m_PrefabInstance: {fileID: 0} 720 | m_PrefabAsset: {fileID: 0} 721 | serializedVersion: 6 722 | m_Component: 723 | - component: {fileID: 1222348851} 724 | - component: {fileID: 1222348853} 725 | - component: {fileID: 1222348852} 726 | m_Layer: 5 727 | m_Name: SampleDescription 728 | m_TagString: Untagged 729 | m_Icon: {fileID: 0} 730 | m_NavMeshLayer: 0 731 | m_StaticEditorFlags: 0 732 | m_IsActive: 1 733 | --- !u!224 &1222348851 734 | RectTransform: 735 | m_ObjectHideFlags: 0 736 | m_CorrespondingSourceObject: {fileID: 0} 737 | m_PrefabInstance: {fileID: 0} 738 | m_PrefabAsset: {fileID: 0} 739 | m_GameObject: {fileID: 1222348850} 740 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 741 | m_LocalPosition: {x: 0, y: 0, z: 0} 742 | m_LocalScale: {x: 1, y: 1, z: 1} 743 | m_Children: [] 744 | m_Father: {fileID: 9069188} 745 | m_RootOrder: 1 746 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 747 | m_AnchorMin: {x: 0, y: 1} 748 | m_AnchorMax: {x: 1, y: 1} 749 | m_AnchoredPosition: {x: 0, y: 0} 750 | m_SizeDelta: {x: 0, y: 99.99994} 751 | m_Pivot: {x: 0.5, y: 1} 752 | --- !u!114 &1222348852 753 | MonoBehaviour: 754 | m_ObjectHideFlags: 0 755 | m_CorrespondingSourceObject: {fileID: 0} 756 | m_PrefabInstance: {fileID: 0} 757 | m_PrefabAsset: {fileID: 0} 758 | m_GameObject: {fileID: 1222348850} 759 | m_Enabled: 1 760 | m_EditorHideFlags: 0 761 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 762 | m_Name: 763 | m_EditorClassIdentifier: 764 | m_Material: {fileID: 0} 765 | m_Color: {r: 1, g: 1, b: 1, a: 1} 766 | m_RaycastTarget: 1 767 | m_Maskable: 1 768 | m_OnCullStateChanged: 769 | m_PersistentCalls: 770 | m_Calls: [] 771 | m_FontData: 772 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 773 | m_FontSize: 24 774 | m_FontStyle: 0 775 | m_BestFit: 0 776 | m_MinSize: 10 777 | m_MaxSize: 40 778 | m_Alignment: 0 779 | m_AlignByGeometry: 0 780 | m_RichText: 1 781 | m_HorizontalOverflow: 0 782 | m_VerticalOverflow: 0 783 | m_LineSpacing: 1 784 | m_Text: A ScriptableObject containing Squiggle text is linked in the inspector 785 | to the SquiggleScriptableObjectSample GameObject. When you click run, Squiggle 786 | will read from that ScriptableObject and show you text below. 787 | --- !u!222 &1222348853 788 | CanvasRenderer: 789 | m_ObjectHideFlags: 0 790 | m_CorrespondingSourceObject: {fileID: 0} 791 | m_PrefabInstance: {fileID: 0} 792 | m_PrefabAsset: {fileID: 0} 793 | m_GameObject: {fileID: 1222348850} 794 | m_CullTransparentMesh: 0 795 | --- !u!1 &1303495869 796 | GameObject: 797 | m_ObjectHideFlags: 0 798 | m_CorrespondingSourceObject: {fileID: 0} 799 | m_PrefabInstance: {fileID: 0} 800 | m_PrefabAsset: {fileID: 0} 801 | serializedVersion: 6 802 | m_Component: 803 | - component: {fileID: 1303495870} 804 | m_Layer: 5 805 | m_Name: Decor 806 | m_TagString: Untagged 807 | m_Icon: {fileID: 0} 808 | m_NavMeshLayer: 0 809 | m_StaticEditorFlags: 0 810 | m_IsActive: 1 811 | --- !u!224 &1303495870 812 | RectTransform: 813 | m_ObjectHideFlags: 0 814 | m_CorrespondingSourceObject: {fileID: 0} 815 | m_PrefabInstance: {fileID: 0} 816 | m_PrefabAsset: {fileID: 0} 817 | m_GameObject: {fileID: 1303495869} 818 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 819 | m_LocalPosition: {x: 0, y: 0, z: 0} 820 | m_LocalScale: {x: 1, y: 1, z: 1} 821 | m_Children: 822 | - {fileID: 291900679} 823 | m_Father: {fileID: 124348625} 824 | m_RootOrder: 1 825 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 826 | m_AnchorMin: {x: 0, y: 0} 827 | m_AnchorMax: {x: 1, y: 1} 828 | m_AnchoredPosition: {x: 0, y: 0} 829 | m_SizeDelta: {x: 0, y: 0} 830 | m_Pivot: {x: 0.5, y: 0.5} 831 | --- !u!1 &1501698439 832 | GameObject: 833 | m_ObjectHideFlags: 0 834 | m_CorrespondingSourceObject: {fileID: 0} 835 | m_PrefabInstance: {fileID: 0} 836 | m_PrefabAsset: {fileID: 0} 837 | serializedVersion: 6 838 | m_Component: 839 | - component: {fileID: 1501698442} 840 | - component: {fileID: 1501698441} 841 | - component: {fileID: 1501698440} 842 | m_Layer: 0 843 | m_Name: EventSystem 844 | m_TagString: Untagged 845 | m_Icon: {fileID: 0} 846 | m_NavMeshLayer: 0 847 | m_StaticEditorFlags: 0 848 | m_IsActive: 1 849 | --- !u!114 &1501698440 850 | MonoBehaviour: 851 | m_ObjectHideFlags: 0 852 | m_CorrespondingSourceObject: {fileID: 0} 853 | m_PrefabInstance: {fileID: 0} 854 | m_PrefabAsset: {fileID: 0} 855 | m_GameObject: {fileID: 1501698439} 856 | m_Enabled: 1 857 | m_EditorHideFlags: 0 858 | m_Script: {fileID: 11500000, guid: 4f231c4fb786f3946a6b90b886c48677, type: 3} 859 | m_Name: 860 | m_EditorClassIdentifier: 861 | m_HorizontalAxis: Horizontal 862 | m_VerticalAxis: Vertical 863 | m_SubmitButton: Submit 864 | m_CancelButton: Cancel 865 | m_InputActionsPerSecond: 10 866 | m_RepeatDelay: 0.5 867 | m_ForceModuleActive: 0 868 | --- !u!114 &1501698441 869 | MonoBehaviour: 870 | m_ObjectHideFlags: 0 871 | m_CorrespondingSourceObject: {fileID: 0} 872 | m_PrefabInstance: {fileID: 0} 873 | m_PrefabAsset: {fileID: 0} 874 | m_GameObject: {fileID: 1501698439} 875 | m_Enabled: 1 876 | m_EditorHideFlags: 0 877 | m_Script: {fileID: 11500000, guid: 76c392e42b5098c458856cdf6ecaaaa1, type: 3} 878 | m_Name: 879 | m_EditorClassIdentifier: 880 | m_FirstSelected: {fileID: 0} 881 | m_sendNavigationEvents: 1 882 | m_DragThreshold: 10 883 | --- !u!4 &1501698442 884 | Transform: 885 | m_ObjectHideFlags: 0 886 | m_CorrespondingSourceObject: {fileID: 0} 887 | m_PrefabInstance: {fileID: 0} 888 | m_PrefabAsset: {fileID: 0} 889 | m_GameObject: {fileID: 1501698439} 890 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 891 | m_LocalPosition: {x: 0, y: 0, z: 0} 892 | m_LocalScale: {x: 1, y: 1, z: 1} 893 | m_Children: [] 894 | m_Father: {fileID: 0} 895 | m_RootOrder: 3 896 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 897 | --- !u!1 &1593106311 898 | GameObject: 899 | m_ObjectHideFlags: 0 900 | m_CorrespondingSourceObject: {fileID: 0} 901 | m_PrefabInstance: {fileID: 0} 902 | m_PrefabAsset: {fileID: 0} 903 | serializedVersion: 6 904 | m_Component: 905 | - component: {fileID: 1593106312} 906 | - component: {fileID: 1593106314} 907 | - component: {fileID: 1593106313} 908 | m_Layer: 5 909 | m_Name: Text 910 | m_TagString: Untagged 911 | m_Icon: {fileID: 0} 912 | m_NavMeshLayer: 0 913 | m_StaticEditorFlags: 0 914 | m_IsActive: 1 915 | --- !u!224 &1593106312 916 | RectTransform: 917 | m_ObjectHideFlags: 0 918 | m_CorrespondingSourceObject: {fileID: 0} 919 | m_PrefabInstance: {fileID: 0} 920 | m_PrefabAsset: {fileID: 0} 921 | m_GameObject: {fileID: 1593106311} 922 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 923 | m_LocalPosition: {x: 0, y: 0, z: 0} 924 | m_LocalScale: {x: 1, y: 1, z: 1} 925 | m_Children: [] 926 | m_Father: {fileID: 2054484117} 927 | m_RootOrder: 0 928 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 929 | m_AnchorMin: {x: 0, y: 0} 930 | m_AnchorMax: {x: 1, y: 1} 931 | m_AnchoredPosition: {x: 0, y: 0} 932 | m_SizeDelta: {x: 0, y: 0} 933 | m_Pivot: {x: 0.5, y: 0.5} 934 | --- !u!114 &1593106313 935 | MonoBehaviour: 936 | m_ObjectHideFlags: 0 937 | m_CorrespondingSourceObject: {fileID: 0} 938 | m_PrefabInstance: {fileID: 0} 939 | m_PrefabAsset: {fileID: 0} 940 | m_GameObject: {fileID: 1593106311} 941 | m_Enabled: 1 942 | m_EditorHideFlags: 0 943 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 944 | m_Name: 945 | m_EditorClassIdentifier: 946 | m_Material: {fileID: 0} 947 | m_Color: {r: 0.19607843, g: 0.19607843, b: 0.19607843, a: 1} 948 | m_RaycastTarget: 1 949 | m_Maskable: 1 950 | m_OnCullStateChanged: 951 | m_PersistentCalls: 952 | m_Calls: [] 953 | m_FontData: 954 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 955 | m_FontSize: 35 956 | m_FontStyle: 0 957 | m_BestFit: 0 958 | m_MinSize: 10 959 | m_MaxSize: 40 960 | m_Alignment: 4 961 | m_AlignByGeometry: 0 962 | m_RichText: 1 963 | m_HorizontalOverflow: 0 964 | m_VerticalOverflow: 0 965 | m_LineSpacing: 1 966 | m_Text: Run 967 | --- !u!222 &1593106314 968 | CanvasRenderer: 969 | m_ObjectHideFlags: 0 970 | m_CorrespondingSourceObject: {fileID: 0} 971 | m_PrefabInstance: {fileID: 0} 972 | m_PrefabAsset: {fileID: 0} 973 | m_GameObject: {fileID: 1593106311} 974 | m_CullTransparentMesh: 0 975 | --- !u!1 &2054484116 976 | GameObject: 977 | m_ObjectHideFlags: 0 978 | m_CorrespondingSourceObject: {fileID: 0} 979 | m_PrefabInstance: {fileID: 0} 980 | m_PrefabAsset: {fileID: 0} 981 | serializedVersion: 6 982 | m_Component: 983 | - component: {fileID: 2054484117} 984 | - component: {fileID: 2054484120} 985 | - component: {fileID: 2054484119} 986 | - component: {fileID: 2054484118} 987 | m_Layer: 5 988 | m_Name: RunSquiggleCodeButton 989 | m_TagString: Untagged 990 | m_Icon: {fileID: 0} 991 | m_NavMeshLayer: 0 992 | m_StaticEditorFlags: 0 993 | m_IsActive: 1 994 | --- !u!224 &2054484117 995 | RectTransform: 996 | m_ObjectHideFlags: 0 997 | m_CorrespondingSourceObject: {fileID: 0} 998 | m_PrefabInstance: {fileID: 0} 999 | m_PrefabAsset: {fileID: 0} 1000 | m_GameObject: {fileID: 2054484116} 1001 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 1002 | m_LocalPosition: {x: 0, y: 0, z: 0} 1003 | m_LocalScale: {x: 1, y: 1, z: 1} 1004 | m_Children: 1005 | - {fileID: 1593106312} 1006 | m_Father: {fileID: 9069188} 1007 | m_RootOrder: 4 1008 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1009 | m_AnchorMin: {x: 0.5, y: 0} 1010 | m_AnchorMax: {x: 0.5, y: 0} 1011 | m_AnchoredPosition: {x: 0, y: 0} 1012 | m_SizeDelta: {x: 400, y: 100} 1013 | m_Pivot: {x: 0.5, y: 0} 1014 | --- !u!114 &2054484118 1015 | MonoBehaviour: 1016 | m_ObjectHideFlags: 0 1017 | m_CorrespondingSourceObject: {fileID: 0} 1018 | m_PrefabInstance: {fileID: 0} 1019 | m_PrefabAsset: {fileID: 0} 1020 | m_GameObject: {fileID: 2054484116} 1021 | m_Enabled: 1 1022 | m_EditorHideFlags: 0 1023 | m_Script: {fileID: 11500000, guid: 4e29b1a8efbd4b44bb3f3716e73f07ff, type: 3} 1024 | m_Name: 1025 | m_EditorClassIdentifier: 1026 | m_Navigation: 1027 | m_Mode: 3 1028 | m_SelectOnUp: {fileID: 0} 1029 | m_SelectOnDown: {fileID: 0} 1030 | m_SelectOnLeft: {fileID: 0} 1031 | m_SelectOnRight: {fileID: 0} 1032 | m_Transition: 1 1033 | m_Colors: 1034 | m_NormalColor: {r: 0.8207547, g: 0.8207547, b: 0.8207547, a: 1} 1035 | m_HighlightedColor: {r: 0.2121433, g: 0.735849, b: 0.13536847, a: 1} 1036 | m_PressedColor: {r: 0.8679245, g: 0.84548014, b: 0.061409745, a: 1} 1037 | m_SelectedColor: {r: 0.21176471, g: 0.7372549, b: 0.13725491, a: 1} 1038 | m_DisabledColor: {r: 0.78431374, g: 0.78431374, b: 0.78431374, a: 0.5019608} 1039 | m_ColorMultiplier: 1 1040 | m_FadeDuration: 0.1 1041 | m_SpriteState: 1042 | m_HighlightedSprite: {fileID: 0} 1043 | m_PressedSprite: {fileID: 0} 1044 | m_SelectedSprite: {fileID: 0} 1045 | m_DisabledSprite: {fileID: 0} 1046 | m_AnimationTriggers: 1047 | m_NormalTrigger: Normal 1048 | m_HighlightedTrigger: Highlighted 1049 | m_PressedTrigger: Pressed 1050 | m_SelectedTrigger: Selected 1051 | m_DisabledTrigger: Disabled 1052 | m_Interactable: 1 1053 | m_TargetGraphic: {fileID: 2054484119} 1054 | m_OnClick: 1055 | m_PersistentCalls: 1056 | m_Calls: [] 1057 | --- !u!114 &2054484119 1058 | MonoBehaviour: 1059 | m_ObjectHideFlags: 0 1060 | m_CorrespondingSourceObject: {fileID: 0} 1061 | m_PrefabInstance: {fileID: 0} 1062 | m_PrefabAsset: {fileID: 0} 1063 | m_GameObject: {fileID: 2054484116} 1064 | m_Enabled: 1 1065 | m_EditorHideFlags: 0 1066 | m_Script: {fileID: 11500000, guid: fe87c0e1cc204ed48ad3b37840f39efc, type: 3} 1067 | m_Name: 1068 | m_EditorClassIdentifier: 1069 | m_Material: {fileID: 0} 1070 | m_Color: {r: 1, g: 1, b: 1, a: 1} 1071 | m_RaycastTarget: 1 1072 | m_Maskable: 1 1073 | m_OnCullStateChanged: 1074 | m_PersistentCalls: 1075 | m_Calls: [] 1076 | m_Sprite: {fileID: 0} 1077 | m_Type: 1 1078 | m_PreserveAspect: 0 1079 | m_FillCenter: 1 1080 | m_FillMethod: 4 1081 | m_FillAmount: 1 1082 | m_FillClockwise: 1 1083 | m_FillOrigin: 0 1084 | m_UseSpriteMesh: 0 1085 | m_PixelsPerUnitMultiplier: 1 1086 | --- !u!222 &2054484120 1087 | CanvasRenderer: 1088 | m_ObjectHideFlags: 0 1089 | m_CorrespondingSourceObject: {fileID: 0} 1090 | m_PrefabInstance: {fileID: 0} 1091 | m_PrefabAsset: {fileID: 0} 1092 | m_GameObject: {fileID: 2054484116} 1093 | m_CullTransparentMesh: 0 1094 | --- !u!1 &2084169940 1095 | GameObject: 1096 | m_ObjectHideFlags: 0 1097 | m_CorrespondingSourceObject: {fileID: 0} 1098 | m_PrefabInstance: {fileID: 0} 1099 | m_PrefabAsset: {fileID: 0} 1100 | serializedVersion: 6 1101 | m_Component: 1102 | - component: {fileID: 2084169941} 1103 | - component: {fileID: 2084169943} 1104 | - component: {fileID: 2084169942} 1105 | m_Layer: 5 1106 | m_Name: SampleTitle 1107 | m_TagString: Untagged 1108 | m_Icon: {fileID: 0} 1109 | m_NavMeshLayer: 0 1110 | m_StaticEditorFlags: 0 1111 | m_IsActive: 1 1112 | --- !u!224 &2084169941 1113 | RectTransform: 1114 | m_ObjectHideFlags: 0 1115 | m_CorrespondingSourceObject: {fileID: 0} 1116 | m_PrefabInstance: {fileID: 0} 1117 | m_PrefabAsset: {fileID: 0} 1118 | m_GameObject: {fileID: 2084169940} 1119 | m_LocalRotation: {x: -0, y: -0, z: -0, w: 1} 1120 | m_LocalPosition: {x: 0, y: 0, z: 0} 1121 | m_LocalScale: {x: 1, y: 1, z: 1} 1122 | m_Children: [] 1123 | m_Father: {fileID: 9069188} 1124 | m_RootOrder: 0 1125 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 1126 | m_AnchorMin: {x: 0.5, y: 1} 1127 | m_AnchorMax: {x: 0.5, y: 1} 1128 | m_AnchoredPosition: {x: 0, y: 60} 1129 | m_SizeDelta: {x: 353.2749, y: 61.08618} 1130 | m_Pivot: {x: 0.5, y: 1} 1131 | --- !u!114 &2084169942 1132 | MonoBehaviour: 1133 | m_ObjectHideFlags: 0 1134 | m_CorrespondingSourceObject: {fileID: 0} 1135 | m_PrefabInstance: {fileID: 0} 1136 | m_PrefabAsset: {fileID: 0} 1137 | m_GameObject: {fileID: 2084169940} 1138 | m_Enabled: 1 1139 | m_EditorHideFlags: 0 1140 | m_Script: {fileID: 11500000, guid: 5f7201a12d95ffc409449d95f23cf332, type: 3} 1141 | m_Name: 1142 | m_EditorClassIdentifier: 1143 | m_Material: {fileID: 0} 1144 | m_Color: {r: 0.9245283, g: 0.90613705, b: 0.15263437, a: 1} 1145 | m_RaycastTarget: 1 1146 | m_Maskable: 1 1147 | m_OnCullStateChanged: 1148 | m_PersistentCalls: 1149 | m_Calls: [] 1150 | m_FontData: 1151 | m_Font: {fileID: 10102, guid: 0000000000000000e000000000000000, type: 0} 1152 | m_FontSize: 41 1153 | m_FontStyle: 0 1154 | m_BestFit: 0 1155 | m_MinSize: 10 1156 | m_MaxSize: 50 1157 | m_Alignment: 4 1158 | m_AlignByGeometry: 0 1159 | m_RichText: 1 1160 | m_HorizontalOverflow: 0 1161 | m_VerticalOverflow: 0 1162 | m_LineSpacing: 1 1163 | m_Text: ScriptableObject 1164 | --- !u!222 &2084169943 1165 | CanvasRenderer: 1166 | m_ObjectHideFlags: 0 1167 | m_CorrespondingSourceObject: {fileID: 0} 1168 | m_PrefabInstance: {fileID: 0} 1169 | m_PrefabAsset: {fileID: 0} 1170 | m_GameObject: {fileID: 2084169940} 1171 | m_CullTransparentMesh: 0 1172 | --------------------------------------------------------------------------------