private void UpdateStateManager() { List <Actions> actions = new List <Actions>(); bool hasPressedLeft = false, hasPressedRight = false, hasDrank = false; foreach (IController controller in controllers) { if (controller.IsActionActive(Actions.MoveLeft)) { hasPressedLeft = true; if (!hasPressedRight) { actions.Add(Actions.MoveLeft); CollisionDetector.DoPositionsIntersect(Position, Position, Position, Position); } } if (controller.IsActionActive(Actions.MoveRight)) { hasPressedRight = true; if (!hasPressedLeft) { actions.Add(Actions.MoveRight); } } if (!hasPressedLeft && !hasPressedRight) { Velocity = new Vector2(0, Velocity.Y); } if (controller.IsActionActive(Actions.Jump)) { actions.Add(Actions.Jump); } if (controller.IsActionActive(Actions.PickUp)) { if (keyPickupHeld == false) { actions.Add(Actions.PickUp); keyPickupHeld = true; } } else { keyPickupHeld = false; } if (controller.IsActionActive(Actions.Drink) && !hasDrank) { hasDrank = true; actions.Add(Actions.Drink); } } ProcessActions(actions); }
private static void OutCollisionRectangle(ICollidable collidable1, Vector2 newPosition, ICollidable collidable2, out Vector2 position, out Vector2 size) { if (!CollisionDetector.DoPositionsIntersect(newPosition, collidable1.Size, collidable2.Position, collidable2.Size)) { position = size = new Vector2(); return; } float x1 = Math.Max(newPosition.X, collidable2.Position.X); float y1 = Math.Max(newPosition.Y, collidable2.Position.Y); float x2 = Math.Min(newPosition.X + collidable1.Size.X, collidable2.Position.X + collidable2.Size.X); float y2 = Math.Min(newPosition.Y + collidable1.Size.Y, collidable2.Position.Y + collidable2.Size.Y); position = new Vector2(x1, y1); size = new Vector2(Math.Abs(x2 - x1), Math.Abs(y2 - y1)); }