/// <summary> /// The constructor. /// </summary> public UniverseDisplayCell(int paneWidth, int paneHeight, Label label) { int width = paneWidth / Settings.Default.Zoom; int height = paneHeight / Settings.Default.Zoom; _label = label; var universe = new UniverseHolder(height, width, 3); var physics = new MergePhysics(universe); universe.Randomize(_rnd); physics.Randomize(); _universeRunner = new UniverseRunner(universe, physics); _visualizer = new UniverseVisualizer(universe, Settings.Default.Zoom); _bitmap = new WriteableBitmap( paneWidth, paneHeight, 96, 96, PixelFormats.Bgr32, null); }
/// <summary> /// The copy popup menu was clicked. /// </summary> /// <param name="sender">The sending object.</param> /// <param name="e">The event.</param> private void MenuCopyPane_Click(object sender, RoutedEventArgs e) { _copySource = _selectedCell.UniverseRunner; _crossoverParent1 = null; _crossoverParent2 = null; BtnDeselect.IsEnabled = true; }
/// <summary> /// The mutate single popup menu was clicked. /// </summary> /// <param name="sender">The sending object.</param> /// <param name="e">The event.</param> private void MenuMutateSingle_Click(object sender, RoutedEventArgs e) { UniverseRunner target = _selectedCell.UniverseRunner; target.Mutate(_rnd, target.PhysicsRules, 0.5, 0.2); target.Randomize(_rnd); }
/// <summary> /// Display a single CA. /// </summary> /// <param name="universeRunner">The runner to use physics from.</param> public DisplaySingle(UniverseRunner universeRunner) { InitializeComponent(); int len = universeRunner.PhysicsRules.Data.Length; _physics = new double[len]; Array.Copy(universeRunner.PhysicsRules.Data, _physics, len); }
/// <summary> /// The mouse was pressed. /// </summary> /// <param name="sender">The sending object.</param> /// <param name="e">The event.</param> private void CanvasOutput_MouseDown(object sender, MouseButtonEventArgs e) { // update selected cell Point pt = Mouse.GetPosition(CanvasOutput); int univWidth = Settings.Default.PaneWidth; int univHeight = Settings.Default.PaneHeight; _selectedRow = (int)(pt.Y / univWidth); _selectedCol = (int)(pt.X / univHeight); _selectedCell = _multiverse[_selectedRow][_selectedCol]; // if left-click then perform correct operation (if any) if (e.LeftButton == MouseButtonState.Pressed) { if (_copySource != null) { UniverseRunner target = _selectedCell .UniverseRunner; target.PhysicsRules.CopyData( _copySource.PhysicsRules.Data); target.Randomize(_rnd); } else if (_crossoverParent1 != null && _crossoverParent2 == null) { _crossoverParent2 = _selectedCell.UniverseRunner; } else { UniverseRunner target = _selectedCell.UniverseRunner; target.Crossover(_rnd, _crossoverParent1, _crossoverParent2); target.Randomize(_rnd); } } }
/// <summary> /// The deselect button was clicked. /// </summary> /// <param name="sender">The sending object.</param> /// <param name="e">The event.</param> private void BtnDeselect_Click(object sender, RoutedEventArgs e) { _copySource = null; _crossoverParent1 = _crossoverParent2 = null; BtnDeselect.IsEnabled = false; }