diff --git a/Assets/Controller Left.prefab b/Assets/Controller Left.prefab index 2ce84bc..ff72b61 100755 Binary files a/Assets/Controller Left.prefab and b/Assets/Controller Left.prefab differ diff --git a/Assets/Controller Right.prefab b/Assets/Controller Right.prefab index 4985bea..f957c6d 100755 Binary files a/Assets/Controller Right.prefab and b/Assets/Controller Right.prefab differ diff --git a/Assets/Fonts/ARIAL Depth 256.mat b/Assets/Fonts/ARIAL Depth 256.mat index 1c4a1ae..48617e7 100755 Binary files a/Assets/Fonts/ARIAL Depth 256.mat and b/Assets/Fonts/ARIAL Depth 256.mat differ diff --git a/Assets/Fonts/OpenSans-Regular Depth 256.mat b/Assets/Fonts/OpenSans-Regular Depth 256.mat index 3590aba..3198d42 100755 Binary files a/Assets/Fonts/OpenSans-Regular Depth 256.mat and b/Assets/Fonts/OpenSans-Regular Depth 256.mat differ diff --git a/Assets/Furniture Prefabs/Bed 1.prefab b/Assets/Furniture Prefabs/Bed 1.prefab index 0a97f26..5a99e60 100755 Binary files a/Assets/Furniture Prefabs/Bed 1.prefab and b/Assets/Furniture Prefabs/Bed 1.prefab differ diff --git a/Assets/Furniture Prefabs/Bed 2.prefab b/Assets/Furniture Prefabs/Bed 2.prefab index 186504b..3e7cb8d 100755 Binary files a/Assets/Furniture Prefabs/Bed 2.prefab and b/Assets/Furniture Prefabs/Bed 2.prefab differ diff --git a/Assets/Furniture Prefabs/Chair 1.prefab b/Assets/Furniture Prefabs/Chair 1.prefab index 8257b97..038809b 100755 Binary files a/Assets/Furniture Prefabs/Chair 1.prefab and b/Assets/Furniture Prefabs/Chair 1.prefab differ diff --git a/Assets/Furniture Prefabs/Chair 2.prefab b/Assets/Furniture Prefabs/Chair 2.prefab index 3028e15..b971826 100755 Binary files a/Assets/Furniture Prefabs/Chair 2.prefab and b/Assets/Furniture Prefabs/Chair 2.prefab differ diff --git a/Assets/Furniture Prefabs/Chair 3.prefab b/Assets/Furniture Prefabs/Chair 3.prefab index 1826c84..11c2df2 100755 Binary files a/Assets/Furniture Prefabs/Chair 3.prefab and b/Assets/Furniture Prefabs/Chair 3.prefab differ diff --git a/Assets/Furniture Prefabs/Chair 4.prefab b/Assets/Furniture Prefabs/Chair 4.prefab index 9256b9a..ba00c8f 100755 Binary files a/Assets/Furniture Prefabs/Chair 4.prefab and b/Assets/Furniture Prefabs/Chair 4.prefab differ diff --git a/Assets/Furniture Prefabs/Chair 5.prefab b/Assets/Furniture Prefabs/Chair 5.prefab index 0372bb7..6d8ed77 100755 Binary files a/Assets/Furniture Prefabs/Chair 5.prefab and b/Assets/Furniture Prefabs/Chair 5.prefab differ diff --git a/Assets/Furniture Prefabs/Chair 6.prefab b/Assets/Furniture Prefabs/Chair 6.prefab index 5289bf6..fef0b0a 100755 Binary files a/Assets/Furniture Prefabs/Chair 6.prefab and b/Assets/Furniture Prefabs/Chair 6.prefab differ diff --git a/Assets/Furniture Prefabs/Decoration 2 1.prefab b/Assets/Furniture Prefabs/Decoration 3.prefab old mode 100644 new mode 100755 similarity index 85% rename from Assets/Furniture Prefabs/Decoration 2 1.prefab rename to Assets/Furniture Prefabs/Decoration 3.prefab index 9520965..0ce1d99 Binary files a/Assets/Furniture Prefabs/Decoration 2 1.prefab and b/Assets/Furniture Prefabs/Decoration 3.prefab differ diff --git a/Assets/Furniture Prefabs/Decoration 2 1.prefab.meta b/Assets/Furniture Prefabs/Decoration 3.prefab.meta similarity index 100% rename from Assets/Furniture Prefabs/Decoration 2 1.prefab.meta rename to Assets/Furniture Prefabs/Decoration 3.prefab.meta diff --git a/Assets/Furniture Prefabs/Lamp 1.prefab b/Assets/Furniture Prefabs/Lamp 1.prefab index c751c2a..8dbc113 100755 Binary files a/Assets/Furniture Prefabs/Lamp 1.prefab and b/Assets/Furniture Prefabs/Lamp 1.prefab differ diff --git a/Assets/Furniture Prefabs/Sofa 1.prefab b/Assets/Furniture Prefabs/Sofa 1.prefab index 3f58087..3e99ceb 100755 Binary files a/Assets/Furniture Prefabs/Sofa 1.prefab and b/Assets/Furniture Prefabs/Sofa 1.prefab differ diff --git a/Assets/Furniture Prefabs/Sofa 2.prefab b/Assets/Furniture Prefabs/Sofa 2.prefab old mode 100644 new mode 100755 index 2d663bc..22a03ae Binary files a/Assets/Furniture Prefabs/Sofa 2.prefab and b/Assets/Furniture Prefabs/Sofa 2.prefab differ diff --git a/Assets/Furniture Prefabs/Sofa 3.prefab b/Assets/Furniture Prefabs/Sofa 3.prefab index 0abb81a..ceaf404 100755 Binary files a/Assets/Furniture Prefabs/Sofa 3.prefab and b/Assets/Furniture Prefabs/Sofa 3.prefab differ diff --git a/Assets/Furniture Prefabs/Table 1.prefab b/Assets/Furniture Prefabs/Table 1.prefab index 499f674..0f6686d 100755 Binary files a/Assets/Furniture Prefabs/Table 1.prefab and b/Assets/Furniture Prefabs/Table 1.prefab differ diff --git a/Assets/FurnitureMiniature.cs b/Assets/FurnitureMiniature.cs index 7cbfc0b..b38a7a3 100755 --- a/Assets/FurnitureMiniature.cs +++ b/Assets/FurnitureMiniature.cs @@ -2,6 +2,7 @@ using System.Collections; public class FurnitureMiniature : MonoBehaviour { + public void Grab() { transform.parent = null; foreach (var collider in GetComponentsInChildren()) { diff --git a/Assets/LeftController.cs b/Assets/LeftController.cs index d08bbc1..0d454e9 100755 --- a/Assets/LeftController.cs +++ b/Assets/LeftController.cs @@ -3,16 +3,13 @@ using System.Collections; public class LeftController : MonoBehaviour { - public bool AlwaysCenter = false; + public GameObject MainCamera; + public GameObject WarehouseCamera; Transform controllerRig; SteamVR_ControllerEvents controllerEvents; - GameObject mainCamera; - GameObject warehouseCamera; - CameraFade cameraFade; - SteamVR_Camera mainSteamVRCamera; bool inWarehouse = false; @@ -21,14 +18,11 @@ public class LeftController : MonoBehaviour { controllerEvents = GetComponent(); controllerEvents.TriggerAxisChanged += triggerAxisChanged; + + cameraFade = MainCamera.GetComponentInChildren(); } void Start () { - mainCamera = GameObject.Find("Main Camera (origin)"); - warehouseCamera = GameObject.Find("Warehouse Camera (origin)"); - - cameraFade = mainCamera.GetComponentInChildren(); - mainSteamVRCamera = mainCamera.GetComponentInChildren(); } void triggerAxisChanged(object sender, ControllerClickedEventArgs e) { @@ -36,18 +30,21 @@ public class LeftController : MonoBehaviour { if (alpha > 0.05) { cameraFade.SetFade(alpha); if (!inWarehouse) { - controllerRig.SetParent(warehouseCamera.transform, false); - if (AlwaysCenter) { - warehouseCamera.transform.localPosition = new Vector3(-mainSteamVRCamera.head.localPosition.x, warehouseCamera.transform.localPosition.y, -mainSteamVRCamera.head.localPosition.z); - } + WarehouseCamera.SetActive(true); + controllerRig.SetParent(WarehouseCamera.transform, false); inWarehouse = true; } } else { cameraFade.SetFade(0.0f); if (inWarehouse) { - controllerRig.SetParent(mainCamera.transform, false); + controllerRig.SetParent(MainCamera.transform, false); + WarehouseCamera.SetActive(false); inWarehouse = false; } } + + foreach (var measurement in GameObject.FindObjectsOfType()) { + measurement.InWarehouse = inWarehouse; + } } } diff --git a/Assets/Materials/None.mat b/Assets/Materials/None.mat index a132683..83e44a4 100755 Binary files a/Assets/Materials/None.mat and b/Assets/Materials/None.mat differ diff --git a/Assets/Measurement.cs b/Assets/Measurement.cs index 4c5445a..882cf21 100644 --- a/Assets/Measurement.cs +++ b/Assets/Measurement.cs @@ -15,6 +15,8 @@ public class Measurement : MonoBehaviour { private float LineWidth; + public bool InWarehouse = false; + // Use this for initialization void Start () { @@ -35,6 +37,10 @@ public class Measurement : MonoBehaviour { Vector3 middlePosition = (LocalStartPosition + (LocalEndPosition - LocalStartPosition) / 2.0f); float smallestScale = Mathf.Min(transform.lossyScale.x, Mathf.Min(transform.lossyScale.y, transform.lossyScale.z)); + + if(InWarehouse) { + smallestScale = smallestScale / 10.0f; + } if (smallestScale < 0.4f) { @@ -74,7 +80,7 @@ public class Measurement : MonoBehaviour { textMesh.text = textMagnitude.ToString("0.00") + "m"; - textMesh.characterSize = Mathf.Max(0.001f * Math.Min(1.0f , textMagnitude), 0.002f); + textMesh.characterSize = Mathf.Max(0.0005f * Math.Min(1.0f , textMagnitude), 0.0005f); HoleSize = Mathf.Max(0.1f * Math.Min(1.0f, magnitude), 0.05f); @@ -90,8 +96,13 @@ public class Measurement : MonoBehaviour { line2BaseRenderer.SetPosition(0, LocalEndPosition + lineUp * 0.01f); line2BaseRenderer.SetPosition(1, LocalEndPosition - lineUp * 0.01f); - - LineWidth = Mathf.Min(DefaultLineWith*smallestScale, 0.003f); + if(InWarehouse) { + LineWidth = 0.007f; + } + else { + LineWidth = Mathf.Min(DefaultLineWith * smallestScale, 0.003f); + } + line1Renderer.SetWidth(LineWidth, LineWidth); line2Renderer.SetWidth(LineWidth, LineWidth); @@ -105,7 +116,7 @@ public class Measurement : MonoBehaviour { LineRenderer lineMiddleRenderer = line1BaseTransform.GetComponent(); lineMiddleRenderer.SetWidth(LineWidth, LineWidth); - Vector3 upDistance = new Vector3(0, 2.0f, 0); + Vector3 upDistance = new Vector3(0, 20.0f, 0); upDistance = upDistance*smallestScale; textTransform.position = middlePosition + upDistance*1.1f; @@ -115,7 +126,7 @@ public class Measurement : MonoBehaviour { lineMiddleRenderer.SetPosition(1, middlePosition + upDistance); } else { Transform lineMiddleTransform = transform.FindChild("LineMiddle"); - LineRenderer lineMiddleRenderer = line1BaseTransform.GetComponent(); + LineRenderer lineMiddleRenderer = lineMiddleTransform.GetComponent(); lineMiddleRenderer.SetWidth(0, 0); } } diff --git a/Assets/OutLineMaterial.mat.meta b/Assets/OutLineMaterial.mat.meta old mode 100644 new mode 100755 index c2adc6c..1e2616e --- a/Assets/OutLineMaterial.mat.meta +++ b/Assets/OutLineMaterial.mat.meta @@ -1,6 +1,6 @@ fileFormatVersion: 2 -guid: 90a52fc266c12ff41ab5b486a49bcb9c -timeCreated: 1464211843 +guid: cf1a2d53d09212446b0d9316c31c7fcb +timeCreated: 1464306843 licenseType: Free NativeFormatImporter: userData: diff --git a/Assets/Outline.cs b/Assets/Outline.cs new file mode 100755 index 0000000..76b6422 --- /dev/null +++ b/Assets/Outline.cs @@ -0,0 +1,46 @@ +using UnityEngine; +using System.Collections; +using System; +using System.Collections.Generic; + +public class Outline : MonoBehaviour { + public Material OutlineMaterial; + + void Start() { + OnEnable(); + } + + void OnEnable() { + foreach (var rend in GetComponentsInChildren()) { + bool end = false; + foreach (var mat in rend.sharedMaterials) { + if (mat == OutlineMaterial) { + end = true; + break; + } + } + if (end) { + continue; + } + + var newMats = rend.materials; + Array.Resize(ref newMats, newMats.Length + 1); + newMats[newMats.Length - 1] = OutlineMaterial; + rend.materials = newMats; + } + } + + void OnDisable() { + foreach (var rend in GetComponentsInChildren()) { + var newMats = new List(); + + foreach (var mat in rend.sharedMaterials) { + if (mat != OutlineMaterial) { + newMats.Add(mat); + } + } + + rend.materials = newMats.ToArray(); + } + } +} diff --git a/Assets/Outline.cs.meta b/Assets/Outline.cs.meta new file mode 100755 index 0000000..44d8165 --- /dev/null +++ b/Assets/Outline.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: b18ebb98b5928ab489635cfad09a0f2f +timeCreated: 1464301950 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources.meta b/Assets/Resources.meta new file mode 100755 index 0000000..bc6a429 --- /dev/null +++ b/Assets/Resources.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: e580c3590072d6743a2d665776ccc971 +folderAsset: yes +timeCreated: 1464302284 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Measurement.prefab b/Assets/Resources/Measurement.prefab old mode 100644 new mode 100755 similarity index 88% rename from Assets/Measurement.prefab rename to Assets/Resources/Measurement.prefab index 6eb0e2d..08c4770 Binary files a/Assets/Measurement.prefab and b/Assets/Resources/Measurement.prefab differ diff --git a/Assets/Measurement.prefab.meta b/Assets/Resources/Measurement.prefab.meta similarity index 100% rename from Assets/Measurement.prefab.meta rename to Assets/Resources/Measurement.prefab.meta diff --git a/Assets/Resources/OutLineMaterial.mat b/Assets/Resources/OutLineMaterial.mat new file mode 100755 index 0000000..6128f5a Binary files /dev/null and b/Assets/Resources/OutLineMaterial.mat differ diff --git a/Assets/Resources/OutLineMaterial.mat.meta b/Assets/Resources/OutLineMaterial.mat.meta new file mode 100644 index 0000000..c2adc6c --- /dev/null +++ b/Assets/Resources/OutLineMaterial.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 90a52fc266c12ff41ab5b486a49bcb9c +timeCreated: 1464211843 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Resources/OutLineMaterialMini.mat b/Assets/Resources/OutLineMaterialMini.mat new file mode 100755 index 0000000..2ad6df7 Binary files /dev/null and b/Assets/Resources/OutLineMaterialMini.mat differ diff --git a/Assets/Resources/OutLineMaterialMini.mat.meta b/Assets/Resources/OutLineMaterialMini.mat.meta new file mode 100755 index 0000000..914effd --- /dev/null +++ b/Assets/Resources/OutLineMaterialMini.mat.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 2060575667567594abaf4f8fa1044488 +timeCreated: 1464301808 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/RightController.cs b/Assets/RightController.cs index 44ca02e..ff42a53 100755 --- a/Assets/RightController.cs +++ b/Assets/RightController.cs @@ -5,6 +5,9 @@ using System.Collections.Generic; public class RightController : MonoBehaviour { public Transform MiniatureAttachmentPoint; + public Material OutlineMaterial; + public GameObject MainCamera; + public GameObject WarehouseCamera; SteamVR_LaserPointer laserPointer; SteamVR_ControllerEvents controllerEvents; @@ -22,6 +25,8 @@ public class RightController : MonoBehaviour { float whRowBaseOffset = 0.0f; float whRowScrollOffset = 0.0f; + Measurement currentMeasurement = null; + void Awake() { laserPointer = GetComponent(); @@ -30,6 +35,10 @@ public class RightController : MonoBehaviour { controllerEvents.TriggerUnclicked += triggerUnclicked; controllerEvents.TouchpadClicked += touchpadClicked; controllerEvents.TouchpadUnclicked += touchpadUnclicked; + controllerEvents.ApplicationMenuClicked += applicationMenuClicked; + controllerEvents.ApplicationMenuUnclicked += applicationMenuUnclicked; + + boxCollider = GetComponent(); warehouse = GameObject.Find("Warehouse/Shelves/Column").GetComponent(); } @@ -49,6 +58,11 @@ public class RightController : MonoBehaviour { warehouse.Offset = whBaseOffset + (-whScrollOffset); whRow.Offset = whRowBaseOffset + whRowScrollOffset; } + + // Measurement + if (currentMeasurement != null) { + currentMeasurement.EndPosition = transform.localPosition; + } } void OnTriggerEnter(Collider other) { @@ -57,11 +71,17 @@ public class RightController : MonoBehaviour { return; } - touchingItems.Add(other.gameObject); + touchingItems.Add(mini.gameObject); + //mini.gameObject.AddComponent().OutlineMaterial = Resources.Load("OutLineMaterialMini"); } void OnTriggerExit(Collider other) { - touchingItems.Remove(other.gameObject); + var mini = other.GetComponentInParent(); + if (mini == null) { + return; + } + touchingItems.Remove(mini.gameObject); + //Destroy(mini.gameObject.GetComponent()); } // Furniture picking @@ -129,12 +149,15 @@ public class RightController : MonoBehaviour { if (warehouseItem) { var mini = warehouseItem.Pick(); mini.Grab(); + mini.transform.SetParent(MiniatureAttachmentPoint, false); + mini.transform.localPosition = Vector3.zero; + mini.transform.localScale = Vector3.one / 10.0f; - var anim = mini.gameObject.AddComponent(); - anim.OriginItem = warehouseItem; - anim.DestinationAttachment = MiniatureAttachmentPoint; - anim.GoalScale = new Vector3(0.05f, 0.05f, 0.05f); - anim.Duration = 0.33f; + //var anim = mini.gameObject.AddComponent(); + //anim.OriginItem = warehouseItem; + //anim.DestinationAttachment = MiniatureAttachmentPoint; + //anim.GoalScale = new Vector3(0.1f, 0.1f, 0.1f); + //anim.Duration = 0.33f; heldItem = mini.gameObject; @@ -145,11 +168,17 @@ public class RightController : MonoBehaviour { var furnitureMini = result.rigidbody.GetComponent(); if (furnitureMini) { furnitureMini.Grab(); + if (WarehouseCamera.activeSelf) { + furnitureMini.transform.SetParent(MiniatureAttachmentPoint, true); + furnitureMini.transform.localPosition = Vector3.zero; + } else { + furnitureMini.transform.SetParent(MiniatureAttachmentPoint, true); + } - var anim = furnitureMini.gameObject.AddComponent(); + //var anim = furnitureMini.gameObject.AddComponent(); //anim.OriginItem = furnitureMini; - anim.DestinationAttachment = MiniatureAttachmentPoint; - anim.Duration = 0.33f; + //anim.DestinationAttachment = MiniatureAttachmentPoint; + //anim.Duration = 0.33f; heldItem = furnitureMini.gameObject; return true; @@ -184,4 +213,18 @@ public class RightController : MonoBehaviour { whScrollStartPos = null; } } + + void applicationMenuClicked(object sender, ControllerClickedEventArgs e) { + if (currentMeasurement == null) { + var prefab = Resources.Load("Measurement"); + currentMeasurement = Instantiate(prefab).GetComponent(); + currentMeasurement.transform.SetParent(GameObject.Find("Scene").transform, false); + currentMeasurement.StartPosition = transform.localPosition; + currentMeasurement.EndPosition = transform.localPosition; + } + } + + void applicationMenuUnclicked(object sender, ControllerClickedEventArgs e) { + currentMeasurement = null; + } } diff --git a/Assets/SteamVR/Extras/SteamVR_LaserPointer.cs b/Assets/SteamVR/Extras/SteamVR_LaserPointer.cs index 45f8b7a..b47fceb 100755 --- a/Assets/SteamVR/Extras/SteamVR_LaserPointer.cs +++ b/Assets/SteamVR/Extras/SteamVR_LaserPointer.cs @@ -31,7 +31,7 @@ public class SteamVR_LaserPointer : MonoBehaviour void Start () { holder = new GameObject(); - holder.transform.parent = this.transform; + holder.transform.SetParent(transform, false); holder.transform.localPosition = Vector3.zero; pointer = GameObject.CreatePrimitive(PrimitiveType.Cube); diff --git a/Assets/Test.unity b/Assets/Test.unity index d71d818..0f3379d 100755 Binary files a/Assets/Test.unity and b/Assets/Test.unity differ diff --git a/Assets/Warehouse Row.prefab b/Assets/Warehouse Row.prefab index d9e76d4..0bbdd41 100755 Binary files a/Assets/Warehouse Row.prefab and b/Assets/Warehouse Row.prefab differ diff --git a/Assets/WarehouseMiniatureAnim.cs b/Assets/WarehouseMiniatureAnim.cs index a01eba2..7403752 100755 --- a/Assets/WarehouseMiniatureAnim.cs +++ b/Assets/WarehouseMiniatureAnim.cs @@ -14,7 +14,7 @@ public class WarehouseMiniatureAnim : MonoBehaviour { void Start () { originalPos = transform.position; - originalScale = Vector3.Scale(transform.localScale, GoalScale); + originalScale = transform.localScale; } void Update () { @@ -29,14 +29,14 @@ public class WarehouseMiniatureAnim : MonoBehaviour { var startPos = OriginItem ? OriginItem.transform.position : originalPos; transform.position = Vector3.Lerp(startPos, t2.position, alpha); //transform.rotation = Quaternion.Slerp(transform.rotation, t2.rotation, alpha); - var startScale = OriginItem ? OriginItem.transform.localScale : originalScale; - transform.localScale = Vector3.Lerp(startScale, Vector3.Scale(originalScale, t2.lossyScale), alpha); + var startScale = OriginItem.transform.localScale; + transform.localScale = Vector3.Lerp(startScale, Vector3.Scale(originalScale, GoalScale), alpha); } public void End() { transform.SetParent(DestinationAttachment, false); transform.localPosition = Vector3.zero; - transform.localScale = originalScale; + //transform.localScale = originalScale; Destroy(this); } } diff --git a/Assets/WarehouseRow.cs b/Assets/WarehouseRow.cs index 110a6e1..56c2cc7 100755 --- a/Assets/WarehouseRow.cs +++ b/Assets/WarehouseRow.cs @@ -45,7 +45,7 @@ public class WarehouseRow : MonoBehaviour { var i = t.GetSiblingIndex(); var distance = (float)i / (furniture.childCount) * curve.length + Offset; distance = Mathf.Repeat(distance, curve.length); - var pos = curve.GetPointAtDistance(distance); + var pos = curve.GetUniformPointAtDistance(distance); t.position = pos; } } diff --git a/ProjectSettings/GraphicsSettings.asset b/ProjectSettings/GraphicsSettings.asset index 96548d5..4ab962d 100755 Binary files a/ProjectSettings/GraphicsSettings.asset and b/ProjectSettings/GraphicsSettings.asset differ diff --git a/ProjectSettings/ProjectVersion.txt b/ProjectSettings/ProjectVersion.txt index 558807b..c4684cd 100755 --- a/ProjectSettings/ProjectVersion.txt +++ b/ProjectSettings/ProjectVersion.txt @@ -1,2 +1,2 @@ -m_EditorVersion: 5.3.5f1 +m_EditorVersion: 5.3.4f1 m_StandardAssetsVersion: 0