Example #1
0
        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);
        }
Example #3
0
        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);
        }
Example #5
0
 public CollisionObject()
 {
     Rect = new CollisionRect(new Azul.Rect());
     Box  = new BoxSprite(new Azul.Rect(1, 1, 1, 1));
 }
Example #6
0
 public void UpdateCollisionObject(CollisionRect rect)
 {
     Rect = rect;
     Box.Set(Rect.x, Rect.y, Rect.width, Rect.height);
     Box.Update();
 }
Example #7
0
 public CollisionObject(ProxySprite pProxySprite)
 {
     Rect = new CollisionRect(pProxySprite.GetRect());
     Box  = new BoxSprite(Rect);
 }
Example #8
0
 public CollisionRect(CollisionRect pRect) : base(pRect)
 {
 }
Example #9
0
        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);
        }