Esempio n. 1
0
    void OnTerrainMeshCreated(IntVector4 node)
    {
        if (node.w == 0)
        {
            IntVector2 mark = AiUtil.ConvertToIntVector2FormLodLevel(node, VoxelTerrainMaxLod);
            if (pointTable.ContainsKey(mark))
            {
                SPTerrainRect tRect = pointTable[mark];
                if (tRect != null)
                {
                    List <SPPoint> points = tRect.points;
                    points = points.FindAll(ret => Match(ret, node.x, node.z));

                    foreach (SPPoint point in points)
                    {
                        point.AttachEvent(node);
                        //point.position = new Vector3(point.position.x, node.y, point.position.z);
                    }
                }
            }

            RegisterMeshNode(node);

            LODOctreeMan.self.AttachNodeEvents(null, null, null, null, OnTerrainColliderCreated, node.ToVector3(), 0);
        }
    }
Esempio n. 2
0
    public void RemoveMeshNode(IntVector4 node)
    {
        IntVector2 mark = AiUtil.ConvertToIntVector2FormLodLevel(
            node, LODOctreeMan._maxLod);

        if (mMeshNodes.Contains(mark))
        {
            mMeshNodes.Remove(mark);
        }
    }
Esempio n. 3
0
    void RemoveSPTerrainRect(IntVector4 node)
    {
        IntVector2 mark = AiUtil.ConvertToIntVector2FormLodLevel(node, VoxelTerrainMaxLod);

        if (pointTable.ContainsKey(mark))
        {
            pointTable[mark].RemoveMeshNode(node);
            if (pointTable[mark].meshNodes.Count <= 0)
            {
                pointTable[mark].Destroy();
                pointTable.Remove(mark);

                //Debug.Log("Destroy SPTerrainRect at position[" + mark.x + " , " + mark.y + "]");
            }
        }
    }
Esempio n. 4
0
    void RegisterSPTerrainRect(IntVector4 node)
    {
        node.w = VoxelTerrainMaxLod;
        IntVector2 mark    = AiUtil.ConvertToIntVector2FormLodLevel(node, VoxelTerrainMaxLod);
        IntVector4 maxNode = new IntVector4(mark.x, node.y, mark.y, node.w);

        //if(!GameConfig.IsMultiMode)
        {
            if (!pointTable.ContainsKey(mark))
            {
                if (!GameConfig.IsMultiMode)
                {
                    SPTerrainRect spTerrain = InstantiateSPTerrainRect(maxNode, minCount, maxCount + 1);
                    spTerrain.RegisterMeshNode(node);
                    pointTable.Add(mark, spTerrain);
                }

                //Debug.Log("Register SPTerrainRect at position[" + mark.x + " , " + mark.y + "]");
            }
            else
            {
                pointTable[mark].RegisterMeshNode(node);
            }
        }
        //else
        //{
        //    if(!pointTable.ContainsKey(mark))
        //    {
        //        if(!requestList.Contains(mark))
        //        {
        //            RequestSPTerrainFromServer(maxNode, minCount, maxCount+1);
        //            requestList.Add(mark);
        //        }
        //    }
        //    else
        //    {
        //        pointTable[mark].RegisterMeshNode(node);
        //    }
        //}
    }