Beispiel #1
0
        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
                        }
                    }
                }
            }));
        }