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; }
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; }
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; }
protected int GetDamage(CollidableObject sprite, bool aliveStatus) { alive = aliveStatus; setEnergy(sprite); return sprite.CheckEnergy(); }
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; }