private static void OnGenerateCollider(ref SGenerateColliderWorkItem item) { ChunkStateManagerClient stateManager = item.StateManager; stateManager.chunk.ChunkColliderGeometryHandler.Build(item.MinX, item.MaxX, item.MinY, item.MaxY, item.MinZ, item.MaxZ); OnGenerateColliderDone(stateManager); }
/// <summary> /// Build this chunk's collision geometry /// </summary> private bool GenerateCollider() { if (!m_completedStates.Check(ChunkState.LoadData)) { return(true); } if (!SynchronizeChunk()) { return(true); } m_pendingStates = m_pendingStates.Reset(CurrStateGenerateCollider); m_completedStates = m_completedStates.Reset(CurrStateGenerateCollider); m_completedStatesSafe = m_completedStates; if (chunk.blocks.NonEmptyBlocks > 0) { var workItem = new SGenerateColliderWorkItem( this, m_minRenderX, m_maxRenderX, m_minRenderY, m_maxRenderY, m_minRenderZ, m_maxRenderZ ); m_taskRunning = true; WorkPoolManager.Add( new ThreadPoolItem( chunk.ThreadID, arg => { SGenerateColliderWorkItem item = (SGenerateColliderWorkItem)arg; OnGenerateCollider(ref item); }, workItem) ); return(true); } OnGenerateColliderDone(this); return(false); }