private void Window_Loaded(object sender, RoutedEventArgs e) { try { #region Init World _boundryMin = new Point3D(-100, -100, -100); _boundryMax = new Point3D(100, 100, 100); _world = new World(); _world.Updating += new EventHandler<WorldUpdatingArgs>(World_Updating); List<Point3D[]> innerLines, outerLines; _world.SetCollisionBoundry(out innerLines, out outerLines, _boundryMin, _boundryMax); // Don't bother with the boundry lines. It looks funny with a partial viewport //// Draw the lines //_boundryLines = new ScreenSpaceLines3D(true); //_boundryLines.Thickness = 1d; //_boundryLines.Color = _colors.BoundryLines; //_viewport.Children.Add(_boundryLines); //foreach (Point3D[] line in innerLines) //{ // _boundryLines.AddLine(line[0], line[1]); //} #endregion #region Materials _materialManager = new MaterialManager(_world); // Ship var material = new Game.Newt.v2.NewtonDynamics.Material(); _material_Ship = _materialManager.AddMaterial(material); //_materialManager.RegisterCollisionEvent(_material_Terrain, _material_Bean, Collision_BeanTerrain); #endregion #region Trackball // Trackball _trackball = new TrackBallRoam(_camera); //_trackball.KeyPanScale = 15d; _trackball.EventSource = pnlViewport; //NOTE: If this control doesn't have a background color set, the trackball won't see events (I think transparent is ok, just not null) _trackball.AllowZoomOnMouseWheel = true; _trackball.Mappings.AddRange(TrackBallMapping.GetPrebuilt(TrackBallMapping.PrebuiltMapping.MouseComplete)); //_trackball.GetOrbitRadius += new GetOrbitRadiusHandler(Trackball_GetOrbitRadius); _trackball.ShouldHitTestOnOrbit = false; // Trackball _trackballNeural = new TrackBallRoam(_cameraNeural); //_trackballNeural.KeyPanScale = 15d; _trackballNeural.EventSource = pnlViewportNeural; //NOTE: If this control doesn't have a background color set, the trackball won't see events (I think transparent is ok, just not null) _trackballNeural.AllowZoomOnMouseWheel = true; _trackballNeural.Mappings.AddRange(TrackBallMapping.GetPrebuilt(TrackBallMapping.PrebuiltMapping.MouseComplete)); //_trackballNeural.GetOrbitRadius += new GetOrbitRadiusHandler(Trackball_GetOrbitRadius); _trackballNeural.ShouldHitTestOnOrbit = false; #endregion #region Map //_map = new Map(_viewport, null, _world); //_map.SnapshotFequency_Milliseconds = 125; //_map.SnapshotMaxItemsPerNode = 10; //_map.ShouldBuildSnapshots = false;// true; //_map.ShouldShowSnapshotLines = false; //_map.ShouldSnapshotCentersDrift = true; #endregion #region Fields _radiation = new RadiationField() { AmbientRadiation = 0d, }; _gravityField = new GravityFieldUniform(); #endregion // Trackball Controls SetupGravityTrackball(); UpdateGravity(); _world.UnPause(); } catch (Exception ex) { MessageBox.Show(ex.ToString(), this.Title, MessageBoxButton.OK, MessageBoxImage.Error); } }
private void Window_Loaded(object sender, RoutedEventArgs e) { try { #region Trackball // Trackball _trackball = new TrackBallRoam(_camera); _trackball.KeyPanScale = 1d; _trackball.EventSource = grdViewPort; //NOTE: If this control doesn't have a background color set, the trackball won't see events (I think transparent is ok, just not null) _trackball.AllowZoomOnMouseWheel = true; #region copied from MouseComplete_NoLeft - middle button changed TrackBallMapping complexMapping = null; // Middle Button complexMapping = new TrackBallMapping(CameraMovement.RotateAroundLookDirection_AutoScroll); complexMapping.Add(MouseButton.Middle); complexMapping.Add(new Key[] { Key.LeftCtrl, Key.RightCtrl }); complexMapping.Add(new Key[] { Key.LeftAlt, Key.RightAlt }); _trackball.Mappings.Add(complexMapping); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.RotateAroundLookDirection, MouseButton.Middle, new Key[] { Key.LeftCtrl, Key.RightCtrl })); complexMapping = new TrackBallMapping(CameraMovement.Zoom_AutoScroll); complexMapping.Add(MouseButton.Middle); complexMapping.Add(new Key[] { Key.LeftShift, Key.RightShift }); complexMapping.Add(new Key[] { Key.LeftAlt, Key.RightAlt }); _trackball.Mappings.Add(complexMapping); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.Zoom, MouseButton.Middle, new Key[] { Key.LeftShift, Key.RightShift })); //retVal.Add(new TrackBallMapping(CameraMovement.Pan_AutoScroll, MouseButton.Middle)); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.Pan, MouseButton.Middle)); // Left+Right Buttons (emulate middle) complexMapping = new TrackBallMapping(CameraMovement.RotateAroundLookDirection_AutoScroll); complexMapping.Add(MouseButton.Left); complexMapping.Add(MouseButton.Right); complexMapping.Add(new Key[] { Key.LeftCtrl, Key.RightCtrl }); complexMapping.Add(new Key[] { Key.LeftAlt, Key.RightAlt }); _trackball.Mappings.Add(complexMapping); complexMapping = new TrackBallMapping(CameraMovement.RotateAroundLookDirection); complexMapping.Add(MouseButton.Left); complexMapping.Add(MouseButton.Right); complexMapping.Add(new Key[] { Key.LeftCtrl, Key.RightCtrl }); _trackball.Mappings.Add(complexMapping); complexMapping = new TrackBallMapping(CameraMovement.Zoom_AutoScroll); complexMapping.Add(MouseButton.Left); complexMapping.Add(MouseButton.Right); complexMapping.Add(new Key[] { Key.LeftShift, Key.RightShift }); complexMapping.Add(new Key[] { Key.LeftAlt, Key.RightAlt }); _trackball.Mappings.Add(complexMapping); complexMapping = new TrackBallMapping(CameraMovement.Zoom); complexMapping.Add(MouseButton.Left); complexMapping.Add(MouseButton.Right); complexMapping.Add(new Key[] { Key.LeftShift, Key.RightShift }); _trackball.Mappings.Add(complexMapping); //complexMapping = new TrackBallMapping(CameraMovement.Pan_AutoScroll); complexMapping = new TrackBallMapping(CameraMovement.Pan); complexMapping.Add(MouseButton.Left); complexMapping.Add(MouseButton.Right); _trackball.Mappings.Add(complexMapping); // Right Button complexMapping = new TrackBallMapping(CameraMovement.RotateInPlace_AutoScroll); complexMapping.Add(MouseButton.Right); complexMapping.Add(new Key[] { Key.LeftCtrl, Key.RightCtrl }); complexMapping.Add(new Key[] { Key.LeftAlt, Key.RightAlt }); _trackball.Mappings.Add(complexMapping); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.RotateInPlace, MouseButton.Right, new Key[] { Key.LeftCtrl, Key.RightCtrl })); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.Orbit_AutoScroll, MouseButton.Right, new Key[] { Key.LeftAlt, Key.RightAlt })); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.Orbit, MouseButton.Right)); #endregion //_trackball.Mappings.AddRange(TrackBallMapping.GetPrebuilt(TrackBallMapping.PrebuiltMapping.Keyboard_ASDW_In)); // let the ship get asdw instead of the camera //_trackball.GetOrbitRadius += new GetOrbitRadiusHandler(Trackball_GetOrbitRadius); _trackball.ShouldHitTestOnOrbit = true; #endregion #region Init World _world = new World(); double halfSize = 200d; List<Point3D[]> innerLines, outerLines; _world.SetCollisionBoundry(out innerLines, out outerLines, new Point3D(-halfSize, -halfSize, -halfSize), new Point3D(halfSize, halfSize, halfSize)); #endregion #region Fields _radiation = new RadiationField(); _radiation.AmbientRadiation = 1d; _gravity = new GravityFieldUniform(); #endregion } catch (Exception ex) { MessageBox.Show(ex.ToString(), this.Title, MessageBoxButton.OK, MessageBoxImage.Error); } }
private void Window_Loaded(object sender, RoutedEventArgs e) { try { #region Trackball // Trackball _trackball = new TrackBallRoam(_camera); _trackball.KeyPanScale = 1d; _trackball.EventSource = grdViewPort; //NOTE: If this control doesn't have a background color set, the trackball won't see events (I think transparent is ok, just not null) _trackball.AllowZoomOnMouseWheel = true; #region copied from MouseComplete_NoLeft - middle button changed TrackBallMapping complexMapping = null; // Middle Button complexMapping = new TrackBallMapping(CameraMovement.RotateAroundLookDirection_AutoScroll); complexMapping.Add(MouseButton.Middle); complexMapping.Add(new Key[] { Key.LeftCtrl, Key.RightCtrl }); complexMapping.Add(new Key[] { Key.LeftAlt, Key.RightAlt }); _trackball.Mappings.Add(complexMapping); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.RotateAroundLookDirection, MouseButton.Middle, new Key[] { Key.LeftCtrl, Key.RightCtrl })); complexMapping = new TrackBallMapping(CameraMovement.Zoom_AutoScroll); complexMapping.Add(MouseButton.Middle); complexMapping.Add(new Key[] { Key.LeftShift, Key.RightShift }); complexMapping.Add(new Key[] { Key.LeftAlt, Key.RightAlt }); _trackball.Mappings.Add(complexMapping); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.Zoom, MouseButton.Middle, new Key[] { Key.LeftShift, Key.RightShift })); //retVal.Add(new TrackBallMapping(CameraMovement.Pan_AutoScroll, MouseButton.Middle)); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.Pan, MouseButton.Middle)); // Left+Right Buttons (emulate middle) complexMapping = new TrackBallMapping(CameraMovement.RotateAroundLookDirection_AutoScroll); complexMapping.Add(MouseButton.Left); complexMapping.Add(MouseButton.Right); complexMapping.Add(new Key[] { Key.LeftCtrl, Key.RightCtrl }); complexMapping.Add(new Key[] { Key.LeftAlt, Key.RightAlt }); _trackball.Mappings.Add(complexMapping); complexMapping = new TrackBallMapping(CameraMovement.RotateAroundLookDirection); complexMapping.Add(MouseButton.Left); complexMapping.Add(MouseButton.Right); complexMapping.Add(new Key[] { Key.LeftCtrl, Key.RightCtrl }); _trackball.Mappings.Add(complexMapping); complexMapping = new TrackBallMapping(CameraMovement.Zoom_AutoScroll); complexMapping.Add(MouseButton.Left); complexMapping.Add(MouseButton.Right); complexMapping.Add(new Key[] { Key.LeftShift, Key.RightShift }); complexMapping.Add(new Key[] { Key.LeftAlt, Key.RightAlt }); _trackball.Mappings.Add(complexMapping); complexMapping = new TrackBallMapping(CameraMovement.Zoom); complexMapping.Add(MouseButton.Left); complexMapping.Add(MouseButton.Right); complexMapping.Add(new Key[] { Key.LeftShift, Key.RightShift }); _trackball.Mappings.Add(complexMapping); //complexMapping = new TrackBallMapping(CameraMovement.Pan_AutoScroll); complexMapping = new TrackBallMapping(CameraMovement.Pan); complexMapping.Add(MouseButton.Left); complexMapping.Add(MouseButton.Right); _trackball.Mappings.Add(complexMapping); // Right Button complexMapping = new TrackBallMapping(CameraMovement.RotateInPlace_AutoScroll); complexMapping.Add(MouseButton.Right); complexMapping.Add(new Key[] { Key.LeftCtrl, Key.RightCtrl }); complexMapping.Add(new Key[] { Key.LeftAlt, Key.RightAlt }); _trackball.Mappings.Add(complexMapping); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.RotateInPlace, MouseButton.Right, new Key[] { Key.LeftCtrl, Key.RightCtrl })); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.Orbit_AutoScroll, MouseButton.Right, new Key[] { Key.LeftAlt, Key.RightAlt })); _trackball.Mappings.Add(new TrackBallMapping(CameraMovement.Orbit, MouseButton.Right)); #endregion //_trackball.Mappings.AddRange(TrackBallMapping.GetPrebuilt(TrackBallMapping.PrebuiltMapping.Keyboard_ASDW_In)); // let the ship get asdw instead of the camera //_trackball.GetOrbitRadius += new GetOrbitRadiusHandler(Trackball_GetOrbitRadius); _trackball.ShouldHitTestOnOrbit = true; #endregion #region Init World // Set the size of the world to something a bit random (gets boring when it's always the same size) double halfSize = 50d; _boundryMin = new Point3D(-halfSize, -halfSize, -halfSize); _boundryMax = new Point3D(halfSize, halfSize, halfSize); _world = new World(); _world.Updating += new EventHandler<WorldUpdatingArgs>(World_Updating); List<Point3D[]> innerLines, outerLines; _world.SetCollisionBoundry(out innerLines, out outerLines, _boundryMin, _boundryMax); // Draw the lines _boundryLines = new ScreenSpaceLines3D(true); _boundryLines.Thickness = 1d; _boundryLines.Color = _colors.BoundryLines; _viewport.Children.Add(_boundryLines); foreach (Point3D[] line in innerLines) { _boundryLines.AddLine(line[0], line[1]); } #endregion #region Materials _materialManager = new MaterialManager(_world); // Part Game.Newt.v2.NewtonDynamics.Material material = new Game.Newt.v2.NewtonDynamics.Material(); _material_Part = _materialManager.AddMaterial(material); // Ship material = new Game.Newt.v2.NewtonDynamics.Material(); _material_Ship = _materialManager.AddMaterial(material); //_materialManager.RegisterCollisionEvent(_material_Ship, _material_Asteroid, Collision_Ship); #endregion #region Map _map = new Map(_viewport, null, _world); //_map.SnapshotFequency_Milliseconds = 125; //_map.SnapshotMaxItemsPerNode = 10; _map.ShouldBuildSnapshots = false; //_map.ShouldShowSnapshotLines = true; //_map.ShouldSnapshotCentersDrift = false; #endregion #region Fields _radiation = new RadiationField(); _radiation.AmbientRadiation = 1d; _gravity = new GravityFieldUniform(); #endregion _world.UnPause(); #region Solver Timer _solverTimer = new DispatcherTimer(); _solverTimer.Interval = TimeSpan.FromMilliseconds(trkSimSpeed.Value); _solverTimer.Tick += new EventHandler(SolverTimer_Tick); _solverTimer.IsEnabled = true; #endregion } catch (Exception ex) { MessageBox.Show(ex.ToString(), this.Title, MessageBoxButton.OK, MessageBoxImage.Error); } }
private void EnsureWorldStarted() { if (_world != null) { return; } #region Init World // Set the size of the world to something a bit random (gets boring when it's always the same size) double halfSize = 50d; _boundryMin = new Point3D(-halfSize, -halfSize, -halfSize); _boundryMax = new Point3D(halfSize, halfSize, halfSize); _world = new World(); _world.Updating += new EventHandler<WorldUpdatingArgs>(World_Updating); List<Point3D[]> innerLines, outerLines; _world.SetCollisionBoundry(out innerLines, out outerLines, _boundryMin, _boundryMax); // Draw the lines _boundryLines = new ScreenSpaceLines3D(true); _boundryLines.Thickness = 1d; _boundryLines.Color = _colors.BoundryLines; _viewport.Children.Add(_boundryLines); foreach (Point3D[] line in innerLines) { _boundryLines.AddLine(line[0], line[1]); } #endregion #region Materials _materialManager = new MaterialManager(_world); // Asteroid Game.Newt.v2.NewtonDynamics.Material material = new Game.Newt.v2.NewtonDynamics.Material(); material.Elasticity = .25d; material.StaticFriction = .9d; material.KineticFriction = .75d; _material_Asteroid = _materialManager.AddMaterial(material); // Ship material = new Game.Newt.v2.NewtonDynamics.Material(); material.Elasticity = .75d; material.StaticFriction = .5d; material.KineticFriction = .2d; _material_Bot = _materialManager.AddMaterial(material); // Sand material = new Game.Newt.v2.NewtonDynamics.Material(); material.Elasticity = .5d; material.StaticFriction = .5d; material.KineticFriction = .33d; _material_Sand = _materialManager.AddMaterial(material); _materialManager.RegisterCollisionEvent(_material_Bot, _material_Asteroid, Collision_Ship); _materialManager.RegisterCollisionEvent(_material_Bot, _material_Sand, Collision_Sand); #endregion _map = new Map(_viewport, null, _world); //_map.SnapshotFequency_Milliseconds = 125; //_map.SnapshotMaxItemsPerNode = 10; _map.ShouldBuildSnapshots = false; //_map.ShouldShowSnapshotLines = true; //_map.ShouldSnapshotCentersDrift = false; _radiation = new RadiationField(); _radiation.AmbientRadiation = 1d; _gravity = new GravityFieldUniform(); _world.UnPause(); }