private void GenerateBuildings() { long startTicks = DateTime.Now.Ticks; const int maxTicks = 500000; lock (newBuildingsData) { int newBuildingIndex = newBuildingsData.Count; while (newBuildingIndex > 0) { if (maxBuilding > 0 && unusedBuildings.Count + buildings.Count >= maxBuilding) { break; } newBuildingIndex--; OnlineMapsBuildingsNodeData data = newBuildingsData.Dequeue(); CreateBuilding(data); data.Dispose(); if (DateTime.Now.Ticks - startTicks > maxTicks) { break; } } } OnlineMapsBuildingBuiltIn.roofIndices = null; }
public void CreateBuilding(OnlineMapsBuildingsNodeData data) { if (OnCreateBuilding != null && !OnCreateBuilding(data)) { return; } if (buildings.ContainsKey(data.way.id) || unusedBuildings.ContainsKey(data.way.id)) { return; } OnlineMapsBuildingBase building = null; building = OnlineMapsBuildingBuiltIn.Create(this, data.way, data.nodes); if (building != null) { building.LoadMeta(data.way); if (OnBuildingCreated != null) { OnBuildingCreated(building); } unusedBuildings.Add(data.way.id, building); } }
public void CreateBuilding(OnlineMapsBuildingsNodeData data) { if (OnCreateBuilding != null && !OnCreateBuilding(data)) { return; } if (buildings.ContainsKey(data.way.id) || unusedBuildings.ContainsKey(data.way.id)) { return; } int initialZoom = map.buffer.renderState.zoom; OnlineMapsBuildingBase building = OnlineMapsBuildingBuiltIn.Create(this, data.way, data.nodes); if (building != null) { building.LoadMeta(data.way); if (OnBuildingCreated != null) { OnBuildingCreated(building); } unusedBuildings.Add(data.way.id, building); if (Math.Abs(map.buffer.lastState.floatZoom - initialZoom) > float.Epsilon) { UpdateBuildingScale(building); } building.transform.localScale.Scale(new Vector3(1, heightScale, 1)); } else { //Debug.Log("Null building"); } }
/// <summary> /// Creates a new building based on data /// </summary> /// <param name="data">Building data</param> public void CreateBuilding(OnlineMapsBuildingsNodeData data) { if (OnCreateBuilding != null && !OnCreateBuilding(data)) { return; } if (buildings.ContainsKey(data.way.id) || unusedBuildings.ContainsKey(data.way.id)) { return; } int initialZoom = map.buffer.apiZoom; OnlineMapsBuildingBase building = OnlineMapsBuildingBuiltIn.Create(this, data.way, data.nodes); if (building != null) { building.LoadMeta(data.way); if (OnBuildingCreated != null) { OnBuildingCreated(building); } unusedBuildings.Add(data.way.id, building); if (map.buffer.apiZoom != initialZoom) { UpdateBuildingScale(building); } } else { //Debug.Log("Null building"); } }
private void GenerateBuildings() { long startTicks = DateTime.Now.Ticks; const int maxTicks = 500000; lock (newBuildingsData) { while (newBuildingsData.Count > 0) { if (maxBuilding > 0 && unusedBuildings.Count + buildings.Count >= maxBuilding) { break; } OnlineMapsBuildingsNodeData data = newBuildingsData[0]; newBuildingsData.RemoveAt(0); if (OnCreateBuilding != null && !OnCreateBuilding(data)) { data.Dispose(); continue; } if (buildings.ContainsKey(data.way.id) || unusedBuildings.ContainsKey(data.way.id)) { data.Dispose(); continue; } OnlineMapsBuildingBase building = OnlineMapsBuildingBuiltIn.Create(this, data.way, data.nodes); if (building != null) { building.LoadMeta(data.way); if (OnBuildingCreated != null) { OnBuildingCreated(building); } unusedBuildings.Add(data.way.id, building); } data.Dispose(); if (DateTime.Now.Ticks - startTicks > maxTicks) { break; } } } OnlineMapsBuildingBuiltIn.usedNodes = null; OnlineMapsBuildingBuiltIn.roofIndices = null; }
private bool GenerateBuildings() { long startTicks = DateTime.Now.Ticks; const int maxTicks = 500000; bool hasNewBuildings = false; lock (newBuildingsData) { int newBuildingIndex = newBuildingsData.Count; int needCreate = newBuildingIndex; while (newBuildingIndex > 0) { if (maxBuilding > 0 && unusedBuildings.Count + buildings.Count >= maxBuilding) { break; } newBuildingIndex--; OnlineMapsBuildingsNodeData data = newBuildingsData.Dequeue(); CreateBuilding(data); hasNewBuildings = true; data.Dispose(); if (DateTime.Now.Ticks - startTicks > maxTicks) { break; } } if (needCreate > 0 && (newBuildingIndex == 0 || (maxBuilding > 0 && unusedBuildings.Count + buildings.Count >= maxBuilding)) && OnAllBuildingsCreated != null) { OnAllBuildingsCreated(); } } OnlineMapsBuildingBase.roofIndices = null; return(hasNewBuildings); }
private void GenerateBuildings() { float startTicks = Time.realtimeSinceStartup; const float maxTicks = 0.05f; lock (newBuildingsData) { int newBuildingIndex = newBuildingsData.Count; int needCreate = newBuildingIndex; while (newBuildingIndex > 0) { if (maxBuilding > 0 && unusedBuildings.Count + buildings.Count >= maxBuilding) { break; } newBuildingIndex--; OnlineMapsBuildingsNodeData data = newBuildingsData.Dequeue(); CreateBuilding(data); needUpdatePosition = true; data.Dispose(); if (Time.realtimeSinceStartup > maxTicks) { break; } } if (needCreate > 0 && (newBuildingIndex == 0 || (maxBuilding > 0 && unusedBuildings.Count + buildings.Count >= maxBuilding)) && OnAllBuildingsCreated != null) { OnAllBuildingsCreated(); } } OnlineMapsBuildingBase.roofIndices = null; }