示例#1
0
        internal static void _SetCollisionMask(ModelVisual3D visual, CollisionMask value)
        {
            if (visual == null) throw new ArgumentNullException("visual");

            TerrianCollisionMask3D collisionMask = (value as TerrianCollisionMask3D);
            if (collisionMask != null)
            {
                if (!(visual.Content is GeometryModel3D))
                    throw new InvalidOperationException("Current only GeometryModel3D models supported for TerrianCollisionMask3D.");
                collisionMask.Visual = visual;
                visual.SetValue(World.CollisionMaskProperty, value);
            }
        }
示例#2
0
        public void Initialise(World world)
        {
            if (_isInitialised)
                return;

            if (world == null) throw new ArgumentNullException("world");

            _world = world;

            _collision = OnInitialise(world);

            if (_collision == null)
            {
                _collision = new NullCollision(_world);
            }

            _body = new CBody(_collision.NewtonCollision);
            _body.Destructor += _body_Destructor;
            _body.AutoFreeze = this.AutoPause;
            _body.UserData = this;
            _body.Matrix = _visualMatrix.Matrix;

            OnInitialiseEnd();  // this might adjust the _body.Matrix property

            // not initialised yet, nothing should be called on property changed event
            this.Transform = new MatrixTransform3D(_body.Matrix);

            _body.SetTransform += body_setTransform;
            _body.ApplyForceAndTorque += body_ApplyForceAndTorque;

            CalculateMass(this.Mass);

            world.AddBody(this);
            _isInitialised = true;
        }
示例#3
0
        public static void SetCollisionMask(Geometry3D geometry, CollisionMask value)
        {
            if (geometry == null) throw new ArgumentNullException("geometry");

            geometry.SetValue(CollisionMaskProperty, value);
        }