diff --git a/CookieSwifter/CookieSwifter.xcodeproj/xcshareddata/xcschemes/CookieSwifter.xcscheme b/CookieSwifter/CookieSwifter.xcodeproj/xcshareddata/xcschemes/CookieSwifter.xcscheme new file mode 100644 index 0000000..36acad4 --- /dev/null +++ b/CookieSwifter/CookieSwifter.xcodeproj/xcshareddata/xcschemes/CookieSwifter.xcscheme @@ -0,0 +1,102 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/CookieSwifter/CookieSwifter/AchievementsView.swift b/CookieSwifter/CookieSwifter/AchievementsView.swift new file mode 100644 index 0000000..88d1aab --- /dev/null +++ b/CookieSwifter/CookieSwifter/AchievementsView.swift @@ -0,0 +1,59 @@ +// +// AchievementsView.swift +// CookieSwifter +// +// Created by Nihaal Sharma on 28/12/2024. +// + +import SwiftUI + +struct AchievementButton: View { + @ObservedObject var game: CookieGame + @Binding var showAchievements: Bool + + var body: some View { + VStack(spacing: 10) { + Button(action: { + showAchievements.toggle() + }) { + Text("\(game.achievements.count) Achievements") + .font(.title3) + .padding(5) + .background(Color.purple.opacity(0.2)) + .cornerRadius(10) + } + .sheet(isPresented: $showAchievements) { + AchievementsView(achievements: game.achievements) + } + } + } +} +struct AchievementsView: View { + let achievements: [Achievement] + + var body: some View { + NavigationView { + List(achievements, id: \.title) { achievement in + VStack(alignment: .leading) { + Text(achievement.title) + .font(.headline) + Text(achievement.description) + .font(.subheadline) + .foregroundColor(.gray) + } + } + .navigationTitle("Achievements") + } + } +} + +#Preview { + AchievementsView( + achievements: [ + Achievement( + title: "Cookie Beginner", + description: "Earn 100 cookies." + ) + ] + ) +} diff --git a/CookieSwifter/CookieSwifter/ContentView.swift b/CookieSwifter/CookieSwifter/ContentView.swift index 0f85b54..43273c4 100644 --- a/CookieSwifter/CookieSwifter/ContentView.swift +++ b/CookieSwifter/CookieSwifter/ContentView.swift @@ -8,7 +8,7 @@ import SwiftUI struct ContentView: View { - @ObservedObject var gameManager: CookieGame + @ObservedObject var game: CookieGame @State private var selectedSave: String? = nil @State private var showSavedGames: Bool = false @State private var buyQuantity: Int = 1 @@ -16,10 +16,7 @@ struct ContentView: View { @State var showAchievemetns: Bool = false var body: some View { - VStack(spacing: 10) { - Text("\(gameManager.cookies)") - .font(.largeTitle) - .fontWeight(.bold) + VStack { HStack { Text("Game Name") .font(.caption) @@ -27,75 +24,108 @@ struct ContentView: View { TextField("", text: $gameName) .textFieldStyle(RoundedBorderTextFieldStyle()) } - .padding(.horizontal) - - Picker("Buy", selection: $buyQuantity) { - ForEach([1, 10, 100], id: \.self) { option in - Text("\(option)").tag(option) - } - } - .pickerStyle(SegmentedPickerStyle()) - .padding(.horizontal) - .padding(.top) - ItemsListView(gameManager: gameManager, buyQuantity: $buyQuantity) - UpgradesListView(gameManager: gameManager) - - Spacer() HStack { - VStack { - Button("Save Game") { - let saveDate = "Saved \(Date().formatted())" - gameManager.saveGame(name: gameName+saveDate) - } - .padding() - .background(Color.green) - .foregroundColor(.white) - .cornerRadius(10) - - Button("Load Game") { - showSavedGames = true - } - .padding() - .background(Color.blue) - .foregroundColor(.white) - .cornerRadius(10) - } - .sheet(isPresented: $showSavedGames) { - SavedGamesListView(gameManager: gameManager, selectedSave: $selectedSave) - } - .onChange(of: selectedSave) { newValue in - if let saveName = newValue { - gameManager.loadGame(named: saveName) - } - } - + Text("\(game.cookies)") + .font(.largeTitle) + .fontWeight(.bold) Spacer() - VStack { - CookieTapView(gameManager: gameManager) - Text("CPS: \(gameManager.cps)") + CookieTapView(game: game) + Text("CPS: \(game.cps)") .font(.headline) } - Spacer() - - AchievementButton( - gameManager: gameManager, - showAchievements: $showAchievemetns - ) } - .padding(.horizontal) + TabView { + Tab { + Picker("Buy", selection: $buyQuantity) { + ForEach([1, 10, 100], id: \.self) { option in + Text("\(option)").tag(option) + } + } + .pickerStyle(SegmentedPickerStyle()) + .padding(.top) + ScrollView(.vertical) { + ItemsListView(game: game, buyQuantity: $buyQuantity) + } +// Spacer() + } label: { + Image(systemName: "star.fill") + Text("Items") + } + + Tab { + ScrollView(.vertical) { + UpgradesListView(game: game) + } + } label: { + Image(systemName: "wand.and.stars") + Text("Upgrades") + } + + Tab { + HStack { + VStack { + Button("Save Game") { + let saveDate = "Saved \(Date().formatted())" + game.saveGame(name: gameName+saveDate) + } + .padding() + .background(Color.green) + .foregroundColor(.white) + .cornerRadius(10) + + Button("Load Game") { + showSavedGames = true + } + .padding() + .background(Color.blue) + .foregroundColor(.white) + .cornerRadius(10) + } + .sheet(isPresented: $showSavedGames) { + SavedGamesListView(game: game, selectedSave: $selectedSave) + } + .onChange(of: selectedSave) { newValue in + if let saveName = newValue { + game.loadGame(named: saveName) + } + } + + Spacer() + + VStack { + CookieTapView(game: game) + Text("CPS: \(game.cps)") + .font(.headline) + } + } + + } label: { + Image(systemName: "gear") + Text("Settings") + } + Tab { + ScrollView(.vertical) { + AchievementsView(achievements: game.achievements) + } + } label: { + Image(systemName: "trophy.fill") + .badge(game.achievements.count) + Text("hi") + } + } } } } struct SavedGamesListView: View { - @ObservedObject var gameManager: CookieGame + @ObservedObject var game: CookieGame @Binding var selectedSave: String? var body: some View { NavigationView { List { - ForEach(gameManager.savedGames, id: \ .name) { save in + ForEach(game.savedGames, id: \ .name) { save in HStack { VStack(alignment: .leading) { Text(save.name).font(.headline) @@ -113,7 +143,7 @@ struct SavedGamesListView: View { } } .onDelete { indexSet in - indexSet.map { gameManager.savedGames[$0].name }.forEach(gameManager.deleteGame(named:)) + indexSet.map { game.savedGames[$0].name }.forEach(game.deleteGame(named:)) } } .navigationTitle("Saved Games") @@ -122,13 +152,13 @@ struct SavedGamesListView: View { } struct CookieTapView: View { - @ObservedObject var gameManager: CookieGame + @ObservedObject var game: CookieGame var body: some View { - VStack(spacing: 10) { + VStack { Button(action: { - gameManager.cookies += 1 - gameManager.checkAchievements() + game.cookies += 1 + game.checkAchievements() }) { Text("🍪") .font(.system(size: 75)) @@ -137,7 +167,7 @@ struct CookieTapView: View { } } struct ItemsListView: View { - @ObservedObject var gameManager: CookieGame + @ObservedObject var game: CookieGame @Binding var buyQuantity: Int var body: some View { @@ -152,122 +182,92 @@ struct ItemsListView: View { .font(.footnote) } .padding(.horizontal, 5) - VStack(spacing: 10) { - ForEach(gameManager.items.indices, id: \.self) { index in - HStack(spacing: 10) { - Button(action: { - gameManager.buyItem(at: index, quantity: buyQuantity) - }) { - HStack { - Text("\(gameManager.items[index].count) x \(gameManager.items[index].name)") - Spacer() - Text("🍪 \(gameManager.totalCost(of: index, quantity: buyQuantity))") - .font(.caption2) - } - .padding(5) - .background(Color.blue.opacity(0.2)) - .cornerRadius(10) - } - .disabled(gameManager.cookies < gameManager.totalCost(of: index, quantity: buyQuantity)) - // if gameManager.cookies < gameManager.totalCost(of: index, quantity: buyQuantity) { - // Gauge( - // value: gameManager.cookies, - // in: 1..= quantity else { return } items[index].count -= quantity diff --git a/CookieSwifter/CookieSwifter/CookieSwifterApp.swift b/CookieSwifter/CookieSwifter/CookieSwifterApp.swift index ff2dffb..5f06762 100644 --- a/CookieSwifter/CookieSwifter/CookieSwifterApp.swift +++ b/CookieSwifter/CookieSwifter/CookieSwifterApp.swift @@ -13,7 +13,7 @@ struct CookieSwifterApp: App { var body: some Scene { WindowGroup { ContentView( - gameManager: CookieGame(), + game: CookieGame(), gameName: (listOfNames.randomElement() ?? "Bob") + "'s Bakery" ) } diff --git a/wak.toml b/wak.toml deleted file mode 100644 index 2bd927b..0000000 --- a/wak.toml +++ /dev/null @@ -1,15 +0,0 @@ -# https://github.com/iamawatermelo/wakapi-anyide v0.6.8 - -[meta] -version = 1 -watchers = ['files'] - -[files] -include = ["*"] # files to include in tracking -exclude = [] # files to exclude in tracking -exclude_files = [] # files whose contents will be used to exclude other files from tracking -exclude_binary_files = true # whether to ignore binary files -# language_mapping = {".kicad_sch" = "Kicad Schematic"} # custom language mapping - -[project] -name = "CookieSwifter" # your project name \ No newline at end of file