private void UpdateParts() { if (originHasShifted) { originHasShifted = false; foreach (var p in partsCache) { Destroy(p.Value); } partsCache.Clear(); } VtsMapShiftingOrigin shiftingOriginMap = mapObject.GetComponent <VtsMapShiftingOrigin>(); double[] conv = Math.Mul44x44(Math.Mul44x44(VtsUtil.U2V44(mapTrans.localToWorldMatrix), VtsUtil.U2V44(VtsUtil.SwapYZ)), Math.Inverse44(draws.camera.view)); Dictionary <VtsMesh, DrawSimpleTask> tasksByMesh = new Dictionary <VtsMesh, DrawSimpleTask>(); foreach (DrawSimpleTask t in draws.colliders) { VtsMesh k = t.mesh as VtsMesh; if (!tasksByMesh.ContainsKey(k)) { tasksByMesh.Add(k, t); } } HashSet <VtsMesh> partsToRemove = new HashSet <VtsMesh>(partsCache.Keys); foreach (KeyValuePair <VtsMesh, DrawSimpleTask> tbm in tasksByMesh) { if (!partsCache.ContainsKey(tbm.Key)) { GameObject o = Instantiate(colliderPrefab, partsGroup); partsCache.Add(tbm.Key, o); UnityEngine.Mesh msh = (tbm.Value.mesh as VtsMesh).Get(); o.GetComponent <MeshCollider>().sharedMesh = msh; if (shiftingOriginMap) { VtsUtil.GetOrAddComponent <VtsObjectShiftingOrigin>(o).map = shiftingOriginMap; } VtsUtil.Matrix2Transform(o.transform, VtsUtil.V2U44(Math.Mul44x44(conv, System.Array.ConvertAll(tbm.Value.data.mv, System.Convert.ToDouble)))); } partsToRemove.Remove(tbm.Key); } foreach (VtsMesh m in partsToRemove) { Destroy(partsCache[m]); partsCache.Remove(m); } }
public override bool OnBeforeOriginShift(VtsMapShiftingOrigin vmfo) { return(vmfo == map); }
// return false to prevent the shift on this gameobject entirely // otherwise use this method to store the original transform values public virtual bool OnBeforeOriginShift(VtsMapShiftingOrigin vmfo) { return(true); }
public override bool OnBeforeOriginShift(VtsMapShiftingOrigin vmfo) { p1 = transform.position; return(true); }