#module_parameters(WITH_EDITOR := true, WITH_NETWORKING := false); EDITOR :: WITH_EDITOR; DEBUG :: true; NETWORKING :: WITH_NETWORKING; #if EDITOR { //#load "../editor/scene_editor.jai"; //#load "../ui/new_ui/new_ui.jai"; #load "editor/editor.jai"; editor: Editor; } Engine_Mode :: enum { PLAYING; EDITING; } mode: Engine_Mode; Engine_Core :: struct { window: *Window; renderer: *Renderer; input : Input_State; current_scene: *Scene; camera_buffer : Buffer_Handle; time_buffer : Buffer_Handle; screen_data_buffer : Buffer_Handle; directional_light_buffer : Buffer_Handle; } engine: Engine_Core; time: float; dt: float; quit: bool; frame_index : u64 = 0; Camera_Data :: struct { projection_matrix: Matrix4; view_matrix: Matrix4; position: Vector4; } Shader_Time :: struct { time: float; padding: Vector3; } coven_init :: (window_title: string, window_width: u32, window_height: u32, fullscreen: bool) { engine.window = create_window(window_title, window_width, window_height, fullscreen); engine.renderer = create_renderer(engine.window); engine.renderer.vsync = true; init_input(); init_audio_system(); init_console(); ui_init(); } coven_run :: (game_update_proc: (float), game_update_post_physics_proc: (float)) { time = xx seconds_since_init(); while !quit { reset_temporary_storage(); frame_index += 1; update_input(); // @Incomplete if key_pressed(.SHIFT) && key_down(.ESCAPE) { quit = true; } now : float = xx seconds_since_init(); dt = now - time; time = now; update_fps_counter(dt); update_console(); ui_begin(); game_update_proc(min(0.4, dt)); update_animators(dt); update_physics(engine.current_scene, dt); update_transforms(); game_update_post_physics_proc(dt); sync_engine_buffers(); update_particle_systems(dt); ui_end(); update_audio(dt); render(); } SDL_DestroyWindow(engine.window); SDL_Quit(); } #if NETWORKING { #load "networking/networking.jai"; } #load "input/input.jai"; #load "renderer/engine_buffers.jai"; #load "renderer/renderer.jai"; #load "windowing/window.jai"; #load "physics/physics.jai"; #load "core/string_helpers.jai"; #load "core/math.jai"; #load "core/ray.jai"; #load "animation/animator.jai"; #load "core/entity.jai"; #load "core/parray.jai"; #load "core/scene.jai"; #load "core/transform.jai"; #load "core/camera.jai"; #load "core/console.jai"; #load "audio/audio.jai"; #load "core/fps.jai"; #scope_export #import "Bucket_Array"; #import "Basic"; #import "String"; #import "System"; #import "Flat_Pool"; #import "Hash_Table"; File :: #import "File"; #import "File_Watcher"; #import "File_Utilities";