//used to draw collidable primitives that a value associated with them e.g. health
 public PickupCollidablePrimitiveObject(string id, ActorType actorType, Transform3D transform,
                                        EffectParameters effectParameters, StatusType statusType, IVertexData vertexData,
                                        ICollisionPrimitive collisionPrimitive, ObjectManager objectManager, PickupParameters pickupParameters)
     : base(id, actorType, transform, effectParameters, statusType, vertexData, collisionPrimitive, objectManager)
 {
     this.pickupParameters = pickupParameters;
 }
        private Actor3D CheckCollision(GameTime gameTime, Actor3D actor, Ray mouseRay)
        {
            if (actor is CollidablePrimitiveObject)
            {
                collisionPrimitive = (actor as CollidablePrimitiveObject).CollisionPrimitive;
                if (collisionPrimitive.Intersects(mouseRay))
                {
                    return(actor);
                }
            }
            else if (actor is SimpleZoneObject)
            {
                collisionPrimitive = (actor as SimpleZoneObject).CollisionPrimitive;
                if (collisionPrimitive.Intersects(mouseRay))
                {
                    return(actor);
                }
            }
            else //PrimitiveObject - uses basic BoundingSphere created for camera frustum culling
            {
                float?result = mouseRay.Intersects(actor.BoundingSphere);

                if (result != null)
                {
                    return(actor);
                }
            }

            return(null);
        }
 public CollidableZoneObject(string id, ActorType actorType,
                             StatusType statusType, Transform3D transform,
                             ICollisionPrimitive collisionPrimitive)
     : base(id, actorType, statusType, transform, null)
 {
     this.collisionPrimitive = collisionPrimitive;
 }
Example #4
0
        //tests if the bounding sphere for this primitive, when moved, will intersect with the collisionPrimitive passed into the method
        public bool Intersects(ICollisionPrimitive collisionPrimitive, Vector3 translation)
        {
            BoundingSphere projectedSphere = this.boundingSphere;

            projectedSphere.Center += translation;
            return(collisionPrimitive.Intersects(projectedSphere));
        }
 //used to make a pick collidable primitives from an existing PrimitiveObject (i.e. the type returned by the PrimitiveFactory
 public PickupCollidablePrimitiveObject(PrimitiveObject primitiveObject, ICollisionPrimitive collisionPrimitive,
                                        ObjectManager objectManager, PickupParameters pickupParameters, EventDispatcher eventDispatcher)
     : base(primitiveObject, collisionPrimitive, objectManager, eventDispatcher)
 {
     this.eventDispatcher  = eventDispatcher;
     this.pickupParameters = pickupParameters;
 }
        private void DrawBoundingPrimitive(GameTime gameTime, ICollisionPrimitive collisionPrimitive, Color color)
        {
            if (collisionPrimitive is SphereCollisionPrimitive)
            {
                int primitiveCount = 0;
                vertexData = new VertexData <VertexPositionColor>(VertexFactory.GetSphereVertices(1, 10, out primitiveCount),
                                                                  PrimitiveType.LineStrip, primitiveCount);

                coll  = collisionPrimitive as SphereCollisionPrimitive;
                world = Matrix.Identity * Matrix.CreateScale(coll.BoundingSphere.Radius) * Matrix.CreateTranslation(coll.BoundingSphere.Center);
                wireframeEffect.World        = world;
                wireframeEffect.View         = cameraManager.ActiveCamera.View;
                wireframeEffect.Projection   = cameraManager.ActiveCamera.Projection;
                wireframeEffect.DiffuseColor = Color.White.ToVector3();
                wireframeEffect.CurrentTechnique.Passes[0].Apply();
                vertexData.Draw(gameTime, wireframeEffect);
            }
            else
            {
                BoxCollisionPrimitive coll    = collisionPrimitive as BoxCollisionPrimitive;
                BoundingBoxBuffers    buffers = BoundingBoxDrawer.CreateBoundingBoxBuffers(coll.BoundingBox, GraphicsDevice);
                BoundingBoxDrawer.DrawBoundingBox(buffers, wireframeEffect, GraphicsDevice,
                                                  cameraManager.ActiveCamera);
            }
        }
        //tests if the bounding box for this primitive, when moved, will intersect with the collisionPrimitive passed into the method
        public bool Intersects(ICollisionPrimitive collisionPrimitive, Vector3 translation)
        {
            BoundingBox projectedBox = this.boundingBox;

            projectedBox.Max += translation;
            projectedBox.Min += translation;
            return(collisionPrimitive.Intersects(projectedBox));
        }
