void OnReplicationCreate(MyPacket packet) { while (MyEntities.HasEntitiesToDelete()) { MyEntities.DeleteRememberedEntities(); } ReplicationLayer.ProcessReplicationCreate(packet); }
public override void OnDestroy() { if (Instance != null) { Instance.Close(); while (MyEntities.HasEntitiesToDelete()) { MyEntities.DeleteRememberedEntities(); } } m_physicsSync = null; }
// Update all physics objects - AFTER physics simulation public static void UpdateAfterSimulation() { if (MySandboxGame.IsGameReady == false) { return; } VRageRender.MyRenderProxy.GetRenderProfiler().StartProfilingBlock("UpdateAfterSimulation"); { System.Diagnostics.Debug.Assert(MyEntities.UpdateInProgress == false); MyEntities.UpdateInProgress = true; ProfilerShort.Begin("UpdateAfter1"); m_entitiesForUpdate.List.ApplyChanges(); MySimpleProfiler.Begin("Blocks"); m_entitiesForUpdate.Iterate((x) => { ProfilerShort.Begin(x.GetType().Name); if (x.MarkedForClose == false) { if (ProfilePerBlock) { MyCubeBlock block = x as MyCubeBlock; if (block != null) { MySimpleProfiler.Begin(block.DefinitionDisplayNameText + (ProfilePerGrid ? $" - {block.CubeGrid.DisplayName}" : string.Empty)); if (ProfilePerGrid) { MySimpleProfiler.Begin("&&GRID&&" + block.CubeGrid.DisplayName); } } } if (ProfilePerGrid) { MyCubeGrid grid = x as MyCubeGrid; if (grid != null) { MySimpleProfiler.Begin("&&GRID&&" + grid.DisplayName); } } x.UpdateAfterSimulation(); if (ProfilePerBlock) { MyCubeBlock block = x as MyCubeBlock; if (block != null) { MySimpleProfiler.End(block.DefinitionDisplayNameText + (ProfilePerGrid ? $" - {block.CubeGrid.DisplayName}" : string.Empty)); if (ProfilePerGrid) { MySimpleProfiler.End("&&GRID&&" + block.CubeGrid.DisplayName); } } } if (ProfilePerGrid) { MyCubeGrid grid = x as MyCubeGrid; if (grid != null) { MySimpleProfiler.End("&&GRID&&" + grid.DisplayName); } } } ProfilerShort.End(); }); ProfilerShort.End(); ProfilerShort.Begin("UpdateAfter10"); m_entitiesForUpdate10.List.ApplyChanges(); m_entitiesForUpdate10.Iterate((x) => { ProfilerShort.Begin(x.GetType().Name); if (x.MarkedForClose == false) { if (ProfilePerBlock) { MyCubeBlock block = x as MyCubeBlock; if (block != null) { MySimpleProfiler.Begin(block.DefinitionDisplayNameText + (ProfilePerGrid ? $" - {block.CubeGrid.DisplayName}" : string.Empty)); if (ProfilePerGrid) { MySimpleProfiler.Begin("&&GRID&&" + block.CubeGrid.DisplayName); } } } if (ProfilePerGrid) { MyCubeGrid grid = x as MyCubeGrid; if (grid != null) { MySimpleProfiler.Begin("&&GRID&&" + grid.DisplayName); } } x.UpdateAfterSimulation10(); if (ProfilePerBlock) { MyCubeBlock block = x as MyCubeBlock; if (block != null) { MySimpleProfiler.End(block.DefinitionDisplayNameText + (ProfilePerGrid ? $" - {block.CubeGrid.DisplayName}" : string.Empty)); if (ProfilePerGrid) { MySimpleProfiler.End("&&GRID&&" + block.CubeGrid.DisplayName); } } } if (ProfilePerGrid) { MyCubeGrid grid = x as MyCubeGrid; if (grid != null) { MySimpleProfiler.End("&&GRID&&" + grid.DisplayName); } } } ProfilerShort.End(); }); ProfilerShort.End(); ProfilerShort.Begin("UpdateAfter100"); m_entitiesForUpdate100.List.ApplyChanges(); m_entitiesForUpdate100.Iterate((x) => { ProfilerShort.Begin(x.GetType().Name); if (x.MarkedForClose == false) { if (ProfilePerBlock) { MyCubeBlock block = x as MyCubeBlock; if (block != null) { MySimpleProfiler.Begin(block.DefinitionDisplayNameText + (ProfilePerGrid ? $" - {block.CubeGrid.DisplayName}" : string.Empty)); if (ProfilePerGrid) { MySimpleProfiler.Begin("&&GRID&&" + block.CubeGrid.DisplayName); } } } if (ProfilePerGrid) { MyCubeGrid grid = x as MyCubeGrid; if (grid != null) { MySimpleProfiler.Begin("&&GRID&&" + grid.DisplayName); } } x.UpdateAfterSimulation100(); if (ProfilePerBlock) { MyCubeBlock block = x as MyCubeBlock; if (block != null) { MySimpleProfiler.End(block.DefinitionDisplayNameText + (ProfilePerGrid ? $" - {block.CubeGrid.DisplayName}" : string.Empty)); if (ProfilePerGrid) { MySimpleProfiler.End("&&GRID&&" + block.CubeGrid.DisplayName); } } } if (ProfilePerGrid) { MyCubeGrid grid = x as MyCubeGrid; if (grid != null) { MySimpleProfiler.End("&&GRID&&" + grid.DisplayName); } } } ProfilerShort.End(); }); ProfilerShort.End(); MySimpleProfiler.End("Blocks"); MyEntities.UpdateInProgress = false; MyEntities.DeleteRememberedEntities(); } if (m_creationThread != null) { while (m_creationThread.ConsumeResult()) { ; // Add entities created asynchronously } } VRageRender.MyRenderProxy.GetRenderProfiler().EndProfilingBlock(); }
public bool ConsumeResult() { Item result; if (m_resultQueue.TryDequeue(out result)) { if (result.Result != null) { result.Result.DebugAsyncLoading = false; } bool conflictFound = false; if (result.EntityIds != null) { while (MyEntities.HasEntitiesToDelete()) { MyEntities.DeleteRememberedEntities(); } foreach (var id in result.EntityIds) { IMyEntity entity; if (MyEntityIdentifier.TryGetEntity(id.EntityId, out entity)) { MyLog.Default.WriteLine("Entity found ! id : " + id.EntityId.ToString() + " existing : " + entity.ToString() + " adding: " + id.ToString()); conflictFound = true; // Debug.Fail("double entity add !!"); } } if (conflictFound == false) { foreach (var id in result.EntityIds) { MyEntityIdentifier.AddEntityWithId(id); } } result.EntityIds.Clear(); } if (conflictFound == false) { if (result.AddToScene) { MyEntities.Add(result.Result, result.InScene); if (result.SubGrids != null) { foreach (var subGrid in result.SubGrids) { MyEntities.Add(subGrid, result.InScene); } result.SubGrids.Clear(); result.SubGrids = null; } } if (result.DoneHandler != null) { result.DoneHandler(result.Result); } } else { if (result.DoneHandler != null) { result.DoneHandler(null); } } return(true); } return(false); }
public bool ConsumeResult(MyTimeSpan timestamp) { Item item; if (!this.m_resultQueue.TryDequeue(out item)) { return(false); } if (item.Result != null) { item.Result.DebugAsyncLoading = false; } bool flag = false; if (item.EntityIds != null) { while (true) { if (!MyEntities.HasEntitiesToDelete()) { List <IMyEntity> .Enumerator enumerator; using (enumerator = item.EntityIds.GetEnumerator()) { while (enumerator.MoveNext()) { IMyEntity entity; if (!MyEntityIdentifier.TryGetEntity(enumerator.Current.EntityId, out entity, false)) { continue; } flag = true; } } if (!flag) { using (enumerator = item.EntityIds.GetEnumerator()) { while (enumerator.MoveNext()) { MyEntityIdentifier.AddEntityWithId(enumerator.Current); } } } item.EntityIds.Clear(); break; } MyEntities.DeleteRememberedEntities(); } } if (flag) { if (item.DoneHandler != null) { item.DoneHandler(null); } } else { if (item.AddToScene) { MyEntities.Add(item.Result, item.InScene); } if (item.DoneHandler != null) { item.DoneHandler(item.Result); } } return(true); }