├── Dist ├── Assets │ ├── heatmap-screenshot1.png │ ├── heatmap-screenshot2.png │ ├── heatmap-screenshot3.png │ ├── heatmap-screenshot1.png.meta │ ├── heatmap-screenshot2.png.meta │ └── heatmap-screenshot3.png.meta └── Assets.meta ├── LICENSE.meta ├── README.md.meta ├── Dist.meta ├── Assets.meta ├── Assets ├── Editor.meta ├── PrefabExamples │ ├── Heatmap.prefab.meta │ ├── HeatmapRecorders.prefab.meta │ ├── HeatmapRecorders.prefab │ └── Heatmap.prefab ├── Scripts.meta ├── Scripts │ ├── Util.meta │ ├── Models.meta │ ├── Controller.meta │ ├── Util │ │ ├── Readers.meta │ │ ├── Recorders.meta │ │ ├── Writers.meta │ │ ├── Visualisation.meta │ │ ├── Readers │ │ │ ├── IEventReader.cs.meta │ │ │ ├── JSONEventReader.cs.meta │ │ │ ├── IEventReader.cs │ │ │ └── JSONEventReader.cs │ │ ├── Writers │ │ │ ├── IEventWriter.cs.meta │ │ │ ├── JSONEventWriter.cs.meta │ │ │ ├── IEventWriter.cs │ │ │ └── JSONEventWriter.cs │ │ ├── Recorders │ │ │ ├── ObjectPositionRecorder.cs.meta │ │ │ ├── AbstractEventIntervalRecorder.cs.meta │ │ │ ├── CameraLookAtPositionRecorder.cs.meta │ │ │ ├── AbstractEventIntervalRecorder.cs │ │ │ ├── ObjectPositionRecorder.cs │ │ │ └── CameraLookAtPositionRecorder.cs │ │ └── Visualisation │ │ │ ├── HeatmapParticleSystem.cs.meta │ │ │ ├── HeatmapVisualisation.cs.meta │ │ │ ├── HeatmapParticleSystem.cs │ │ │ └── HeatmapVisualisation.cs │ ├── Models │ │ ├── BaseEvent.cs.meta │ │ ├── EventData.cs.meta │ │ ├── MergedEventPosition.cs.meta │ │ ├── EventData.cs │ │ ├── MergedEventPosition.cs │ │ └── BaseEvent.cs │ └── Controller │ │ ├── HeatmapController.cs.meta │ │ └── HeatmapController.cs ├── Test-data.meta ├── PrefabExamples.meta ├── Editor │ ├── HeatmapGUI.cs.meta │ └── HeatmapGUI.cs └── Test-data │ └── json-test123.txt ├── LICENSE ├── .gitignore └── README.md /Dist/Assets/heatmap-screenshot1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kDanik/heatmap-unity/HEAD/Dist/Assets/heatmap-screenshot1.png -------------------------------------------------------------------------------- /Dist/Assets/heatmap-screenshot2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kDanik/heatmap-unity/HEAD/Dist/Assets/heatmap-screenshot2.png -------------------------------------------------------------------------------- /Dist/Assets/heatmap-screenshot3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/kDanik/heatmap-unity/HEAD/Dist/Assets/heatmap-screenshot3.png -------------------------------------------------------------------------------- /LICENSE.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4406716dc44e6094b96219de592062b4 3 | DefaultImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /README.md.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: b4bc6d3535d02684ebcf6e644944da42 3 | TextScriptImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Dist.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4c3930f831a492a40a92ac43dedeb675 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dd381577c8b3ac54da16cceca85e6dcc 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Editor.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: be687de9e85a31a40a6cd21d44541ba5 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/PrefabExamples/Heatmap.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6f3c5332fe4314e458e615ec5c0dfc0a 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Scripts.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 404949dd9e368344588fbc81e75b36ce 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Dist/Assets.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 0832dda93fe1594489e4a4adfa3fa9f3 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scripts/Util.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f01be8e1ac65f9140bfc5171387bfe3f 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Test-data.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 07d69c8bc2333e649b930439b1fc6351 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/PrefabExamples.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3df2dfc07effd9346aad652c8e4202d1 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/PrefabExamples/HeatmapRecorders.prefab.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 3d582bc9e65405f45ae0124c8f877031 3 | PrefabImporter: 4 | externalObjects: {} 5 | userData: 6 | assetBundleName: 7 | assetBundleVariant: 8 | -------------------------------------------------------------------------------- /Assets/Scripts/Models.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f9b3b4969c8384c42a60a6df6216fd21 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scripts/Controller.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: e422c1c0fb6fc324db8aaea09ddca457 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Readers.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 04555aae1d0f92e4089a964587b4a17e 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Recorders.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: feb7e191bde9e114ca281c2735d7d070 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Writers.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5da9c1450b0352747b6e45959fac4461 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Visualisation.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 82883c29bffe2cb4ea64255abc45d3f4 3 | folderAsset: yes 4 | DefaultImporter: 5 | externalObjects: {} 6 | userData: 7 | assetBundleName: 8 | assetBundleVariant: 9 | -------------------------------------------------------------------------------- /Assets/Editor/HeatmapGUI.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: cefae6ba88b51e84ba70253e04c1e838 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Models/BaseEvent.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 2991f55323ea0ee44aa90b3ebf3447f1 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Models/EventData.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ce59e1bccc692604abfd3c2a7ec2e6ba 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Models/MergedEventPosition.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: c1c13080c23bbc74081dba9476ff1ff8 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Readers/IEventReader.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 04e033f47bf2ec84f9272e37b9cadbe3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Writers/IEventWriter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: fa49d25067ff88f4dba44c40e8f6a25f 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Controller/HeatmapController.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: dc8f4f597add486478db33348dcbebd3 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Readers/JSONEventReader.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 66e3b7c04c56dbf4dbbe513fd1023937 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Writers/JSONEventWriter.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 6738a2daafda0ad4e99a84f1790e6e96 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Recorders/ObjectPositionRecorder.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: af210dc2a46f14b4480719ec3e7f57bd 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Visualisation/HeatmapParticleSystem.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: ea3e7765f3a88497ebfdd21f889d6f8e 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Visualisation/HeatmapVisualisation.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: d0af519c54790e74ebc27ffd81e04b0a 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Recorders/AbstractEventIntervalRecorder.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4c8a1fa9bdb7c4a3a89945236581c7a5 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Recorders/CameraLookAtPositionRecorder.cs.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: f3135f00e6351d24684d6bd483cf76fe 3 | MonoImporter: 4 | externalObjects: {} 5 | serializedVersion: 2 6 | defaultReferences: [] 7 | executionOrder: 0 8 | icon: {instanceID: 0} 9 | userData: 10 | assetBundleName: 11 | assetBundleVariant: 12 | -------------------------------------------------------------------------------- /Assets/Scripts/Models/EventData.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | /// 4 | /// Container for event data (name, positions and status in heatmap), used for heatmap visualization 5 | /// 6 | public class EventData 7 | { 8 | public List Positions = new(); 9 | 10 | public string EventName; 11 | 12 | /// 13 | /// Should this event be used for heatmap visualisation 14 | /// 15 | public bool ShouldEventBeVisualised = false; 16 | } 17 | 18 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Readers/IEventReader.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | interface IEventReader 4 | { 5 | /// 6 | /// Reads event data and returns it as list of EventData objects 7 | /// 8 | public List ReadEvents(); 9 | 10 | /// 11 | /// Checks and returns availability status of reader 12 | /// 13 | /// true if reader is available for reading (valid, initialized and etc), otherwise false 14 | public bool ReaderIsAvailable(); 15 | } 16 | -------------------------------------------------------------------------------- /Assets/Scripts/Models/MergedEventPosition.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | /// 4 | /// Container with position and multiplier, that represents other positions with same or almost same value that were merged into this object. 5 | /// 6 | public class MergedEventPosition 7 | { 8 | public Vector3 Position; 9 | 10 | /// 11 | /// Positions that have same (or almost same) values will be merged into one EventPosition, 12 | /// by increasing positionMultiplier by 1. 13 | /// 14 | public int Multiplier = 1; 15 | } 16 | -------------------------------------------------------------------------------- /Assets/Scripts/Models/BaseEvent.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | /// 4 | /// Base event is used to save and load(read) data for heatmap. 5 | /// This class can be extended with additional data, if required. 6 | /// 7 | [System.Serializable] 8 | class BaseEvent 9 | { 10 | /// 11 | /// Position of event in world space 12 | /// 13 | public Vector3 Position; 14 | 15 | /// 16 | /// Descriptive and unique name of event (example: User Position, 17 | /// 18 | public string EventName; 19 | 20 | public BaseEvent(string EventName, Vector3 Position) 21 | { 22 | this.Position = Position; 23 | this.EventName = EventName; 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Writers/IEventWriter.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | 3 | interface IEventWriter 4 | { 5 | /// 6 | /// Saves one BaseEvent 7 | /// 8 | /// true if data was saved successfully 9 | public bool SaveEvent(BaseEvent baseEvent); 10 | 11 | /// 12 | /// Saves list of BaseEvent-s (useful if data should be transported in bigger quantity, for example for REST-services or database batch save) 13 | /// 14 | /// true if data was saved successfully 15 | public bool SaveEvents(List baseEvents); 16 | 17 | /// 18 | /// Checks and returns availability status of writer 19 | /// 20 | /// true if writer is available for writing (valid configuration, initialized and etc), otherwise false 21 | public bool IsWriterAvailable(); 22 | } 23 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 Daniil Kurachkin 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 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Recorders/AbstractEventIntervalRecorder.cs: -------------------------------------------------------------------------------- 1 | using System.Collections; 2 | using UnityEngine; 3 | 4 | /// 5 | /// Base class for classes, that record some event in some specified interval. 6 | /// 7 | public abstract class AbstractEventIntervalRecorder : MonoBehaviour 8 | { 9 | [SerializeField] 10 | [Tooltip("Interval for event recording in seconds")] 11 | private float interval = 0.5F; 12 | [SerializeField] 13 | [Tooltip("Is recording of event activate")] 14 | protected bool record = true; 15 | 16 | /// 17 | /// Coroutine that calls RecordAndSaveEvent() in specified interval 18 | /// 19 | protected IEnumerator StartEventRecording() 20 | { 21 | // small delay is required, to prevent "Sharing violation" for newly created files 22 | yield return new WaitForEndOfFrame(); 23 | 24 | StartCoroutine(RecordEventInInterval()); 25 | } 26 | 27 | 28 | protected IEnumerator RecordEventInInterval() 29 | { 30 | if (record) 31 | { 32 | RecordAndSaveEvent(); 33 | 34 | yield return new WaitForSeconds(interval); 35 | 36 | StartCoroutine(RecordEventInInterval()); 37 | } 38 | else 39 | { 40 | yield return null; 41 | } 42 | } 43 | 44 | /// 45 | /// Implementation of record and save functionality for some event 46 | /// 47 | protected abstract void RecordAndSaveEvent(); 48 | } 49 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Recorders/ObjectPositionRecorder.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | /// 4 | /// Example of event recorder, that tracks and saves object position in specified interval. 5 | /// 6 | public class ObjectPositionRecorder : AbstractEventIntervalRecorder 7 | { 8 | [SerializeField] 9 | private GameObject objectToRecord = null; 10 | [SerializeField] 11 | private string dataPath; 12 | [SerializeField] 13 | private string eventName; 14 | [SerializeField] 15 | private bool createFileIfNonFound; 16 | 17 | private IEventWriter eventWriter; 18 | 19 | void Awake() 20 | { 21 | if (!record) return; 22 | 23 | if (!IsObjectOnScene()) 24 | { 25 | record = false; 26 | return; 27 | } 28 | 29 | eventWriter = new JSONEventWriter(dataPath, createFileIfNonFound); 30 | record = eventWriter.IsWriterAvailable(); 31 | 32 | if (record) StartCoroutine(StartEventRecording()); 33 | } 34 | 35 | protected override void RecordAndSaveEvent() 36 | { 37 | BaseEvent baseEvent = PrepareData(); 38 | 39 | eventWriter.SaveEvent(baseEvent); 40 | } 41 | 42 | 43 | private BaseEvent PrepareData() 44 | { 45 | return new BaseEvent(eventName, objectToRecord.transform.position); 46 | } 47 | 48 | private bool IsObjectOnScene() 49 | { 50 | if (objectToRecord == null) return false; 51 | 52 | return (objectToRecord.scene.name != null); 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # This .gitignore file should be placed at the root of your Unity project directory 2 | # 3 | # Get latest from https://github.com/github/gitignore/blob/main/Unity.gitignore 4 | # 5 | /[Ll]ibrary/ 6 | /[Tt]emp/ 7 | /[Oo]bj/ 8 | /[Bb]uild/ 9 | /[Bb]uilds/ 10 | /[Ll]ogs/ 11 | /[Uu]ser[Ss]ettings/ 12 | 13 | # MemoryCaptures can get excessive in size. 14 | # They also could contain extremely sensitive data 15 | /[Mm]emoryCaptures/ 16 | 17 | # Recordings can get excessive in size 18 | /[Rr]ecordings/ 19 | 20 | # Uncomment this line if you wish to ignore the asset store tools plugin 21 | # /[Aa]ssets/AssetStoreTools* 22 | 23 | # Autogenerated Jetbrains Rider plugin 24 | /[Aa]ssets/Plugins/Editor/JetBrains* 25 | 26 | # Visual Studio cache directory 27 | .vs/ 28 | 29 | # Gradle cache directory 30 | .gradle/ 31 | 32 | # Autogenerated VS/MD/Consulo solution and project files 33 | ExportedObj/ 34 | .consulo/ 35 | *.csproj 36 | *.unityproj 37 | *.sln 38 | *.suo 39 | *.tmp 40 | *.user 41 | *.userprefs 42 | *.pidb 43 | *.booproj 44 | *.svd 45 | *.pdb 46 | *.mdb 47 | *.opendb 48 | *.VC.db 49 | 50 | # Unity3D generated meta files 51 | *.pidb.meta 52 | *.pdb.meta 53 | *.mdb.meta 54 | 55 | # Unity3D generated file on crash reports 56 | sysinfo.txt 57 | 58 | # Builds 59 | *.apk 60 | *.aab 61 | *.unitypackage 62 | *.app 63 | 64 | # Crashlytics generated file 65 | crashlytics-build.properties 66 | 67 | # Packed Addressables 68 | /[Aa]ssets/[Aa]ddressable[Aa]ssets[Dd]ata/*/*.bin* 69 | 70 | # Temporary auto-generated Android Assets 71 | /[Aa]ssets/[Ss]treamingAssets/aa.meta 72 | /[Aa]ssets/[Ss]treamingAssets/aa/* 73 | 74 | 75 | 76 | # Project specific exceptions 77 | 78 | # Folder with recorded data samples 79 | Test-data/ 80 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Recorders/CameraLookAtPositionRecorder.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | /// 4 | /// Example of event recorder, that tracks and saves camera look at position (Raycast) in specified interval. 5 | /// 6 | public class CameraLookAtPositionRecorder : AbstractEventIntervalRecorder 7 | { 8 | [SerializeField] 9 | private Camera cameraToRecord = null; 10 | [SerializeField] 11 | private string dataPath; 12 | [SerializeField] 13 | private string eventName; 14 | [SerializeField] 15 | private bool createFileIfNonFound; 16 | 17 | private IEventWriter eventWriter; 18 | 19 | private readonly Vector3 centerOfScreen = new(0.5F, 0.5F, 0.5F); 20 | 21 | 22 | void Awake() 23 | { 24 | if (!record) return; 25 | 26 | if (!IsCameraOnTheScene()) 27 | { 28 | record = false; 29 | return; 30 | } 31 | 32 | eventWriter = new JSONEventWriter(dataPath, createFileIfNonFound); 33 | record = eventWriter.IsWriterAvailable(); 34 | 35 | if (record) StartCoroutine(StartEventRecording()); 36 | } 37 | 38 | protected override void RecordAndSaveEvent() 39 | { 40 | BaseEvent baseEvent = PrepareData(); 41 | 42 | if (baseEvent == null) return; 43 | 44 | eventWriter.SaveEvent(baseEvent); 45 | } 46 | 47 | private BaseEvent PrepareData() 48 | { 49 | Ray ray = cameraToRecord.ViewportPointToRay(centerOfScreen); 50 | RaycastHit hit; 51 | 52 | if (Physics.Raycast(ray, out hit, 50F, 1, QueryTriggerInteraction.Ignore)) 53 | { 54 | return new BaseEvent(eventName, hit.point); 55 | } 56 | 57 | return null; 58 | } 59 | 60 | private bool IsCameraOnTheScene() 61 | { 62 | return cameraToRecord != null; 63 | } 64 | } 65 | -------------------------------------------------------------------------------- /Assets/PrefabExamples/HeatmapRecorders.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &6283534411946638570 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 6283534411946638569} 12 | - component: {fileID: 6283534411946638568} 13 | - component: {fileID: 6283534411946638571} 14 | m_Layer: 0 15 | m_Name: HeatmapRecorders 16 | m_TagString: Untagged 17 | m_Icon: {fileID: 0} 18 | m_NavMeshLayer: 0 19 | m_StaticEditorFlags: 0 20 | m_IsActive: 1 21 | --- !u!4 &6283534411946638569 22 | Transform: 23 | m_ObjectHideFlags: 0 24 | m_CorrespondingSourceObject: {fileID: 0} 25 | m_PrefabInstance: {fileID: 0} 26 | m_PrefabAsset: {fileID: 0} 27 | m_GameObject: {fileID: 6283534411946638570} 28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 29 | m_LocalPosition: {x: 0, y: 0, z: 0} 30 | m_LocalScale: {x: 1, y: 1, z: 1} 31 | m_ConstrainProportionsScale: 0 32 | m_Children: [] 33 | m_Father: {fileID: 0} 34 | m_RootOrder: 0 35 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 36 | --- !u!114 &6283534411946638568 37 | MonoBehaviour: 38 | m_ObjectHideFlags: 0 39 | m_CorrespondingSourceObject: {fileID: 0} 40 | m_PrefabInstance: {fileID: 0} 41 | m_PrefabAsset: {fileID: 0} 42 | m_GameObject: {fileID: 6283534411946638570} 43 | m_Enabled: 1 44 | m_EditorHideFlags: 0 45 | m_Script: {fileID: 11500000, guid: f3135f00e6351d24684d6bd483cf76fe, type: 3} 46 | m_Name: 47 | m_EditorClassIdentifier: 48 | interval: 0.5 49 | record: 1 50 | cameraToRecord: {fileID: 0} 51 | dataPath: YOUR_PATH.\......\Assets\Test-data\json-test123.txt 52 | eventName: Camera Look At 53 | createFileIfNonFound: 1 54 | --- !u!114 &6283534411946638571 55 | MonoBehaviour: 56 | m_ObjectHideFlags: 0 57 | m_CorrespondingSourceObject: {fileID: 0} 58 | m_PrefabInstance: {fileID: 0} 59 | m_PrefabAsset: {fileID: 0} 60 | m_GameObject: {fileID: 6283534411946638570} 61 | m_Enabled: 1 62 | m_EditorHideFlags: 0 63 | m_Script: {fileID: 11500000, guid: af210dc2a46f14b4480719ec3e7f57bd, type: 3} 64 | m_Name: 65 | m_EditorClassIdentifier: 66 | interval: 0.5 67 | record: 1 68 | objectToRecord: {fileID: 0} 69 | dataPath: YOUR_PATH.\......\Assets\Test-data\json-test123.txt 70 | eventName: Object Position 71 | createFileIfNonFound: 1 72 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Readers/JSONEventReader.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.IO; 3 | using UnityEngine; 4 | 5 | public class JSONEventReader : IEventReader 6 | { 7 | private readonly string path; 8 | 9 | private readonly bool hasFileToRead; 10 | 11 | public JSONEventReader(string path) 12 | { 13 | this.path = path; 14 | hasFileToRead = Startup(); 15 | } 16 | 17 | bool IEventReader.ReaderIsAvailable() 18 | { 19 | return hasFileToRead; 20 | } 21 | 22 | List IEventReader.ReadEvents() 23 | { 24 | Dictionary events = new(); 25 | 26 | using (FileStream fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.ReadWrite)) 27 | using (BufferedStream bs = new(fs)) 28 | using (StreamReader sr = new(bs)) 29 | { 30 | string line; 31 | while ((line = sr.ReadLine()) != null) 32 | { 33 | BaseEvent baseEvent = JsonUtility.FromJson(line); 34 | 35 | if (baseEvent.EventName != null) 36 | { 37 | AddBaseEventToEventData(baseEvent, events); 38 | } 39 | else 40 | { 41 | Debug.Log("line is invalid : " + line); 42 | } 43 | } 44 | } 45 | 46 | return new List(events.Values); 47 | } 48 | 49 | private void AddBaseEventToEventData(BaseEvent baseEvent, Dictionary events) 50 | { 51 | EventData currentLineEvent; 52 | 53 | // if event name is not in the EventData list, new EventData should be created 54 | if (!events.TryGetValue(baseEvent.EventName, out currentLineEvent)) 55 | { 56 | currentLineEvent = new(); 57 | currentLineEvent.EventName = baseEvent.EventName; 58 | events.Add(baseEvent.EventName, currentLineEvent); 59 | } 60 | 61 | MergedEventPosition eventPosition = new(); 62 | eventPosition.Position = baseEvent.Position; 63 | 64 | currentLineEvent.Positions.Add(eventPosition); 65 | } 66 | 67 | private bool Startup() 68 | { 69 | if (File.Exists(path)) 70 | { 71 | return true; 72 | } 73 | else 74 | { 75 | Debug.LogError("Invalid path, no file found: " + path); 76 | return false; 77 | } 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /Dist/Assets/heatmap-screenshot1.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 5ed4da8cbb38a45449d5a5c8284ca685 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: 1 36 | aniso: 1 37 | mipBias: 0 38 | wrapU: 0 39 | wrapV: 0 40 | wrapW: 0 41 | nPOTScale: 1 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 0 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 0 54 | spriteTessellationDetail: -1 55 | textureType: 0 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | flipbookRows: 1 59 | flipbookColumns: 1 60 | maxTextureSizeSet: 0 61 | compressionQualitySet: 0 62 | textureFormatSet: 0 63 | ignorePngGamma: 0 64 | applyGammaDecoding: 0 65 | platformSettings: 66 | - serializedVersion: 3 67 | buildTarget: DefaultTexturePlatform 68 | maxTextureSize: 2048 69 | resizeAlgorithm: 0 70 | textureFormat: -1 71 | textureCompression: 1 72 | compressionQuality: 50 73 | crunchedCompression: 0 74 | allowsAlphaSplitting: 0 75 | overridden: 0 76 | androidETC2FallbackOverride: 0 77 | forceMaximumCompressionQuality_BC6H_BC7: 0 78 | spriteSheet: 79 | serializedVersion: 2 80 | sprites: [] 81 | outline: [] 82 | physicsShape: [] 83 | bones: [] 84 | spriteID: 85 | internalID: 0 86 | vertices: [] 87 | indices: 88 | edges: [] 89 | weights: [] 90 | secondaryTextures: [] 91 | spritePackingTag: 92 | pSDRemoveMatte: 0 93 | pSDShowRemoveMatteOption: 0 94 | userData: 95 | assetBundleName: 96 | assetBundleVariant: 97 | -------------------------------------------------------------------------------- /Dist/Assets/heatmap-screenshot2.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 04ea3a4c82bffe14e97d0d40e39eed97 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: 1 36 | aniso: 1 37 | mipBias: 0 38 | wrapU: 0 39 | wrapV: 0 40 | wrapW: 0 41 | nPOTScale: 1 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 0 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 0 54 | spriteTessellationDetail: -1 55 | textureType: 0 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | flipbookRows: 1 59 | flipbookColumns: 1 60 | maxTextureSizeSet: 0 61 | compressionQualitySet: 0 62 | textureFormatSet: 0 63 | ignorePngGamma: 0 64 | applyGammaDecoding: 0 65 | platformSettings: 66 | - serializedVersion: 3 67 | buildTarget: DefaultTexturePlatform 68 | maxTextureSize: 2048 69 | resizeAlgorithm: 0 70 | textureFormat: -1 71 | textureCompression: 1 72 | compressionQuality: 50 73 | crunchedCompression: 0 74 | allowsAlphaSplitting: 0 75 | overridden: 0 76 | androidETC2FallbackOverride: 0 77 | forceMaximumCompressionQuality_BC6H_BC7: 0 78 | spriteSheet: 79 | serializedVersion: 2 80 | sprites: [] 81 | outline: [] 82 | physicsShape: [] 83 | bones: [] 84 | spriteID: 85 | internalID: 0 86 | vertices: [] 87 | indices: 88 | edges: [] 89 | weights: [] 90 | secondaryTextures: [] 91 | spritePackingTag: 92 | pSDRemoveMatte: 0 93 | pSDShowRemoveMatteOption: 0 94 | userData: 95 | assetBundleName: 96 | assetBundleVariant: 97 | -------------------------------------------------------------------------------- /Dist/Assets/heatmap-screenshot3.png.meta: -------------------------------------------------------------------------------- 1 | fileFormatVersion: 2 2 | guid: 4c89c31671b37444ba8fc3378a7358e3 3 | TextureImporter: 4 | internalIDToNameTable: [] 5 | externalObjects: {} 6 | serializedVersion: 11 7 | mipmaps: 8 | mipMapMode: 0 9 | enableMipMap: 1 10 | sRGBTexture: 1 11 | linearTexture: 0 12 | fadeOut: 0 13 | borderMipMap: 0 14 | mipMapsPreserveCoverage: 0 15 | alphaTestReferenceValue: 0.5 16 | mipMapFadeDistanceStart: 1 17 | mipMapFadeDistanceEnd: 3 18 | bumpmap: 19 | convertToNormalMap: 0 20 | externalNormalMap: 0 21 | heightScale: 0.25 22 | normalMapFilter: 0 23 | isReadable: 0 24 | streamingMipmaps: 0 25 | streamingMipmapsPriority: 0 26 | vTOnly: 0 27 | grayScaleToAlpha: 0 28 | generateCubemap: 6 29 | cubemapConvolution: 0 30 | seamlessCubemap: 0 31 | textureFormat: 1 32 | maxTextureSize: 2048 33 | textureSettings: 34 | serializedVersion: 2 35 | filterMode: 1 36 | aniso: 1 37 | mipBias: 0 38 | wrapU: 0 39 | wrapV: 0 40 | wrapW: 0 41 | nPOTScale: 1 42 | lightmap: 0 43 | compressionQuality: 50 44 | spriteMode: 0 45 | spriteExtrude: 1 46 | spriteMeshType: 1 47 | alignment: 0 48 | spritePivot: {x: 0.5, y: 0.5} 49 | spritePixelsToUnits: 100 50 | spriteBorder: {x: 0, y: 0, z: 0, w: 0} 51 | spriteGenerateFallbackPhysicsShape: 1 52 | alphaUsage: 1 53 | alphaIsTransparency: 0 54 | spriteTessellationDetail: -1 55 | textureType: 0 56 | textureShape: 1 57 | singleChannelComponent: 0 58 | flipbookRows: 1 59 | flipbookColumns: 1 60 | maxTextureSizeSet: 0 61 | compressionQualitySet: 0 62 | textureFormatSet: 0 63 | ignorePngGamma: 0 64 | applyGammaDecoding: 0 65 | platformSettings: 66 | - serializedVersion: 3 67 | buildTarget: DefaultTexturePlatform 68 | maxTextureSize: 2048 69 | resizeAlgorithm: 0 70 | textureFormat: -1 71 | textureCompression: 1 72 | compressionQuality: 50 73 | crunchedCompression: 0 74 | allowsAlphaSplitting: 0 75 | overridden: 0 76 | androidETC2FallbackOverride: 0 77 | forceMaximumCompressionQuality_BC6H_BC7: 0 78 | spriteSheet: 79 | serializedVersion: 2 80 | sprites: [] 81 | outline: [] 82 | physicsShape: [] 83 | bones: [] 84 | spriteID: 85 | internalID: 0 86 | vertices: [] 87 | indices: 88 | edges: [] 89 | weights: [] 90 | secondaryTextures: [] 91 | spritePackingTag: 92 | pSDRemoveMatte: 0 93 | pSDShowRemoveMatteOption: 0 94 | userData: 95 | assetBundleName: 96 | assetBundleVariant: 97 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Writers/JSONEventWriter.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.IO; 3 | using UnityEngine; 4 | 5 | public class JSONEventWriter : IEventWriter 6 | { 7 | private readonly bool createFileIfNonFound; 8 | private readonly string path; 9 | 10 | private readonly bool hasFileToWrite; 11 | 12 | public JSONEventWriter(string path, bool createFileIfNonFound) 13 | { 14 | this.path = path; 15 | 16 | this.createFileIfNonFound = createFileIfNonFound; 17 | hasFileToWrite = Startup(); 18 | } 19 | 20 | bool IEventWriter.IsWriterAvailable() 21 | { 22 | return hasFileToWrite; 23 | } 24 | 25 | bool IEventWriter.SaveEvent(BaseEvent baseEvent) 26 | { 27 | if (!hasFileToWrite || !File.Exists(path)) 28 | { 29 | return false; 30 | } 31 | 32 | StreamWriter writer = new StreamWriter(path, true); 33 | 34 | try 35 | { 36 | writer.WriteLine(ComposeJsonString(baseEvent)); 37 | 38 | return true; 39 | } 40 | catch (System.Exception e) 41 | { 42 | Debug.Log(e.ToString()); 43 | 44 | return false; 45 | } 46 | finally 47 | { 48 | writer.Close(); 49 | } 50 | } 51 | 52 | bool IEventWriter.SaveEvents(List baseEvents) 53 | { 54 | if (!hasFileToWrite || !File.Exists(path)) 55 | { 56 | return false; 57 | } 58 | 59 | StreamWriter writer = new StreamWriter(path, true); 60 | 61 | try 62 | { 63 | foreach (BaseEvent baseEvent in baseEvents) 64 | { 65 | writer.Write(ComposeJsonString(baseEvent)); 66 | } 67 | 68 | return true; 69 | } 70 | catch (System.Exception e) 71 | { 72 | Debug.Log(e.ToString()); 73 | 74 | return false; 75 | } 76 | finally 77 | { 78 | writer.Close(); 79 | } 80 | } 81 | 82 | private bool CreateFile(string path) 83 | { 84 | if (!createFileIfNonFound) return false; 85 | 86 | try 87 | { 88 | File.Create(path); 89 | 90 | return true; 91 | } 92 | catch (System.Exception e) 93 | { 94 | Debug.Log(e.ToString()); 95 | 96 | return false; 97 | } 98 | } 99 | 100 | private string ComposeJsonString(BaseEvent baseEvent) 101 | { 102 | return JsonUtility.ToJson(baseEvent); 103 | } 104 | 105 | private bool Startup() 106 | { 107 | if (File.Exists(path)) return true; 108 | 109 | if (!createFileIfNonFound) return false; 110 | 111 | return CreateFile(path); 112 | } 113 | } 114 | -------------------------------------------------------------------------------- /Assets/PrefabExamples/Heatmap.prefab: -------------------------------------------------------------------------------- 1 | %YAML 1.1 2 | %TAG !u! tag:unity3d.com,2011: 3 | --- !u!1 &3175518005933439389 4 | GameObject: 5 | m_ObjectHideFlags: 0 6 | m_CorrespondingSourceObject: {fileID: 0} 7 | m_PrefabInstance: {fileID: 0} 8 | m_PrefabAsset: {fileID: 0} 9 | serializedVersion: 6 10 | m_Component: 11 | - component: {fileID: 3175518005933439387} 12 | - component: {fileID: 3175518005933439386} 13 | - component: {fileID: 3175518005933439384} 14 | m_Layer: 0 15 | m_Name: Heatmap 16 | m_TagString: Untagged 17 | m_Icon: {fileID: 0} 18 | m_NavMeshLayer: 0 19 | m_StaticEditorFlags: 0 20 | m_IsActive: 1 21 | --- !u!4 &3175518005933439387 22 | Transform: 23 | m_ObjectHideFlags: 0 24 | m_CorrespondingSourceObject: {fileID: 0} 25 | m_PrefabInstance: {fileID: 0} 26 | m_PrefabAsset: {fileID: 0} 27 | m_GameObject: {fileID: 3175518005933439389} 28 | m_LocalRotation: {x: 0, y: 0, z: 0, w: 1} 29 | m_LocalPosition: {x: 3.92, y: 9.63, z: 12.57} 30 | m_LocalScale: {x: 1, y: 1, z: 1} 31 | m_Children: [] 32 | m_Father: {fileID: 0} 33 | m_RootOrder: 0 34 | m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0} 35 | --- !u!114 &3175518005933439386 36 | MonoBehaviour: 37 | m_ObjectHideFlags: 0 38 | m_CorrespondingSourceObject: {fileID: 0} 39 | m_PrefabInstance: {fileID: 0} 40 | m_PrefabAsset: {fileID: 0} 41 | m_GameObject: {fileID: 3175518005933439389} 42 | m_Enabled: 1 43 | m_EditorHideFlags: 0 44 | m_Script: {fileID: 11500000, guid: dc8f4f597add486478db33348dcbebd3, type: 3} 45 | m_Name: 46 | m_EditorClassIdentifier: 47 | settings: 48 | heightInParticles: 7 49 | maxColoringDistance: 4 50 | ignoreYforColoring: 1 51 | gradient: 52 | serializedVersion: 2 53 | key0: {r: 0.16824146, g: 0.15307939, b: 0.754717, a: 0.12156863} 54 | key1: {r: 0.328816, g: 0.5568628, b: 0.08627451, a: 0.46666667} 55 | key2: {r: 0.9811321, g: 0.013883919, b: 0.013883919, a: 0} 56 | key3: {r: 0, g: 0, b: 0, a: 0} 57 | key4: {r: 0, g: 0, b: 0, a: 0} 58 | key5: {r: 0, g: 0, b: 0, a: 0} 59 | key6: {r: 0, g: 0, b: 0, a: 0} 60 | key7: {r: 0, g: 0, b: 0, a: 0} 61 | ctime0: 0 62 | ctime1: 31226 63 | ctime2: 65535 64 | ctime3: 0 65 | ctime4: 0 66 | ctime5: 0 67 | ctime6: 0 68 | ctime7: 0 69 | atime0: 0 70 | atime1: 65535 71 | atime2: 0 72 | atime3: 0 73 | atime4: 0 74 | atime5: 0 75 | atime6: 0 76 | atime7: 0 77 | m_Mode: 0 78 | m_NumColorKeys: 3 79 | m_NumAlphaKeys: 2 80 | particleDistance: 0.2 81 | colorMultiplier: 0.4 82 | particleSize: 2 83 | colorCutoff: 0 84 | particleMaterial: {fileID: 10301, guid: 0000000000000000f000000000000000, type: 0} 85 | maxParticleNumber: 50000 86 | pathForReadingData: Assets/Heatmap/Assets/Test-data/json-test123.txt 87 | --- !u!65 &3175518005933439384 88 | BoxCollider: 89 | m_ObjectHideFlags: 0 90 | m_CorrespondingSourceObject: {fileID: 0} 91 | m_PrefabInstance: {fileID: 0} 92 | m_PrefabAsset: {fileID: 0} 93 | m_GameObject: {fileID: 3175518005933439389} 94 | m_Material: {fileID: 0} 95 | m_IsTrigger: 1 96 | m_Enabled: 1 97 | serializedVersion: 2 98 | m_Size: {x: 35, y: 20, z: 36} 99 | m_Center: {x: 0, y: 0, z: 0} 100 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Unity Heatmap 2 | 3 | 4 | ## About 5 | Unity Heatmap is a Unity3D package built with C#. It allows recording of different Vector3 positions for different events(for example movement, some in-game events, or positions of points on another object where to player’s camera is facing), storing it, calculating, and then visualizing it with the usage of the heatmap. 6 | 7 | A heatmap (or heat map) is a data visualization technique that shows the magnitude of a phenomenon as color in two dimensions (or sometimes in three dimensions ). 8 | This package offers a heatmap that is highly configurable and can deal with big amounts of data. 9 |