Example #8
0
 //used to make a collidable primitives from an existing PrimitiveObject (i.e. the type returned by the PrimitiveFactory
 public CollidablePrimitiveObject(PrimitiveObject primitiveObject, ICollisionPrimitive collisionPrimitive, ObjectManager objectManager)
     : base(primitiveObject.ID, primitiveObject.ActorType, primitiveObject.Transform, primitiveObject.EffectParameters,
            primitiveObject.StatusType, primitiveObject.VertexData)
 {
     this.collisionPrimitive = collisionPrimitive;
     //unusual to pass this in but we use it to test for collisions - see Update();
     this.objectManager = objectManager;
 }
 //used to draw collidable primitives that have a texture i.e. use VertexPositionColor vertex types only
 public CollidablePrimitiveObject(string id, ActorType actorType, Transform3D transform,
                                  EffectParameters effectParameters, StatusType statusType, IVertexData vertexData,
                                  ICollisionPrimitive collisionPrimitive, ObjectManager objectManager)
     : base(id, actorType, transform, effectParameters, statusType, vertexData)
 {
     this.collisionPrimitive = collisionPrimitive;
     //unusual to pass this in but we use it to test for collisions - see Update();
     this.objectManager = objectManager;
 }
Example #10
0
        public ICollisionDetector Create(ICollisionPrimitive paramA, ICollisionPrimitive paramB)
        {
            var result = InnerCreate(paramA, paramB);

            if(result is NullCollisionDetector)
            {
                result = InnerCreate(paramB, paramA);
            }

            return result;
        }
        //used to make a player collidable primitives from an existing PrimitiveObject (i.e. the type returned by the PrimitiveFactory
        public PlayerCollidablePrimitiveObject(PrimitiveObject primitiveObject, ICollisionPrimitive collisionPrimitive,
                                               ManagerParameters managerParameters, Keys[] moveKeys, float moveSpeed, float rotationSpeed)
            : base(primitiveObject, collisionPrimitive, managerParameters.ObjectManager)
        {
            this.moveKeys      = moveKeys;
            this.moveSpeed     = moveSpeed;
            this.rotationSpeed = rotationSpeed;

            //for input
            this.managerParameters = managerParameters;
        }
Example #12
0
        ICollisionDetector InnerCreate(ICollisionPrimitive paramA, ICollisionPrimitive paramB)
        {
            switch (paramA.Shape)
            {
                case CollisionShape.Sphere:
                    switch (paramB.Shape)
                    {
                        case CollisionShape.Sphere:
                            var result = new SphereSphereCollisionDetector();
                            result.ParamA = paramA as SphereCollisionPrimitive;
                            result.ParamB = paramB as SphereCollisionPrimitive;
                            return result;
                        default:
                            break;
                    }
                    break;
                case CollisionShape.Cylinder:
                    switch (paramB.Shape)
                    {
                        case CollisionShape.Cylinder:
                            {
                                var result = new CylinderCylinderCollisionDetector();
                                result.ParamA = paramA as CylinderCollisionPrimitive;
                                result.ParamB = paramB as CylinderCollisionPrimitive;
                                return result;
                            }
                        case CollisionShape.AABB:
                            {
                                var result = new CylinderAABBCollisionDetector();
                                result.Cylinder = paramA as CylinderCollisionPrimitive;
                                result.AABB = paramB as AABBCollisionPrimitive;
                                return result;
                            }
                    }
                    break;
                case CollisionShape.Ray:
                    switch (paramB.Shape)
                    {
                        case CollisionShape.Sphere:
                            {
                                var result = new RaySphereCollisionDetector();
                                result.Ray = paramA as RayCollisionPrimitive;
                                result.Sphere = paramB as SphereCollisionPrimitive;
                                return result;
                            }
                    }
                    break;
                default:
                    break;
            }

            return new NullCollisionDetector();
        }
        public CollidablePlayerObject(string id, ActorType actorType, StatusType statusType, Transform3D transform,
                                      EffectParameters effectParameters, IVertexData vertexData,
                                      ICollisionPrimitive collisionPrimitive, ObjectManager objectManager,
                                      Keys[] moveKeys, float moveSpeed, float rotationSpeed, KeyboardManager keyboardManager, Game game)
            : base(id, actorType, statusType, transform, effectParameters, vertexData, collisionPrimitive, objectManager)
        {
            this.moveKeys      = moveKeys;
            this.moveSpeed     = moveSpeed;
            this.rotationSpeed = 0.1f;

            //for movement
            this.keyboardManager = keyboardManager;
            this.game            = game;

            this.deathCount = 0;
        }
 private void DrawCollisionPrimitive(GameTime gameTime, ICollisionPrimitive collisionPrimitive)
 {
     if (collisionPrimitive is SphereCollisionPrimitive)
     {
         SphereCollisionPrimitive coll = collisionPrimitive as SphereCollisionPrimitive;
         this.wireframeEffect.World        = Matrix.Identity * Matrix.CreateScale(coll.BoundingSphere.Radius) * Matrix.CreateTranslation(coll.BoundingSphere.Center);
         this.wireframeEffect.View         = this.managerParameters.CameraManager.ActiveCamera.View;
         this.wireframeEffect.Projection   = this.managerParameters.CameraManager.ActiveCamera.ProjectionParameters.Projection;
         this.wireframeEffect.DiffuseColor = sphereColor.ToVector3();
         this.wireframeEffect.CurrentTechnique.Passes[0].Apply();
         sphereVertexData.Draw(gameTime, this.wireframeEffect);
     }
     else
     {
         BoxCollisionPrimitive coll    = collisionPrimitive as BoxCollisionPrimitive;
         BoundingBoxBuffers    buffers = BoundingBoxDrawer.CreateBoundingBoxBuffers(coll.BoundingBox, this.GraphicsDevice, boxColor);
         BoundingBoxDrawer.DrawBoundingBox(buffers, this.wireframeEffect, this.GraphicsDevice, this.managerParameters.CameraManager.ActiveCamera);
     }
 }
Example #15
0
 public PlatformCollidablePrimitiveObject(PrimitiveObject primitiveObject, ICollisionPrimitive collisionPrimitive,
                                          ManagerParameters managerParameters, EventDispatcher eventDispatcher)
     : base(primitiveObject, collisionPrimitive, managerParameters.ObjectManager, eventDispatcher)
 {
 }
 public CollidableProjectile(string id, ActorType actorType, StatusType statusType, Transform3D transform3D, EffectParameters effectParameters, IVertexData vertexData, ICollisionPrimitive collisionPrimitive, ObjectManager objectManager) : base(id, actorType, statusType, transform3D, effectParameters, vertexData, collisionPrimitive, objectManager)
 {
 }
Example #17
0
 public CollidableEnemy(string id, ActorType actorType, StatusType statusType, Transform3D transform, EffectParameters effectParameters, IVertexData vertexData, ICollisionPrimitive collisionPrimitive, ObjectManager objectManager, float speed, float range, CollidablePlayerObject player)
     : base(id, actorType, statusType, transform, effectParameters, vertexData, collisionPrimitive, objectManager)
 {
     this.speed  = speed;
     this.range  = range;
     this.player = player;
 }
Example #18
0
 public bool Intersects(ICollisionPrimitive collisionPrimitive)
 {
     return(collisionPrimitive.Intersects(this.boundingSphere));
 }
        public PlayerCollidablePrimitiveObject(string id, ActorType actorType, Transform3D transform, EffectParameters effectParameters,
                                               StatusType statusType, IVertexData vertexData, ICollisionPrimitive collisionPrimitive,
                                               ManagerParameters managerParameters,
                                               Keys[] moveKeys, float moveSpeed, float rotationSpeed)
            : base(id, actorType, transform, effectParameters, statusType, vertexData, collisionPrimitive, managerParameters.ObjectManager)
        {
            this.moveKeys      = moveKeys;
            this.moveSpeed     = moveSpeed;
            this.rotationSpeed = rotationSpeed;

            //for input
            this.managerParameters = managerParameters;
        }
Example #20
0
 public bool Intersects(ICollisionPrimitive collisionPrimitive)
 {
     return(collisionPrimitive.Intersects(boundingBox));
 }
 //used to make a pick collidable primitives from an existing PrimitiveObject (i.e. the type returned by the PrimitiveFactory
 public PickupCollidablePrimitiveObject(PrimitiveObject primitiveObject, ICollisionPrimitive collisionPrimitive,
                                        ObjectManager objectManager, PickupParameters pickupParameters)
     : base(primitiveObject, collisionPrimitive, objectManager)
 {
     this.pickupParameters = pickupParameters;
 }
 public MovingObstacleSpawner(string id, ActorType actorType, StatusType statusType, Transform3D transform3D,
                              EffectParameters effectParameters, IVertexData vertexData, ICollisionPrimitive collisionPrimitive, ObjectManager objectManager)
     : base(id, actorType, statusType, transform3D, effectParameters, vertexData, collisionPrimitive, objectManager)
 {
 }
Example #23
0
 public CollidablePlayerObject(string id, ActorType actorType, StatusType statusType, Transform3D transform,
                               EffectParameters effectParameters, IVertexData vertexData, ICollisionPrimitive collisionPrimitive,
                               ObjectManager objectManager, Keys[] moveKeys, KeyboardManager keyboardManager)
     : base(id, actorType, statusType, transform, effectParameters, vertexData, collisionPrimitive, objectManager)
 {
     this.moveKeys        = moveKeys;
     this.keyboardManager = keyboardManager;
 }
Example #24
0
 public PlatformCollidablePrimitiveObject(string id, ActorType actorType, Transform3D transform, EffectParameters effectParameters,
                                          StatusType statusType, IVertexData vertexData, ICollisionPrimitive collisionPrimitive,
                                          ManagerParameters managerParameters, EventDispatcher eventDispatcher)
     : base(id, actorType, transform, effectParameters, statusType, vertexData, collisionPrimitive, managerParameters.ObjectManager, eventDispatcher)
 {
     this.currentPosition = this.previousPosition = this.Transform.Translation;
 }
Example #25
0
 public static CollisionPrimitiveModel ToModel(this ICollisionPrimitive obj) =>
 new CollisionPrimitiveModel
 {
     Kind = obj.Kind, Parameters = obj.Parameters, Pose = obj.Pose.ToModel()
 };