crossmate

A collaborative crossword app for iOS
Log | Files | Refs | LICENSE

MarketingPuzzleScreenshotView.swift (3027B)


      1 import SwiftUI
      2 
      3 @MainActor
      4 struct MarketingPuzzleScreenshotView: View {
      5     @State private var session: PlayerSession
      6     @State private var navigationPath: [UUID]
      7     private let roster: PlayerRoster
      8     private let gameID: UUID
      9 
     10     init(services: AppServices) {
     11         let model = Self.makeModel()
     12         _session = State(initialValue: model.session)
     13         _navigationPath = State(initialValue: [model.gameID])
     14         self.gameID = model.gameID
     15         self.roster = PlayerRoster(
     16             previewGameID: model.gameID,
     17             localName: services.preferences.name,
     18             localColor: services.preferences.color,
     19             remoteSelection: PlayerRoster.RemoteSelection(
     20                 authorID: "marketing-teammate",
     21                 row: 6,
     22                 col: 11,
     23                 direction: .down,
     24                 color: .red,
     25                 updatedAt: Date()
     26             )
     27         )
     28     }
     29 
     30     var body: some View {
     31         NavigationStack(path: $navigationPath) {
     32             Color(.systemBackground)
     33                 .navigationDestination(for: UUID.self) { destination in
     34                     if destination == gameID {
     35                         PuzzleView(
     36                             session: session,
     37                             roster: roster,
     38                             loadReplay: { .unavailable }
     39                         )
     40                         .navigationTitle("")
     41                         .navigationBarTitleDisplayMode(.inline)
     42                     }
     43                 }
     44         }
     45         .preferredColorScheme(.light)
     46     }
     47 
     48     private static func makeModel() -> (session: PlayerSession, gameID: UUID) {
     49         let source = """
     50         Title: Crossmate
     51         Publisher: Collaborative Crossword App for iOS & iPadOS
     52         CmVer: \(XD.currentCmVersion)
     53         Author: Crossmate
     54 
     55 
     56         ALTO#OGRE#PIPER
     57         RAID#TREE#ADANA
     58         MUNI#HOER#RAREE
     59         ORACLEOFOMAHA##
     60         RAS#ALMS#ADOBES
     61         IT#OIL##FEE#ONO
     62         BUCK#ROGER#PLAN
     63         ###CROSSMATE###
     64         ANAIS#ATA#ALICE
     65         SIRE#RESURRECTS
     66         SON#POL##AND###
     67         ONEARM#SPCA#BAA
     68         ##LEAPINLIZARDS
     69         HAITI#PEAS#SEES
     70         DANAE#ORES#ADES
     71 
     72 
     73         A37. The best crossword app, perhaps ~ CROSSMATE
     74         """
     75         let puzzle = try! Puzzle(xd: XD.parse(source))
     76         let game = Game(puzzle: puzzle)
     77         let gameID = UUID(uuidString: "43524F53-534D-4154-452D-53484F545321")!
     78         let mutator = GameMutator(
     79             game: game,
     80             gameID: gameID,
     81             movesUpdater: nil,
     82             isShared: true
     83         )
     84         let session = PlayerSession(game: game, mutator: mutator)
     85         for (offset, letter) in Array("CROSSMA").enumerated() {
     86             game.setLetter(
     87                 String(letter),
     88                 atRow: 7,
     89                 atCol: 3 + offset,
     90                 pencil: false
     91             )
     92         }
     93         session.direction = .across
     94         session.selectedRow = 7
     95         session.selectedCol = 10
     96         return (session, gameID)
     97     }
     98 }