/// <inheritdoc/> protected override void OnUpdate() { // Setup the presentator on startup or when it was lost/reset if (_presenter == null) { _presenter = new EditorPresenter(renderPanel.Engine, _universe, false) { WireframeTerrain = checkWireframe.Checked }; _presenter.Initialize(); _presenter.HookIn(); renderPanel.AddInputReceiver(_presenter); // Update the presenter based on user input renderPanel.AddInputReceiver(_updateReceiver = new UpdateReceiver(() => renderPanel.Engine.Render())); // Force immediate redraw to give responsive feel UpdatePaintingStatus(null, EventArgs.Empty); #region Monitoring events _presenter.SelectedPositionables.Added += SelectedPositionables_Added; _presenter.SelectedPositionables.Removing += SelectedPositionables_Removing; _presenter.SelectedPositionables.Removed += SelectedPositionables_Removed; _presenter.PostionableMove += presenter_PositionableMove; _presenter.TerrainPaint += presenter_TerrainPaint; #endregion } UpdatePositionablesListBox(); UpdateSelectionControls(); UpdateTextureControls(); _mapPropertiesTool?.UpdateUniverse(_universe); UpdateXml(); UpdateGameTimeSlider(); base.OnUpdate(); }
/// <inheritdoc/> protected override void OnUpdate() { // Backup the previously selected class var selectedClass = TemplateList.SelectedEntry; // Setup the presentator on startup or when it was lost/reset if (_presenter == null) { _presenter = new EditorPresenter(renderPanel.Engine, _universe, true); _presenter.Initialize(); _presenter.HookIn(); renderPanel.AddInputReceiver(_presenter); // Update the presenter based on user input renderPanel.AddInputReceiver(new UpdateReceiver(() => renderPanel.Engine.Render())); // Force immediate redraw to give responsive feel } // Remove all previous entites from rendering universe _universe.Positionables.Clear(); if (selectedClass == null) { // No class selected #region Render component comboRender.Items.Clear(); buttonAddRender.Enabled = buttonRemoveRender.Enabled = buttonBrowseRender.Enabled = false; propertyGridRender.SelectedObject = null; #endregion #region Collision component buttonAddCollision.Enabled = buttonRemoveCollision.Enabled = false; propertyGridCollision.SelectedObject = null; labelCollision.Text = ""; #endregion #region Movement compnent buttonAddMovement.Enabled = buttonRemoveMovement.Enabled = false; propertyGridMovement.SelectedObject = null; labelMovement.Text = ""; #endregion } else { // Class is selected #region Render component buttonAddRender.Enabled = true; // Backup currently selected component controller before clearing list var prevRender = comboRender.SelectedItem; comboRender.Items.Clear(); // List render components in drop-down combo-box foreach (var render in selectedClass.Render) { comboRender.Items.Add(render); } if (comboRender.Items.Count > 0) { // Select previous render component or first one in list comboRender.SelectedItem = (prevRender != null && comboRender.Items.Contains(prevRender)) ? prevRender : comboRender.Items[0]; buttonRemoveRender.Enabled = buttonBrowseRender.Enabled = true; } else { // No render components in the list propertyGridRender.SelectedObject = null; buttonRemoveRender.Enabled = buttonBrowseRender.Enabled = false; } #endregion #region Collision Control buttonAddCollision.Enabled = (selectedClass.Collision == null); buttonRemoveCollision.Enabled = !buttonAddCollision.Enabled; propertyGridCollision.SelectedObject = selectedClass.Collision; labelCollision.Text = selectedClass.Collision?.ToString() ?? "None"; #endregion #region Movement Control buttonAddMovement.Enabled = (selectedClass.Movement == null); buttonRemoveMovement.Enabled = !buttonAddMovement.Enabled; propertyGridMovement.SelectedObject = selectedClass.Movement; labelMovement.Text = selectedClass.Movement?.ToString() ?? "None"; #endregion #region Setup sample rendering // Make sure device is ready before trying to setup rendering if (renderPanel.Engine.NeedsReset) { return; } // Add new Entity to Universe (Presenter will auto-update engine) try { _universe.Positionables.Add(new Entity { Name = "Entity", Position = _universe.Terrain.Center, // Clone the class, so that in case it is changed the old version is still available for cleanup operations TemplateData = TemplateList.SelectedEntry.Clone() }); } #region Error handling catch (NotSupportedException) { Msg.Inform(this, Resources.InvalidFilePath, MsgSeverity.Warn); } catch (FileNotFoundException ex) { Msg.Inform(this, Resources.FileNotFound + "\n" + ex.FileName, MsgSeverity.Warn); } catch (IOException ex) { Msg.Inform(this, Resources.FileNotLoadable + "\n" + ex.Message, MsgSeverity.Warn); } catch (UnauthorizedAccessException ex) { Msg.Inform(this, Resources.FileNotLoadable + "\n" + ex.Message, MsgSeverity.Warn); } catch (InvalidDataException ex) { Msg.Inform(this, Resources.FileDamaged + "\n" + ex.Message + (ex.InnerException == null ? "" : "\n" + ex.InnerException.Message), MsgSeverity.Error); } #endregion #endregion } renderPanel.Engine.Render(); base.OnUpdate(); }