mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-04-14 09:08:59 +02:00
pomelo scraps
This commit is contained in:
parent
6986084ef4
commit
d084f59e91
29 changed files with 2258 additions and 11 deletions
182
src/ios/GameButtonView.swift
Normal file
182
src/ios/GameButtonView.swift
Normal file
|
|
@ -0,0 +1,182 @@
|
|||
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
// SPDX-FileCopyrightText: Copyright 2024 Pomelo, Stossy11
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
import SwiftUI
|
||||
import Foundation
|
||||
import UIKit
|
||||
import UniformTypeIdentifiers
|
||||
import Combine
|
||||
|
||||
struct GameIconView: View {
|
||||
var game: EmulationGame
|
||||
@Binding var selectedGame: EmulationGame?
|
||||
@State var startgame: Bool = false
|
||||
@State var timesTapped: Int = 0
|
||||
|
||||
var isSelected: Bool {
|
||||
selectedGame == game
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationLink(
|
||||
destination: EmulationView(game: game).toolbar(.hidden, for: .tabBar),
|
||||
isActive: $startgame,
|
||||
label: {
|
||||
EmptyView()
|
||||
}
|
||||
)
|
||||
VStack(spacing: 5) {
|
||||
if isSelected {
|
||||
Text(game.title)
|
||||
.foregroundColor(.blue)
|
||||
.font(.title2)
|
||||
}
|
||||
if let uiImage = UIImage(data: game.imageData) {
|
||||
Image(uiImage: uiImage)
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: isSelected ? 200 : 180, height: isSelected ? 200 : 180)
|
||||
.cornerRadius(10)
|
||||
.overlay(
|
||||
isSelected ? RoundedRectangle(cornerRadius: 10)
|
||||
.stroke(Color.blue, lineWidth: 5)
|
||||
: nil
|
||||
)
|
||||
.onTapGesture {
|
||||
if isSelected {
|
||||
startgame = true
|
||||
print(isSelected)
|
||||
}
|
||||
if !isSelected {
|
||||
selectedGame = game
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Image(systemName: "questionmark")
|
||||
.resizable()
|
||||
.scaledToFit()
|
||||
.frame(width: 200, height: 200)
|
||||
.cornerRadius(10)
|
||||
.onTapGesture { selectedGame = game }
|
||||
}
|
||||
}
|
||||
.frame(width: 200, height: 250)
|
||||
}
|
||||
}
|
||||
|
||||
struct BottomMenuView: View {
|
||||
@State var core: Core
|
||||
var body: some View {
|
||||
HStack(spacing: 40) {
|
||||
Button {
|
||||
|
||||
} label: {
|
||||
Circle()
|
||||
.overlay {
|
||||
Image(systemName: "message").font(.system(size: 30)).foregroundColor(.red)
|
||||
}
|
||||
.frame(width: 50, height: 50)
|
||||
.foregroundColor(Color.init(uiColor: .lightGray))
|
||||
}
|
||||
Button {
|
||||
|
||||
} label: {
|
||||
Circle()
|
||||
.overlay {
|
||||
Image(systemName: "photo").font(.system(size: 30)).foregroundColor(.blue)
|
||||
}
|
||||
.frame(width: 50, height: 50)
|
||||
.foregroundColor(Color.init(uiColor: .lightGray))
|
||||
}
|
||||
NavigationLink(destination: SettingsView(core: core)) {
|
||||
Circle()
|
||||
.overlay {
|
||||
Image(systemName: "gearshape").foregroundColor(Color.init(uiColor: .darkGray)).font(.system(size: 30))
|
||||
}
|
||||
.frame(width: 50, height: 50)
|
||||
.foregroundColor(Color.init(uiColor: .lightGray))
|
||||
}
|
||||
|
||||
Button {
|
||||
|
||||
} label: {
|
||||
Circle()
|
||||
.overlay {
|
||||
Image(systemName: "power").foregroundColor(Color.init(uiColor: .darkGray)).font(.system(size: 30))
|
||||
}
|
||||
.frame(width: 50, height: 50)
|
||||
.foregroundColor(Color.init(uiColor: .lightGray))
|
||||
}
|
||||
}
|
||||
.padding(.bottom, 20)
|
||||
}
|
||||
}
|
||||
|
||||
struct HomeView: View {
|
||||
@State private var selectedGame: EmulationGame? = nil
|
||||
|
||||
@State var core: Core
|
||||
|
||||
init(selectedGame: EmulationGame? = nil, core: Core) {
|
||||
_core = State(wrappedValue: core)
|
||||
self.selectedGame = selectedGame
|
||||
refreshcore()
|
||||
}
|
||||
|
||||
var body: some View {
|
||||
NavigationStack {
|
||||
GeometryReader { geometry in
|
||||
VStack {
|
||||
GameCarouselView(core: core, selectedGame: $selectedGame)
|
||||
Spacer()
|
||||
BottomMenuView(core: core)
|
||||
}
|
||||
}
|
||||
}
|
||||
.background(Color.gray.opacity(0.1))
|
||||
.edgesIgnoringSafeArea(.all)
|
||||
.onAppear {
|
||||
refreshcore()
|
||||
if let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
|
||||
let romsFolderURL = documentsDirectory.appendingPathComponent("roms")
|
||||
let folderMonitor = FolderMonitor(folderURL: romsFolderURL) {
|
||||
do {
|
||||
core = Core(games: [], root: documentsDirectory)
|
||||
core = try LibraryManager.shared.library()
|
||||
} catch {
|
||||
print("Error refreshing core: \(error)")
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func refreshcore() {
|
||||
print("Loading library...")
|
||||
do {
|
||||
core = try LibraryManager.shared.library()
|
||||
print(core.games)
|
||||
} catch {
|
||||
print("Failed to fetch library: \(error)")
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
struct GameCarouselView: View {
|
||||
// let games: [EmulationGame]
|
||||
@State var core: Core
|
||||
@Binding var selectedGame: EmulationGame?
|
||||
var body: some View {
|
||||
ScrollView(.horizontal, showsIndicators: false) {
|
||||
HStack(spacing: 20) {
|
||||
ForEach(core.games) { game in
|
||||
GameIconView(game: game, selectedGame: $selectedGame)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue