예제 #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);
        }
    }
예제 #2
0
    public static void WriteSPTerrainRect(uLink.BitStream stream, object obj, params object[] codecOptions)
    {
        SPTerrainRect point = obj as SPTerrainRect;

        stream.Write <int>(point.mCount);
        stream.Write <IntVector4>(point.mPosition);
        stream.Write <SPPoint[]>(point.mPoints.ToArray());
    }
예제 #3
0
    public static object ReadSPTerrainRect(uLink.BitStream stream, params object[] codecOptions)
    {
        SPTerrainRect point = new SPTerrainRect();

        point.mCount    = stream.Read <int>();
        point.mPosition = stream.Read <IntVector4>();
        point.mPoints   = new List <SPPoint>();
        SPPoint[] points = stream.Read <SPPoint[]>();
        point.mPoints.AddRange(points);
        return(point);
    }
예제 #4
0
    public static SPTerrainRect InstantiateSPTerrainRect(IntVector4 pos, int minCount, int maxCount, Transform parent, SimplexNoise noise)
    {
        GameObject obj = new GameObject(pos.x + " , " + pos.z);

        obj.transform.parent   = parent;
        obj.transform.position = pos.ToVector3();

        SPTerrainRect rect = obj.AddComponent <SPTerrainRect>();

        rect.Init(pos, minCount, maxCount, noise);

        return(rect);
    }
예제 #5
0
    //   public void RegisterAIGroupMemberToServer(IntVector4 index, Vector3 position, int pathID, uLink.NetworkViewID groupId)
    //   {
    //       if (!GameConfig.IsMultiMode || !GameConfig.MonsterYes)
    //           return;

    //      RPC("RPC_C2S_SpawnAIGroupMemberAtPoint", index, position, pathID, groupId);
//    }

    //#region RPC

    //[RPC]
    //void RPC_S2C_ReceiveSPTerrainRect(uLink.BitStream stream)
    //{
    //	SPTerrainRect spTerrain = stream.Read<SPTerrainRect>();

    //	if (spTerrain != null)
    //	{
    //		IntVector2 mark = new IntVector2(spTerrain.position.x, spTerrain.position.z);

    //		//Debug.Log("Receive SPTerrainRect from server[" + mark.x + " , " + mark.y + "]");

    //		if (pointTable.ContainsKey(mark))
    //		{
    //			pointTable.Remove(mark);
    //		}

    //		pointTable.Add(mark, spTerrain);

    //		foreach (SPPoint point in spTerrain.points) {
    //			point.Activate(true);
    //		}
    //	}
    //}

    //#endregion

    public void AddSPTerrainRect(SPTerrainRect spTerrain)
    {
        if (spTerrain != null)
        {
            IntVector2 mark = new IntVector2(spTerrain.position.x, spTerrain.position.z);

            if (pointTable.ContainsKey(mark))
            {
                pointTable.Remove(mark);
            }

            pointTable.Add(mark, spTerrain);

            foreach (SPPoint point in spTerrain.points)
            {
                point.Activate(true);
            }
        }
    }
예제 #6
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);
        //    }
        //}
    }
예제 #7
0
    SPTerrainRect InstantiateSPTerrainRect(IntVector4 node, int min, int max)
    {
        SPTerrainRect tRect = SPTerrainRect.InstantiateSPTerrainRect(node, min, max, transform, mNoise);

        return(tRect);
    }