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); } }
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()); }
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); }
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); }
// 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); } } }
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); // } //} }
SPTerrainRect InstantiateSPTerrainRect(IntVector4 node, int min, int max) { SPTerrainRect tRect = SPTerrainRect.InstantiateSPTerrainRect(node, min, max, transform, mNoise); return(tRect); }