10 | 11 |     12 | 13 |

14 | 15 | ## Settings 16 | Screenshot 2023-01-01 at 18 04 59 17 | 18 | 19 | ### Button - Load events from a file 20 | Loads events from file with provided path and stores data in memory. After reading the event you will see options in the "Events" setting. 21 | 22 | ### Button - Initialize particle system 23 | Creates and configures particle system for heatmap on this game object. You should activate it if you changed the configuration of the heatmap (such as particle distance or particle size) in run-time. 24 | 25 | ### Button - Generate heatmap 26 | Adds events to heatmap and calculates color for its particles. 27 | 28 | ### Button - Reset heatmap values 29 | Resets the color of particles in the heatmap to default 30 | 31 | ### Events 32 | Here you can choose, which events from the provided file should be visualized 33 | 34 | ### Distance between particles 35 | This setting changes the distance between particles. A smaller distance will result in more particles in total and worse performance, but a smoother heatmap. 36 | 37 | 38 | 39 | **After changing this setting "Initialize particle system" MUST be called.** 40 | 41 | ### Particle size 42 | Changes the size of each particle. Mostly changes how smooth the heatmap looks and if doesn't have gaps between particles. If performance is important for big heatmaps particle size and distance between particles should be increased (fewer particles in total). 43 | 44 | 45 | 46 | **After changing this setting "Initialize particle system" MUST be called.** 47 | 48 | ### Coloring Multiplier 49 | Changes how much each event changes the color of particles near it (depending on distance, but this value is the maximum value). For bigger data sets should be decreased, and for a smaller increases. 50 | 51 | ### Coloring Distance 52 | Changes distance in which each event changes particle color. 53 | 54 | ### Gradient 55 | The gradient is used after the calculation of the color value of the particle (from 0 to 1) to determine its real color. 56 | 57 | You can use your gradients, different colors, different transparency, etc. 58 | 59 | ### Color Cutoff 60 | This setting is used to determine which particles with which color value should be displayed, and which not. 61 | 62 | If the value here is 0.5 all particles with a color value less than 0.5 will not be displayed. 63 | 64 | Setting this value at 0 will display ALL particles and particles with 0 color value (no event data nearby). 65 | 66 | ### Height in particles 67 | 68 | By default, heatmap uses the size of its game objects collider to calculate the height of the heatmap in particles. 69 | 70 | If you want to override it this setting can be used (also should be used, when the "Ignore height for color calculations" setting is on) 71 | 72 | 73 | 74 | **After changing this setting "Initialize particle system" MUST be called.** 75 | 76 | ### Ignore height for color calculations 77 | If this setting is on, the y-axis of events data will be ignored while calculating the heatmap. That will result in a flat(2D heatmap). 78 | 79 | If this setting is off, generated heatmap will be 3D. 80 | 81 | 82 | ## TODO at some point 83 | - Add in memory recorder and reader (to record and visualize data without writing to file = live) 84 | - Maybe debug and test performance to allow even bigger data sets / faster visualization 85 | - ...... more than just heatmap as visualization option ? 86 | -------------------------------------------------------------------------------- /Assets/Scripts/Controller/HeatmapController.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Diagnostics; 4 | using UnityEngine; 5 | using Debug = UnityEngine.Debug; 6 | 7 | public class HeatmapController : MonoBehaviour 8 | { 9 | [Serializable] 10 | public class Settings 11 | { 12 | public int heightInParticles; 13 | public float maxColoringDistance; 14 | public bool ignoreYforColoring = false; 15 | public Gradient gradient; 16 | public float particleDistance; 17 | public float colorMultiplier; 18 | public float particleSize; 19 | public float colorCutoff; 20 | public Material particleMaterial; 21 | public int maxParticleNumber = 50000; 22 | 23 | public string pathForReadingData; 24 | } 25 | public Settings settings = new(); 26 | 27 | public List events = new(); 28 | 29 | private IEventReader eventReader; 30 | private HeatmapVisualisation heatmapVisualisation; 31 | 32 | private bool eventsAreLoaded = false; 33 | private bool particleSystemIsInitialized = false; 34 | 35 | private void Awake() 36 | { 37 | heatmapVisualisation = new HeatmapVisualisation(settings); 38 | } 39 | 40 | /// 41 | /// Loads events from file into events property (that also makes them display in heatmap configuration) 42 | /// 43 | public void LoadEvents() 44 | { 45 | Stopwatch stopwatch = new(); 46 | stopwatch.Start(); 47 | 48 | eventReader = new JSONEventReader(settings.pathForReadingData); 49 | 50 | if (eventReader.ReaderIsAvailable()) 51 | { 52 | events = eventReader.ReadEvents(); 53 | eventsAreLoaded = true; 54 | } 55 | else 56 | { 57 | eventsAreLoaded = false; 58 | Debug.Log("Error while trying to read events. Event reader is not available"); 59 | } 60 | 61 | stopwatch.Stop(); 62 | Debug.Log("LoadEvents - Elapsed Time is " + stopwatch.ElapsedMilliseconds + " ms"); 63 | } 64 | 65 | /// 66 | /// Creates and configures particle system (and particle array) 67 | /// 68 | public void InitializeParticleSystem() 69 | { 70 | Stopwatch stopwatch = new(); 71 | stopwatch.Start(); 72 | 73 | heatmapVisualisation.InitializeParticleSystem(gameObject); 74 | heatmapVisualisation.InitializeParticleArray(); 75 | particleSystemIsInitialized = true; 76 | 77 | stopwatch.Stop(); 78 | Debug.Log("InitializeParticleSystem - Elapsed Time is " + stopwatch.ElapsedMilliseconds + " ms"); 79 | } 80 | 81 | /// 82 | /// Resets heatmap color(color values) to default 83 | /// 84 | public void ResetHeatmap() 85 | { 86 | heatmapVisualisation.ResetParticlesColor(); 87 | heatmapVisualisation.UpdateParticlesInParticleSystem(); 88 | } 89 | 90 | /// 91 | /// Adds selected (in Editor window) events to heatmap and updates heatmap with their values 92 | /// 93 | public void AddSelectedEventsToHeatmap() 94 | { 95 | 96 | Stopwatch stopwatch = new(); 97 | stopwatch.Start(); 98 | 99 | heatmapVisualisation.ResetParticlesColor(); 100 | 101 | foreach (EventData eventData in events) 102 | { 103 | if (eventData.ShouldEventBeVisualised) 104 | { 105 | heatmapVisualisation.AddEventToHeatMap(eventData); 106 | } 107 | } 108 | 109 | heatmapVisualisation.UpdateParticlesInParticleSystem(); 110 | 111 | stopwatch.Stop(); 112 | Debug.Log("AddEventsToHeatMap - Elapsed Time is " + stopwatch.ElapsedMilliseconds + " ms"); 113 | } 114 | 115 | /// 116 | /// Status of Load Events action. (see HeatmapGUI.cs for usage)) 117 | /// 118 | public bool IsLoadEventsActive() 119 | { 120 | return !string.IsNullOrEmpty(settings.pathForReadingData); 121 | } 122 | 123 | /// 124 | /// Status of Initialize Particle System action. (see HeatmapGUI.cs for usage) 125 | /// 126 | public bool IsInitializeParticleSystemActive() 127 | { 128 | return GetComponent() != null; 129 | } 130 | 131 | /// 132 | /// Status of Add Events to Heatmap action. (see HeatmapGUI.cs for usage) 133 | /// 134 | public bool IsAddEventToHeatMapActive() 135 | { 136 | return eventsAreLoaded && particleSystemIsInitialized; 137 | } 138 | 139 | /// 140 | /// Status of Reset Heatmap action. (see HeatmapGUI.cs for usage) 141 | /// 142 | public bool IsResetHeatmapActive() 143 | { 144 | return particleSystemIsInitialized; 145 | } 146 | } -------------------------------------------------------------------------------- /Assets/Editor/HeatmapGUI.cs: -------------------------------------------------------------------------------- 1 | using UnityEditor; 2 | using UnityEngine; 3 | 4 | /// 5 | /// Controls Heatmap controller GUI in Editor window 6 | /// 7 | [CustomEditor(typeof(HeatmapController))] 8 | public class HeatmapGUI : Editor 9 | { 10 | private HeatmapController heatmapController; 11 | 12 | private SerializedObject serializedGradient; 13 | 14 | public override void OnInspectorGUI() 15 | { 16 | heatmapController = (HeatmapController)target; 17 | 18 | AddMethodButtons(); 19 | 20 | // set enabled to true to prevent buttons 'enabled' setting to affect other elements below them 21 | GUI.enabled = true; 22 | 23 | AddEventsSelect(); 24 | 25 | AddNormalSettings(); 26 | 27 | AddAdvancedSettings(); 28 | 29 | // gradient changes must be applied in the end of OnInspectorGUI 30 | serializedGradient.ApplyModifiedProperties(); 31 | } 32 | 33 | private void AddMethodButtons() 34 | { 35 | GUILayout.Label("\nActions", EditorStyles.boldLabel); 36 | 37 | AddLoadEventsButton(); 38 | AddInitializeParticleSystemButton(); 39 | AddGenerateHeatmapButton(); 40 | AddResetHeatmapButton(); 41 | } 42 | 43 | private void AddLoadEventsButton() 44 | { 45 | GUI.enabled = heatmapController.IsLoadEventsActive(); 46 | if (GUILayout.Button(new GUIContent("Load events from file"))) 47 | { 48 | if (Application.isPlaying) 49 | { 50 | heatmapController.LoadEvents(); 51 | } 52 | } 53 | } 54 | 55 | private void AddResetHeatmapButton() 56 | { 57 | GUI.enabled = heatmapController.IsResetHeatmapActive(); 58 | if (GUILayout.Button(new GUIContent("Reset heatmap values", "Resets heatmap color values to default values"))) 59 | { 60 | if (Application.isPlaying) 61 | { 62 | heatmapController.ResetHeatmap(); 63 | } 64 | } 65 | } 66 | 67 | private void AddInitializeParticleSystemButton() 68 | { 69 | GUI.enabled = heatmapController.IsInitializeParticleSystemActive(); 70 | if (GUILayout.Button(new GUIContent("Initialize particle system", "Initializes particle system and prepares particle array"))) 71 | { 72 | if (Application.isPlaying) 73 | { 74 | heatmapController.InitializeParticleSystem(); 75 | } 76 | } 77 | } 78 | 79 | private void AddGenerateHeatmapButton() 80 | { 81 | GUI.enabled = heatmapController.IsAddEventToHeatMapActive(); 82 | if (GUILayout.Button(new GUIContent("Generate heatmap", "Calculates color of particles in particle system using data from selected events"))) 83 | { 84 | if (Application.isPlaying) 85 | { 86 | heatmapController.AddSelectedEventsToHeatmap(); 87 | } 88 | } 89 | } 90 | 91 | private void AddEventsSelect() 92 | { 93 | GUILayout.Label("\nEvents", EditorStyles.boldLabel); 94 | GUILayout.Label("Choose events, that should be visualized with heatmap\n"); 95 | 96 | if (heatmapController.events != null) 97 | { 98 | foreach (EventData eventData in heatmapController.events) 99 | { 100 | eventData.ShouldEventBeVisualised = EditorGUILayout.Toggle(eventData.EventName, eventData.ShouldEventBeVisualised); 101 | } 102 | } 103 | } 104 | 105 | private void AddNormalSettings() 106 | { 107 | GUILayout.Label("\nSettings", EditorStyles.boldLabel); 108 | 109 | heatmapController.settings.particleDistance = EditorGUILayout.Slider(new GUIContent("Distance between particles", "Smaller distance - improved visuals and precision. Bigger distance - improved performance"), heatmapController.settings.particleDistance, 0.1F, 5F); 110 | 111 | heatmapController.settings.particleSize = EditorGUILayout.Slider(new GUIContent("Particle Size", "(in Unity units)"), heatmapController.settings.particleSize, 0.01F, 15F); 112 | 113 | heatmapController.settings.colorMultiplier = EditorGUILayout.Slider(new GUIContent("Coloring Multiplier", "Defines how much one position will change color value of particles near it"), heatmapController.settings.colorMultiplier, 0, 1F); 114 | 115 | heatmapController.settings.maxColoringDistance = EditorGUILayout.Slider(new GUIContent("Coloring Distance", "Max distance in which event position will affect color of particles"), heatmapController.settings.maxColoringDistance, 0.01F, 15F); 116 | 117 | serializedGradient = new SerializedObject(target); 118 | SerializedProperty colorGradient = serializedGradient.FindProperty("settings.gradient"); 119 | EditorGUILayout.PropertyField(colorGradient, true, null); 120 | } 121 | 122 | private void AddAdvancedSettings() 123 | { 124 | GUILayout.Label("\nAdvanced Settings", EditorStyles.boldLabel); 125 | 126 | heatmapController.settings.colorCutoff = EditorGUILayout.Slider(new GUIContent("Color Cutoff", "Hides all particles with smaller color value (With 0 value cutout is deactivated)"), heatmapController.settings.colorCutoff, 0F, 1.01F); 127 | 128 | heatmapController.settings.heightInParticles = EditorGUILayout.IntSlider(new GUIContent("Height of particle system in particles", "(With 0 value height is calculated depending on collider height)"), heatmapController.settings.heightInParticles, 0, 50); 129 | 130 | heatmapController.settings.ignoreYforColoring = EditorGUILayout.Toggle(new GUIContent("Ignore height for color calculations", "(If true color will be calculated only depending on X and Z axes)"), heatmapController.settings.ignoreYforColoring); 131 | 132 | GUILayout.Label("\nPaths", EditorStyles.boldLabel); 133 | 134 | GUILayout.Label("Path for reading event data from file"); 135 | heatmapController.settings.pathForReadingData = GUILayout.TextField(heatmapController.settings.pathForReadingData); 136 | 137 | GUILayout.Label("\nMaterial", EditorStyles.boldLabel); 138 | 139 | GUILayout.Label("Use material, that is used in example prefab for heatmap. \n(or be creative if you know what you are doing)"); 140 | 141 | heatmapController.settings.particleMaterial = (Material)EditorGUILayout.ObjectField(heatmapController.settings.particleMaterial, typeof(Material), true); 142 | } 143 | 144 | } 145 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Visualisation/HeatmapParticleSystem.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using UnityEngine; 3 | using static UnityEngine.ParticleSystem; 4 | 5 | /// 6 | /// Controls interactions with particle system of heatmap 7 | /// 8 | public class HeatmapParticleSystem 9 | { 10 | private ParticleSystem particleSystem; 11 | 12 | /// 13 | /// This array is NOT representing directly real particles of particle system. It serves as buffer for particles. 14 | /// Particles in ParticleSystem can't be modified directly, so each change should be applied using particleSystem.SetParticles(). 15 | /// 16 | private Particle[,,] particles; 17 | 18 | private Bounds particleSystemBounds; 19 | private Vector3Int sizeInParticles; 20 | 21 | /// 22 | /// Creates and configures particle system for heatmap visualisation. 23 | /// 24 | /// Object that will contain ParticleSystem component 25 | public void InitializeParticleSystem(GameObject parent, HeatmapController.Settings settings) 26 | { 27 | particleSystemBounds = parent.GetComponent().bounds; 28 | particleSystem = CreateAndConfigureParticleSystem(parent, settings); 29 | } 30 | 31 | /// 32 | /// Creates and populates particle array 33 | /// 34 | public void CreateParticleArray(HeatmapController.Settings settings) 35 | { 36 | sizeInParticles = CalculateSizeOfParticleSystemInParticles(settings); 37 | 38 | particles = new Particle[sizeInParticles.x, sizeInParticles.y, sizeInParticles.z]; 39 | 40 | for (int x = 0; x < sizeInParticles.x; x += 1) 41 | { 42 | for (int y = 0; y < sizeInParticles.y; y += 1) 43 | { 44 | for (int z = 0; z < sizeInParticles.z; z += 1) 45 | { 46 | Particle particle = new(); 47 | 48 | Vector3 position = ConvertParticleGridPositionToGlobal(new Vector3Int(x, y, z), settings); 49 | particle.position = position; 50 | 51 | particle.startSize = settings.particleSize; 52 | particle.startColor = settings.gradient.Evaluate(0); 53 | 54 | particle.remainingLifetime = 1000; 55 | particle.startLifetime = 1000; 56 | 57 | particles[x, y, z] = particle; 58 | } 59 | } 60 | } 61 | } 62 | 63 | /// 64 | /// Checks particles and adds its particles to particle system. 65 | /// Depending on colorCutoff and their alpha, particles will be added or ignored. 66 | /// 67 | public void UpdateParticlesInParticleSystem(float[,,] particleColorValues, HeatmapController.Settings settings) 68 | { 69 | List particleList = new(); 70 | 71 | for (int x = 0; x < sizeInParticles.x; x += 1) 72 | { 73 | for (int y = 0; y < sizeInParticles.y; y += 1) 74 | { 75 | for (int z = 0; z < sizeInParticles.z; z += 1) 76 | { 77 | // the invisible particles / particles with color value lower than colorCutoff should NOT be added to particle system 78 | if (settings.colorCutoff <= particleColorValues[x, y, z]) 79 | { 80 | Color particleColor = settings.gradient.Evaluate(particleColorValues[x, y, z]); 81 | if (particleColor.a > 0.001f) 82 | { 83 | particles[x, y, z].startColor = particleColor; 84 | particleList.Add(particles[x, y, z]); 85 | } 86 | } 87 | } 88 | } 89 | } 90 | 91 | particleSystem.SetParticles(particleList.ToArray()); 92 | } 93 | 94 | 95 | /// 96 | /// Calculates size (bounds) of particle system in particles 97 | /// 98 | private Vector3Int CalculateSizeOfParticleSystemInParticles(HeatmapController.Settings settings) 99 | { 100 | Vector3Int calculatedSizeInParticles = Vector3Int.FloorToInt((particleSystemBounds.max - particleSystemBounds.min) / settings.particleDistance); 101 | 102 | if (settings.heightInParticles != 0) 103 | { 104 | calculatedSizeInParticles.y = settings.heightInParticles; 105 | } 106 | 107 | return calculatedSizeInParticles; 108 | } 109 | 110 | /// 111 | /// Converts global position to closest index in particle grid (particles array) 112 | /// 113 | public Vector3Int ConvertGlobalPositionToParticleGrid(Vector3 globalPosition, HeatmapController.Settings settings) 114 | { 115 | Vector3Int convertedPosition = Vector3Int.RoundToInt((globalPosition - particleSystemBounds.min) / settings.particleDistance); 116 | 117 | return convertedPosition; 118 | } 119 | 120 | /// 121 | /// Converts position in particles array to global position 122 | /// 123 | public Vector3 ConvertParticleGridPositionToGlobal(Vector3Int positionInParticleGrid, HeatmapController.Settings settings) 124 | { 125 | Vector3 convertedPosition; 126 | convertedPosition.x = (positionInParticleGrid.x * settings.particleDistance) + particleSystemBounds.min.x; 127 | convertedPosition.y = (positionInParticleGrid.y * settings.particleDistance) + particleSystemBounds.min.y; 128 | convertedPosition.z = (positionInParticleGrid.z * settings.particleDistance) + particleSystemBounds.min.z; 129 | 130 | return convertedPosition; 131 | } 132 | 133 | public Vector3Int GetSizeOfParticleSystemInParticles() 134 | { 135 | return sizeInParticles; 136 | } 137 | 138 | private ParticleSystem CreateAndConfigureParticleSystem(GameObject parent, HeatmapController.Settings settings) 139 | { 140 | ParticleSystem newParticleSystem = parent.AddComponent(); 141 | 142 | EmissionModule emission = newParticleSystem.emission; 143 | emission.enabled = false; 144 | 145 | ShapeModule shape = newParticleSystem.shape; 146 | shape.enabled = false; 147 | 148 | ParticleSystemRenderer renderer = parent.GetComponent(); 149 | renderer.sortMode = ParticleSystemSortMode.Distance; 150 | renderer.allowRoll = false; 151 | renderer.alignment = ParticleSystemRenderSpace.Facing; 152 | 153 | MainModule main = newParticleSystem.main; 154 | main.loop = false; 155 | main.simulationSpace = ParticleSystemSimulationSpace.World; 156 | main.maxParticles = settings.maxParticleNumber; 157 | main.playOnAwake = false; 158 | 159 | 160 | renderer.material = settings.particleMaterial; 161 | 162 | return newParticleSystem; 163 | } 164 | } 165 | -------------------------------------------------------------------------------- /Assets/Scripts/Util/Visualisation/HeatmapVisualisation.cs: -------------------------------------------------------------------------------- 1 | using UnityEngine; 2 | 3 | public class HeatmapVisualisation 4 | { 5 | private readonly HeatmapController.Settings settings; 6 | 7 | private HeatmapParticleSystem heatmapParticleSystem; 8 | 9 | private float[,,] particleColorValues; 10 | 11 | public HeatmapVisualisation(HeatmapController.Settings settings) 12 | { 13 | this.settings = settings; 14 | 15 | heatmapParticleSystem = new HeatmapParticleSystem(); 16 | } 17 | 18 | /// 19 | /// Creates and configures particle system for heatmap visualisation. 20 | /// 21 | /// Object that will contain ParticleSystem component 22 | public void InitializeParticleSystem(GameObject parent) 23 | { 24 | if (parent.GetComponent() != null) 25 | { 26 | Debug.Log("There is particle system present on parent object already!"); 27 | 28 | return; 29 | } 30 | 31 | if (settings.particleMaterial == null) 32 | { 33 | Debug.LogError("Particle material is not defined in settings!"); 34 | 35 | return; 36 | } 37 | 38 | heatmapParticleSystem.InitializeParticleSystem(parent, settings); 39 | } 40 | 41 | /// 42 | /// Initializes particle array and populates it with particles with default color value. 43 | /// 44 | public void InitializeParticleArray() 45 | { 46 | heatmapParticleSystem.CreateParticleArray(settings); 47 | 48 | Vector3Int sizeInParticles = heatmapParticleSystem.GetSizeOfParticleSystemInParticles(); 49 | particleColorValues = new float[sizeInParticles.x, sizeInParticles.y, sizeInParticles.z]; 50 | 51 | UpdateParticlesInParticleSystem(); 52 | } 53 | 54 | /// 55 | /// Adds all positions from eventData to heatmap (by calculating new color values for affected particles) 56 | /// 57 | public void AddEventToHeatMap(EventData eventData) 58 | { 59 | foreach (MergedEventPosition eventPosition in eventData.Positions) 60 | { 61 | AddOnePositionToHeatmap(eventPosition); 62 | } 63 | } 64 | 65 | /// 66 | /// Resets color value of all particles to default (0f) 67 | /// 68 | public void ResetParticlesColor() 69 | { 70 | Vector3Int sizeInParticles = heatmapParticleSystem.GetSizeOfParticleSystemInParticles(); 71 | particleColorValues = new float[sizeInParticles.x, sizeInParticles.y, sizeInParticles.z]; 72 | } 73 | 74 | public void UpdateParticlesInParticleSystem() 75 | { 76 | heatmapParticleSystem.UpdateParticlesInParticleSystem(particleColorValues, settings); 77 | } 78 | 79 | private void AddOnePositionToHeatmap(MergedEventPosition eventPosition) 80 | { 81 | Vector3Int eventPositionInParticleGrid = heatmapParticleSystem.ConvertGlobalPositionToParticleGrid(eventPosition.Position, settings); 82 | Vector3Int sizeInParticles = heatmapParticleSystem.GetSizeOfParticleSystemInParticles(); 83 | 84 | // calculate bounds in which particles can be affected by eventPosition 85 | Vector3Int minBound = CalculateMinBound(eventPositionInParticleGrid); 86 | Vector3Int maxBound = CalculateMaxBound(eventPositionInParticleGrid, sizeInParticles); 87 | 88 | // checking all particles in this bounds, and updating their color value depending on distance 89 | for (int x = minBound.x; x <= maxBound.x; x += 1) 90 | { 91 | for (int y = minBound.y; y <= maxBound.y; y += 1) 92 | { 93 | for (int z = minBound.z; z <= maxBound.z; z += 1) 94 | { 95 | if (IsInBoundsOfParticleArray(x, y, z, sizeInParticles)) 96 | { 97 | UpdateColorAddValue(new Vector3Int(x, y, z), eventPositionInParticleGrid, eventPosition); 98 | } 99 | } 100 | } 101 | } 102 | } 103 | 104 | private void UpdateColorAddValue(Vector3Int particlePositionInGrid, Vector3Int eventPositionInParticleGrid, MergedEventPosition eventPosition) 105 | { 106 | float distance = CalculateDistanceBetweenTwoParticleGridPoints(particlePositionInGrid, eventPositionInParticleGrid); 107 | 108 | if (distance < settings.maxColoringDistance) 109 | { 110 | // calculate colorAddValue, depending on how close is distance to maxColoringDistance 111 | float colorAddValue = settings.colorMultiplier * (1 - distance / settings.maxColoringDistance); 112 | 113 | particleColorValues[particlePositionInGrid.x, particlePositionInGrid.y, particlePositionInGrid.z] += colorAddValue * eventPosition.Multiplier; 114 | } 115 | } 116 | 117 | private float CalculateDistanceBetweenTwoParticleGridPoints(Vector3Int point1, Vector3Int point2) 118 | { 119 | float distanceSquare = (point1.x - point2.x) * (point1.x - point2.x) + (point1.z - point2.z) * (point1.z - point2.z); 120 | 121 | if (!settings.ignoreYforColoring) 122 | { 123 | distanceSquare += (point1.y - point2.y) * (point1.y - point2.y); 124 | } 125 | 126 | return Mathf.Sqrt(distanceSquare) * settings.particleDistance; 127 | } 128 | 129 | private bool IsInBoundsOfParticleArray(int x, int y, int z, Vector3Int sizeInParticles) 130 | { 131 | return x >= 0 && z >= 0 && y >= 0 && x < sizeInParticles.x && y < sizeInParticles.y & z < sizeInParticles.z; 132 | } 133 | 134 | private Vector3Int CalculateMinBound(Vector3Int positionInParticleGrid) 135 | { 136 | Vector3Int min = new(); 137 | 138 | min.x = (int)(positionInParticleGrid.x - settings.maxColoringDistance / settings.particleDistance - 1); 139 | min.z = (int)(positionInParticleGrid.z - settings.maxColoringDistance / settings.particleDistance - 1); 140 | 141 | if (settings.ignoreYforColoring) 142 | { 143 | min.y = 0; 144 | } 145 | else 146 | { 147 | min.y = (int)(positionInParticleGrid.y - settings.maxColoringDistance / settings.particleDistance - 1); 148 | } 149 | 150 | return min; 151 | } 152 | 153 | private Vector3Int CalculateMaxBound(Vector3Int positionInParticleGrid, Vector3Int sizeInParticles) 154 | { 155 | Vector3Int max = new(); 156 | 157 | max.x = (int)(positionInParticleGrid.x + settings.maxColoringDistance / settings.particleDistance + 1); 158 | max.z = (int)(positionInParticleGrid.z + settings.maxColoringDistance / settings.particleDistance + 1); 159 | 160 | if (settings.ignoreYforColoring) 161 | { 162 | max.y = sizeInParticles.y - 1; 163 | } 164 | else 165 | { 166 | max.y = (int)(positionInParticleGrid.y + settings.maxColoringDistance / settings.particleDistance + 1); 167 | } 168 | 169 | return max; 170 | } 171 | } -------------------------------------------------------------------------------- /Assets/Test-data/json-test123.txt: -------------------------------------------------------------------------------- 1 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 2 | {"Position":{"x":0.023285338655114175,"y":0.0899999737739563,"z":0.02537505514919758},"EventName":"Object Position"} 3 | {"Position":{"x":0.1473558098077774,"y":0.08999985456466675,"z":0.12746228277683259},"EventName":"Object Position"} 4 | {"Position":{"x":0.1473558098077774,"y":0.08999985456466675,"z":0.12746228277683259},"EventName":"Object Position"} 5 | {"Position":{"x":0.1473558098077774,"y":0.08999985456466675,"z":0.12746228277683259},"EventName":"Object Position"} 6 | {"Position":{"x":0.1473558098077774,"y":0.08999985456466675,"z":0.12746228277683259},"EventName":"Object Position"} 7 | {"Position":{"x":0.1473558098077774,"y":0.08999985456466675,"z":0.12746228277683259},"EventName":"Object Position"} 8 | {"Position":{"x":0.1473558098077774,"y":0.08999985456466675,"z":0.12746228277683259},"EventName":"Object Position"} 9 | {"Position":{"x":0.1473558098077774,"y":0.08999985456466675,"z":0.12746228277683259},"EventName":"Object Position"} 10 | {"Position":{"x":0.1473558098077774,"y":0.08999985456466675,"z":0.12746228277683259},"EventName":"Object Position"} 11 | {"Position":{"x":0.1473558098077774,"y":0.08999985456466675,"z":0.12746228277683259},"EventName":"Object Position"} 12 | {"Position":{"x":0.4787781536579132,"y":0.09000009298324585,"z":0.38071301579475405},"EventName":"Object Position"} 13 | {"Position":{"x":1.1446609497070313,"y":0.0899999737739563,"z":0.7277407646179199},"EventName":"Object Position"} 14 | {"Position":{"x":1.9514158964157105,"y":0.0899999737739563,"z":0.8058747053146362},"EventName":"Object Position"} 15 | {"Position":{"x":2.7569828033447267,"y":0.0899999737739563,"z":0.8634610176086426},"EventName":"Object Position"} 16 | {"Position":{"x":3.561354398727417,"y":0.09000009298324585,"z":0.7870461940765381},"EventName":"Object Position"} 17 | {"Position":{"x":4.353455066680908,"y":0.0899999737739563,"z":0.6122822165489197},"EventName":"Object Position"} 18 | {"Position":{"x":5.15006685256958,"y":0.0899999737739563,"z":0.4665367603302002},"EventName":"Object Position"} 19 | {"Position":{"x":5.958225727081299,"y":0.0899999737739563,"z":0.3882521092891693},"EventName":"Object Position"} 20 | {"Position":{"x":6.761939525604248,"y":0.0899999737739563,"z":0.31227877736091616},"EventName":"Object Position"} 21 | {"Position":{"x":7.566422939300537,"y":0.8849428296089172,"z":0.2362326979637146},"EventName":"Object Position"} 22 | {"Position":{"x":8.36864185333252,"y":1.4873921871185303,"z":0.1604006290435791},"EventName":"Object Position"} 23 | {"Position":{"x":9.171570777893067,"y":1.4805676937103272,"z":0.08502763509750366},"EventName":"Object Position"} 24 | {"Position":{"x":9.980109214782715,"y":1.0899999141693116,"z":0.030445948243141176},"EventName":"Object Position"} 25 | {"Position":{"x":10.766496658325196,"y":1.0899999141693116,"z":0.17881721258163453},"EventName":"Object Position"} 26 | {"Position":{"x":11.029241561889649,"y":2.063408613204956,"z":0.8760426640510559},"EventName":"Object Position"} 27 | {"Position":{"x":10.764458656311036,"y":2.5386338233947756,"z":1.6392903327941895},"EventName":"Object Position"} 28 | {"Position":{"x":10.471514701843262,"y":2.4020040035247804,"z":2.3906545639038088},"EventName":"Object Position"} 29 | {"Position":{"x":10.178370475769043,"y":1.6532018184661866,"z":3.1443464756011965},"EventName":"Object Position"} 30 | {"Position":{"x":10.110635757446289,"y":0.3288257122039795,"z":3.9414026737213136},"EventName":"Object Position"} 31 | {"Position":{"x":10.22842025756836,"y":0.08999991416931153,"z":4.742620468139648},"EventName":"Object Position"} 32 | {"Position":{"x":10.557546615600586,"y":0.08999991416931153,"z":5.478631496429443},"EventName":"Object Position"} 33 | {"Position":{"x":11.0308837890625,"y":0.09000003337860108,"z":6.136240482330322},"EventName":"Object Position"} 34 | {"Position":{"x":11.528304100036621,"y":0.08999991416931153,"z":6.777584075927734},"EventName":"Object Position"} 35 | {"Position":{"x":12.063919067382813,"y":0.08999991416931153,"z":7.378058910369873},"EventName":"Object Position"} 36 | {"Position":{"x":12.538065910339356,"y":0.09000003337860108,"z":8.02816390991211},"EventName":"Object Position"} 37 | {"Position":{"x":12.8525972366333,"y":0.24213111400604249,"z":8.772473335266114},"EventName":"Object Position"} 38 | {"Position":{"x":13.13429069519043,"y":0.4008685350418091,"z":9.531949043273926},"EventName":"Object Position"} 39 | {"Position":{"x":13.415982246398926,"y":0.40086865425109866,"z":10.291420936584473},"EventName":"Object Position"} 40 | {"Position":{"x":13.698331832885743,"y":0.564997673034668,"z":11.051071166992188},"EventName":"Object Position"} 41 | {"Position":{"x":13.979788780212403,"y":1.5193670988082886,"z":11.806533813476563},"EventName":"Object Position"} 42 | {"Position":{"x":14.310100555419922,"y":1.8669289350509644,"z":12.54203987121582},"EventName":"Object Position"} 43 | {"Position":{"x":14.75837230682373,"y":1.6041167974472047,"z":13.212384223937989},"EventName":"Object Position"} 44 | {"Position":{"x":15.016411781311036,"y":1.046310544013977,"z":13.957878112792969},"EventName":"Object Position"} 45 | {"Position":{"x":14.530585289001465,"y":0.6740779876708984,"z":14.568209648132325},"EventName":"Object Position"} 46 | {"Position":{"x":13.796548843383789,"y":0.4008685350418091,"z":14.905243873596192},"EventName":"Object Position"} 47 | {"Position":{"x":13.059138298034668,"y":0.4008685350418091,"z":15.230481147766114},"EventName":"Object Position"} 48 | {"Position":{"x":12.326285362243653,"y":0.4008685350418091,"z":15.568982124328614},"EventName":"Object Position"} 49 | {"Position":{"x":11.571216583251954,"y":0.6682054996490479,"z":15.866007804870606},"EventName":"Object Position"} 50 | {"Position":{"x":10.766239166259766,"y":1.1272259950637818,"z":15.936697006225586},"EventName":"Object Position"} 51 | {"Position":{"x":9.958442687988282,"y":1.5878535509109498,"z":15.965612411499024},"EventName":"Object Position"} 52 | {"Position":{"x":9.1538724899292,"y":2.0466413497924806,"z":15.994412422180176},"EventName":"Object Position"} 53 | {"Position":{"x":8.347882270812989,"y":2.5062389373779299,"z":16.02326202392578},"EventName":"Object Position"} 54 | {"Position":{"x":7.536805629730225,"y":2.9687366485595705,"z":16.052539825439454},"EventName":"Object Position"} 55 | {"Position":{"x":6.729516506195068,"y":3.429075002670288,"z":16.085756301879884},"EventName":"Object Position"} 56 | {"Position":{"x":5.920827388763428,"y":3.890211343765259,"z":16.12177276611328},"EventName":"Object Position"} 57 | {"Position":{"x":5.1145405769348148,"y":4.094123363494873,"z":16.176700592041017},"EventName":"Object Position"} 58 | {"Position":{"x":4.318514823913574,"y":4.094226360321045,"z":16.31686019897461},"EventName":"Object Position"} 59 | {"Position":{"x":3.5996527671813967,"y":5.0928544998168949,"z":16.66570472717285},"EventName":"Object Position"} 60 | {"Position":{"x":3.375369071960449,"y":5.54556941986084,"z":17.40268325805664},"EventName":"Object Position"} 61 | {"Position":{"x":3.6437129974365236,"y":5.384148597717285,"z":18.162330627441408},"EventName":"Object Position"} 62 | {"Position":{"x":4.156811714172363,"y":4.608283519744873,"z":18.781661987304689},"EventName":"Object Position"} 63 | {"Position":{"x":4.895532131195068,"y":3.22200345993042,"z":19.087081909179689},"EventName":"Object Position"} 64 | {"Position":{"x":5.6258697509765629,"y":1.2648389339447022,"z":18.864229202270509},"EventName":"Object Position"} 65 | {"Position":{"x":6.342746734619141,"y":1.0899999141693116,"z":18.48621368408203},"EventName":"Object Position"} 66 | {"Position":{"x":7.144332408905029,"y":1.0899999141693116,"z":18.563737869262697},"EventName":"Object Position"} 67 | {"Position":{"x":7.8788299560546879,"y":1.9338703155517579,"z":18.275354385375978},"EventName":"Object Position"} 68 | {"Position":{"x":8.057148933410645,"y":2.5031912326812746,"z":17.97706413269043},"EventName":"Object Position"} 69 | {"Position":{"x":8.165521621704102,"y":2.610224485397339,"z":17.626604080200197},"EventName":"Object Position"} 70 | {"Position":{"x":8.238676071166993,"y":2.568511724472046,"z":16.928049087524415},"EventName":"Object Position"} 71 | {"Position":{"x":7.675949573516846,"y":2.8893933296203615,"z":16.354915618896486},"EventName":"Object Position"} 72 | {"Position":{"x":7.0930867195129398,"y":3.221757173538208,"z":15.792133331298829},"EventName":"Object Position"} 73 | {"Position":{"x":6.533777236938477,"y":3.5406901836395265,"z":15.210738182067871},"EventName":"Object Position"} 74 | {"Position":{"x":6.432368755340576,"y":3.5985162258148195,"z":15.140589714050293},"EventName":"Object Position"} 75 | {"Position":{"x":6.4050750732421879,"y":3.6140801906585695,"z":15.140583038330079},"EventName":"Object Position"} 76 | {"Position":{"x":5.8900146484375,"y":3.9077813625335695,"z":15.1343994140625},"EventName":"Object Position"} 77 | {"Position":{"x":5.115384101867676,"y":4.2699875831604,"z":15.112491607666016},"EventName":"Object Position"} 78 | {"Position":{"x":4.327240467071533,"y":4.0941362380981449,"z":14.947555541992188},"EventName":"Object Position"} 79 | {"Position":{"x":3.688839912414551,"y":4.094930171966553,"z":14.458268165588379},"EventName":"Object Position"} 80 | {"Position":{"x":3.6822245121002199,"y":4.094938278198242,"z":13.686031341552735},"EventName":"Object Position"} 81 | {"Position":{"x":3.852461814880371,"y":5.038477897644043,"z":12.895666122436524},"EventName":"Object Position"} 82 | {"Position":{"x":4.071159362792969,"y":5.533742427825928,"z":12.11873722076416},"EventName":"Object Position"} 83 | {"Position":{"x":4.768025875091553,"y":5.415469169616699,"z":11.98128890991211},"EventName":"Object Position"} 84 | {"Position":{"x":5.504955768585205,"y":4.683546543121338,"z":12.311333656311036},"EventName":"Object Position"} 85 | {"Position":{"x":6.220181465148926,"y":4.095187664031982,"z":12.68501091003418},"EventName":"Object Position"} 86 | {"Position":{"x":7.01381254196167,"y":4.095187664031982,"z":12.76063060760498},"EventName":"Object Position"} 87 | {"Position":{"x":7.7218170166015629,"y":4.095187664031982,"z":12.39119815826416},"EventName":"Object Position"} 88 | {"Position":{"x":8.151933670043946,"y":4.446725845336914,"z":11.715109825134278},"EventName":"Object Position"} 89 | {"Position":{"x":8.31220531463623,"y":5.31077766418457,"z":10.922582626342774},"EventName":"Object Position"} 90 | {"Position":{"x":8.207655906677246,"y":5.55834436416626,"z":10.12673568725586},"EventName":"Object Position"} 91 | {"Position":{"x":7.862563133239746,"y":5.428059101104736,"z":9.3992919921875},"EventName":"Object Position"} 92 | {"Position":{"x":7.269473552703857,"y":5.7279229164123539,"z":8.86428451538086},"EventName":"Object Position"} 93 | {"Position":{"x":6.485069751739502,"y":6.07342529296875,"z":8.66536808013916},"EventName":"Object Position"} 94 | {"Position":{"x":5.796668529510498,"y":6.105756759643555,"z":8.99705982208252},"EventName":"Object Position"} 95 | {"Position":{"x":5.1442365646362309,"y":6.105711936950684,"z":9.476318359375},"EventName":"Object Position"} 96 | {"Position":{"x":4.493659973144531,"y":6.105578899383545,"z":9.954195976257325},"EventName":"Object Position"} 97 | {"Position":{"x":3.840926170349121,"y":6.105438709259033,"z":10.429384231567383},"EventName":"Object Position"} 98 | {"Position":{"x":3.1619062423706056,"y":6.098842620849609,"z":10.872895240783692},"EventName":"Object Position"} 99 | {"Position":{"x":2.4799957275390627,"y":5.654886245727539,"z":11.308995246887207},"EventName":"Object Position"} 100 | {"Position":{"x":1.799800992012024,"y":4.658776760101318,"z":11.743997573852539},"EventName":"Object Position"} 101 | {"Position":{"x":1.1148760318756104,"y":4.5840911865234379,"z":12.17342472076416},"EventName":"Object Position"} 102 | {"Position":{"x":0.37661975622177126,"y":4.589975833892822,"z":12.505253791809082},"EventName":"Object Position"} 103 | {"Position":{"x":-0.3934295177459717,"y":4.526449680328369,"z":12.744364738464356},"EventName":"Object Position"} 104 | {"Position":{"x":-1.0031646490097047,"y":4.149770736694336,"z":13.26600456237793},"EventName":"Object Position"} 105 | {"Position":{"x":-1.5959837436676026,"y":4.095187664031982,"z":13.813040733337403},"EventName":"Object Position"} 106 | {"Position":{"x":-2.0622096061706545,"y":4.095187664031982,"z":14.44694995880127},"EventName":"Object Position"} 107 | {"Position":{"x":-1.7860186100006104,"y":4.095187664031982,"z":15.199185371398926},"EventName":"Object Position"} 108 | {"Position":{"x":-1.4538177251815797,"y":4.095187664031982,"z":15.94038200378418},"EventName":"Object Position"} 109 | {"Position":{"x":-0.8556395769119263,"y":4.095187664031982,"z":16.426406860351564},"EventName":"Object Position"} 110 | {"Position":{"x":-0.05474630370736122,"y":4.095187664031982,"z":16.530261993408204},"EventName":"Object Position"} 111 | {"Position":{"x":0.7494887709617615,"y":5.050751686096191,"z":16.631595611572267},"EventName":"Object Position"} 112 | {"Position":{"x":1.5539408922195435,"y":5.538114070892334,"z":16.686830520629884},"EventName":"Object Position"} 113 | {"Position":{"x":2.3634159564971926,"y":5.413031101226807,"z":16.744855880737306},"EventName":"Object Position"} 114 | {"Position":{"x":3.1344070434570314,"y":5.088245391845703,"z":16.566043853759767},"EventName":"Object Position"} 115 | {"Position":{"x":3.825181484222412,"y":4.675901412963867,"z":16.146129608154298},"EventName":"Object Position"} 116 | {"Position":{"x":4.517572402954102,"y":4.112853050231934,"z":15.725152015686036},"EventName":"Object Position"} 117 | {"Position":{"x":5.2060041427612309,"y":4.715739727020264,"z":15.306580543518067},"EventName":"Object Position"} 118 | {"Position":{"x":5.897004127502441,"y":5.428106784820557,"z":14.88644790649414},"EventName":"Object Position"} 119 | {"Position":{"x":6.589807987213135,"y":5.526909828186035,"z":14.465218544006348},"EventName":"Object Position"} 120 | {"Position":{"x":7.114786148071289,"y":5.010698318481445,"z":13.873102188110352},"EventName":"Object Position"} 121 | {"Position":{"x":7.453454971313477,"y":4.206747055053711,"z":13.141801834106446},"EventName":"Object Position"} 122 | {"Position":{"x":7.792290210723877,"y":4.514799118041992,"z":12.407254219055176},"EventName":"Object Position"} 123 | {"Position":{"x":8.082161903381348,"y":5.344357490539551,"z":11.64925479888916},"EventName":"Object Position"} 124 | {"Position":{"x":8.12182331085205,"y":5.5570969581604,"z":10.8616943359375},"EventName":"Object Position"} 125 | {"Position":{"x":7.788103103637695,"y":5.156589984893799,"z":10.122841835021973},"EventName":"Object Position"} 126 | {"Position":{"x":7.510891914367676,"y":5.568658828735352,"z":9.534562110900879},"EventName":"Object Position"} 127 | {"Position":{"x":7.186758041381836,"y":5.769408226013184,"z":8.847023963928223},"EventName":"Object Position"} 128 | {"Position":{"x":6.685713291168213,"y":6.0207037925720219,"z":8.215319633483887},"EventName":"Object Position"} 129 | {"Position":{"x":6.178109169006348,"y":6.105861663818359,"z":7.880344390869141},"EventName":"Object Position"} 130 | {"Position":{"x":6.10740327835083,"y":6.105861663818359,"z":7.880313873291016},"EventName":"Object Position"} 131 | {"Position":{"x":6.011842727661133,"y":6.105861663818359,"z":7.877161026000977},"EventName":"Object Position"} 132 | {"Position":{"x":5.739859580993652,"y":6.1058549880981449,"z":7.951638221740723},"EventName":"Object Position"} 133 | {"Position":{"x":5.1168694496154789,"y":6.105824947357178,"z":8.27360725402832},"EventName":"Object Position"} 134 | {"Position":{"x":4.566147804260254,"y":6.105772018432617,"z":8.83403205871582},"EventName":"Object Position"} 135 | {"Position":{"x":4.153439521789551,"y":6.105621814727783,"z":9.529109001159668},"EventName":"Object Position"} 136 | {"Position":{"x":3.742157459259033,"y":6.105465412139893,"z":10.221784591674805},"EventName":"Object Position"} 137 | {"Position":{"x":3.0813679695129396,"y":6.078984260559082,"z":10.586881637573243},"EventName":"Object Position"} 138 | {"Position":{"x":2.3000497817993166,"y":5.583166599273682,"z":10.786035537719727},"EventName":"Object Position"} 139 | {"Position":{"x":1.7113409042358399,"y":4.527798175811768,"z":11.245530128479004},"EventName":"Object Position"} 140 | {"Position":{"x":1.4138939380645753,"y":2.8624370098114015,"z":11.73286247253418},"EventName":"Object Position"} 141 | {"Position":{"x":1.4023983478546143,"y":0.5913723707199097,"z":11.73286247253418},"EventName":"Object Position"} 142 | {"Position":{"x":1.3019155263900757,"y":0.09000003337860108,"z":11.741331100463868},"EventName":"Object Position"} 143 | {"Position":{"x":0.6562023162841797,"y":0.08999991416931153,"z":11.697925567626954},"EventName":"Object Position"} 144 | {"Position":{"x":-0.13342447578907014,"y":0.9361306428909302,"z":11.621891975402832},"EventName":"Object Position"} 145 | {"Position":{"x":-0.9395042061805725,"y":1.5064393281936646,"z":11.54427433013916},"EventName":"Object Position"} 146 | {"Position":{"x":-1.7428808212280274,"y":1.4631143808364869,"z":11.466917037963868},"EventName":"Object Position"} 147 | {"Position":{"x":-2.5463051795959474,"y":0.8088984489440918,"z":11.389554023742676},"EventName":"Object Position"} 148 | {"Position":{"x":-3.3497064113616945,"y":0.11198055744171143,"z":11.31219482421875},"EventName":"Object Position"} 149 | {"Position":{"x":-4.152795791625977,"y":0.08999991416931153,"z":11.234864234924317},"EventName":"Object Position"} 150 | {"Position":{"x":-4.9587788581848148,"y":0.09000003337860108,"z":11.157256126403809},"EventName":"Object Position"} 151 | {"Position":{"x":-5.766937732696533,"y":0.08999991416931153,"z":11.07989501953125},"EventName":"Object Position"} 152 | {"Position":{"x":-6.572617530822754,"y":0.09000003337860108,"z":11.067540168762207},"EventName":"Object Position"} 153 | {"Position":{"x":-7.378153324127197,"y":0.8352252244949341,"z":11.125746726989746},"EventName":"Object Position"} 154 | {"Position":{"x":-8.18185043334961,"y":1.4681588411331177,"z":11.184764862060547},"EventName":"Object Position"} 155 | {"Position":{"x":-8.959360122680664,"y":1.4898780584335328,"z":11.045418739318848},"EventName":"Object Position"} 156 | {"Position":{"x":-9.29714584350586,"y":1.0858064889907838,"z":10.32612133026123},"EventName":"Object Position"} 157 | {"Position":{"x":-9.410879135131836,"y":1.7072386741638184,"z":9.529150009155274},"EventName":"Object Position"} 158 | {"Position":{"x":-9.505270957946778,"y":2.232109308242798,"z":8.725625038146973},"EventName":"Object Position"} 159 | {"Position":{"x":-9.550111770629883,"y":2.0928454399108888,"z":7.919086933135986},"EventName":"Object Position"} 160 | {"Position":{"x":-9.396510124206543,"y":2.0928456783294679,"z":7.125192165374756},"EventName":"Object Position"} 161 | {"Position":{"x":-9.144169807434082,"y":2.0928454399108888,"z":6.359711647033691},"EventName":"Object Position"} 162 | {"Position":{"x":-8.865660667419434,"y":2.0928456783294679,"z":5.600198745727539},"EventName":"Object Position"} 163 | {"Position":{"x":-8.580135345458985,"y":2.0928454399108888,"z":4.8425822257995609},"EventName":"Object Position"} 164 | {"Position":{"x":-8.295117378234864,"y":3.1022861003875734,"z":4.086309909820557},"EventName":"Object Position"} 165 | {"Position":{"x":-8.010930061340332,"y":3.538771867752075,"z":3.3322412967681886},"EventName":"Object Position"} 166 | {"Position":{"x":-7.725405693054199,"y":3.3636910915374758,"z":2.574183940887451},"EventName":"Object Position"} 167 | {"Position":{"x":-7.440801620483398,"y":3.0900018215179445,"z":1.817008137702942},"EventName":"Object Position"} 168 | {"Position":{"x":-7.189956188201904,"y":3.090001344680786,"z":1.1389418840408326},"EventName":"Object Position"} 169 | {"Position":{"x":-7.193371295928955,"y":3.090001344680786,"z":1.1355665922164918},"EventName":"Object Position"} 170 | {"Position":{"x":-7.174858570098877,"y":3.090001344680786,"z":1.1456245183944703},"EventName":"Object Position"} 171 | {"Position":{"x":-7.004146099090576,"y":3.090001344680786,"z":1.2444286346435547},"EventName":"Object Position"} 172 | {"Position":{"x":-6.502516746520996,"y":3.0900018215179445,"z":1.6980446577072144},"EventName":"Object Position"} 173 | {"Position":{"x":-5.959201335906982,"y":2.93166184425354,"z":2.287863254547119},"EventName":"Object Position"} 174 | {"Position":{"x":-5.41950798034668,"y":3.844072103500366,"z":2.8892982006073},"EventName":"Object Position"} 175 | {"Position":{"x":-5.105425834655762,"y":4.1851887702941898,"z":3.608990430831909},"EventName":"Object Position"} 176 | {"Position":{"x":-5.302813529968262,"y":3.912360191345215,"z":4.395318984985352},"EventName":"Object Position"} 177 | {"Position":{"x":-5.826347827911377,"y":3.0307304859161379,"z":4.910045623779297},"EventName":"Object Position"} 178 | {"Position":{"x":-6.567532062530518,"y":1.5387647151947022,"z":5.227716445922852},"EventName":"Object Position"} 179 | {"Position":{"x":-7.064581871032715,"y":0.18261492252349854,"z":5.782778263092041},"EventName":"Object Position"} 180 | {"Position":{"x":-7.364947319030762,"y":0.08999991416931153,"z":6.533742904663086},"EventName":"Object Position"} 181 | {"Position":{"x":-7.66408109664917,"y":0.09000003337860108,"z":7.281628131866455},"EventName":"Object Position"} 182 | {"Position":{"x":-7.964710235595703,"y":0.09000003337860108,"z":8.033252716064454},"EventName":"Object Position"} 183 | {"Position":{"x":-8.264270782470704,"y":0.7575544118881226,"z":8.782203674316407},"EventName":"Object Position"} 184 | {"Position":{"x":-8.564702033996582,"y":1.4443851709365845,"z":9.533333778381348},"EventName":"Object Position"} 185 | {"Position":{"x":-8.8585844039917,"y":1.5181959867477418,"z":10.284908294677735},"EventName":"Object Position"} 186 | {"Position":{"x":-8.948588371276856,"y":1.1870957612991334,"z":11.085350036621094},"EventName":"Object Position"} 187 | {"Position":{"x":-8.788330078125,"y":2.1747162342071535,"z":11.878952026367188},"EventName":"Object Position"} 188 | {"Position":{"x":-8.586309432983399,"y":2.5521557331085207,"z":12.661978721618653},"EventName":"Object Position"} 189 | {"Position":{"x":-8.351709365844727,"y":2.3156321048736574,"z":13.43628215789795},"EventName":"Object Position"} 190 | {"Position":{"x":-7.976308822631836,"y":1.4675352573394776,"z":14.150970458984375},"EventName":"Object Position"} 191 | {"Position":{"x":-7.588530540466309,"y":0.26331889629364016,"z":14.85779857635498},"EventName":"Object Position"} 192 | {"Position":{"x":-7.198750972747803,"y":0.09000003337860108,"z":15.568275451660157},"EventName":"Object Position"} 193 | {"Position":{"x":-6.81051778793335,"y":0.08999991416931153,"z":16.27593231201172},"EventName":"Object Position"} 194 | {"Position":{"x":-6.421980857849121,"y":0.4586566686630249,"z":16.98414421081543},"EventName":"Object Position"} 195 | {"Position":{"x":-6.033744812011719,"y":1.3118518590927125,"z":17.69180679321289},"EventName":"Object Position"} 196 | {"Position":{"x":-5.6453633308410648,"y":1.554322361946106,"z":18.399734497070314},"EventName":"Object Position"} 197 | {"Position":{"x":-5.257223129272461,"y":1.1858187913894654,"z":19.107221603393556},"EventName":"Object Position"} 198 | {"Position":{"x":-4.869488716125488,"y":0.3029661178588867,"z":19.8139705657959},"EventName":"Object Position"} 199 | {"Position":{"x":-4.480764389038086,"y":0.09000003337860108,"z":20.522523880004884},"EventName":"Object Position"} 200 | {"Position":{"x":-4.091992378234863,"y":0.08999991416931153,"z":21.231164932250978},"EventName":"Object Position"} 201 | {"Position":{"x":-3.74461030960083,"y":0.09000003337860108,"z":21.96094512939453},"EventName":"Object Position"} 202 | {"Position":{"x":-3.601677179336548,"y":0.08999991416931153,"z":22.7546443939209},"EventName":"Object Position"} 203 | {"Position":{"x":-3.4758987426757814,"y":0.08999991416931153,"z":23.553293228149415},"EventName":"Object Position"} 204 | {"Position":{"x":-3.3265204429626467,"y":0.09000003337860108,"z":24.35020637512207},"EventName":"Object Position"} 205 | {"Position":{"x":-2.7033755779266359,"y":0.08999991416931153,"z":24.775827407836915},"EventName":"Object Position"} 206 | {"Position":{"x":-1.9069886207580567,"y":0.09000003337860108,"z":24.6584415435791},"EventName":"Object Position"} 207 | {"Position":{"x":-1.7412703037261963,"y":0.08999991416931153,"z":24.628923416137697},"EventName":"Object Position"} 208 | {"Position":{"x":-1.7412703037261963,"y":0.08999979496002197,"z":24.628923416137697},"EventName":"Object Position"} 209 | {"Position":{"x":-1.7412703037261963,"y":0.08999979496002197,"z":24.628923416137697},"EventName":"Object Position"} 210 | {"Position":{"x":-1.7412703037261963,"y":0.08999991416931153,"z":24.628923416137697},"EventName":"Object Position"} 211 | {"Position":{"x":-1.7412703037261963,"y":0.08999979496002197,"z":24.628923416137697},"EventName":"Object Position"} 212 | {"Position":{"x":-1.7412703037261963,"y":0.08999991416931153,"z":24.628923416137697},"EventName":"Object Position"} 213 | {"Position":{"x":-1.7412703037261963,"y":0.08999979496002197,"z":24.628923416137697},"EventName":"Object Position"} 214 | {"Position":{"x":-1.7412703037261963,"y":0.08999991416931153,"z":24.628923416137697},"EventName":"Object Position"} 215 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 216 | {"Position":{"x":0.06052517890930176,"y":1.1921766996383668,"z":12.250059127807618},"EventName":"Camera Look At"} 217 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 218 | {"Position":{"x":0.10464882850646973,"y":1.1370660066604615,"z":12.250059127807618},"EventName":"Camera Look At"} 219 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 220 | {"Position":{"x":0.5690193176269531,"y":-4.454265400966051e-9,"z":4.78272008895874},"EventName":"Camera Look At"} 221 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 222 | {"Position":{"x":0.7014846801757813,"y":-4.296259792369028e-9,"z":4.844029426574707},"EventName":"Camera Look At"} 223 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 224 | {"Position":{"x":2.9981541633605959,"y":-1.5517279683407992e-9,"z":5.535820007324219},"EventName":"Camera Look At"} 225 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 226 | {"Position":{"x":4.049195766448975,"y":-2.9235819321016267e-10,"z":5.604466438293457},"EventName":"Camera Look At"} 227 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 228 | {"Position":{"x":4.9359636306762699,"y":7.510660982035233e-10,"z":7.068523406982422},"EventName":"Camera Look At"} 229 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 230 | {"Position":{"x":5.015097141265869,"y":8.447426647073542e-10,"z":7.1577582359313969},"EventName":"Camera Look At"} 231 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 232 | {"Position":{"x":29.022951126098634,"y":2.953472666433754e-8,"z":14.354246139526368},"EventName":"Camera Look At"} 233 | {"Position":{"x":-1.0791869481385774e-10,"y":0.08999985456466675,"z":1.2231721711886134e-12},"EventName":"Object Position"} 234 | {"Position":{"x":41.388572692871097,"y":4.434306433154234e-8,"z":15.771710395812989},"EventName":"Camera Look At"} 235 | {"Position":{"x":0.32618939876556399,"y":0.0899999737739563,"z":0.11110933870077133},"EventName":"Object Position"} 236 | {"Position":{"x":1.031866431236267,"y":0.08999985456466675,"z":0.3513402044773102},"EventName":"Object Position"} 237 | {"Position":{"x":1.7973623275756837,"y":0.0899999737739563,"z":0.6119349002838135},"EventName":"Object Position"} 238 | {"Position":{"x":2.5612964630126955,"y":0.08999985456466675,"z":0.8719980120658875},"EventName":"Object Position"} 239 | {"Position":{"x":3.324068546295166,"y":0.0899999737739563,"z":1.1316654682159424},"EventName":"Object Position"} 240 | {"Position":{"x":4.114943981170654,"y":0.0899999737739563,"z":1.3067667484283448},"EventName":"Object Position"} 241 | {"Position":{"x":17.969501495361329,"y":0.8096106052398682,"z":3.278425455093384},"EventName":"Camera Look At"} 242 | {"Position":{"x":4.915532112121582,"y":0.0899999737739563,"z":1.4271279573440552},"EventName":"Object Position"} 243 | {"Position":{"x":17.969558715820314,"y":0.845804750919342,"z":3.2785472869873049},"EventName":"Camera Look At"} 244 | {"Position":{"x":5.715709209442139,"y":0.0899999737739563,"z":1.530045509338379},"EventName":"Object Position"} 245 | {"Position":{"x":21.50902557373047,"y":2.0693445179631455e-8,"z":1.94462251663208},"EventName":"Camera Look At"} 246 | {"Position":{"x":6.521681308746338,"y":0.0899999737739563,"z":1.4695581197738648},"EventName":"Object Position"} 247 | {"Position":{"x":15.440540313720704,"y":1.3440485169269323e-8,"z":0.19672751426696778},"EventName":"Camera Look At"} 248 | {"Position":{"x":7.3205718994140629,"y":0.0899999737739563,"z":1.3645153045654297},"EventName":"Object Position"} 249 | {"Position":{"x":16.242666244506837,"y":1.4404119674793492e-8,"z":0.06389284133911133},"EventName":"Camera Look At"} 250 | {"Position":{"x":8.121136665344239,"y":0.39227181673049929,"z":1.2591172456741334},"EventName":"Object Position"} 251 | {"Position":{"x":18.165660858154298,"y":1.6713244122001926e-8,"z":-0.17627310752868653},"EventName":"Camera Look At"} 252 | {"Position":{"x":8.921866416931153,"y":1.2803785800933838,"z":1.1536974906921387},"EventName":"Object Position"} 253 | {"Position":{"x":24.730384826660158,"y":2.4596007008881317e-8,"z":-0.9865555763244629},"EventName":"Camera Look At"} 254 | {"Position":{"x":9.725160598754883,"y":1.5567445755004883,"z":1.0479402542114258},"EventName":"Object Position"} 255 | {"Position":{"x":27.704326629638673,"y":2.8167200127882098e-8,"z":-1.3647336959838868},"EventName":"Camera Look At"} 256 | {"Position":{"x":10.52367115020752,"y":1.221675157546997,"z":0.9428126811981201},"EventName":"Object Position"} 257 | {"Position":{"x":26.937875747680665,"y":2.724712366841686e-8,"z":-1.2894935607910157},"EventName":"Camera Look At"} 258 | {"Position":{"x":11.324442863464356,"y":0.9359538555145264,"z":0.8378640413284302},"EventName":"Object Position"} 259 | {"Position":{"x":25.638290405273439,"y":2.568514290146595e-8,"z":-1.020902156829834},"EventName":"Camera Look At"} 260 | {"Position":{"x":12.132447242736817,"y":0.45610177516937258,"z":0.7857744097709656},"EventName":"Object Position"} 261 | {"Position":{"x":25.526758193969728,"y":2.5528636982130594e-8,"z":0.6544308662414551},"EventName":"Camera Look At"} 262 | {"Position":{"x":12.937239646911621,"y":0.09000003337860108,"z":0.8715679049491882},"EventName":"Object Position"} 263 | {"Position":{"x":18.412328720092775,"y":0.9161554574966431,"z":2.0987749099731447},"EventName":"Camera Look At"} 264 | {"Position":{"x":13.59991455078125,"y":0.09000003337860108,"z":1.3051222562789918},"EventName":"Object Position"} 265 | {"Position":{"x":27.096527099609376,"y":2.7135758529084343e-8,"z":20.902408599853517},"EventName":"Camera Look At"} 266 | {"Position":{"x":13.8212890625,"y":0.09000003337860108,"z":2.0725131034851076},"EventName":"Object Position"} 267 | {"Position":{"x":15.584449768066407,"y":1.3317543512414432e-8,"z":21.93946075439453},"EventName":"Camera Look At"} 268 | {"Position":{"x":13.85379409790039,"y":0.08999991416931153,"z":2.8831732273101808},"EventName":"Object Position"} 269 | {"Position":{"x":14.208263397216797,"y":1.1632437235675752e-8,"z":24.50922966003418},"EventName":"Camera Look At"} 270 | {"Position":{"x":13.854039192199707,"y":0.09000003337860108,"z":3.6900691986083986},"EventName":"Object Position"} 271 | {"Position":{"x":13.961969375610352,"y":0.2714555263519287,"z":22.405668258666993},"EventName":"Camera Look At"} 272 | {"Position":{"x":13.853337287902832,"y":0.08999991416931153,"z":4.497721195220947},"EventName":"Object Position"} 273 | {"Position":{"x":13.967729568481446,"y":0.3457753658294678,"z":22.403610229492189},"EventName":"Camera Look At"} 274 | {"Position":{"x":13.852635383605957,"y":0.08999991416931153,"z":5.304544925689697},"EventName":"Object Position"} 275 | {"Position":{"x":13.974136352539063,"y":0.414992094039917,"z":22.403472900390626},"EventName":"Camera Look At"} 276 | {"Position":{"x":13.851930618286133,"y":0.09000003337860108,"z":6.114757061004639},"EventName":"Object Position"} 277 | {"Position":{"x":13.981513023376465,"y":0.4781249761581421,"z":22.42409896850586},"EventName":"Camera Look At"} 278 | {"Position":{"x":13.851229667663575,"y":0.08999991416931153,"z":6.921828746795654},"EventName":"Object Position"} 279 | {"Position":{"x":13.989032745361329,"y":0.5358113050460815,"z":22.445127487182618},"EventName":"Camera Look At"} 280 | {"Position":{"x":13.85052490234375,"y":0.08999991416931153,"z":7.73207950592041},"EventName":"Object Position"} 281 | {"Position":{"x":13.995573043823243,"y":0.5890328884124756,"z":22.463417053222658},"EventName":"Camera Look At"} 282 | {"Position":{"x":13.849820137023926,"y":0.17309701442718507,"z":8.542353630065918},"EventName":"Object Position"} 283 | {"Position":{"x":14.000349998474121,"y":0.6954308748245239,"z":22.476774215698243},"EventName":"Camera Look At"} 284 | {"Position":{"x":13.849120140075684,"y":0.40013718605041506,"z":9.347957611083985},"EventName":"Object Position"} 285 | {"Position":{"x":14.00319766998291,"y":0.9779555797576904,"z":22.4847354888916},"EventName":"Camera Look At"} 286 | {"Position":{"x":13.848417282104493,"y":0.40086865425109866,"z":10.155951499938965},"EventName":"Object Position"} 287 | {"Position":{"x":14.004403114318848,"y":1.0399316549301148,"z":22.488107681274415},"EventName":"Camera Look At"} 288 | {"Position":{"x":13.8477144241333,"y":0.40086865425109866,"z":10.964181900024414},"EventName":"Object Position"} 289 | {"Position":{"x":14.003957748413086,"y":1.0834298133850098,"z":22.486860275268556},"EventName":"Camera Look At"} 290 | {"Position":{"x":13.778396606445313,"y":0.4008685350418091,"z":11.767973899841309},"EventName":"Object Position"} 291 | {"Position":{"x":10.70434284210205,"y":1.3684608936309815,"z":23.57062339782715},"EventName":"Camera Look At"} 292 | {"Position":{"x":13.393596649169922,"y":0.4008685350418091,"z":12.4752197265625},"EventName":"Object Position"} 293 | {"Position":{"x":12.904705047607422,"y":0.4008685350418091,"z":13.115031242370606},"EventName":"Object Position"} 294 | {"Position":{"x":12.420621871948243,"y":0.4008685350418091,"z":13.7586030960083},"EventName":"Object Position"} 295 | {"Position":{"x":11.934394836425782,"y":0.4012514352798462,"z":14.403388023376465},"EventName":"Object Position"} 296 | {"Position":{"x":11.427903175354004,"y":0.7499271631240845,"z":15.033738136291504},"EventName":"Object Position"} 297 | {"Position":{"x":10.914788246154786,"y":1.0425196886062623,"z":15.656431198120118},"EventName":"Object Position"} 298 | {"Position":{"x":10.312234878540039,"y":1.386112093925476,"z":16.188608169555665},"EventName":"Object Position"} 299 | {"Position":{"x":9.523548126220704,"y":1.835842490196228,"z":16.285184860229493},"EventName":"Object Position"} 300 | {"Position":{"x":6.295705795288086,"y":3.5108680725097658,"z":15.705405235290528},"EventName":"Camera Look At"} 301 | {"Position":{"x":8.859147071838379,"y":2.2147018909454347,"z":15.841269493103028},"EventName":"Object Position"} 302 | {"Position":{"x":7.347400665283203,"y":3.618008852005005,"z":14.62512493133545},"EventName":"Camera Look At"} 303 | {"Position":{"x":8.277833938598633,"y":2.5461819171905519,"z":15.281474113464356},"EventName":"Object Position"} 304 | {"Position":{"x":7.306141376495361,"y":3.912301540374756,"z":14.62562370300293},"EventName":"Camera Look At"} 305 | {"Position":{"x":7.908938407897949,"y":2.7565364837646486,"z":15.143288612365723},"EventName":"Object Position"} 306 | {"Position":{"x":7.137403964996338,"y":4.119157791137695,"z":14.625852584838868},"EventName":"Camera Look At"} 307 | {"Position":{"x":7.204431056976318,"y":3.1582653522491457,"z":15.160893440246582},"EventName":"Object Position"} 308 | {"Position":{"x":6.438765525817871,"y":4.504701137542725,"z":14.62633228302002},"EventName":"Camera Look At"} 309 | {"Position":{"x":6.398921012878418,"y":3.617589235305786,"z":15.181987762451172},"EventName":"Object Position"} 310 | {"Position":{"x":5.591339111328125,"y":4.069233417510986,"z":15.209811210632325},"EventName":"Object Position"} 311 | {"Position":{"x":4.784130573272705,"y":4.093567371368408,"z":15.163206100463868},"EventName":"Object Position"} 312 | {"Position":{"x":4.000276565551758,"y":4.094542980194092,"z":14.959309577941895},"EventName":"Object Position"} 313 | {"Position":{"x":3.2175357341766359,"y":4.095187664031982,"z":14.741667747497559},"EventName":"Object Position"} 314 | {"Position":{"x":2.4907259941101076,"y":4.095187664031982,"z":14.39013957977295},"EventName":"Object Position"} 315 | {"Position":{"x":2.4470272064208986,"y":4.095187664031982,"z":13.755861282348633},"EventName":"Object Position"} 316 | {"Position":{"x":5.332302570343018,"y":5.382036209106445,"z":10.871522903442383},"EventName":"Camera Look At"} 317 | {"Position":{"x":3.082956314086914,"y":4.095188140869141,"z":13.259325981140137},"EventName":"Object Position"} 318 | {"Position":{"x":5.856677055358887,"y":5.345250606536865,"z":10.871522903442383},"EventName":"Camera Look At"} 319 | {"Position":{"x":3.4560961723327638,"y":4.095187664031982,"z":13.000431060791016},"EventName":"Object Position"} 320 | {"Position":{"x":5.890454292297363,"y":5.35748815536499,"z":10.871522903442383},"EventName":"Camera Look At"} 321 | {"Position":{"x":3.4990222454071047,"y":4.094892978668213,"z":13.000113487243653},"EventName":"Object Position"} 322 | {"Position":{"x":5.9341721534729,"y":5.35689640045166,"z":10.871522903442383},"EventName":"Camera Look At"} 323 | {"Position":{"x":3.861147403717041,"y":4.1629414558410648,"z":12.88698959350586},"EventName":"Object Position"} 324 | {"Position":{"x":10.260101318359375,"y":5.241556644439697,"z":12.15036678314209},"EventName":"Camera Look At"} 325 | {"Position":{"x":4.614058494567871,"y":4.095187664031982,"z":12.853250503540039},"EventName":"Object Position"} 326 | {"Position":{"x":10.260101318359375,"y":5.183901309967041,"z":12.365287780761719},"EventName":"Camera Look At"} 327 | {"Position":{"x":5.4189958572387699,"y":4.095187664031982,"z":12.782397270202637},"EventName":"Object Position"} 328 | {"Position":{"x":10.260101318359375,"y":5.214032173156738,"z":11.921233177185059},"EventName":"Camera Look At"} 329 | {"Position":{"x":6.159219741821289,"y":4.095187664031982,"z":12.48093032836914},"EventName":"Object Position"} 330 | {"Position":{"x":10.259261131286621,"y":5.209079265594482,"z":9.838091850280762},"EventName":"Camera Look At"} 331 | {"Position":{"x":6.837048053741455,"y":4.095187664031982,"z":12.03926944732666},"EventName":"Object Position"} 332 | {"Position":{"x":10.259031295776368,"y":5.2121100425720219,"z":8.952059745788575},"EventName":"Camera Look At"} 333 | {"Position":{"x":7.38156795501709,"y":4.117129802703857,"z":11.440085411071778},"EventName":"Object Position"} 334 | {"Position":{"x":10.258607864379883,"y":5.172755241394043,"z":7.669560432434082},"EventName":"Camera Look At"} 335 | {"Position":{"x":7.898491382598877,"y":5.136093616485596,"z":10.818551063537598},"EventName":"Object Position"} 336 | {"Position":{"x":10.26017951965332,"y":6.175192832946777,"z":7.665235996246338},"EventName":"Camera Look At"} 337 | {"Position":{"x":8.415513038635254,"y":5.5564165115356449,"z":10.194397926330567},"EventName":"Object Position"} 338 | {"Position":{"x":10.26017951965332,"y":6.70933723449707,"z":7.547370910644531},"EventName":"Camera Look At"} 339 | {"Position":{"x":8.634725570678711,"y":5.359622955322266,"z":9.455574035644532},"EventName":"Object Position"} 340 | {"Position":{"x":7.5543012619018559,"y":6.63011360168457,"z":7.370633125305176},"EventName":"Camera Look At"} 341 | {"Position":{"x":7.980801582336426,"y":5.371159076690674,"z":9.024946212768555},"EventName":"Object Position"} 342 | {"Position":{"x":7.214354038238525,"y":5.7555670738220219,"z":8.775436401367188},"EventName":"Object Position"} 343 | {"Position":{"x":6.444668292999268,"y":6.074000358581543,"z":8.5349702835083},"EventName":"Object Position"} 344 | {"Position":{"x":5.746411323547363,"y":6.1058349609375,"z":8.165071487426758},"EventName":"Object Position"} 345 | {"Position":{"x":-6.945200443267822,"y":-1.3218448557950069e-8,"z":-13.325746536254883},"EventName":"Camera Look At"} 346 | {"Position":{"x":5.778528213500977,"y":6.802640438079834,"z":7.858821392059326},"EventName":"Object Position"} 347 | {"Position":{"x":18.219816207885743,"y":0.8865599632263184,"z":2.189878463745117},"EventName":"Camera Look At"} 348 | {"Position":{"x":6.341855525970459,"y":7.468359470367432,"z":7.697178840637207},"EventName":"Object Position"} 349 | {"Position":{"x":21.554485321044923,"y":2.076569494136038e-8,"z":0.6393876075744629},"EventName":"Camera Look At"} 350 | {"Position":{"x":7.077902793884277,"y":7.520448207855225,"z":7.9073967933654789},"EventName":"Object Position"} 351 | {"Position":{"x":22.634794235229493,"y":2.205551119516258e-8,"z":1.0500669479370118},"EventName":"Camera Look At"} 352 | {"Position":{"x":7.8205885887146,"y":7.080515384674072,"z":7.5965447425842289},"EventName":"Object Position"} 353 | {"Position":{"x":22.668657302856447,"y":2.2095679952371939e-8,"z":1.08209228515625},"EventName":"Camera Look At"} 354 | {"Position":{"x":8.593490600585938,"y":7.074148654937744,"z":7.4693121910095219},"EventName":"Object Position"} 355 | {"Position":{"x":26.6713924407959,"y":2.6718845802520265e-8,"z":14.069442749023438},"EventName":"Camera Look At"} 356 | {"Position":{"x":9.276634216308594,"y":6.779652118682861,"z":7.895275592803955},"EventName":"Object Position"} 357 | {"Position":{"x":26.083477020263673,"y":2.5953301729941815e-8,"z":18.526554107666017},"EventName":"Camera Look At"} 358 | {"Position":{"x":9.743887901306153,"y":6.0360870361328129,"z":8.211305618286133},"EventName":"Object Position"} 359 | {"Position":{"x":25.182552337646486,"y":2.488021344504432e-8,"z":17.99614143371582},"EventName":"Camera Look At"} 360 | {"Position":{"x":9.755582809448243,"y":5.152619361877441,"z":8.297341346740723},"EventName":"Object Position"} 361 | {"Position":{"x":10.28443717956543,"y":6.0097761154174809,"z":9.745415687561036},"EventName":"Camera Look At"} 362 | {"Position":{"x":9.757071495056153,"y":5.078251838684082,"z":8.713098526000977},"EventName":"Object Position"} 363 | {"Position":{"x":10.260101318359375,"y":5.652069091796875,"z":10.874170303344727},"EventName":"Camera Look At"} 364 | {"Position":{"x":9.75731086730957,"y":5.078860759735107,"z":9.201189041137696},"EventName":"Object Position"} 365 | {"Position":{"x":10.260101318359375,"y":5.6501970291137699,"z":11.367191314697266},"EventName":"Camera Look At"} 366 | {"Position":{"x":9.757318496704102,"y":5.410762310028076,"z":9.68924617767334},"EventName":"Object Position"} 367 | {"Position":{"x":10.260101318359375,"y":5.854618549346924,"z":11.863947868347168},"EventName":"Camera Look At"} 368 | {"Position":{"x":9.829118728637696,"y":6.27770471572876,"z":10.308459281921387},"EventName":"Object Position"} 369 | {"Position":{"x":11.917612075805664,"y":2.5048255920410158,"z":24.213369369506837},"EventName":"Camera Look At"} 370 | {"Position":{"x":9.932394981384278,"y":6.536269187927246,"z":11.087648391723633},"EventName":"Object Position"} 371 | {"Position":{"x":13.058040618896485,"y":1.0141727457835259e-8,"z":32.711761474609378},"EventName":"Camera Look At"} 372 | {"Position":{"x":10.034937858581543,"y":6.214993000030518,"z":11.892086029052735},"EventName":"Object Position"} 373 | {"Position":{"x":11.536133766174317,"y":2.5048255920410158,"z":25.832271575927736},"EventName":"Camera Look At"} 374 | {"Position":{"x":10.049064636230469,"y":6.032813549041748,"z":12.698568344116211},"EventName":"Object Position"} 375 | {"Position":{"x":10.285599708557129,"y":2.5048255920410158,"z":25.078901290893556},"EventName":"Camera Look At"} 376 | {"Position":{"x":9.96345329284668,"y":5.982025146484375,"z":13.49769115447998},"EventName":"Object Position"} 377 | {"Position":{"x":5.60597562789917,"y":1.255256565357854e-9,"z":29.08487892150879},"EventName":"Camera Look At"} 378 | {"Position":{"x":9.727688789367676,"y":5.651827335357666,"z":14.270955085754395},"EventName":"Object Position"} 379 | {"Position":{"x":5.514587879180908,"y":1.14813913931755e-9,"z":28.903440475463868},"EventName":"Camera Look At"} 380 | {"Position":{"x":9.21093463897705,"y":4.924288749694824,"z":14.663049697875977},"EventName":"Object Position"} 381 | {"Position":{"x":3.6951940059661867,"y":4.004921913146973,"z":17.174449920654298},"EventName":"Camera Look At"} 382 | {"Position":{"x":8.678318977355957,"y":4.605592250823975,"z":14.049748420715332},"EventName":"Object Position"} 383 | {"Position":{"x":3.3036036491394045,"y":4.005187511444092,"z":13.459037780761719},"EventName":"Camera Look At"} 384 | {"Position":{"x":8.20699691772461,"y":4.176890850067139,"z":13.396246910095215},"EventName":"Object Position"} 385 | {"Position":{"x":3.955855369567871,"y":4.005187034606934,"z":12.985060691833496},"EventName":"Camera Look At"} 386 | {"Position":{"x":7.74990701675415,"y":4.095187664031982,"z":12.731098175048829},"EventName":"Object Position"} 387 | {"Position":{"x":3.481860876083374,"y":4.020519733428955,"z":11.5828275680542},"EventName":"Camera Look At"} 388 | {"Position":{"x":7.830888748168945,"y":4.095187664031982,"z":11.964632034301758},"EventName":"Object Position"} 389 | {"Position":{"x":6.707604885101318,"y":4.922642707824707,"z":9.355815887451172},"EventName":"Camera Look At"} 390 | {"Position":{"x":8.198995590209961,"y":4.291745185852051,"z":11.245305061340332},"EventName":"Object Position"} 391 | {"Position":{"x":7.312880039215088,"y":5.217522621154785,"z":9.352999687194825},"EventName":"Camera Look At"} 392 | {"Position":{"x":8.551098823547364,"y":5.0953545570373539,"z":10.521013259887696},"EventName":"Object Position"} 393 | {"Position":{"x":6.967028617858887,"y":5.73024845123291,"z":8.084282875061036},"EventName":"Camera Look At"} 394 | {"Position":{"x":8.393745422363282,"y":5.869470119476318,"z":9.761972427368164},"EventName":"Object Position"} 395 | {"Position":{"x":4.617732048034668,"y":6.015700340270996,"z":9.31260871887207},"EventName":"Camera Look At"} 396 | {"Position":{"x":7.825007438659668,"y":6.033538818359375,"z":9.193300247192383},"EventName":"Object Position"} 397 | {"Position":{"x":3.8211989402770998,"y":6.015450477600098,"z":10.350247383117676},"EventName":"Camera Look At"} 398 | {"Position":{"x":7.061748027801514,"y":5.832106590270996,"z":8.954244613647461},"EventName":"Object Position"} 399 | {"Position":{"x":-0.043851375579833987,"y":4.005187034606934,"z":15.401731491088868},"EventName":"Camera Look At"} 400 | {"Position":{"x":6.251323223114014,"y":6.10576057434082,"z":8.953500747680664},"EventName":"Object Position"} 401 | {"Position":{"x":-0.7233238220214844,"y":4.005187511444092,"z":16.4699649810791},"EventName":"Camera Look At"} 402 | {"Position":{"x":5.440140247344971,"y":6.105759620666504,"z":8.964829444885254},"EventName":"Object Position"} 403 | {"Position":{"x":-1.543088436126709,"y":4.005187511444092,"z":16.486572265625},"EventName":"Camera Look At"} 404 | {"Position":{"x":4.8393144607543949,"y":6.791080474853516,"z":9.43978500366211},"EventName":"Object Position"} 405 | {"Position":{"x":0.9815051555633545,"y":4.005187511444092,"z":14.451173782348633},"EventName":"Camera Look At"} 406 | {"Position":{"x":4.370809078216553,"y":7.467065334320068,"z":10.098217964172364},"EventName":"Object Position"} 407 | {"Position":{"x":2.5021321773529054,"y":4.005187511444092,"z":13.084412574768067},"EventName":"Camera Look At"} 408 | {"Position":{"x":3.9046080112457277,"y":7.530176639556885,"z":10.760363578796387},"EventName":"Object Position"} 409 | {"Position":{"x":1.989488124847412,"y":4.005187511444092,"z":13.809597969055176},"EventName":"Camera Look At"} 410 | {"Position":{"x":3.439605236053467,"y":6.980969429016113,"z":11.420772552490235},"EventName":"Object Position"} 411 | {"Position":{"x":1.7329485416412354,"y":4.005187511444092,"z":14.178424835205079},"EventName":"Camera Look At"} 412 | {"Position":{"x":2.9602127075195314,"y":5.823235988616943,"z":12.067410469055176},"EventName":"Object Position"} 413 | {"Position":{"x":1.0486552715301514,"y":4.005187511444092,"z":14.13633918762207},"EventName":"Camera Look At"} 414 | {"Position":{"x":2.2288782596588136,"y":4.673076629638672,"z":12.388681411743164},"EventName":"Object Position"} 415 | {"Position":{"x":0.15330290794372559,"y":4.005187511444092,"z":13.255560874938965},"EventName":"Camera Look At"} 416 | {"Position":{"x":1.45513916015625,"y":4.576170921325684,"z":12.617194175720215},"EventName":"Object Position"} 417 | {"Position":{"x":-0.7885069847106934,"y":4.005187511444092,"z":13.216649055480957},"EventName":"Camera Look At"} 418 | {"Position":{"x":0.6486642956733704,"y":4.573192119598389,"z":12.628963470458985},"EventName":"Object Position"} 419 | {"Position":{"x":-1.994828701019287,"y":4.005187511444092,"z":12.732962608337403},"EventName":"Camera Look At"} 420 | {"Position":{"x":-0.15648873150348664,"y":4.582879066467285,"z":12.584494590759278},"EventName":"Object Position"} 421 | {"Position":{"x":-2.8669381141662599,"y":4.005187511444092,"z":12.577313423156739},"EventName":"Camera Look At"} 422 | {"Position":{"x":-0.959563136100769,"y":4.589437007904053,"z":12.524112701416016},"EventName":"Object Position"} 423 | {"Position":{"x":-3.6757426261901857,"y":4.005187511444092,"z":12.516697883605957},"EventName":"Camera Look At"} 424 | {"Position":{"x":-1.7636494636535645,"y":4.589999675750732,"z":12.463653564453125},"EventName":"Object Position"} 425 | {"Position":{"x":-8.730999946594239,"y":0.9047837257385254,"z":12.130661964416504},"EventName":"Camera Look At"} 426 | {"Position":{"x":-2.5733275413513185,"y":4.589999198913574,"z":12.410587310791016},"EventName":"Object Position"} 427 | {"Position":{"x":-10.897102355957032,"y":-1.8314203487079795e-8,"z":12.94430923461914},"EventName":"Camera Look At"} 428 | {"Position":{"x":-2.9841420650482179,"y":4.411100387573242,"z":12.971939086914063},"EventName":"Object Position"} 429 | {"Position":{"x":-2.298224925994873,"y":4.005187511444092,"z":15.923748016357422},"EventName":"Camera Look At"} 430 | {"Position":{"x":-2.69942307472229,"y":4.095187664031982,"z":13.726227760314942},"EventName":"Object Position"} 431 | {"Position":{"x":-1.4854769706726075,"y":4.005187511444092,"z":16.10207748413086},"EventName":"Camera Look At"} 432 | {"Position":{"x":-2.3690803050994875,"y":4.095187664031982,"z":14.468277931213379},"EventName":"Object Position"} 433 | {"Position":{"x":-0.9343276023864746,"y":4.005187511444092,"z":17.160263061523439},"EventName":"Camera Look At"} 434 | {"Position":{"x":-2.0420784950256349,"y":4.095187664031982,"z":15.203864097595215},"EventName":"Object Position"} 435 | {"Position":{"x":2.7229537963867189,"y":-2.1516450843250824e-9,"z":25.3966064453125},"EventName":"Camera Look At"} 436 | {"Position":{"x":-1.7066823244094849,"y":4.095187664031982,"z":15.943889617919922},"EventName":"Object Position"} 437 | {"Position":{"x":3.9446680545806886,"y":-6.889592785164211e-10,"z":25.563657760620118},"EventName":"Camera Look At"} 438 | {"Position":{"x":-1.0248923301696778,"y":4.095187664031982,"z":16.285057067871095},"EventName":"Object Position"} 439 | {"Position":{"x":1.377964735031128,"y":4.005187511444092,"z":16.066133499145509},"EventName":"Camera Look At"} 440 | {"Position":{"x":-0.23457071185112,"y":4.229312419891357,"z":16.132770538330079},"EventName":"Object Position"} 441 | {"Position":{"x":2.0399115085601808,"y":4.005187511444092,"z":15.329811096191407},"EventName":"Camera Look At"} 442 | {"Position":{"x":0.5450179576873779,"y":5.197077751159668,"z":15.929701805114746},"EventName":"Object Position"} 443 | {"Position":{"x":4.321203708648682,"y":4.004143238067627,"z":14.732994079589844},"EventName":"Camera Look At"} 444 | {"Position":{"x":1.3261609077453614,"y":5.560741901397705,"z":15.726131439208985},"EventName":"Object Position"} 445 | {"Position":{"x":5.252324104309082,"y":4.340127468109131,"z":14.476449966430664},"EventName":"Camera Look At"} 446 | {"Position":{"x":1.9913631677627564,"y":5.3125762939453129,"z":15.304133415222168},"EventName":"Object Position"} 447 | {"Position":{"x":4.275981426239014,"y":4.005187511444092,"z":11.723966598510743},"EventName":"Camera Look At"} 448 | {"Position":{"x":2.4247615337371828,"y":4.451432228088379,"z":14.621150016784668},"EventName":"Object Position"} 449 | {"Position":{"x":3.873993158340454,"y":4.005187511444092,"z":11.942266464233399},"EventName":"Camera Look At"} 450 | {"Position":{"x":2.8355071544647219,"y":4.095187664031982,"z":13.92082405090332},"EventName":"Object Position"} 451 | {"Position":{"x":3.2067458629608156,"y":4.499999046325684,"z":12.35324478149414},"EventName":"Camera Look At"} 452 | {"Position":{"x":2.9542500972747804,"y":4.209972858428955,"z":13.121944427490235},"EventName":"Object Position"} 453 | {"Position":{"x":3.2358577251434328,"y":2.504114866256714,"z":8.278923034667969},"EventName":"Camera Look At"} 454 | {"Position":{"x":3.0370991230010988,"y":5.188676357269287,"z":12.316635131835938},"EventName":"Object Position"} 455 | {"Position":{"x":3.239226818084717,"y":4.275688171386719,"z":8.73161506652832},"EventName":"Camera Look At"} 456 | {"Position":{"x":3.1482255458831789,"y":5.557944297790527,"z":11.517732620239258},"EventName":"Object Position"} 457 | {"Position":{"x":3.2408130168914797,"y":5.990501403808594,"z":10.023186683654786},"EventName":"Camera Look At"} 458 | {"Position":{"x":3.1939051151275636,"y":5.063347339630127,"z":11.371183395385743},"EventName":"Object Position"} 459 | {"Position":{"x":3.6772398948669435,"y":6.015357494354248,"z":10.812894821166993},"EventName":"Camera Look At"} 460 | {"Position":{"x":3.3433661460876467,"y":4.874495506286621,"z":11.372869491577149},"EventName":"Object Position"} 461 | {"Position":{"x":4.392730712890625,"y":5.367915153503418,"z":10.871522903442383},"EventName":"Camera Look At"} 462 | {"Position":{"x":3.5834460258483888,"y":5.774321556091309,"z":11.356457710266114},"EventName":"Object Position"} 463 | {"Position":{"x":5.033751487731934,"y":6.01548957824707,"z":10.755759239196778},"EventName":"Camera Look At"} 464 | {"Position":{"x":4.197785377502441,"y":6.055140972137451,"z":11.188969612121582},"EventName":"Object Position"} 465 | {"Position":{"x":6.160806655883789,"y":6.015620231628418,"z":10.452418327331543},"EventName":"Camera Look At"} 466 | {"Position":{"x":4.949150085449219,"y":6.100587368011475,"z":10.941176414489746},"EventName":"Object Position"} 467 | {"Position":{"x":10.259157180786133,"y":5.467774391174316,"z":8.080150604248047},"EventName":"Camera Look At"} 468 | {"Position":{"x":5.527963161468506,"y":6.105597019195557,"z":10.393940925598145},"EventName":"Object Position"} 469 | {"Position":{"x":6.874668121337891,"y":6.255024433135986,"z":7.370633125305176},"EventName":"Camera Look At"} 470 | {"Position":{"x":5.704892158508301,"y":6.472715854644775,"z":9.611530303955079},"EventName":"Object Position"} 471 | {"Position":{"x":5.838166236877441,"y":6.7619476318359379,"z":7.370633125305176},"EventName":"Camera Look At"} 472 | {"Position":{"x":5.8426923751831059,"y":7.32924222946167,"z":8.816889762878418},"EventName":"Object Position"} 473 | {"Position":{"x":9.72836685180664,"y":6.6703975676318809e-9,"z":-5.643418312072754},"EventName":"Camera Look At"} 474 | {"Position":{"x":6.357463836669922,"y":7.574952602386475,"z":8.238842010498047},"EventName":"Object Position"} 475 | {"Position":{"x":17.985261917114259,"y":0.10508108139038086,"z":3.3117294311523439},"EventName":"Camera Look At"} 476 | {"Position":{"x":7.128718852996826,"y":7.208627223968506,"z":8.00102424621582},"EventName":"Object Position"} 477 | {"Position":{"x":9.345087051391602,"y":6.993982791900635,"z":7.3542256355285648},"EventName":"Camera Look At"} 478 | {"Position":{"x":7.92330265045166,"y":6.232057094573975,"z":7.872641086578369},"EventName":"Object Position"} 479 | {"Position":{"x":9.621030807495118,"y":6.470869541168213,"z":7.370632648468018},"EventName":"Camera Look At"} 480 | {"Position":{"x":8.717826843261719,"y":5.255499839782715,"z":7.872641563415527},"EventName":"Object Position"} 481 | {"Position":{"x":10.259319305419922,"y":5.554721355438232,"z":7.415432453155518},"EventName":"Camera Look At"} 482 | {"Position":{"x":9.511442184448243,"y":5.077106475830078,"z":7.964953899383545},"EventName":"Object Position"} 483 | {"Position":{"x":10.26017951965332,"y":6.095802307128906,"z":8.095378875732422},"EventName":"Camera Look At"} 484 | {"Position":{"x":9.745624542236329,"y":5.077366352081299,"z":8.134832382202149},"EventName":"Object Position"} 485 | {"Position":{"x":10.26017951965332,"y":6.206957817077637,"z":8.338738441467286},"EventName":"Camera Look At"} 486 | {"Position":{"x":9.745624542236329,"y":5.393861293792725,"z":8.157525062561036},"EventName":"Object Position"} 487 | {"Position":{"x":10.26017951965332,"y":6.402125835418701,"z":8.360743522644043},"EventName":"Camera Look At"} 488 | {"Position":{"x":9.74915599822998,"y":6.2734456062316898,"z":8.191252708435059},"EventName":"Object Position"} 489 | {"Position":{"x":18.04669761657715,"y":1.628796830743795e-8,"z":20.618907928466798},"EventName":"Camera Look At"} 490 | {"Position":{"x":9.758868217468262,"y":6.542900085449219,"z":8.328301429748536},"EventName":"Object Position"} 491 | {"Position":{"x":12.626840591430664,"y":9.798629463375619e-9,"z":19.912403106689454},"EventName":"Camera Look At"} 492 | {"Position":{"x":9.759682655334473,"y":5.950740337371826,"z":8.61770248413086},"EventName":"Object Position"} 493 | {"Position":{"x":10.398813247680664,"y":6.0010271072387699,"z":10.58055591583252},"EventName":"Camera Look At"} 494 | {"Position":{"x":9.759682655334473,"y":5.375784873962402,"z":8.89986515045166},"EventName":"Object Position"} 495 | {"Position":{"x":10.259946823120118,"y":5.85322380065918,"z":10.213420867919922},"EventName":"Camera Look At"} 496 | {"Position":{"x":9.759761810302735,"y":5.820924282073975,"z":9.184856414794922},"EventName":"Object Position"} 497 | {"Position":{"x":10.30131721496582,"y":5.9938764572143559,"z":10.692124366760254},"EventName":"Camera Look At"} 498 | {"Position":{"x":9.774669647216797,"y":6.609408855438232,"z":9.493810653686524},"EventName":"Object Position"} 499 | {"Position":{"x":12.421600341796875,"y":9.539088630106108e-9,"z":20.900983810424806},"EventName":"Camera Look At"} 500 | {"Position":{"x":9.92054271697998,"y":6.78913688659668,"z":10.141106605529786},"EventName":"Object Position"} 501 | {"Position":{"x":12.640998840332032,"y":9.788893251538866e-9,"z":21.878053665161134},"EventName":"Camera Look At"} 502 | {"Position":{"x":10.095562934875489,"y":6.355762004852295,"z":10.917739868164063},"EventName":"Object Position"} 503 | {"Position":{"x":12.706197738647461,"y":9.864042915808114e-9,"z":22.100887298583986},"EventName":"Camera Look At"} 504 | {"Position":{"x":10.339953422546387,"y":6.079532146453857,"z":11.686306953430176},"EventName":"Object Position"} 505 | {"Position":{"x":16.86409568786621,"y":1.4871215370249047e-8,"z":20.523134231567384},"EventName":"Camera Look At"} 506 | {"Position":{"x":11.03730297088623,"y":6.843774318695068,"z":12.076192855834961},"EventName":"Object Position"} 507 | {"Position":{"x":20.872318267822267,"y":1.974684948891081e-8,"z":15.418252944946289},"EventName":"Camera Look At"} 508 | {"Position":{"x":11.809724807739258,"y":7.454977512359619,"z":12.318979263305664},"EventName":"Object Position"} 509 | {"Position":{"x":22.169954299926759,"y":2.1304055408677415e-8,"z":15.329176902770996},"EventName":"Camera Look At"} 510 | {"Position":{"x":12.600101470947266,"y":7.451815128326416,"z":12.482872009277344},"EventName":"Object Position"} 511 | {"Position":{"x":22.046083450317384,"y":2.1186577825460519e-8,"z":13.044098854064942},"EventName":"Camera Look At"} 512 | {"Position":{"x":13.4255952835083,"y":6.81110954284668,"z":12.432106018066407},"EventName":"Object Position"} 513 | {"Position":{"x":20.344436645507814,"y":0.0019999993965029718,"z":10.854331016540528},"EventName":"Camera Look At"} 514 | {"Position":{"x":14.21017837524414,"y":5.56562614440918,"z":12.23570442199707},"EventName":"Object Position"} 515 | {"Position":{"x":19.8825626373291,"y":1.8625517128612047e-8,"z":10.600107192993164},"EventName":"Camera Look At"} 516 | {"Position":{"x":14.973381996154786,"y":3.7127981185913088,"z":11.984711647033692},"EventName":"Object Position"} 517 | {"Position":{"x":18.334171295166017,"y":1.678141003935707e-8,"z":9.6756591796875},"EventName":"Camera Look At"} 518 | {"Position":{"x":15.378767967224121,"y":2.139603853225708,"z":11.308740615844727},"EventName":"Object Position"} 519 | {"Position":{"x":15.467883110046387,"y":2.0055174827575685,"z":9.857572555541993},"EventName":"Camera Look At"} 520 | {"Position":{"x":15.445795059204102,"y":2.09551739692688,"z":10.50386905670166},"EventName":"Object Position"} 521 | {"Position":{"x":15.470773696899414,"y":1.3382484453927646e-8,"z":7.131796836853027},"EventName":"Camera Look At"} 522 | {"Position":{"x":15.497063636779786,"y":2.925487995147705,"z":9.700187683105469},"EventName":"Object Position"} 523 | {"Position":{"x":15.571374893188477,"y":1.3523741237975173e-8,"z":5.6141252517700199},"EventName":"Camera Look At"} 524 | {"Position":{"x":15.562396049499512,"y":3.506256341934204,"z":8.897443771362305},"EventName":"Object Position"} 525 | {"Position":{"x":15.899580001831055,"y":1.3937682119546935e-8,"z":4.113714694976807},"EventName":"Camera Look At"} 526 | {"Position":{"x":15.649580955505371,"y":3.4782321453094484,"z":8.094903945922852},"EventName":"Object Position"} 527 | {"Position":{"x":15.994586944580079,"y":1.406321992192261e-8,"z":3.2592501640319826},"EventName":"Camera Look At"} 528 | {"Position":{"x":16.16156578063965,"y":2.83778977394104,"z":7.523744583129883},"EventName":"Object Position"} 529 | {"Position":{"x":16.38308334350586,"y":1.4529388359107998e-8,"z":3.235502004623413},"EventName":"Camera Look At"} 530 | {"Position":{"x":16.798980712890626,"y":1.5788114070892335,"z":7.021795272827148},"EventName":"Object Position"} 531 | {"Position":{"x":17.09488868713379,"y":1.537931204609322e-8,"z":3.500552177429199},"EventName":"Camera Look At"} 532 | {"Position":{"x":17.468412399291993,"y":0.20399057865142823,"z":6.568262100219727},"EventName":"Object Position"} 533 | {"Position":{"x":17.857460021972658,"y":0.006732314825057983,"z":3.041666030883789},"EventName":"Camera Look At"} 534 | {"Position":{"x":18.129405975341798,"y":0.08999991416931153,"z":6.105631351470947},"EventName":"Object Position"} 535 | {"Position":{"x":18.2609920501709,"y":0.46736979484558108,"z":3.894378662109375},"EventName":"Camera Look At"} 536 | {"Position":{"x":18.340347290039064,"y":0.13136637210845948,"z":5.353704452514648},"EventName":"Object Position"} 537 | {"Position":{"x":18.36126708984375,"y":0.9081726670265198,"z":4.106273174285889},"EventName":"Camera Look At"} 538 | {"Position":{"x":18.46237564086914,"y":1.1419364213943482,"z":4.556063652038574},"EventName":"Object Position"} 539 | {"Position":{"x":18.5557918548584,"y":1.7185291412147309e-8,"z":-0.4884045124053955},"EventName":"Camera Look At"} 540 | {"Position":{"x":18.131542205810548,"y":1.554026484489441,"z":3.848557472229004},"EventName":"Object Position"} 541 | {"Position":{"x":15.08154296875,"y":1.2999067600105718e-8,"z":1.0019350051879883},"EventName":"Camera Look At"} 542 | {"Position":{"x":17.561847686767579,"y":1.3500150442123414,"z":3.273845911026001},"EventName":"Object Position"} 543 | {"Position":{"x":14.63460922241211,"y":1.2469105747925369e-8,"z":0.5637960433959961},"EventName":"Camera Look At"} 544 | {"Position":{"x":16.957490921020509,"y":0.5343958139419556,"z":2.7390992641448976},"EventName":"Object Position"} 545 | {"Position":{"x":13.808572769165039,"y":1.1481671613466915e-8,"z":0.33828091621398928},"EventName":"Camera Look At"} 546 | {"Position":{"x":16.338598251342775,"y":0.09000015258789063,"z":2.222538948059082},"EventName":"Object Position"} 547 | {"Position":{"x":14.01576042175293,"y":1.1727601112454522e-8,"z":0.5228452682495117},"EventName":"Camera Look At"} 548 | {"Position":{"x":15.698868751525879,"y":0.08999991416931153,"z":1.7319529056549073},"EventName":"Object Position"} 549 | {"Position":{"x":8.878388404846192,"y":5.604321007268709e-9,"z":-2.194915771484375},"EventName":"Camera Look At"} 550 | {"Position":{"x":14.976255416870118,"y":0.08999991416931153,"z":1.3722450733184815},"EventName":"Object Position"} 551 | {"Position":{"x":10.636269569396973,"y":1.0,"z":-0.36729544401168826},"EventName":"Camera Look At"} 552 | {"Position":{"x":14.22817325592041,"y":0.08999991416931153,"z":1.0750420093536378},"EventName":"Object Position"} 553 | {"Position":{"x":-0.4414701461791992,"y":-5.539310787838758e-9,"z":-4.534674644470215},"EventName":"Camera Look At"} 554 | {"Position":{"x":13.458351135253907,"y":0.09000003337860108,"z":0.7882760763168335},"EventName":"Object Position"} 555 | {"Position":{"x":-1.2931394577026368,"y":-6.5664460535685979e-9,"z":-4.100597858428955},"EventName":"Camera Look At"} 556 | {"Position":{"x":12.690539360046387,"y":0.09000015258789063,"z":0.5268917679786682},"EventName":"Object Position"} 557 | {"Position":{"x":-1.9878640174865723,"y":-7.396399492876071e-9,"z":-4.327910900115967},"EventName":"Camera Look At"} 558 | {"Position":{"x":11.922683715820313,"y":0.9842997789382935,"z":0.2804611921310425},"EventName":"Object Position"} 559 | {"Position":{"x":-8.01783561706543,"y":-1.4626180266930078e-8,"z":-4.3832244873046879},"EventName":"Camera Look At"} 560 | {"Position":{"x":11.118932723999024,"y":1.5163371562957764,"z":0.2544917166233063},"EventName":"Object Position"} 561 | {"Position":{"x":-6.713967800140381,"y":-1.3162718914827565e-8,"z":2.9750356674194338},"EventName":"Camera Look At"} 562 | {"Position":{"x":10.323257446289063,"y":1.4346556663513184,"z":0.3951549232006073},"EventName":"Object Position"} 563 | {"Position":{"x":-7.3023247718811039,"y":-1.3877891724689562e-8,"z":3.6869189739227297},"EventName":"Camera Look At"} 564 | {"Position":{"x":9.529205322265625,"y":1.0868186950683594,"z":0.5373128652572632},"EventName":"Object Position"} 565 | {"Position":{"x":-5.669602870941162,"y":-1.1916232445230435e-8,"z":3.4025957584381105},"EventName":"Camera Look At"} 566 | {"Position":{"x":8.73137092590332,"y":0.8506127595901489,"z":0.6801478862762451},"EventName":"Object Position"} 567 | {"Position":{"x":-5.146831035614014,"y":-1.1288154411204232e-8,"z":3.3124852180480959},"EventName":"Camera Look At"} 568 | {"Position":{"x":7.938149929046631,"y":0.2425065040588379,"z":0.8221569657325745},"EventName":"Object Position"} 569 | {"Position":{"x":-2.1633501052856447,"y":-7.703612858733777e-9,"z":2.793609142303467},"EventName":"Camera Look At"} 570 | {"Position":{"x":7.141704559326172,"y":0.09000003337860108,"z":0.9647433757781982},"EventName":"Object Position"} 571 | {"Position":{"x":-1.702038288116455,"y":-7.149410397033762e-9,"z":2.7167985439300539},"EventName":"Camera Look At"} 572 | {"Position":{"x":6.345514297485352,"y":0.09000015258789063,"z":1.1072840690612794},"EventName":"Object Position"} 573 | {"Position":{"x":-2.4885778427124025,"y":-8.09447531224805e-9,"z":2.858501672744751},"EventName":"Camera Look At"} 574 | {"Position":{"x":5.550245761871338,"y":0.08999991416931153,"z":1.249659776687622},"EventName":"Object Position"} 575 | {"Position":{"x":-3.2901487350463869,"y":-9.057611549678768e-9,"z":3.0037105083465578},"EventName":"Camera Look At"} 576 | {"Position":{"x":4.75663948059082,"y":0.09000015258789063,"z":1.3917378187179566},"EventName":"Object Position"} 577 | {"Position":{"x":-4.098944187164307,"y":-1.0029444830195189e-8,"z":3.151479959487915},"EventName":"Camera Look At"} 578 | {"Position":{"x":3.9630439281463625,"y":0.09000003337860108,"z":1.5338140726089478},"EventName":"Object Position"} 579 | {"Position":{"x":-4.910801410675049,"y":-1.1004972932937563e-8,"z":3.300934314727783},"EventName":"Camera Look At"} 580 | {"Position":{"x":3.1688294410705568,"y":0.09000003337860108,"z":1.6812019348144532},"EventName":"Object Position"} 581 | {"Position":{"x":-6.228769779205322,"y":-1.2596617082749617e-8,"z":4.130068778991699},"EventName":"Camera Look At"} 582 | {"Position":{"x":2.449294328689575,"y":0.09000003337860108,"z":2.0361900329589845},"EventName":"Object Position"} 583 | {"Position":{"x":-7.018126010894775,"y":-1.360540835548818e-8,"z":8.712284088134766},"EventName":"Camera Look At"} 584 | {"Position":{"x":1.781450629234314,"y":0.09000003337860108,"z":2.491762161254883},"EventName":"Object Position"} 585 | {"Position":{"x":-7.687194347381592,"y":-1.441395713897009e-8,"z":9.173528671264649},"EventName":"Camera Look At"} 586 | {"Position":{"x":1.1151995658874512,"y":0.08999991416931153,"z":2.9462475776672365},"EventName":"Object Position"} 587 | {"Position":{"x":-8.350761413574219,"y":-1.521581616259482e-8,"z":9.627883911132813},"EventName":"Camera Look At"} 588 | {"Position":{"x":0.44524601101875307,"y":0.08999991416931153,"z":3.403258800506592},"EventName":"Object Position"} 589 | {"Position":{"x":-9.013179779052735,"y":-1.6016230119930698e-8,"z":10.077560424804688},"EventName":"Camera Look At"} 590 | {"Position":{"x":-0.22378560900688172,"y":0.08999991416931153,"z":3.8596410751342775},"EventName":"Object Position"} 591 | {"Position":{"x":-9.620674133300782,"y":0.007803797721862793,"z":10.486000061035157},"EventName":"Camera Look At"} 592 | {"Position":{"x":-0.8897907733917236,"y":0.08999991416931153,"z":4.313959121704102},"EventName":"Object Position"} 593 | {"Position":{"x":-9.630084037780762,"y":0.10486817359924317,"z":10.486000061035157},"EventName":"Camera Look At"} 594 | {"Position":{"x":-1.5106453895568848,"y":0.08999991416931153,"z":4.827886581420898},"EventName":"Object Position"} 595 | {"Position":{"x":-9.903589248657227,"y":-1.713937791691933e-8,"z":14.158244132995606},"EventName":"Camera Look At"} 596 | {"Position":{"x":-2.0544791221618654,"y":0.08999991416931153,"z":5.421198844909668},"EventName":"Object Position"} 597 | {"Position":{"x":-10.392059326171875,"y":-1.773304880714477e-8,"z":14.742653846740723},"EventName":"Camera Look At"} 598 | {"Position":{"x":-2.6003081798553469,"y":0.08999991416931153,"z":6.0168657302856449},"EventName":"Object Position"} 599 | {"Position":{"x":-10.915250778198243,"y":-1.836800578303155e-8,"z":15.301826477050782},"EventName":"Camera Look At"} 600 | {"Position":{"x":-3.1456353664398195,"y":0.09000003337860108,"z":6.611985206604004},"EventName":"Object Position"} 601 | {"Position":{"x":-11.443830490112305,"y":-1.900953527922411e-8,"z":15.869393348693848},"EventName":"Camera Look At"} 602 | {"Position":{"x":-3.691426992416382,"y":0.09000003337860108,"z":7.207611560821533},"EventName":"Object Position"} 603 | {"Position":{"x":-11.965827941894532,"y":0.0020000003278255464,"z":16.433597564697267},"EventName":"Camera Look At"} 604 | {"Position":{"x":-4.235720634460449,"y":0.09000003337860108,"z":7.801602840423584},"EventName":"Object Position"} 605 | {"Position":{"x":-12.518133163452149,"y":-2.031357126952571e-8,"z":17.034942626953126},"EventName":"Camera Look At"} 606 | {"Position":{"x":-4.800798416137695,"y":0.09000003337860108,"z":8.382518768310547},"EventName":"Object Position"} 607 | {"Position":{"x":-8.730999946594239,"y":0.808733344078064,"z":11.842299461364746},"EventName":"Camera Look At"} 608 | {"Position":{"x":-5.458972454071045,"y":0.09000003337860108,"z":8.847328186035157},"EventName":"Object Position"} 609 | {"Position":{"x":-8.730999946594239,"y":0.9379329681396484,"z":11.329874992370606},"EventName":"Camera Look At"} 610 | {"Position":{"x":-6.123750686645508,"y":0.08999991416931153,"z":9.306783676147461},"EventName":"Object Position"} 611 | {"Position":{"x":-8.99152660369873,"y":1.0,"z":11.514667510986329},"EventName":"Camera Look At"} 612 | {"Position":{"x":-6.7840728759765629,"y":0.16355431079864503,"z":9.769872665405274},"EventName":"Object Position"} 613 | {"Position":{"x":-9.73387622833252,"y":1.0,"z":12.090983390808106},"EventName":"Camera Look At"} 614 | {"Position":{"x":-7.447928428649902,"y":1.1599178314208985,"z":10.230648040771485},"EventName":"Object Position"} 615 | {"Position":{"x":-14.451461791992188,"y":-2.2604359273259435e-8,"z":15.014137268066407},"EventName":"Camera Look At"} 616 | {"Position":{"x":-8.14395523071289,"y":1.5527820587158204,"z":10.638248443603516},"EventName":"Object Position"} 617 | {"Position":{"x":-15.858837127685547,"y":-2.427928791348677e-8,"z":14.083303451538086},"EventName":"Camera Look At"} 618 | {"Position":{"x":-8.901115417480469,"y":1.3394899368286133,"z":10.548293113708496},"EventName":"Object Position"} 619 | {"Position":{"x":-15.823549270629883,"y":-2.4117138508472636e-8,"z":5.265720367431641},"EventName":"Camera Look At"} 620 | {"Position":{"x":-9.316287994384766,"y":0.921064019203186,"z":9.867855072021485},"EventName":"Object Position"} 621 | {"Position":{"x":-10.094534873962403,"y":1.729372262954712,"z":7.976491928100586},"EventName":"Camera Look At"} 622 | {"Position":{"x":-9.492769241333008,"y":0.25429201126098635,"z":9.078392028808594},"EventName":"Object Position"} 623 | {"Position":{"x":-9.920330047607422,"y":1.341235876083374,"z":8.015954971313477},"EventName":"Camera Look At"} 624 | {"Position":{"x":-9.595529556274414,"y":0.09000003337860108,"z":8.620667457580567},"EventName":"Object Position"} 625 | {"Position":{"x":-9.94078254699707,"y":1.2644232511520386,"z":8.011322021484375},"EventName":"Camera Look At"} 626 | {"Position":{"x":-9.605117797851563,"y":0.09000003337860108,"z":8.618271827697754},"EventName":"Object Position"} 627 | {"Position":{"x":-9.968240737915039,"y":1.2662935256958008,"z":8.005101203918457},"EventName":"Camera Look At"} 628 | {"Position":{"x":-9.605738639831543,"y":0.08999979496002197,"z":8.618131637573243},"EventName":"Object Position"} 629 | {"Position":{"x":-9.969690322875977,"y":1.2662826776504517,"z":8.004773139953614},"EventName":"Camera Look At"} 630 | {"Position":{"x":-9.508673667907715,"y":0.5583217144012451,"z":9.00680923461914},"EventName":"Object Position"} 631 | {"Position":{"x":-9.927865982055664,"y":1.507154107093811,"z":8.01424789428711},"EventName":"Camera Look At"} 632 | {"Position":{"x":-9.479713439941407,"y":1.3588030338287354,"z":9.724968910217286},"EventName":"Object Position"} 633 | {"Position":{"x":-10.041657447814942,"y":2.002845287322998,"z":7.563712120056152},"EventName":"Camera Look At"} 634 | {"Position":{"x":-9.947364807128907,"y":1.5436112880706788,"z":10.385900497436524},"EventName":"Object Position"} 635 | {"Position":{"x":-10.470694541931153,"y":1.9212090969085694,"z":7.8912811279296879},"EventName":"Camera Look At"} 636 | {"Position":{"x":-10.248939514160157,"y":1.1967198848724366,"z":11.079254150390625},"EventName":"Object Position"} 637 | {"Position":{"x":-10.558446884155274,"y":0.9471836090087891,"z":7.871402740478516},"EventName":"Camera Look At"} 638 | {"Position":{"x":-10.228086471557618,"y":1.0899996757507325,"z":11.691726684570313},"EventName":"Object Position"} 639 | {"Position":{"x":-10.560149192810059,"y":0.4765980839729309,"z":7.871016979217529},"EventName":"Camera Look At"} 640 | {"Position":{"x":-10.230578422546387,"y":1.0899999141693116,"z":11.61854076385498},"EventName":"Object Position"} 641 | {"Position":{"x":-10.558866500854493,"y":0.5138587951660156,"z":7.871307373046875},"EventName":"Camera Look At"} 642 | {"Position":{"x":-10.25204086303711,"y":1.0899999141693116,"z":10.98816204071045},"EventName":"Object Position"} 643 | {"Position":{"x":-10.557085990905762,"y":0.839692234992981,"z":7.871710777282715},"EventName":"Camera Look At"} 644 | {"Position":{"x":-10.278907775878907,"y":1.4525723457336426,"z":10.19905948638916},"EventName":"Object Position"} 645 | {"Position":{"x":-10.5560941696167,"y":1.4863168001174927,"z":7.8719353675842289},"EventName":"Camera Look At"} 646 | {"Position":{"x":-10.306946754455567,"y":2.289900064468384,"z":9.393202781677246},"EventName":"Object Position"} 647 | {"Position":{"x":-10.620418548583985,"y":2.002845287322998,"z":6.312521457672119},"EventName":"Camera Look At"} 648 | {"Position":{"x":-10.338066101074219,"y":2.516911506652832,"z":8.583148956298829},"EventName":"Object Position"} 649 | {"Position":{"x":-10.67021656036377,"y":2.002845287322998,"z":4.934074401855469},"EventName":"Camera Look At"} 650 | {"Position":{"x":-10.36923885345459,"y":2.190457820892334,"z":7.771683216094971},"EventName":"Object Position"} 651 | {"Position":{"x":-10.680536270141602,"y":2.002845287322998,"z":4.676509857177734},"EventName":"Camera Look At"} 652 | {"Position":{"x":-10.33181381225586,"y":2.0928454399108888,"z":6.968099117279053},"EventName":"Object Position"} 653 | {"Position":{"x":-8.734434127807618,"y":-1.5536242514713196e-8,"z":-0.6461710929870606},"EventName":"Camera Look At"} 654 | {"Position":{"x":-10.013670921325684,"y":2.0928454399108888,"z":6.230750560760498},"EventName":"Object Position"} 655 | {"Position":{"x":-8.155539512634278,"y":1.6661436557769776,"z":2.278320789337158},"EventName":"Camera Look At"} 656 | {"Position":{"x":-9.616992950439454,"y":2.0928454399108888,"z":5.522394180297852},"EventName":"Object Position"} 657 | {"Position":{"x":-8.025166511535645,"y":2.014883518218994,"z":2.3573989868164064},"EventName":"Camera Look At"} 658 | {"Position":{"x":-9.214800834655762,"y":2.411536931991577,"z":4.820127964019775},"EventName":"Object Position"} 659 | {"Position":{"x":-8.02790355682373,"y":2.542612075805664,"z":2.355738639831543},"EventName":"Camera Look At"} 660 | {"Position":{"x":-8.813610076904297,"y":3.2927563190460207,"z":4.119608402252197},"EventName":"Object Position"} 661 | {"Position":{"x":-7.049503803253174,"y":3.0000016689300539,"z":0.6501721143722534},"EventName":"Camera Look At"} 662 | {"Position":{"x":-8.413591384887696,"y":3.563242197036743,"z":3.421135663986206},"EventName":"Object Position"} 663 | {"Position":{"x":-2.583407402038574,"y":-8.072506219036768e-9,"z":-7.124556541442871},"EventName":"Camera Look At"} 664 | {"Position":{"x":-8.012252807617188,"y":3.2283518314361574,"z":2.7203598022460939},"EventName":"Object Position"} 665 | {"Position":{"x":-2.5107221603393556,"y":-7.98349830688494e-9,"z":-7.260839462280273},"EventName":"Camera Look At"} 666 | {"Position":{"x":-7.607081890106201,"y":3.0900018215179445,"z":2.012890338897705},"EventName":"Object Position"} 667 | {"Position":{"x":-2.3432297706604006,"y":-7.778607979957997e-9,"z":-7.5587873458862309},"EventName":"Camera Look At"} 668 | {"Position":{"x":-7.206469535827637,"y":3.0900018215179445,"z":1.3133816719055176},"EventName":"Object Position"} 669 | {"Position":{"x":-1.929356575012207,"y":-7.27247906340267e-9,"z":-8.283868789672852},"EventName":"Camera Look At"} 670 | {"Position":{"x":-7.129729747772217,"y":3.090001344680786,"z":1.1869744062423707},"EventName":"Object Position"} 671 | {"Position":{"x":1.7269108295440674,"y":-2.9712017290961514e-9,"z":-2.1806206703186037},"EventName":"Camera Look At"} 672 | {"Position":{"x":-6.967274188995361,"y":3.090001344680786,"z":1.2684119939804078},"EventName":"Object Position"} 673 | {"Position":{"x":1.8545804023742676,"y":-2.8212112646031075e-9,"z":-1.9526724815368653},"EventName":"Camera Look At"} 674 | {"Position":{"x":-6.553474426269531,"y":3.090001344680786,"z":1.760968565940857},"EventName":"Object Position"} 675 | {"Position":{"x":-0.8369235992431641,"y":-6.1700138331843849e-9,"z":6.981514930725098},"EventName":"Camera Look At"} 676 | {"Position":{"x":-6.778351306915283,"y":3.090001344680786,"z":2.5283477306365969},"EventName":"Object Position"} 677 | {"Position":{"x":-4.510944843292236,"y":-1.059728482744049e-8,"z":8.582294464111329},"EventName":"Camera Look At"} 678 | {"Position":{"x":-7.226978302001953,"y":3.7827231884002687,"z":3.200568199157715},"EventName":"Object Position"} 679 | {"Position":{"x":-5.857967853546143,"y":-1.2232416857216322e-8,"z":10.047977447509766},"EventName":"Camera Look At"} 680 | {"Position":{"x":-7.700302600860596,"y":4.453014373779297,"z":3.8544414043426515},"EventName":"Object Position"} 681 | {"Position":{"x":-6.161282062530518,"y":-1.2618798450603208e-8,"z":11.71663761138916},"EventName":"Camera Look At"} 682 | {"Position":{"x":-8.174127578735352,"y":4.512082099914551,"z":4.509006023406982},"EventName":"Object Position"} 683 | {"Position":{"x":-6.600736141204834,"y":-1.3157009703945733e-8,"z":12.545226097106934},"EventName":"Camera Look At"} 684 | {"Position":{"x":-8.649086952209473,"y":3.95706844329834,"z":5.165138244628906},"EventName":"Object Position"} 685 | {"Position":{"x":-7.179121494293213,"y":-1.3850334212861526e-8,"z":12.529288291931153},"EventName":"Camera Look At"} 686 | {"Position":{"x":-9.122584342956543,"y":2.7914199829101564,"z":5.819250583648682},"EventName":"Object Position"} 687 | {"Position":{"x":-7.896358966827393,"y":-1.4698718686645407e-8,"z":11.671754837036133},"EventName":"Camera Look At"} 688 | {"Position":{"x":-9.571382522583008,"y":2.0928454399108888,"z":6.4909234046936039},"EventName":"Object Position"} 689 | {"Position":{"x":-7.470609188079834,"y":-1.4184159624619497e-8,"z":11.374338150024414},"EventName":"Camera Look At"} 690 | {"Position":{"x":-9.813287734985352,"y":2.0928454399108888,"z":7.258068561553955},"EventName":"Object Position"} 691 | {"Position":{"x":-6.892858982086182,"y":-1.3499397155669613e-8,"z":11.964183807373047},"EventName":"Camera Look At"} 692 | {"Position":{"x":-10.0382080078125,"y":2.090869903564453,"z":8.034778594970704},"EventName":"Object Position"} 693 | {"Position":{"x":-7.123086452484131,"y":-1.3785867558624432e-8,"z":12.729820251464844},"EventName":"Camera Look At"} 694 | {"Position":{"x":-10.262625694274903,"y":1.6670596599578858,"z":8.809757232666016},"EventName":"Object Position"} 695 | {"Position":{"x":-7.632615566253662,"y":-1.4400471037845364e-8,"z":12.996773719787598},"EventName":"Camera Look At"} 696 | {"Position":{"x":-10.487236976623536,"y":0.6865320205688477,"z":9.58843994140625},"EventName":"Object Position"} 697 | {"Position":{"x":-9.338577270507813,"y":1.0,"z":11.110295295715332},"EventName":"Camera Look At"} 698 | {"Position":{"x":-10.600040435791016,"y":0.09000003337860108,"z":9.966779708862305},"EventName":"Object Position"} 699 | {"Position":{"x":-10.060464859008789,"y":1.0,"z":10.527447700500489},"EventName":"Camera Look At"} 700 | {"Position":{"x":-10.604376792907715,"y":0.09000003337860108,"z":9.966779708862305},"EventName":"Object Position"} 701 | {"Position":{"x":-10.077118873596192,"y":1.0,"z":10.506575584411621},"EventName":"Camera Look At"} 702 | {"Position":{"x":-10.615060806274414,"y":0.08999979496002197,"z":9.970550537109375},"EventName":"Object Position"} 703 | {"Position":{"x":-10.082575798034668,"y":1.0,"z":10.50784683227539},"EventName":"Camera Look At"} 704 | {"Position":{"x":-10.669816017150879,"y":0.09000015258789063,"z":9.976319313049317},"EventName":"Object Position"} 705 | {"Position":{"x":-10.142009735107422,"y":1.0,"z":10.516609191894532},"EventName":"Camera Look At"} 706 | {"Position":{"x":-10.674243927001954,"y":0.09000003337860108,"z":9.976319313049317},"EventName":"Object Position"} 707 | {"Position":{"x":-10.146322250366211,"y":1.0,"z":10.516885757446289},"EventName":"Camera Look At"} 708 | {"Position":{"x":-10.748701095581055,"y":0.08999991416931153,"z":9.977973937988282},"EventName":"Object Position"} 709 | {"Position":{"x":-10.22536563873291,"y":1.0,"z":10.526786804199219},"EventName":"Camera Look At"} 710 | {"Position":{"x":-10.75877571105957,"y":0.08999979496002197,"z":9.97860336303711},"EventName":"Object Position"} 711 | {"Position":{"x":-10.242815017700196,"y":1.0,"z":10.531126022338868},"EventName":"Camera Look At"} 712 | {"Position":{"x":-10.80008602142334,"y":0.08999991416931153,"z":9.984249114990235},"EventName":"Object Position"} 713 | {"Position":{"x":-10.261198997497559,"y":1.0,"z":10.529144287109375},"EventName":"Camera Look At"} 714 | {"Position":{"x":-11.00108814239502,"y":0.08999991416931153,"z":10.064837455749512},"EventName":"Object Position"} 715 | {"Position":{"x":-10.466486930847168,"y":1.0,"z":10.611576080322266},"EventName":"Camera Look At"} 716 | {"Position":{"x":-11.031881332397461,"y":0.08999991416931153,"z":10.086277961730957},"EventName":"Object Position"} 717 | {"Position":{"x":-10.500802040100098,"y":1.0,"z":10.634665489196778},"EventName":"Camera Look At"} 718 | {"Position":{"x":-11.07164478302002,"y":0.08999991416931153,"z":10.119610786437989},"EventName":"Object Position"} 719 | {"Position":{"x":-10.538984298706055,"y":1.0,"z":10.666755676269532},"EventName":"Camera Look At"} 720 | {"Position":{"x":-11.132076263427735,"y":0.08999979496002197,"z":10.187026023864746},"EventName":"Object Position"} 721 | {"Position":{"x":-10.594285011291504,"y":1.0,"z":10.730729103088379},"EventName":"Camera Look At"} 722 | {"Position":{"x":-11.260103225708008,"y":0.08999979496002197,"z":10.491046905517579},"EventName":"Object Position"} 723 | {"Position":{"x":-10.684985160827637,"y":1.0,"z":11.133840560913086},"EventName":"Camera Look At"} 724 | {"Position":{"x":-11.238444328308106,"y":0.09000003337860108,"z":11.141510963439942},"EventName":"Object Position"} 725 | {"Position":{"x":-10.704277992248536,"y":1.0,"z":11.906974792480469},"EventName":"Camera Look At"} 726 | {"Position":{"x":-11.238444328308106,"y":0.08999991416931153,"z":11.279241561889649},"EventName":"Object Position"} 727 | {"Position":{"x":-10.709916114807129,"y":1.0,"z":12.046578407287598},"EventName":"Camera Look At"} 728 | {"Position":{"x":-11.236931800842286,"y":0.08999991416931153,"z":11.416814804077149},"EventName":"Object Position"} 729 | {"Position":{"x":-9.911474227905274,"y":-1.7159921483766994e-8,"z":14.973987579345704},"EventName":"Camera Look At"} 730 | {"Position":{"x":-11.235698699951172,"y":0.09000003337860108,"z":11.659439086914063},"EventName":"Object Position"} 731 | {"Position":{"x":-9.60569953918457,"y":-1.6816665393548648e-8,"z":16.695585250854493},"EventName":"Camera Look At"} 732 | {"Position":{"x":-11.235698699951172,"y":0.09000003337860108,"z":11.8889741897583},"EventName":"Object Position"} 733 | {"Position":{"x":-9.545373916625977,"y":-1.6752959908217237e-8,"z":17.330821990966798},"EventName":"Camera Look At"} 734 | {"Position":{"x":-11.233870506286621,"y":0.08999979496002197,"z":12.239800453186036},"EventName":"Object Position"} 735 | {"Position":{"x":-9.280152320861817,"y":0.9979952573776245,"z":24.181442260742189},"EventName":"Camera Look At"} 736 | {"Position":{"x":-11.510562896728516,"y":0.09000003337860108,"z":12.81252670288086},"EventName":"Object Position"} 737 | {"Position":{"x":-11.098204612731934,"y":0.08999979496002197,"z":13.429068565368653},"EventName":"Object Position"} 738 | {"Position":{"x":-11.055967330932618,"y":0.08999991416931153,"z":13.473267555236817},"EventName":"Object Position"} 739 | {"Position":{"x":-11.055967330932618,"y":0.08999979496002197,"z":13.473267555236817},"EventName":"Object Position"} 740 | {"Position":{"x":-11.055967330932618,"y":0.08999991416931153,"z":13.473267555236817},"EventName":"Object Position"} 741 | {"Position":{"x":-11.055967330932618,"y":0.08999979496002197,"z":13.473267555236817},"EventName":"Object Position"} 742 | {"Position":{"x":-11.055967330932618,"y":0.08999979496002197,"z":13.473267555236817},"EventName":"Object Position"} 743 | {"Position":{"x":-11.055967330932618,"y":0.08999991416931153,"z":13.473267555236817},"EventName":"Object Position"} 744 | {"Position":{"x":-11.055967330932618,"y":0.08999991416931153,"z":13.473267555236817},"EventName":"Object Position"} 745 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 746 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 747 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 748 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 749 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 750 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 751 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 752 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 753 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 754 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 755 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 756 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 757 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 758 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 759 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 760 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 761 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 762 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 763 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 764 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 765 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 766 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 767 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 768 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 769 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 770 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 771 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 772 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 773 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 774 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 775 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 776 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 777 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 778 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 779 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 780 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 781 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 782 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 783 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 784 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 785 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 786 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 787 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 788 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 789 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 790 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 791 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 792 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 793 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 794 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 795 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 796 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 797 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 798 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 799 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 800 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 801 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 802 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 803 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 804 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 805 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 806 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 807 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 808 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 809 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 810 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 811 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 812 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 813 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 814 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 815 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 816 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 817 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 818 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 819 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 820 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 821 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 822 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 823 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 824 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 825 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 826 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 827 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 828 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 829 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 830 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 831 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 832 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 833 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 834 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 835 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 836 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 837 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 838 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 839 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 840 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 841 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 842 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 843 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 844 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 845 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 846 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 847 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 848 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 849 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 850 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 851 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 852 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 853 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 854 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 855 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 856 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 857 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 858 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 859 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 860 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 861 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 862 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 863 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 864 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 865 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 866 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 867 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 868 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 869 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 870 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 871 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 872 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 873 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 874 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 875 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 876 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 877 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 878 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 879 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 880 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 881 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 882 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 883 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 884 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 885 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 886 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 887 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 888 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 889 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 890 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 891 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 892 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 893 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 894 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 895 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 896 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 897 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 898 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 899 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 900 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 901 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 902 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 903 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 904 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 905 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 906 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 907 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 908 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 909 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 910 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 911 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 912 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 913 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 914 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 915 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 916 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 917 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 918 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 919 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 920 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 921 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 922 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 923 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 924 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 925 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 926 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 927 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 928 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 929 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 930 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 931 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 932 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 933 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 934 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 935 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 936 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 937 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 938 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 939 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 940 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 941 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 942 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 943 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 944 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 945 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 946 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 947 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 948 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 949 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 950 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 951 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 952 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 953 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 954 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 955 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 956 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 957 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 958 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 959 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 960 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 961 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 962 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 963 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 964 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 965 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 966 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 967 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 968 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 969 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 970 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 971 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 972 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 973 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 974 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 975 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 976 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 977 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 978 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 979 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 980 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 981 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 982 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 983 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 984 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 985 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 986 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 987 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 988 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 989 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 990 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 991 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 992 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 993 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 994 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 995 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 996 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 997 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 998 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 999 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1000 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1001 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1002 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1003 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1004 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1005 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1006 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1007 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1008 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1009 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1010 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1011 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1012 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1013 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1014 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1015 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1016 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1017 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1018 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1019 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1020 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1021 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1022 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1023 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1024 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1025 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1026 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1027 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1028 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1029 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1030 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1031 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1032 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1033 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1034 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1035 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1036 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1037 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1038 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1039 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1040 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1041 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1042 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1043 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1044 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1045 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1046 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1047 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1048 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1049 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1050 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1051 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1052 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1053 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1054 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1055 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1056 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1057 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1058 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1059 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1060 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1061 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1062 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1063 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1064 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1065 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1066 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1067 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1068 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1069 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1070 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1071 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1072 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1073 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1074 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1075 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1076 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1077 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1078 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1079 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1080 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1081 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1082 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1083 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1084 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1085 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1086 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1087 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1088 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1089 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1090 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1091 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1092 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1093 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1094 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1095 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1096 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1097 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1098 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1099 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1100 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1101 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1102 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1103 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1104 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1105 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1106 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1107 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1108 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1109 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1110 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1111 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1112 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1113 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1114 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1115 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1116 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1117 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1118 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1119 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1120 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1121 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1122 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1123 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1124 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1125 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1126 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1127 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1128 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1129 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1130 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1131 | {"Position":{"x":0.5659999847412109,"y":0.0,"z":-0.5080001354217529},"EventName":"Object Position"} 1132 | --------------------------------------------------------------------------------