public Player(Game1 game, Screen screen, int x, int y, int width, int height) : base(game, screen, Assets.image, x, y, width, height)
 {
     parent = (TestScreen)screen;
     a      = new FlashAnimator(game, this, 0.1, 0, 0.1, 0);
     Animators.Add(a);
     a.Enable = false;
     //a.Start();
 }
        protected int Collision(TestScreen parent)
        {
            int Result = 0;

            bool flag = false;

            foreach (GameObject o in parent.Objects)
            {
                if (o is Block)
                {
                    switch (Rectangle.OverlapTestEX(o.Rectangle))
                    {
                    case 1:
                        VelocityX = 0;
                        X         = o.X + o.Width;
                        Result    = 1;
                        break;

                    case 2:
                        VelocityX = 0;
                        X         = o.X - Rectangle.Width;
                        Result    = 2;
                        break;

                    case 3:
                        VelocityY = 0;
                        //jumpStep = 0;
                        Y      = o.Y + o.Height;
                        Result = 3;
                        break;

                    case 4:
                        if (VelocityY > 0)
                        {
                            flag   = true;
                            Y      = o.Y - Rectangle.Height;
                            Result = 4;
                        }

                        break;
                    }

                    if (flag)
                    {
                        VelocityY = 0;
                        //jumpStep = 0;
                    }


                    DebugMessage = " vx:" + VelocityX.ToString();
                }
                else if (o is Slope)
                {
                    int res = Rectangle.OverlapTestEX(o.Rectangle);
                    if (((Slope)o).Mode == 1)
                    {
                        if (res != 0 && Rectangle.Y + Rectangle.Height > o.Rectangle.Y + o.Rectangle.Height - ((Slope)o).getY(Rectangle.X + Rectangle.Width - o.Rectangle.X))
                        {
                            if (res == 1)
                            {
                                VelocityX = 0;
                                X         = o.Rectangle.X + o.Rectangle.Width;
                                Result    = 1;
                            }
                            else
                            {
                                Y = o.Rectangle.Y + o.Rectangle.Height - ((Slope)o).getY(Math.Abs(Rectangle.X + Rectangle.Width - o.Rectangle.X)) - Rectangle.Height;
                                o.DebugMessage = " X-ox:" + (Rectangle.X - o.Rectangle.X).ToString();
                                VelocityY      = 0;
                                //jumpStep = 0;
                                if (VelocityX > 0)
                                {
                                    VelocityX -= 10;
                                }
                                Result = 4;
                            }


                            DebugMessage = " " + res.ToString() + " X-ox:" + (Rectangle.X - o.Rectangle.X).ToString();

                            Result = res;
                        }
                    }
                    else if (((Slope)o).Mode == -1)
                    {
                        if (res != 0 && Rectangle.Y + Rectangle.Height > o.Rectangle.Y + o.Rectangle.Height - ((Slope)o).getY(Rectangle.X - o.Rectangle.X))
                        {
                            if (res == 2)
                            {
                                VelocityX = 0;
                                X         = o.Rectangle.X - Rectangle.Width;
                                Result    = 1;
                            }
                            else
                            {
                                Y = o.Rectangle.Y + o.Rectangle.Height - ((Slope)o).getY(Rectangle.X - o.Rectangle.X) - Rectangle.Height;
                                o.DebugMessage = " X-ox:" + (Rectangle.X - o.Rectangle.X).ToString();

                                VelocityY = 0;
                                //jumpStep = 0;
                                if (VelocityX < 0)
                                {
                                    VelocityX += 10;
                                }
                                Result = 4;
                            }


                            DebugMessage = " " + res.ToString() + " X-ox:" + (Rectangle.X - o.Rectangle.X).ToString();
                        }
                    }
                }
                else if (o is Floor)
                {
                    if (Rectangle.OverlapTestEX(o.Rectangle) == 4 && VelocityY > 0)
                    {
                        //if (VelocityY > 101) Console.WriteLine("Y:" + VelocityY.ToString());
                        VelocityY = 0;
                        Y         = o.Y - Height;
                        //jumpStep = 0;
                        Result = 4;
                    }
                }
            }

            return(Result);
        }
示例#3
0
 public enemy(MonoGameLibrary.Game game, Screen screen, int x, int y, int width, int height) : base(game, screen, Assets.enemy, x, y, width, height)
 {
     parent = (TestScreen)screen;
 }