Exemplo n.º 1
0
        /// <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();
        }
Exemplo n.º 2
0
        /// <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();
        }