-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.odin
More file actions
101 lines (80 loc) · 1.97 KB
/
Copy pathmain.odin
File metadata and controls
101 lines (80 loc) · 1.97 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
package main
//IMPORTS
import "core:fmt"
import "vendor:sdl2"
import "vendor:sdl2/image"
import "core:sys/windows"
import "core:time"
import "core:math/linalg"
//CONSTANTS
TARGET_FRAMERATE :: 60
TARGET_DELTA_TIME :: 1./f64(TARGET_FRAMERATE)*1000.
NATIVE_WIDTH :: 480
NATIVE_HEIGHT :: 270
WINDOW_SCALE :: 2
//Time proc
time_get :: proc() -> f64{
return f64(sdl2.GetPerformanceCounter())*1000/f64(sdl2.GetPerformanceFrequency())
}
print :: fmt.println
_game_init :: proc(){
//INIT SDL
sdl2.SetHint(sdl2.HINT_RENDER_SCALE_QUALITY, "0")
if(sdl2.Init(sdl2.INIT_VIDEO | sdl2.INIT_JOYSTICK) < 0){
fmt.println("SDL did not init!")
fmt.println(sdl2.GetError())
return
}
image.Init(image.INIT_PNG)
_display_system_init()
_input_system_init()
_collision_system_init()
_blocks_init()
_player_init()
block_make(Rect{{0, 200}, {480, 16}})
}
_game_update :: proc(){
_input_system_update()
_collision_system_update()
_player_update()
}
_game_draw :: proc(){
_player_draw()
_blocks_draw()
}
main :: proc() {
_game_init()
frame := 0
for quit := false; !quit;{
frameStartTime := time_get()
//HANDLE SDL EVENTS
ev:sdl2.Event
for sdl2.PollEvent(&ev){
#partial switch ev.type{
case .QUIT:
quit = true
}
}
_game_update()
//TARGET AND CLEAR BASE TEXTURE
sdl2.SetRenderDrawColor(display.renderer, 0xBD, 0xE3, u8(frame%255), 255)
sdl2.SetRenderTarget(display.renderer, display.mainTexture)
sdl2.RenderClear(display.renderer)
_game_draw()
//RESET TARGET AND RENDER PRESENT
sdl2.SetRenderTarget(display.renderer, nil)
sdl2.RenderCopy(display.renderer, display.mainTexture, nil, nil)
sdl2.RenderPresent(display.renderer)
frame += 1
//SLEEP
windows.timeBeginPeriod(1)
waitTime := TARGET_DELTA_TIME - (time_get() - frameStartTime)
if(waitTime > 0){
time.accurate_sleep(time.Duration(waitTime*1_000_000))
}
windows.timeEndPeriod(1)
}
fmt.println("QUITTING")
sdl2.DestroyWindow(display.window)
sdl2.Quit()
}