Пример #1
0
        public override bool Collision(Bullet bullet, ref MessageManager msgManager)
        {
            float  x        = (float)bullet.Position.X;
            float  y        = (float)bullet.Position.Y;
            double distance = (Position.X - x) * (Position.X - x) + (Position.Y - y) * (Position.Y - y);

            if (distance > AttckRadiusDouble)
            {
                return(false);
            }
            Vector2D vct = new Vector2D(Position.X - x, Position.Y - y);

            vct.Normalize();
            double ag          = vct.GetAngle();
            int    changecount = currentIndex - firstIndex;
            double oriag       = JudgeBegin - AverageAngle * changecount;

            if (oriag < 0)
            {
                oriag = 360 + oriag;
                if (oriag + JudgeArea > 360)
                {
                    if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea - 360))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea))
                    {
                        return(false);
                    }
                }
            }
            else
            {
                if (oriag - JudgeArea < 0)
                {
                    if (ag < (360 + oriag - JudgeArea) && ag > (oriag + JudgeArea))
                    {
                        return(false);
                    }
                }
                else
                {
                    if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea))
                    {
                        return(false);
                    }
                }
            }
            CollisionMessages.CollisionMasseageNormal mess = new CollisionMessages.CollisionMasseageNormal();
            mess.Position.X = Position.X;
            mess.Position.Y = Position.Y;
            mess.SetColor(0);
            msgManager.AcceptMessage(mess);

            return(true);
        }
Пример #2
0
        public override bool Collision(Bullet bullet, ref MessageManager msgManager)
        {
            float x = (float)bullet.Position.X;
            float y = (float)bullet.Position.Y;
            double distance = (Position.X - x) * (Position.X - x) + (Position.Y - y) * (Position.Y - y);
            if (distance > AttckRadiusDouble)
            {
                return false;
            }
            Vector2D vct = new Vector2D(Position.X - x, Position.Y - y);
            vct.Normalize();
            double ag = vct.GetAngle();
            int changecount = currentIndex - firstIndex;
            double oriag = JudgeBegin - AverageAngle * changecount;
            if (oriag < 0)
            {
                oriag = 360 + oriag;
                if (oriag + JudgeArea > 360)
                {
                    if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea - 360))
                        return false;
                }
                else
                {
                    if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea))
                        return false;
                }
            }
            else
            {
                if (oriag - JudgeArea < 0)
                {
                    if (ag < (360 + oriag - JudgeArea) && ag > (oriag + JudgeArea))
                    {
                        return false;
                    }
                }
                else
                {
                    if (ag < (oriag - JudgeArea) && ag > (oriag + JudgeArea))
                        return false;
                }
            }
            CollisionMessages.CollisionMasseageNormal mess = new CollisionMessages.CollisionMasseageNormal();
            mess.Position.X = Position.X;
            mess.Position.Y = Position.Y;
            mess.SetColor(0);
            msgManager.AcceptMessage(mess);

            return true;
        }