66 lines
1.7 KiB
Odin
66 lines
1.7 KiB
Odin
package app
|
|
|
|
import "window"
|
|
|
|
// NOTE: Restart means it's like the program's *just* been opened. Typically happens when memory layout changes
|
|
// Reload means that the code has changed, but state is still the same. More seamless and you're in the same place in your program.
|
|
|
|
// All global data in your program MUST be in this struct
|
|
App_Memory :: struct {
|
|
current_frame: int,
|
|
}
|
|
g_mem: ^App_Memory
|
|
|
|
// Called upon first run OR full restart. Use it to set starting values (i.e. Player position, menu state)
|
|
// Return value is window settings
|
|
@(export)
|
|
app_init :: proc() -> window.Config {
|
|
g_mem = new(App_Memory)
|
|
|
|
return {
|
|
title = "Powervessel Template",
|
|
width = 1280,
|
|
height = 720,
|
|
resizable = true,
|
|
clear_color = {1.0, 0.0, 0.0, 1.0}
|
|
}
|
|
}
|
|
|
|
// Typical update loop
|
|
@(export)
|
|
app_update :: proc() -> bool {
|
|
g_mem.current_frame += 1
|
|
|
|
return true
|
|
}
|
|
|
|
// Called when program closes OR full restart. Primarily for clearing memory
|
|
@(export)
|
|
app_shutdown :: proc() {
|
|
free(g_mem)
|
|
}
|
|
|
|
// You can set conditions in your program for it to reload other than recompiling the DLL
|
|
// e.g. check for a keypress, or if the user clicks a button
|
|
@(export)
|
|
app_should_reload :: proc() -> bool {
|
|
return false
|
|
}
|
|
|
|
// Same as app_should_reload, but for complete restart
|
|
@(export)
|
|
app_should_restart :: proc() -> bool {
|
|
return false
|
|
}
|
|
|
|
// Returns the global memory pointer and the size of the struct. Used to tell if we need to full restart
|
|
@(export)
|
|
app_memory :: proc() -> (rawptr, int) {
|
|
return g_mem, size_of(g_mem)
|
|
}
|
|
|
|
// Replace global state. Used when reloading in order to maintain state.
|
|
@(export)
|
|
app_memory_set :: proc(mem: ^App_Memory) {
|
|
g_mem = mem
|
|
} |