private Collision.Direction CollisionDirection(Rectangle entity1, Rectangle entity2) { Rectangle collisionRectangle = Rectangle.Intersect(entity1, entity2); Collision.Direction direction = Collision.Direction.none; if (collisionRectangle.Width > collisionRectangle.Height) { if (collisionRectangle.Y == entity1.Y) { direction = Collision.Direction.up; } else { direction = Collision.Direction.down; } } else if (collisionRectangle.Height >= collisionRectangle.Width) { if (collisionRectangle.X == entity1.X) { direction = Collision.Direction.left; } else { direction = Collision.Direction.right; } } return(direction); }
// appel du constructeur parent GameObject public Player(int totalAnimationFrames, int frameWidth, int frameHeight, World world) : base(totalAnimationFrames, frameWidth, frameHeight, world) { direction = Collision.Direction.RIGHT; frameIndex = framesIndex.RIGHT_1; _collidedDirection = Collision.Direction.NONE; }
public static Collision.Direction Invert(this Collision.Direction direction) { return(direction switch { Left => Right, Right => Left, Top => Bottom, Bottom => Top, _ => direction });
public void changeRoom(int newRoom, Collision.Direction direction) { util.keyPressedTempVariable = true; oldRoom = currentRoom; collisionManager.ClearNotLink(); projectileHandler.Clear(); util.roomNumber = newRoom; foreach (Room r in roomList) { if (r.getRoomNumber() == newRoom) { currentRoom = r; } } currentMainGameState = new MainState(this, currentRoom); currentGameState = new TransitionState(this, oldRoom, currentRoom, direction); }
// Paramétrage des touches du clavier public void Move(KeyboardState state) { if (state.IsKeyDown(Keys.Z)) { direction = Collision.Direction.TOP; if (!Collision.Collided(this, world)) { if (collidedDirection != Collision.Direction.TOP) { collidedDirection = Collision.Direction.NONE; Position.Y -= 1; } } } if (state.IsKeyDown(Keys.Q)) { direction = Collision.Direction.LEFT; if (!Collision.Collided(this, world)) { if (collidedDirection != Collision.Direction.LEFT) { collidedDirection = Collision.Direction.NONE; Position.X -= 1; } } } if (state.IsKeyDown(Keys.S)) { direction = Collision.Direction.BOTTOM; if (!Collision.Collided(this, world)) { if (collidedDirection != Collision.Direction.BOTTOM) { collidedDirection = Collision.Direction.NONE; Position.Y += 1; } } } if (state.IsKeyDown(Keys.D)) { // on assigne la direction droite à la touche D direction = Collision.Direction.RIGHT; // appel méthode statique Collided. Si elle renvoie false 0 en collision if (!Collision.Collided(this, world)) { //Si par exemple, on se dirige vers la droite, tout droit vers le mur, d'un coup on s'arrête. //Pour pouvoir changer de direction, il faut détecter si la touche qu'on enfonce est différente //par rapport à la direction où on a réalisé notre récente collision. //!Avec un simple test, si on prend le test de la touche Q pour la gauche, //on teste si la touche est différente, on change notre variable de collision à sa valeur par défaut NONE //puis on décrémente notre position X vu que nous nous dirigeons vers la gauche if (collidedDirection != Collision.Direction.RIGHT) { collidedDirection = Collision.Direction.NONE; Position.X += 1; } } } }