Add draft and sealed modes to online multiplayer (mobile)#10806
Draft
MostCromulent wants to merge 6 commits into
Draft
Add draft and sealed modes to online multiplayer (mobile)#10806MostCromulent wants to merge 6 commits into
MostCromulent wants to merge 6 commits into
Conversation
DraftPackArrivedEvent and the three other draft callbacks reached CLobby via DraftForwardingLobbyListener → VLobby → CLobby, with the four method signatures restated on ILobbyListener, ILobbyView, and the forwarder adapter. The new IDraftEventHandler interface owns the signatures in one place and exposes a dispatch(NetEvent) default that consolidates the instanceof routing previously duplicated across FServerManager and FGameClient. CLobby implements it directly; FServerManager and FGameClient get a separate optional draftHandler slot wired by NetConnectUtil. The forwarder, the four pass-throughs on VLobby, and the four default methods on each of the two listener interfaces are deleted. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Extends the desktop network draft/sealed feature to forge-gui-mobile. The mobile lobby gains a Constructed/Limited mode dropdown (read-only and host-synced on clients), a Set Up Event button that walks the host through the same event-type / pool-type / block-or-set / pick-timer cascade desktop uses, three mode-aware action buttons (Set Up Event / Start Draft|Generate Pools / Start Match), an event panel summarising the active event, an "only allow decks from this event" conformance toggle, and a dismiss-X for clearing the active event. The deck chooser switches to a new NET_EVENT_DECK category in Limited mode. Picks happen on a new NetworkDraftingProcessScreen extending FDeckEditor so the Pack / Main / Side tab layout, deck header, and draft-log dropdown match the offline draft screen. A custom DraftPackPage subclass accepts pushed packs without binding to a local BoosterDraft; a libgdx-native DraftTimerRope and countdown sit atop the pack tab, with a neighbor pick-direction strip showing left/you/right names, pack queue-depth icons, and pass-direction arrows. A Chat button in the draft header opens a VChat dropdown wired to the lobby chat, with the same unread-message badge as the in-match chat (shared via a new IUnreadIndicator interface and FMenuTab.drawUnreadBadge). The lobby is the sole registered IDraftEventHandler and routes per-seat events into the active draft screen; host picks send via ServerGameLobby.handleDraftPick directly while client picks go through FGameClient.send. Pool delivery (sealed start and draft completion) tags the deck via cross-platform helpers and opens a deck editor bound to FModel.getDecks().getNetworkEventDecks() so edits round-trip through the same storage desktop uses. LoadDraftScreen and LoadSealedScreen surface event decks with a guard preventing gauntlet/AI play. Server-side draft logic and all wire formats are unchanged from the desktop branch. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
Author
7 tasks
Bring the mobile online lobby to parity with desktop for reusing past draft/sealed pools and locating event decks: - Set Up Event now offers "Create new" / "Load past event" when saved network-event decks exist. Loading lists past events newest first and selects one as the active event with deck conformance on, mirroring the desktop flow. - Fix the bottom event panel staying hidden after loading a past event: the visibility check ignored the active event id, so the conformance checkbox appeared but the event details did not. - Add the "Online Draft/Sealed Decks" category to the lobby deck chooser so drafted/sealed pools are selectable there, not just in the Deck Manager. - Rename the network event deck category to "Online Draft/Sealed Decks" so the Deck Manager and the lobby dropdown read consistently. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Phase 1B of #10429: Mobile follow-up to #10474 (desktop draft/sealed).
Extends the online draft/sealed feature to forge-gui-mobile. The lobby → draft → deckbuild → match workflow mirrors the desktop implementation in #10474 (Constructed/Limited mode, host event wizard, simultaneous draft with AI fill, sealed pool generation, metadata-tagged decks, post-event deck filtering) and reuses the same server-side draft logic and wire formats — no protocol changes. This PR is the mobile UI realisation of that flow.
Mobile UI
Implementation
IDraftEventHandlerand routes per-seat events into the active draft screen; host picks go throughServerGameLobby.handleDraftPick, client picks throughFGameClient.send.NetworkDraftingProcessScreenextendsFDeckEditor; a pushed-packDraftPackPagesubclass accepts packs without binding to a localBoosterDraft.FModel.getDecks().getNetworkEventDecks(), so edits round-trip through the same storage desktop uses.IUnreadIndicatorinterface andFMenuTab.drawUnreadBadge.🤖 Generated with Claude Code