add code to integrate a game into the engine

This commit is contained in:
Tuomas Katajisto 2025-08-01 10:28:03 +03:00
parent d0ee73035b
commit 77a70fc139
3 changed files with 60 additions and 24 deletions

19
game/game.jai Normal file
View File

@ -0,0 +1,19 @@
#scope_file
cam : Camera;
world : World;
#scope_export
game_init :: () {
print("Game init...\n");
cam.position = .{5,5,5};
cam.target = .{3,6,3};
cam.near = 0.1;
cam.far = 5000;
}
game_tick :: () {
}
game_draw :: () {
draw_sky(*cam, *world.conf);
}

View File

@ -9,6 +9,7 @@
#scope_file #scope_file
Editor_View :: enum { Editor_View :: enum {
Closed_Editor; Closed_Editor;
Trile_Editor; Trile_Editor;
@ -19,6 +20,8 @@ current_editor_view : Editor_View = .Trile_Editor;
#scope_export #scope_export
in_editor_view : bool = false;
init_editor :: () { init_editor :: () {
init_profiler(); init_profiler();
init_console(); init_console();
@ -29,6 +32,7 @@ console_open_ignore_input : bool = false;
draw_editor_ui :: (theme: *GR.Overall_Theme) { draw_editor_ui :: (theme: *GR.Overall_Theme) {
if in_editor_view {
r := GR.get_rect(0,0,0,0); r := GR.get_rect(0,0,0,0);
r.x = 0; r.w = 100*vw; r.x = 0; r.w = 100*vw;
r.y = 0; r.h = ui_h(5, 0); r.y = 0; r.h = ui_h(5, 0);
@ -51,11 +55,14 @@ draw_editor_ui :: (theme: *GR.Overall_Theme) {
case .Level_Editor; case .Level_Editor;
draw_level_editor_ui(theme); draw_level_editor_ui(theme);
} }
}
draw_console(theme); draw_console(theme);
draw_profiler(); draw_profiler();
} }
draw_editor :: () { draw_editor :: () {
if !in_editor_view then return;
if current_editor_view == { if current_editor_view == {
case .Trile_Editor; case .Trile_Editor;
draw_trile_editor(); draw_trile_editor();
@ -66,11 +73,18 @@ draw_editor :: () {
} }
tick_editor_ui :: () { tick_editor_ui :: () {
if input_button_states[Key_Code.F3] & .START {
in_editor_view = !in_editor_view;
}
if in_editor_view {
if current_editor_view == { if current_editor_view == {
case .Trile_Editor; case .Trile_Editor;
tick_trile_editor(); tick_trile_editor();
case .Level_Editor; case .Level_Editor;
tick_level_editor(); tick_level_editor();
} }
}
tick_console(); tick_console();
} }

View File

@ -26,6 +26,8 @@ stbi :: #import "stb_image";
#load "ray.jai"; #load "ray.jai";
#load "world.jai"; #load "world.jai";
#load "../game/game.jai";
last_frame_time : float64; last_frame_time : float64;
delta\ _time : float64; delta\ _time : float64;
@ -101,10 +103,9 @@ init_after_asset_pack :: () {
init_ui(); init_ui();
set_trile("test", Trile.{}); set_trile("test", Trile.{});
init_editor(); init_editor();
game_init();
} }
cam : Camera;
frame :: () { frame :: () {
delta_time = get_time() - last_frame_time; delta_time = get_time() - last_frame_time;
last_frame_time = get_time(); last_frame_time = get_time();
@ -122,6 +123,7 @@ frame :: () {
dpis := state.dpi_scale; dpis := state.dpi_scale;
tick_profiler(); tick_profiler();
if !in_editor_view then game_tick();
fonsClearState(state.fons); fonsClearState(state.fons);
for event: Input.events_this_frame { for event: Input.events_this_frame {
GR.getrect_handle_event(event); GR.getrect_handle_event(event);
@ -134,6 +136,7 @@ frame :: () {
sg_begin_pass(*(sg_pass.{ action = state.pass_action_clear, swapchain = cast,force(sg_swapchain) sglue_swapchain() })); sg_begin_pass(*(sg_pass.{ action = state.pass_action_clear, swapchain = cast,force(sg_swapchain) sglue_swapchain() }));
tick_ui(); tick_ui();
draw_editor(); draw_editor();
if !in_editor_view then game_draw();
ui_pass(); ui_pass();
sg_end_pass(); sg_end_pass();
sg_commit(); sg_commit();