public bool Intersect(CollisionRect BulletRect) { bool status = false; float Obj_minx = x - width / 2; float Obj_maxx = x + width / 2; float Obj_miny = y - height / 2; float Obj_maxy = y + height / 2; float Bullet_minx = BulletRect.x - BulletRect.width / 2; float Bullet_maxx = BulletRect.x + BulletRect.width / 2; float Bullet_miny = BulletRect.y - BulletRect.height / 2; float Bullet_maxy = BulletRect.y + BulletRect.height / 2; // Trivial reject if ((Bullet_maxx < Obj_minx) || (Bullet_minx > Obj_maxx) || (Bullet_maxy < Obj_miny) || (Bullet_miny > Obj_maxy)) { status = false; } else { status = true; } return(status); }
public override void Update(GameTime gameTime, Rectangle clientBounds) { position.X = Mouse.GetState().X - 20; position.Y = Mouse.GetState().Y - 20; currentFrame.X = CollisionRect.Contains(new Point((int)position.X, (int)position.Y)) ? 1 : 0; base.Update(gameTime, clientBounds); }
public void Union(CollisionRect rect) { if (height == 0 && width == 0) { x = rect.x; y = rect.y; width = rect.width; height = rect.height; } else { float minX; float minY; float maxX; float maxY; if (x - width / 2 < rect.x - rect.width / 2) { minX = x - width / 2; } else { minX = rect.x - rect.width / 2; } if ((x + width / 2) > (rect.x + rect.width / 2)) { maxX = (x + width / 2); } else { maxX = (rect.x + rect.width / 2); } if ((y + height / 2) > (rect.y + rect.height / 2)) { maxY = (y + height / 2); } else { maxY = (rect.y + rect.height / 2); } if (y - height / 2 < rect.y - rect.height / 2) { minY = y - height / 2; } else { minY = rect.y - rect.height / 2; } width = (maxX - minX); height = (maxY - minY); x = minX + width / 2; y = minY + height / 2; } }
private bool tireCollisionWithCar(Vector tirePos, PCar car, out Vector normal, double multR = 1) { CollisionCircle collisionTire = new CollisionCircle(tirePos, game.TireRadius * multR); CollisionRect collisionCar = new CollisionRect(car); CollisionInfo collision = new CollisionInfo(collisionTire, collisionCar); if (CollisionDetector.CheckCollision(collision)) { normal = collision.NormalObj1; return(true); } normal = null; return(false); }
public CollisionObject() { Rect = new CollisionRect(new Azul.Rect()); Box = new BoxSprite(new Azul.Rect(1, 1, 1, 1)); }
public void UpdateCollisionObject(CollisionRect rect) { Rect = rect; Box.Set(Rect.x, Rect.y, Rect.width, Rect.height); Box.Update(); }
public CollisionObject(ProxySprite pProxySprite) { Rect = new CollisionRect(pProxySprite.GetRect()); Box = new BoxSprite(Rect); }
public CollisionRect(CollisionRect pRect) : base(pRect) { }
public override void Update(GameTime gameTime, Rectangle clientBounds) { #region Нанесение урона //позиция центра башни Vector2 centerPos = new Vector2(position.X + podiumFrameSize.X / 2, position.Y + podiumFrameSize.Y / 2); //общее количество миллисекунд с начала суток _timeSinceLastFrame += 16; #region Если цель не захвачена if (currentTarget == null) { for (int i = 0; i < SpriteManager.zombieList.Count; i++) { var distance = Vector2.Distance(centerPos, new Vector2(SpriteManager.zombieList[i].CollisionRect.Center.X, SpriteManager.zombieList[i].CollisionRect.Center.Y)); if (distance < Range && SpriteManager.zombieList[i].Health >= 0) { currentTarget = SpriteManager.zombieList[i]; break; } } } #endregion #region Если цель захвачена if (currentTarget != null) { var direction = (new Vector2(currentTarget.CollisionRect.Center.X, currentTarget.CollisionRect.Center.Y) - centerPos); angle = (float)Math.Atan2(direction.Y, direction.X) + MathHelper.Pi; float distance = Vector2.Distance(centerPos, new Vector2(currentTarget.CollisionRect.Center.X, currentTarget.CollisionRect.Center.Y)); if (distance < Range && _timeSinceLastFrame >= TowerSpeed && currentTarget.Health >= 0) { _timeSinceLastFrame = 0; if (currentTarget.Health >= 0) { if (_fireCounter == 0) { showFire = true; } currentTarget.Health -= Damage; #region Splash if (SplashDamage != 0) { for (int i = 0; i < SpriteManager.zombieList.Count; i++) { var distanceBetweenZombies = Vector2.Distance( new Vector2(currentTarget.CollisionRect.Center.X, currentTarget.CollisionRect.Center.Y), new Vector2(SpriteManager.zombieList[i].CollisionRect.Center.X, SpriteManager.zombieList[i].CollisionRect.Center.Y)); if (distanceBetweenZombies < SplashRange) { if (currentTarget == SpriteManager.zombieList[i]) { continue; } SpriteManager.zombieList[i].Health -= SplashDamage; } } } #endregion } else { currentTarget = null; } } else { currentTarget = null; } } #endregion #endregion #region Огонь if (showFire) { if (_fireCounter == 5) { showFire = false; _fireCounter = 0; } else { _fireCounter++; } } #endregion #region Табличка характеристик башни mouseState = Mouse.GetState(); mousePos = new Point(mouseState.X, mouseState.Y); if (CollisionRect.Contains(mousePos) && !onMouse) { showTowerTable = true; } else { showTowerTable = false; } #endregion base.Update(gameTime, clientBounds); }