private void _engine_ObjectMotion(object sender, ObjectEventArgs e) { this.Dispatcher.Invoke((Action)(() => { Transform3DGroup TransformGroup = new Transform3DGroup(); Vector3D offsetVector = new Vector3D(e.Obj.Position.X * -1, e.Obj.Position.Y, e.Obj.Position.Z); TranslateTransform3D TranslateTransform = new TranslateTransform3D(offsetVector * ViewportScalingFactor); TransformGroup.Children.Add(TranslateTransform); e.Obj.Bounds = TranslateTransform.TransformBounds(_gameObjects[e.Obj].Content.Bounds); int objIndex = this.hlxViewport.Children.IndexOf(_gameObjects[e.Obj]); this.hlxViewport.Children[objIndex].Transform = TransformGroup; if (e.Obj.TrackCollisions) { foreach (var gameObject in _gameObjects.Keys.Where(x => x != e.Obj && x.Model.IsGameWorld == false).ToList()) { if (gameObject.Bounds.IntersectsWith(e.Obj.Bounds)) { _engine.PuckCollision(gameObject); #if DEBUG using (StreamWriter w = File.AppendText("log.txt")) { Startup.Log("Collision:", w); Startup.Log("Puck Location: " + offsetVector.ToString(), w); Startup.Log("Collided with: " + gameObject.ObjectType + " at " + gameObject.Position.ToString(), w); } #endif } } } })); }