private bool PrepareGenerate() { if (!m_completedStates.Check(ChunkState.LoadData)) { return(true); } m_pendingStates = m_pendingStates.Reset(CurrStatePrepareGenerate); m_completedStates = m_completedStates.Reset(CurrStatePrepareGenerate); m_completedStatesSafe = m_completedStates; if (Features.UseSerialization) { var task = Globals.MemPools.SMThreadPI.Pop(); m_poolState = m_poolState.Set(ChunkPoolItemState.ThreadPI); m_threadPoolItem = task; task.Set(chunk.ThreadID, actionOnPrepareGenerate, this); m_taskRunning = true; IOPoolManager.Add(m_threadPoolItem); return(true); } OnPrepareGenerateDone(this, false); return(false); }
private bool SaveData() { // We need to wait until chunk is generated if (!m_completedStates.Check(ChunkState.PrepareSaveData)) { return(true); } m_pendingStates = m_pendingStates.Reset(CurrStateSaveData); m_completedStates = m_completedStates.Reset(CurrStateSaveData); m_completedStatesSafe = m_completedStates; if (Features.UseSerialization) { var task = Globals.MemPools.SMTaskPI.Pop(); m_poolState = m_poolState.Set(ChunkPoolItemState.TaskPI); m_threadPoolItem = task; task.Set(actionOnSaveData, this); m_taskRunning = true; IOPoolManager.Add(task); return(true); } OnSaveDataDone(this, false); return(false); }
private bool SaveData() { // We need to wait until chunk is generated and data finalized if (!m_completedStates.Check(ChunkState.Generate) || !m_completedStates.Check(ChunkState.LoadData)) { return(true); } m_pendingStates = m_pendingStates.Reset(CurrStateSaveData); m_completedStates = m_completedStates.Reset(CurrStateSaveData); m_completedStatesSafe = m_completedStates; m_taskRunning = true; IOPoolManager.Add( new TaskPoolItem( arg => { ChunkStateManagerClient stateManager = (ChunkStateManagerClient)arg; OnSaveData(stateManager); }, this) ); return(true); }
private bool LoadData() { /*Assert.IsTrue( * m_completedStates.Check(ChunkState.Generate), * string.Format( * "[{0},{1},{2}] - LoadData set sooner than Generate completed. Pending:{3}, Completed:{4}", pos.x, * pos.y, pos.z, m_pendingStates, m_completedStates) * );*/ if (!m_completedStates.Check(ChunkState.Generate)) { return(true); } m_pendingStates = m_pendingStates.Reset(CurrStateLoadData); m_completedStates = m_completedStates.Reset(CurrStateLoadData); m_completedStatesSafe = m_completedStates; m_taskRunning = true; IOPoolManager.Add( new TaskPoolItem( arg => { ChunkStateManagerServer stateManager = (ChunkStateManagerServer)arg; OnLoadData(stateManager); }, this) ); return(true); }
private bool SerializeChunk() { // This state should only be set it streaming is enabled Assert.IsTrue(EngineSettings.WorldConfig.Streaming); // If chunk was generated... if (m_completedTasks.Check(ChunkState.Generate)) { // ... we need to wait until blueprints are generated and chunk is finalized if (!m_completedTasks.Check( #if ENABLE_BLUEPRINTS ChunkState.GenerateBlueprints | #endif ChunkState.FinalizeData )) { return(true); } } m_pendingTasks = m_pendingTasks.Reset(CurrStateSerializeChunk); // Nothing here for us to do if the chunk was not changed since the last serialization if (m_completedTasks.Check(CurrStateSerializeChunk) && !m_refreshTasks.Check(CurrStateSerializeChunk)) { OnSerialzeChunkDone(this); return(false); } m_refreshTasks = m_refreshTasks.Reset(CurrStateSerializeChunk); m_completedTasks = m_completedTasks.Reset(CurrStateSerializeChunk); ChunkProvider provider = (ChunkProvider)Map.ChunkProvider; SSerializeWorkItem workItem = new SSerializeWorkItem( this, provider.GetFilePathFromIndex(Pos.X, Pos.Y, Pos.Z) ); m_taskRunning = true; IOPoolManager.Add(new ThreadItem( arg => { SSerializeWorkItem item = (SSerializeWorkItem)arg; OnSerializeChunk(item.Chunk, item.FilePath); }, workItem) ); return(true); }
private static void RequestChunkFromDisk(Chunk chunk, string filePath) { IOPoolManager.Add(new TaskPoolItem( arg => { if (LoadChunkFromDisk(chunk, filePath)) { chunk.StateManager.MarkAsGenerated(); return; } // File could not be read for some reason, delete it File.Delete(filePath); // Request new data from the internet chunk.StateManager.RequestState(ChunkState.Generate); }, chunk)); }
private bool SaveData() { // This state should only be set it streaming is enabled Assert.IsTrue(EngineSettings.WorldConfig.Streaming); // If chunk was generated... if (m_completedStates.Check(ChunkState.Generate)) { // ... we need to wait until blueprints are generated and chunk is finalized if (!m_completedStates.Check( ChunkState.FinalizeData )) { return(true); } } m_pendingStates = m_pendingStates.Reset(CurrStateSaveData); m_completedStates = m_completedStates.Reset(CurrStateSaveData); m_completedStatesSafe = m_completedStates; ChunkProvider provider = (ChunkProvider)chunk.Map.ChunkProvider; SSerializeWorkItem workItem = new SSerializeWorkItem( this, provider.GetFilePathFromIndex(chunk.Pos.X, chunk.Pos.Y, chunk.Pos.Z) ); m_taskRunning = true; IOPoolManager.Add( new TaskPoolItem( arg => { SSerializeWorkItem item = (SSerializeWorkItem)arg; OnSaveData(item.StateManager, item.FilePath); }, workItem) ); return(true); }
private bool LoadData() { m_pendingStates = m_pendingStates.Reset(CurrStateLoadData); m_completedStates = m_completedStates.Reset(CurrStateLoadData); m_completedStatesSafe = m_completedStates; if (Features.UseSerialization) { var task = Globals.MemPools.SMTaskPI.Pop(); m_poolState = m_poolState.Set(ChunkPoolItemState.TaskPI); m_threadPoolItem = task; task.Set(actionOnLoadData, this); m_taskRunning = true; IOPoolManager.Add(m_threadPoolItem); return(true); } OnLoadDataDone(this, false); return(false); }
private bool LoadData() { if (!m_completedStates.Check(ChunkState.Generate)) { return(true); } m_pendingStates = m_pendingStates.Reset(CurrStateLoadData); m_completedStates = m_completedStates.Reset(CurrStateLoadData); m_completedStatesSafe = m_completedStates; m_taskRunning = true; IOPoolManager.Add( new TaskPoolItem( arg => { ChunkStateManagerClient stateManager = (ChunkStateManagerClient)arg; OnLoadData(stateManager); }, this) ); return(true); }