application pass

This commit is contained in:
2024-08-04 20:01:26 +10:00
parent 7038c99b46
commit d914230ff2

View File

@ -8,51 +8,84 @@
import Foundation import Foundation
import SDL3 import SDL3
struct Application { class Application {
func run() -> Int32 { private var window: OpaquePointer? = nil
private var renderer: OpaquePointer? = nil
private func initialize() -> ApplicationExecutionState {
guard SDL_Init(SDL_INIT_VIDEO) >= 0 else { guard SDL_Init(SDL_INIT_VIDEO) >= 0 else {
print("SDL init failed.") print("SDL_Init() error: \(String(cString: SDL_GetError()))")
return 1 return .exitFailure
} }
defer { window = SDL_CreateWindow("Hello World", 512, 512, 0)
guard window != nil else {
print("SDL_CreateWindow() error: \(String(cString: SDL_GetError()))")
return .exitFailure
}
renderer = SDL_CreateRenderer(window, nil)
guard renderer != nil else {
print("SDL_CreateRenderer() error: \(String(cString: SDL_GetError()))")
return .exitFailure
}
return .running
}
private func deinitialize() {
SDL_DestroyRenderer(renderer)
SDL_DestroyWindow(window)
SDL_Quit() SDL_Quit()
} }
guard let window = SDL_CreateWindow("Hello World", 512, 512, 0) else { private func handleEvent(_ event: SDL_Event) -> ApplicationExecutionState {
return 1
}
defer {
SDL_DestroyWindow(window)
}
let renderer = SDL_CreateRenderer(window, nil)
defer {
SDL_DestroyRenderer(renderer)
}
quit: while true {
var event = SDL_Event()
while SDL_PollEvent(&event) > 0 {
switch SDL_EventType(event.type) { switch SDL_EventType(event.type) {
case SDL_EVENT_QUIT: case SDL_EVENT_QUIT:
break quit return .exitSuccess
case SDL_EVENT_KEY_DOWN:
switch event.key.key {
case SDLK_ESCAPE:
return .exitSuccess
default: default:
break break
} }
return .running
default:
return .running
}
} }
private func paint() -> ApplicationExecutionState {
SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255) SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255)
SDL_RenderClear(renderer) SDL_RenderClear(renderer)
var rect = SDL_FRect(x: 0, y: 0, w: 100, h: 100) var rect = SDL_FRect(x: 0, y: 0, w: 100, h: 100)
SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255) SDL_SetRenderDrawColor(renderer, 255, 0, 0, 255)
SDL_RenderFillRect(renderer, &rect) SDL_RenderFillRect(renderer, &rect)
SDL_RenderPresent(renderer) SDL_RenderPresent(renderer)
return .running
} }
return 0 func run() -> Int32 {
var res = initialize()
quit: while res == .running {
var event = SDL_Event()
while SDL_PollEvent(&event) > 0 {
res = handleEvent(event)
if res != .running {
break quit
}
}
res = paint()
}
return res == .exitSuccess ? 0 : 1
} }
} }
fileprivate enum ApplicationExecutionState {
case exitFailure
case exitSuccess
case running
}