Inheritance: MonoBehaviour
Beispiel #1
0
        public void Setup(Canvas simCanvas, ParticleSim particleSim, StackPanel optionBar)
        {
            this.simCanvas = simCanvas;
            this.optionBar = optionBar;

            // Register events with tools
            simCanvas.MouseLeftButtonDown += SimCanvas_MouseLeftButtonDown;
            simCanvas.MouseMove           += SimCanvas_MouseMove;
            simCanvas.MouseLeftButtonUp   += SimCanvas_MouseLeftButtonUp;

            // Track buttons in dictionary
            toolButtons.Add(ToolType.Particle, ParticleButton);
            toolButtons.Add(ToolType.Ruler, RulerButton);
            toolButtons.Add(ToolType.Select, SelectButton);
            toolButtons.Add(ToolType.LinearForce, LinearForceButton);

            // Initialize tools
            RegisterTools(
                new ParticleToolLogic(simCanvas, particleSim),
                new LinearForceLogic(simCanvas, particleSim),
                new RulerLogic(simCanvas),
                new SelectLogic(simCanvas, particleSim)
                );

            // Select tool to begin with
            SelectTool(ToolType.Particle);
        }
Beispiel #2
0
        public ParticleToolLogic(Canvas simCanvas, ParticleSim particleSim)
        {
            this.simCanvas   = simCanvas;
            this.particleSim = particleSim;
            OptionBar        = new ParticleToolOptions();
            (OptionBar as ParticleToolOptions).SpawnButtonClick += SpawnParticleButton_Clicked;

            ToolType = ToolType.Particle;

            velPreview = new Line()
            {
                Stroke             = new SolidColorBrush(Colors.Red),
                StrokeThickness    = 2,
                Visibility         = Visibility.Hidden,
                StrokeStartLineCap = PenLineCap.Triangle,

                X1 = 0,
                Y1 = 0,
                X2 = 0,
                Y2 = 0
            };
            particlePreview = new Ellipse();
            simCanvas.Children.Add(velPreview);
            simCanvas.Children.Add(particlePreview);
        }
Beispiel #3
0
        public SelectLogic(Canvas simCanvas, ParticleSim particleSim)
        {
            this.simCanvas   = simCanvas;
            this.particleSim = particleSim;

            OptionBar = new SelectOptions();
            ToolType  = ToolType.Select;

            // Set up marquee select
            simCanvas.Children.Add(selectPreview);
            Panel.SetZIndex(selectPreview, 901);

            // Setup selection window
            selectionWindow            = new SelectionWindow();
            selectionWindow.Activated += SelectionWindowActivated;
            Application.Current.MainWindow.Closing += (s, e) =>
            {
                selectionWindow.Show();
                selectionWindow.Close();
            };
            (OptionBar as SelectOptions).ViewSelectionButton.Click += (s, e) =>
            {
                if (selectionWindow.IsVisible)
                {
                    selectionWindow.Hide();
                }
                else
                {
                    selectionWindow.Show();
                }
            };

            particleSim.BodySpawned += (s, e) => UpdateSelectionViewer();

            selectionWindow.SelectedItemView.SelectionChanged += (s, e) =>
            {
                while (selectionWindow.PropertiesPanel.Children.Count != 0)
                {
                    selectionWindow.PropertiesPanel.Children.RemoveAt(0);
                }

                int selectedIndex = (s as ListView).SelectedIndex;

                if (selectedIndex == -1)
                {
                    return;
                }

                Bodies.Rigidbody body = selectedBodies[selectedIndex];
                AddDataEntry(new Dictionary <string, object>()
                {
                    { "Radius", body.radius },
                    { "Charge", body.Charge }
                });
            };
        }
Beispiel #4
0
        public void Setup(ParticleSim particleSim, ParticleSimulator simGUI)
        {
            this.particleSim = particleSim;

            RegisterCommands(
                new Tuple <Button, ICommand>(DeleteAllButton, new DeleteAll(particleSim)),
                new Tuple <Button, ICommand>(PauseButton, new Pause(simGUI)),
                new Tuple <Button, ICommand>(PlayButton, new Play(simGUI))
                );
        }
Beispiel #5
0
        public LinearForceLogic(Canvas simCanvas, ParticleSim particleSim)
        {
            this.simCanvas   = simCanvas;
            this.particleSim = particleSim;

            ToolType  = ToolType.LinearForce;
            OptionBar = new LinearForceOptions();

            (OptionBar as LinearForceOptions).SpawnButton.Click += SpawnButton_Click;

            Panel.SetZIndex(forcePreviewLine, 900);

            simCanvas.Children.Add(forcePreviewLine);
        }
Beispiel #6
0
        public ParticleSimulator()
        {
            InitializeComponent();

            Application.Current.MainWindow.Closing += OnClosing;

            // Initialize simulation
            particleSim = new ParticleSim(SimCanvas);

            // Setup toolbar + commandbar
            UserToolBar.Setup(SimCanvas, particleSim, ToolOptionBar);
            CommandBar.Setup(particleSim, this);
            TopBarDockPanel.PreviewMouseWheel += (s, e) =>
            {
                if (e.Delta < 0)
                {
                    OptionBarScrollViewer.LineRight();
                }
                else
                {
                    OptionBarScrollViewer.LineLeft();
                }
                e.Handled = true;
            };

            // Setup settings window
            settingsWindow            = new SettingsWindow(this, particleSim);
            settingsWindow.Activated += SettingsWindowActivated;
            SettingsButton.Click     += (s, e) =>
            {
                if (settingsWindow.IsVisible)
                {
                    settingsWindow.Hide();
                }
                else
                {
                    settingsWindow.Show();
                }
            };

            // Capture render loop to use as main simulation loop
            CompositionTarget.Rendering += (s, e) => MainLoop();
        }
Beispiel #7
0
        public SettingsWindow(ParticleSimulator pSimPage, ParticleSim particleSim)
        {
            this.pSimPage    = pSimPage;
            this.particleSim = particleSim;

            InitializeComponent();

            // Register events
            Closing += OnClosing;

            TrailsToggleButton.Click += (s, e) =>
            {
                bool trailsOn = TrailsToggleButton.IsChecked ?? false;

                particleSim.ParticleTrailsOn = trailsOn;
                TrailsToggleButton.Content   = (trailsOn) ? "On" : "Off";
                TrailLengthSlider.IsEnabled  = trailsOn;
            };
            TrailLengthSlider.ValueChanged += (s, e) =>
            {
                int newLength = (int)e.NewValue;
                TrailLengthLabel.Content = newLength;
                particleSim.TrailLength  = newLength;
            };

            ParticleCollToggleButton.Click += (s, e) =>
            {
                bool collisionsOn = ParticleCollToggleButton.IsChecked ?? true;

                particleSim.CollisionsOn         = collisionsOn;
                ParticleCollToggleButton.Content = (collisionsOn) ? "On" : "Off";
            };

            ElecMagStateComboBox.SelectionChanged += (s, e) =>
            {
                particleSim.ElectroMagneticState = (ElectroMagneticState)ElecMagStateComboBox.SelectedIndex;
            };

            // Time interval events
            RealTimeCheckBox.Checked   += (s, e) => TimeStepUpDown.IsEnabled = false;
            RealTimeCheckBox.Unchecked += (s, e) => TimeStepUpDown.IsEnabled = true;
        }
Beispiel #8
0
 public DeleteAll(ParticleSim particleSim)
 {
     this.particleSim = particleSim;
 }