mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-02 10:39:01 +02:00
55 lines
1.9 KiB
Swift
55 lines
1.9 KiB
Swift
// 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 SwiftUIJoystick
|
|
|
|
|
|
public struct Joystick: View {
|
|
@State var iscool: Bool? = nil
|
|
var id: Int {
|
|
if onscreenjoy {
|
|
return 8
|
|
}
|
|
return 0
|
|
}
|
|
@AppStorage("onscreenhandheld") var onscreenjoy: Bool = false
|
|
|
|
let appui = AppUI.shared
|
|
|
|
@ObservedObject public var joystickMonitor = JoystickMonitor()
|
|
private let dragDiameter: CGFloat = 160
|
|
private let shape: JoystickShape = .circle
|
|
|
|
public var body: some View {
|
|
VStack{
|
|
JoystickBuilder(
|
|
monitor: self.joystickMonitor,
|
|
width: self.dragDiameter,
|
|
shape: .circle,
|
|
background: {
|
|
// Example Background
|
|
RoundedRectangle(cornerRadius: 8).fill(Color.gray.opacity(0))
|
|
},
|
|
foreground: {
|
|
// Example Thumb
|
|
Circle().fill(Color.gray)
|
|
},
|
|
locksInPlace: false)
|
|
.onChange(of: self.joystickMonitor.xyPoint) { newValue in
|
|
let scaledX = Float(newValue.x)
|
|
let scaledY = Float(-newValue.y) // my dumbass broke this by having -y instead of y :/ (well it appears that with the new joystick code, its supposed to be -y)
|
|
joystickMonitor.objectWillChange
|
|
print("Joystick Position: (\(scaledX), \(scaledY))")
|
|
|
|
if iscool != nil {
|
|
appui.thumbstickMoved(analog: .right, x: scaledX, y: scaledY, controllerid: id)
|
|
} else {
|
|
appui.thumbstickMoved(analog: .left, x: scaledX, y: scaledY, controllerid: id)
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|