public bool BoundingCollision(CollidableObject sprite)
 {
     if (collidable && sprite.collidable && alive && sprite.alive && !sprite.guid.Equals(guid))
     {
         if (GetBounds().Intersects(sprite.GetBounds()))
         {
             return true;
         }
     }
     return false;
 }
Example #2
0
 public virtual int CheckCollision(CollidableObject sprite)
 {
     int score = 0;
     if (!originiator.Compare(sprite) && collisionTimer == 0 && Collision(sprite))
     {
         score = GetDamage(sprite, false);
     }
     //added to stop bullets living for ages and looking silly
     totalLife += 1;
     if (totalLife > 1000)
     {
         totalLife = 0;
         alive = false;
     }
     return score;
 }
Example #3
0
        public override int CheckCollision(CollidableObject sprite)
        {
            int score = 0;

            if (!originiator.Compare(sprite) && collisionTimer == 0.0f && Collision(sprite))
            {
                maxCollision += 1;
                //if the sprite is not destroyable then bounce the bullet
                if (!sprite.destroyable)
                {
                    reflection.X = 1;
                    reflection.Y = 1;

                    if (lastSideCollided == 1 || lastSideCollided == 3)
                    {
                        reflection.X = 1;
                        reflection.Y = 0;
                    }
                    if (lastSideCollided == 0 || lastSideCollided == 2)
                    {
                        reflection.X = 0;
                        reflection.Y = 1;
                    }

                    lastSideCollided = -1;
                    if (reflection.X == 1 && reflection.Y == 1) alive = false;
                }
                else
                {
                    score = GetDamage(sprite, false);
                    maxCollision = 0;
                }
            }
            if (maxCollision == 8)
            {
                maxCollision = 0;
                alive = false;
            }
            return score;
        }
        public bool HitTest(CollidableObject sprite)
        {
            bool collided = false;
            if (collidable && sprite.collidable && alive && sprite.alive && !sprite.guid.Equals(guid) && Collision.Touches(sprite.GetBounds(), GetBounds()))
            {
                Vector2 intersectionDepth = Collision.GetIntersectionDepth(GetBounds(), sprite.GetBounds());
                if (intersectionDepth != Vector2.Zero)
                {
                    float absDepthX = Math.Abs(intersectionDepth.X);
                    float absDepthY = Math.Abs(intersectionDepth.Y);

                    if (absDepthY < absDepthX)
                    {
                        sprite.lastSideTouched = 0;
                        position = new Vector2(position.X, position.Y + intersectionDepth.Y);
                        collided = true;
                    }
                    else
                    {
                        sprite.lastSideTouched = 1;
                        position = new Vector2(position.X + intersectionDepth.X, position.Y);
                        collided = true;
                    }
                }
                else
                    sprite.lastSideTouched = -1;
            }

            //if collision has happened then remove energy
            if (collided)
            {
                if(currentEnergy>0)
                    currentEnergy -= sprite.power;
                if(sprite.currentEnergy>0)
                    sprite.currentEnergy -= power;
            }
            return collided;
        }
Example #5
0
 protected int GetDamage(CollidableObject sprite, bool aliveStatus)
 {
     alive = aliveStatus;
     setEnergy(sprite);
     return sprite.CheckEnergy();
 }
Example #6
0
 protected bool Collision(CollidableObject sprite)
 {
     bool collide = BoundingCollision(sprite);
     collided = collide;
     return collide;
 }
        public bool TextureCollision(CollidableObject sprite)
        {
            Matrix spriteAMatrix = Matrix.CreateTranslation(-center.X, -center.Y, 0) * Matrix.CreateRotationZ(rotation) * Matrix.CreateScale(scale) * Matrix.CreateTranslation(position.X, position.Y, 0);
            Matrix spriteBMatrix = Matrix.CreateTranslation(-sprite.center.X, -sprite.center.Y, 0) * Matrix.CreateRotationZ(sprite.rotation) * Matrix.CreateScale(sprite.scale) * Matrix.CreateTranslation(sprite.position.X, sprite.position.Y, 0);
            Vector2 collisionCheck = Collision.TexturesCollide(pixelData[currentFrame.X, currentFrame.Y], spriteAMatrix, sprite.pixelData[sprite.currentFrame.X, sprite.currentFrame.Y], spriteBMatrix);
            if (collisionCheck.X > -1 && collisionCheck.Y > -1)
            {
                return true;
            }

            return false;
        }
 public void setEnergy(CollidableObject sprite)
 {
     if(!energySaverOn)
         currentEnergy -= sprite.power;
     if (!sprite.energySaverOn)
         sprite.currentEnergy -= power;
 }
        public void ResolveIntersecting(CollidableObject sprite)
        {
            foreach (Vector2 intersectingPoint in sprite.lastSideTouched)
            {
                if (intersectingPoint.X > -1 && intersectingPoint.Y > -1)
                {
                    float newX = intersectingPoint.X - position.X;
                    float newY = intersectingPoint.Y - position.Y;
                    position += new Vector2(newX, newY);
                    if (newX > 0)
                        position.X += (float)(center.X * 1.01);
                    else
                        position.X -= (float)(center.X * 1.01);

                    if (newY > 0)
                        position.Y += (float)(center.Y * 1.01);
                    else
                        position.Y -= (float)(center.Y * 1.01);
                }
            }
        }
 public void ResolveBounding(CollidableObject sprite)
 {
     Vector2 intersectionDepth = Collision.GetIntersectionDepth(GetBounds(), sprite.GetBounds());
     if (intersectionDepth != Vector2.Zero)
     {
         float absDepthX = Math.Abs(intersectionDepth.X);
         float absDepthY = Math.Abs(intersectionDepth.Y);
         if (absDepthY < absDepthX)
             position = new Vector2(position.X, position.Y + (intersectionDepth.Y * 1.05f));
         else
             position = new Vector2(position.X + (intersectionDepth.X * 1.05f), position.Y);
     }
 }
 private int CheckProjectileCollisions(CollidableObject sprite, Projectile projectile)
 {
     int score = 0;
     if (projectile.alive)
         score += projectile.CheckCollision(sprite);
     return score;
 }