Refactor modules architecture
This commit is contained in:
@@ -0,0 +1,136 @@
|
||||
package base
|
||||
|
||||
import "core:fmt"
|
||||
|
||||
// -----------------------------------------
|
||||
// Types
|
||||
|
||||
// event category, bitfield (?)
|
||||
|
||||
// Event_Data :: union {
|
||||
Event :: union {
|
||||
Window_Close_Event,
|
||||
Window_Resize_Event,
|
||||
Joystick_Connect_Event,
|
||||
Joystick_Disconnect_Event,
|
||||
Key_Press_Event,
|
||||
Key_Release_Event,
|
||||
Key_Repeat_Event,
|
||||
Mouse_Button_Press_Event,
|
||||
Mouse_Button_Release_Event,
|
||||
Mouse_Position_Event,
|
||||
Mouse_Scroll_Event,
|
||||
}
|
||||
|
||||
// Event :: struct {
|
||||
// data: Event_Data,
|
||||
// handled: bool,
|
||||
// }
|
||||
|
||||
Window_Close_Event :: struct {
|
||||
handled: bool,
|
||||
}
|
||||
|
||||
Window_Resize_Event :: struct {
|
||||
handled: bool,
|
||||
width: i32,
|
||||
height: i32,
|
||||
}
|
||||
|
||||
Joystick_Connect_Event :: struct {
|
||||
handled: bool,
|
||||
id: i32,
|
||||
}
|
||||
|
||||
Joystick_Disconnect_Event :: struct {
|
||||
handled: bool,
|
||||
id: i32,
|
||||
}
|
||||
|
||||
Key_Press_Event :: struct {
|
||||
handled: bool,
|
||||
key: Key,
|
||||
mods: Mod_Set,
|
||||
}
|
||||
|
||||
Key_Release_Event :: struct {
|
||||
handled: bool,
|
||||
key: Key,
|
||||
mods: Mod_Set,
|
||||
}
|
||||
|
||||
Key_Repeat_Event :: struct {
|
||||
handled: bool,
|
||||
key: Key,
|
||||
mods: Mod_Set,
|
||||
}
|
||||
|
||||
Mouse_Button_Press_Event :: struct {
|
||||
handled: bool,
|
||||
button: Mouse_Button,
|
||||
mods: Mod_Set,
|
||||
}
|
||||
|
||||
Mouse_Button_Release_Event :: struct {
|
||||
handled: bool,
|
||||
button: Mouse_Button,
|
||||
mods: Mod_Set,
|
||||
}
|
||||
|
||||
Mouse_Position_Event :: struct {
|
||||
handled: bool,
|
||||
x_pos: f32,
|
||||
y_pos: f32,
|
||||
}
|
||||
|
||||
Mouse_Scroll_Event :: struct {
|
||||
handled: bool,
|
||||
x_offset: f32,
|
||||
y_offset: f32,
|
||||
}
|
||||
|
||||
// -----------------------------------------
|
||||
// Variables
|
||||
|
||||
// I want to have a list of Listeners per Event type, but this is state
|
||||
// listeners: map[typeid][dynamic]Listener
|
||||
|
||||
// -----------------------------------------
|
||||
// Public functions
|
||||
|
||||
// Dispatcher(Event) -> forwards to the right function
|
||||
on_event :: proc(event: Event) {
|
||||
fmt.println("toby!")
|
||||
|
||||
#partial switch e in event {
|
||||
case Window_Close_Event:
|
||||
fmt.println("Close")
|
||||
case Window_Resize_Event:
|
||||
fmt.println("Resize:", e.width, e.height)
|
||||
|
||||
case Key_Press_Event:
|
||||
fmt.println("Key press", e.key, e.mods)
|
||||
case Key_Release_Event:
|
||||
fmt.println("Key release", e.key, e.mods)
|
||||
case Key_Repeat_Event:
|
||||
fmt.println("Key repeat", e.key, e.mods)
|
||||
|
||||
case Mouse_Button_Press_Event:
|
||||
fmt.println("Mouse press", e.button, e.mods)
|
||||
case Mouse_Button_Release_Event:
|
||||
fmt.println("Mouse release", e.button, e.mods)
|
||||
case Mouse_Position_Event:
|
||||
fmt.printfln("Mouse pos: {}x{}", e.x_pos, e.y_pos)
|
||||
|
||||
case Joystick_Connect_Event:
|
||||
fmt.println("Joy con:", e.id)
|
||||
case Joystick_Disconnect_Event:
|
||||
fmt.println("Joy dis:", e.id)
|
||||
}
|
||||
}
|
||||
|
||||
/*
|
||||
Notes:
|
||||
|
||||
Have the events queued up into a frame buffer that gets drained at a specific time.
|
||||
*/
|
||||
Reference in New Issue
Block a user