public virtual void ResetEntity(LevelGeometryEntity levelGeometryEntity, Material overrideMaterial = null) { SceneLayer sl = GetRecommendedSceneLayer(); using (RenderingModule.RenderStateBarrier.AcquirePermit(withLock: instanceMutationLock)) { Entity rep = GetEntityRepresentation(levelGeometryEntity); rep.Dispose(); GeometryEntity entity; if (levelGeometryEntity.IsStatic) { entity = new GeometryEntity { Transform = levelGeometryEntity.InitialMovementStep.Transform }; } else { entity = new PresetMovementEntity(levelGeometryEntity.MovementSteps.ToArray(), levelGeometryEntity.AlternatingMovementDirection, levelGeometryEntity.InitialDelay) { Transform = levelGeometryEntity.InitialMovementStep.Transform }; } entity.SetModelInstance(sl, currentModelHandles[levelGeometryEntity.Geometry], overrideMaterial ?? currentMaterials[levelGeometryEntity.Material]); currentGeometryEntities[levelGeometryEntity] = entity; } }
private void UpdateSelectedObject() { lock (instanceMutationLock) { if (previouslySelectedLGO != null && previouslySelectedLGO.GroundingGeometryEntity != null) { Entity prevEntity = currentLevel.GetEntityRepresentation(previouslySelectedLGO.GroundingGeometryEntity); if (prevEntity is PresetMovementEntity) { ((PresetMovementEntity)prevEntity).Unpause(); } } LevelGameObject previousGO = previouslySelectedLGO; LevelGameObject selectedGO = objectList.SelectedItem as LevelGameObject; if (selectedGO == null) { curObjDescTextBox.Text = String.Empty; SetGOControlEnabledState(false); previouslySelectedLGO = null; return; } if (selectedGO.GroundingGeometryEntity != null && !selectedGO.GroundingGeometryEntity.IsStatic) { PresetMovementEntity pme = (PresetMovementEntity)currentLevel.GetEntityRepresentation(selectedGO.GroundingGeometryEntity); pme.Pause(selectedGO.GroundingGeometryEntity.InitialMovementStep); } previouslySelectedLGO = selectedGO; curObjDescTextBox.Text = selectedGO.LongDescription; SetGOControlEnabledState(true); bindButton.Text = selectedGO.GroundingGeometryEntity == null ? "Bind" : "Unbind"; simpleBindingCheck.Checked = selectedGO.UseSimpleGrounding; UpdateCustomPropertiesBox(previousGO, selectedGO); } }
public void ResetEntities(bool fullReset) { SceneLayer sl = GetRecommendedSceneLayer(); lock (instanceMutationLock) { currentGeometryEntities.Values.ForEach(e => e.Dispose()); currentGeometryEntities.Clear(); foreach (LevelGeometryEntity levelEntity in levelGeometryEntities) { GeometryEntity entity; if (levelEntity.IsStatic) { entity = new GeometryEntity { Transform = levelEntity.InitialMovementStep.Transform }; } else { entity = new PresetMovementEntity(levelEntity.MovementSteps.ToArray(), levelEntity.AlternatingMovementDirection, levelEntity.InitialDelay) { Transform = levelEntity.InitialMovementStep.Transform }; } entity.SetModelInstance(sl, currentModelHandles[levelEntity.Geometry], currentMaterials[levelEntity.Material]); currentGeometryEntities.Add(levelEntity, entity); } } ResetEntityPhysics(fullReset); }