コード例 #1
0
    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);
        }
    }
コード例 #2
0
 public override bool OnBeforeOriginShift(VtsMapShiftingOrigin vmfo)
 {
     return(vmfo == map);
 }
コード例 #3
0
 // 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);
 }
コード例 #4
0
 public override bool OnBeforeOriginShift(VtsMapShiftingOrigin vmfo)
 {
     p1 = transform.position;
     return(true);
 }