Esempio n. 1
0
 protected override void SetData(byte[] data)
 {
     if (null != data)
     {
         LSubTerrSL.Import(data);
     }
 }
Esempio n. 2
0
            void Load()
            {
                string prefabName = "Layered SubTerrain Group";

                GameObject objGrass = Object.Instantiate(Resources.Load <GameObject>(prefabName)) as GameObject;

                if (null == objGrass)
                {
                    Debug.LogError("can't find tree prefab:" + prefabName);
                    return;
                }

                LSubTerrainMgr.Instance.CameraTransform = Camera.main.transform;
                LSubTerrainMgr.Instance.VEditor         = VoxelEditor.Get();
                LSubTerrSL.Init();
            }
Esempio n. 3
0
    public static void DeleteTree(GlobalTreeInfo treeinfo)
    {
        if (s_Instance == null || treeinfo == null)
        {
            return;
        }

        // Delete it in Mgr's m_map32Trees
        int             tmpKey = LSubTerrUtils.TreeWorldPosTo32Key(treeinfo.WorldPos);
        List <TreeInfo> tmpTis;

        if (s_Instance.m_map32Trees.TryGetValue(tmpKey, out tmpTis))
        {
            tmpTis.Remove(treeinfo._treeInfo);
            if (tmpTis.Count == 0)
            {
                s_Instance.m_map32Trees.Remove(tmpKey);
            }
        }

        // Delete it in Mgr's m_mapExistTempTrees and m_mapTempTreeInfos
        List <GameObject> existGos;

        if (s_Instance.m_mapExistTempTrees.TryGetValue(tmpKey, out existGos))
        {
            GameObject     gameobject_to_delete = null;
            GlobalTreeInfo gti;
            foreach (GameObject go in existGos)
            {
                if (s_Instance.m_mapTempTreeInfos.TryGetValue(go, out gti))
                {
                    if (gti._treeInfo == treeinfo._treeInfo)
                    {
                        // Found it!
                        gameobject_to_delete = go;

                        if (OnTreeColliderDestroy != null)
                        {
                            OnTreeColliderDestroy(gameobject_to_delete);
                        }

                        GameObject.Destroy(go);
                        s_Instance.m_mapTempTreeInfos.Remove(go);
                    }
                }
                else
                {
                    Debug.LogError("Can not find the GameObject key in m_mapTempTreeInfos when delete tree");
                }
            }
            if (gameobject_to_delete != null)
            {
                existGos.Remove(gameobject_to_delete);
            }
        }

        // Delete it in Node's m_mapTrees and m_listTrees
        TreeInfo secondFoot = null;             // For two feet trees

        if (Node(treeinfo._terrainIndex) != null)
        {
            secondFoot = Node(treeinfo._terrainIndex).DeleteTreeInfo(treeinfo._treeInfo);
        }
        else
        {
            Debug.LogError("Can not find the subterrain node when delete tree");
        }

        // Delete it in layers
        foreach (LSubTerrCreator creator in s_Instance.LayerCreators)
        {
            if (creator.m_allTreesInLayer.TryGetValue(treeinfo._terrainIndex, out tmpTis))
            {
                tmpTis.Remove(treeinfo._treeInfo);
            }
            else
            {
                Debug.LogError("Can not find the key in layer's m_allTreesInLayer when delete tree");
            }
        }

        LSubTerrSL.AddDeletedTree(treeinfo._terrainIndex, treeinfo._treeInfo);

        // Delete 2nd foot ?? Is this really necessary??
        if (secondFoot != null)
        {
            GlobalTreeInfo gti_2ndfoot = new GlobalTreeInfo(treeinfo._terrainIndex, secondFoot);
            DeleteTree(gti_2ndfoot);
        }
    }
Esempio n. 4
0
 protected override void WriteData(BinaryWriter bw)
 {
     LSubTerrSL.Export(bw);
 }