コード例 #1
0
ファイル: Player.cs プロジェクト: CazDev/2D-Game-exp
        //   public static PointF NewVector(float speed, float angle)
        //   {
        //       float rangle = (float)(angle * Math.PI);
        //
        //       speed *= angle;
        //
        //       return new PointF((float)Math.Cos(rangle) * speed, (float)Math.Sin(rangle) * speed);
        //   }


        public static async void MovementThread()
        {
            while (Player.MovementEnabled)
            {
                if (GraphicsDrawing.FreezeState == false)
                {
                    //Check collition with Zone
                    if (Player.PlayerObj.IntersectsWith(UIElements.ZoneObj))
                    {
                        Player.Score++;
                    }

                    //Ensures diagonal and normal movement is even
                    //Otherwise diagonal movement would be slightly faster
                    bool DirDiagonal = false;
                    if (Player.Dir_Left && Player.Dir_Up)
                    {
                        DirDiagonal = true;
                    }
                    else if (Player.Dir_Up && Player.Dir_Right)
                    {
                        DirDiagonal = true;
                    }
                    else if (Player.Dir_Right && Player.Dir_Down)
                    {
                        DirDiagonal = true;
                    }
                    else if (Player.Dir_Down && Player.Dir_Left)
                    {
                        DirDiagonal = true;
                    }
                    else
                    {
                        DirDiagonal = false;
                    }


                    //Left Border collision
                    if (Player.Dir_Left)
                    {
                        if (Player.PlayerObj.IntersectsWith(UIElements.BorderLeft_Obj) == false)
                        {
                            //Player movement
                            if (DirDiagonal)
                            {
                                Player.Location.X -= Player.Speed / 1.5f;

                                //Camera movement
                                UIElements.GraphicsOffset_X += Player.Speed / 1.5f * UIElements.CameraSpeed;
                            }
                            else
                            {
                                Player.Location.X -= Player.Speed;

                                //Camera movement
                                UIElements.GraphicsOffset_X += Player.Speed * UIElements.CameraSpeed;
                            }
                        }
                    }
                    //Right Border collision
                    if (Player.Dir_Right)
                    {
                        if (Player.PlayerObj.IntersectsWith(UIElements.BorderRight_Obj) == false)
                        {
                            //Player movement
                            if (DirDiagonal)
                            {
                                Player.Location.X += Player.Speed / 1.5f;

                                //Camera movement
                                UIElements.GraphicsOffset_X -= Player.Speed / 1.5f * UIElements.CameraSpeed;
                            }
                            else
                            {
                                Player.Location.X += Player.Speed;

                                //Camera movement
                                UIElements.GraphicsOffset_X -= Player.Speed * UIElements.CameraSpeed;
                            }
                        }
                    }
                    //Top Border collision
                    if (Player.Dir_Up)
                    {
                        if (Player.PlayerObj.IntersectsWith(UIElements.BorderTop_Obj) == false)
                        {
                            if (DirDiagonal)
                            {
                                Player.Location.Y -= Player.Speed / 1.5f;

                                //Camera movement
                                UIElements.GraphicsOffset_Y += (Player.Speed / 1.5f * UIElements.CameraSpeed);
                            }
                            else
                            {
                                Player.Location.Y -= Player.Speed;

                                //Camera movement
                                UIElements.GraphicsOffset_Y += (Player.Speed * UIElements.CameraSpeed);
                            }
                        }
                    }
                    //Bottom Border collision
                    if (Player.Dir_Down)
                    {
                        if (Player.PlayerObj.IntersectsWith(UIElements.BorderBottom_Obj) == false)
                        {
                            //Player movement
                            if (DirDiagonal)
                            {
                                Player.Location.Y += Player.Speed / 1.5f;

                                //Camera movement
                                UIElements.GraphicsOffset_Y -= (Player.Speed / 1.5f * UIElements.CameraSpeed);
                            }
                            else
                            {
                                Player.Location.Y += Player.Speed;

                                //Camera movement
                                UIElements.GraphicsOffset_Y -= (Player.Speed * UIElements.CameraSpeed);
                            }
                        }
                    }

                    //Rotates player
                    if (Player.Dir_Down && Player.Dir_Right)
                    {
                        Player.Vector += Player.Speed * 3.5f;
                    }
                    else if (Player.Dir_Down && Player.Dir_Left)
                    {
                        Player.Vector -= Player.Speed * 3.5f;
                    }
                    else if (Player.Dir_Up && Player.Dir_Right)
                    {
                        Player.Vector += Player.Speed * 3.5f;
                    }
                    else if (Player.Dir_Up && Player.Dir_Left)
                    {
                        Player.Vector -= Player.Speed * 3.5f;
                    }
                    else if (Player.Dir_Up)
                    {
                        Player.Vector += Player.Speed * 3.5f;
                    }
                    else if (Player.Dir_Down)
                    {
                        Player.Vector -= Player.Speed * 3.5f;
                    }
                    else if (Player.Dir_Left)
                    {
                        Player.Vector -= Player.Speed * 3.5f;
                    }
                    else if (Player.Dir_Right)
                    {
                        Player.Vector += Player.Speed * 3.5f;
                    }

                    SpawnItems.PowerUpCollision();

                    SpawnItems.ItemCollision();

                    //Loop Delay
                    await Task.Delay(Player.MoveTick);
                }
                else
                {
                    Thread.Sleep(50);
                }
            }
        }