diff --git a/.build/.added_strings_w3.jai b/.build/.added_strings_w3.jai index 6b48c91..a938c26 100644 --- a/.build/.added_strings_w3.jai +++ b/.build/.added_strings_w3.jai @@ -69,6 +69,69 @@ if _scene == null { _scene = current_scene; } p, locator := find_and_occupy_empty_slot(*_scene.by_type._Item); p._locator = locator; register_entity(_scene, p); p.transform = create_identity_transform(); init_entity(p); return p; } +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:272. +// +serialize_entity :: (e: *Item, builder: *String_Builder) { + print_to_builder(builder, "type: Item\n"); + print_to_builder(builder, "entity.enabled: %\n", e.entity.enabled); + print_to_builder(builder, "entity.flags: %\n", e.entity.flags); + print_to_builder(builder, "entity.transform.position.x: %\n", e.entity.transform.position.x); + print_to_builder(builder, "entity.transform.position.y: %\n", e.entity.transform.position.y); + print_to_builder(builder, "entity.transform.position.z: %\n", e.entity.transform.position.z); + print_to_builder(builder, "entity.transform.orientation.x: %\n", e.entity.transform.orientation.x); + print_to_builder(builder, "entity.transform.orientation.y: %\n", e.entity.transform.orientation.y); + print_to_builder(builder, "entity.transform.orientation.z: %\n", e.entity.transform.orientation.z); + print_to_builder(builder, "entity.transform.orientation.w: %\n", e.entity.transform.orientation.w); + print_to_builder(builder, "entity.transform.scale.x: %\n", e.entity.transform.scale.x); + print_to_builder(builder, "entity.transform.scale.y: %\n", e.entity.transform.scale.y); + print_to_builder(builder, "entity.transform.scale.z: %\n", e.entity.transform.scale.z); + print_to_builder(builder, "entity.snap_offset.x: %\n", e.entity.snap_offset.x); + print_to_builder(builder, "entity.snap_offset.y: %\n", e.entity.snap_offset.y); + print_to_builder(builder, "entity.snap_offset.z: %\n", e.entity.snap_offset.z); +} + +// +// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:272. +// +deserialize_entity :: (scene: *Scene, lines: [] string, e: *Item) { + for line: lines { + values := split(line, ":"); + if values.count == 2 { + if trim(values[0], " ") == { + case "entity.enabled"; + scan2(values[1], "%", *e.entity.enabled); + case "entity.transform.position.x"; + scan2(values[1], "%", *e.entity.transform.position.x); + case "entity.transform.position.y"; + scan2(values[1], "%", *e.entity.transform.position.y); + case "entity.transform.position.z"; + scan2(values[1], "%", *e.entity.transform.position.z); + case "entity.transform.orientation.x"; + scan2(values[1], "%", *e.entity.transform.orientation.x); + case "entity.transform.orientation.y"; + scan2(values[1], "%", *e.entity.transform.orientation.y); + case "entity.transform.orientation.z"; + scan2(values[1], "%", *e.entity.transform.orientation.z); + case "entity.transform.orientation.w"; + scan2(values[1], "%", *e.entity.transform.orientation.w); + case "entity.transform.scale.x"; + scan2(values[1], "%", *e.entity.transform.scale.x); + case "entity.transform.scale.y"; + scan2(values[1], "%", *e.entity.transform.scale.y); + case "entity.transform.scale.z"; + scan2(values[1], "%", *e.entity.transform.scale.z); + case "entity.snap_offset.x"; + scan2(values[1], "%", *e.entity.snap_offset.x); + case "entity.snap_offset.y"; + scan2(values[1], "%", *e.entity.snap_offset.y); + case "entity.snap_offset.z"; + scan2(values[1], "%", *e.entity.snap_offset.z); + } + } + } +} + // // String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:272. // @@ -86,9 +149,6 @@ serialize_entity :: (e: *Block, builder: *String_Builder) { print_to_builder(builder, "entity.transform.scale.x: %\n", e.entity.transform.scale.x); print_to_builder(builder, "entity.transform.scale.y: %\n", e.entity.transform.scale.y); print_to_builder(builder, "entity.transform.scale.z: %\n", e.entity.transform.scale.z); - print_to_builder(builder, "entity.grid_position.x: %\n", e.entity.grid_position.x); - print_to_builder(builder, "entity.grid_position.y: %\n", e.entity.grid_position.y); - print_to_builder(builder, "entity.grid_position.z: %\n", e.entity.grid_position.z); print_to_builder(builder, "entity.snap_offset.x: %\n", e.entity.snap_offset.x); print_to_builder(builder, "entity.snap_offset.y: %\n", e.entity.snap_offset.y); print_to_builder(builder, "entity.snap_offset.z: %\n", e.entity.snap_offset.z); @@ -126,12 +186,6 @@ deserialize_entity :: (scene: *Scene, lines: [] string, e: *Block) { scan2(values[1], "%", *e.entity.transform.scale.y); case "entity.transform.scale.z"; scan2(values[1], "%", *e.entity.transform.scale.z); - case "entity.grid_position.x"; - scan2(values[1], "%", *e.entity.grid_position.x); - case "entity.grid_position.y"; - scan2(values[1], "%", *e.entity.grid_position.y); - case "entity.grid_position.z"; - scan2(values[1], "%", *e.entity.grid_position.z); case "entity.snap_offset.x"; scan2(values[1], "%", *e.entity.snap_offset.x); case "entity.snap_offset.y"; @@ -145,78 +199,6 @@ deserialize_entity :: (scene: *Scene, lines: [] string, e: *Block) { } } -// -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:272. -// -serialize_entity :: (e: *Item, builder: *String_Builder) { - print_to_builder(builder, "type: Item\n"); - print_to_builder(builder, "entity.enabled: %\n", e.entity.enabled); - print_to_builder(builder, "entity.flags: %\n", e.entity.flags); - print_to_builder(builder, "entity.transform.position.x: %\n", e.entity.transform.position.x); - print_to_builder(builder, "entity.transform.position.y: %\n", e.entity.transform.position.y); - print_to_builder(builder, "entity.transform.position.z: %\n", e.entity.transform.position.z); - print_to_builder(builder, "entity.transform.orientation.x: %\n", e.entity.transform.orientation.x); - print_to_builder(builder, "entity.transform.orientation.y: %\n", e.entity.transform.orientation.y); - print_to_builder(builder, "entity.transform.orientation.z: %\n", e.entity.transform.orientation.z); - print_to_builder(builder, "entity.transform.orientation.w: %\n", e.entity.transform.orientation.w); - print_to_builder(builder, "entity.transform.scale.x: %\n", e.entity.transform.scale.x); - print_to_builder(builder, "entity.transform.scale.y: %\n", e.entity.transform.scale.y); - print_to_builder(builder, "entity.transform.scale.z: %\n", e.entity.transform.scale.z); - print_to_builder(builder, "entity.grid_position.x: %\n", e.entity.grid_position.x); - print_to_builder(builder, "entity.grid_position.y: %\n", e.entity.grid_position.y); - print_to_builder(builder, "entity.grid_position.z: %\n", e.entity.grid_position.z); - print_to_builder(builder, "entity.snap_offset.x: %\n", e.entity.snap_offset.x); - print_to_builder(builder, "entity.snap_offset.y: %\n", e.entity.snap_offset.y); - print_to_builder(builder, "entity.snap_offset.z: %\n", e.entity.snap_offset.z); -} - -// -// String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:272. -// -deserialize_entity :: (scene: *Scene, lines: [] string, e: *Item) { - for line: lines { - values := split(line, ":"); - if values.count == 2 { - if trim(values[0], " ") == { - case "entity.enabled"; - scan2(values[1], "%", *e.entity.enabled); - case "entity.transform.position.x"; - scan2(values[1], "%", *e.entity.transform.position.x); - case "entity.transform.position.y"; - scan2(values[1], "%", *e.entity.transform.position.y); - case "entity.transform.position.z"; - scan2(values[1], "%", *e.entity.transform.position.z); - case "entity.transform.orientation.x"; - scan2(values[1], "%", *e.entity.transform.orientation.x); - case "entity.transform.orientation.y"; - scan2(values[1], "%", *e.entity.transform.orientation.y); - case "entity.transform.orientation.z"; - scan2(values[1], "%", *e.entity.transform.orientation.z); - case "entity.transform.orientation.w"; - scan2(values[1], "%", *e.entity.transform.orientation.w); - case "entity.transform.scale.x"; - scan2(values[1], "%", *e.entity.transform.scale.x); - case "entity.transform.scale.y"; - scan2(values[1], "%", *e.entity.transform.scale.y); - case "entity.transform.scale.z"; - scan2(values[1], "%", *e.entity.transform.scale.z); - case "entity.grid_position.x"; - scan2(values[1], "%", *e.entity.grid_position.x); - case "entity.grid_position.y"; - scan2(values[1], "%", *e.entity.grid_position.y); - case "entity.grid_position.z"; - scan2(values[1], "%", *e.entity.grid_position.z); - case "entity.snap_offset.x"; - scan2(values[1], "%", *e.entity.snap_offset.x); - case "entity.snap_offset.y"; - scan2(values[1], "%", *e.entity.snap_offset.y); - case "entity.snap_offset.z"; - scan2(values[1], "%", *e.entity.snap_offset.z); - } - } - } -} - // // String added via add_build_string() from c:/Personal/games/onegameamonth/oct24/modules/Coven/metaprogram.jai:272. // @@ -234,16 +216,19 @@ serialize_entity :: (e: *Character, builder: *String_Builder) { print_to_builder(builder, "entity.transform.scale.x: %\n", e.entity.transform.scale.x); print_to_builder(builder, "entity.transform.scale.y: %\n", e.entity.transform.scale.y); print_to_builder(builder, "entity.transform.scale.z: %\n", e.entity.transform.scale.z); - print_to_builder(builder, "entity.grid_position.x: %\n", e.entity.grid_position.x); - print_to_builder(builder, "entity.grid_position.y: %\n", e.entity.grid_position.y); - print_to_builder(builder, "entity.grid_position.z: %\n", e.entity.grid_position.z); print_to_builder(builder, "entity.snap_offset.x: %\n", e.entity.snap_offset.x); print_to_builder(builder, "entity.snap_offset.y: %\n", e.entity.snap_offset.y); print_to_builder(builder, "entity.snap_offset.z: %\n", e.entity.snap_offset.z); print_to_builder(builder, "look_direction.x: %\n", e.look_direction.x); print_to_builder(builder, "look_direction.y: %\n", e.look_direction.y); print_to_builder(builder, "look_direction.z: %\n", e.look_direction.z); - print_to_builder(builder, "yaw: %\n", e.yaw); + print_to_builder(builder, "target_look_direction.x: %\n", e.target_look_direction.x); + print_to_builder(builder, "target_look_direction.y: %\n", e.target_look_direction.y); + print_to_builder(builder, "target_look_direction.z: %\n", e.target_look_direction.z); + print_to_builder(builder, "current_yaw: %\n", e.current_yaw); + print_to_builder(builder, "current_direction.x: %\n", e.current_direction.x); + print_to_builder(builder, "current_direction.y: %\n", e.current_direction.y); + print_to_builder(builder, "current_direction.z: %\n", e.current_direction.z); print_to_builder(builder, "last_footstep_audio: %\n", e.last_footstep_audio); print_to_builder(builder, "animation_time: %\n", e.animation_time); print_to_builder(builder, "jump_press_time: %\n", e.jump_press_time); @@ -280,12 +265,6 @@ deserialize_entity :: (scene: *Scene, lines: [] string, e: *Character) { scan2(values[1], "%", *e.entity.transform.scale.y); case "entity.transform.scale.z"; scan2(values[1], "%", *e.entity.transform.scale.z); - case "entity.grid_position.x"; - scan2(values[1], "%", *e.entity.grid_position.x); - case "entity.grid_position.y"; - scan2(values[1], "%", *e.entity.grid_position.y); - case "entity.grid_position.z"; - scan2(values[1], "%", *e.entity.grid_position.z); case "entity.snap_offset.x"; scan2(values[1], "%", *e.entity.snap_offset.x); case "entity.snap_offset.y"; @@ -298,8 +277,20 @@ deserialize_entity :: (scene: *Scene, lines: [] string, e: *Character) { scan2(values[1], "%", *e.look_direction.y); case "look_direction.z"; scan2(values[1], "%", *e.look_direction.z); - case "yaw"; - scan2(values[1], "%", *e.yaw); + case "target_look_direction.x"; + scan2(values[1], "%", *e.target_look_direction.x); + case "target_look_direction.y"; + scan2(values[1], "%", *e.target_look_direction.y); + case "target_look_direction.z"; + scan2(values[1], "%", *e.target_look_direction.z); + case "current_yaw"; + scan2(values[1], "%", *e.current_yaw); + case "current_direction.x"; + scan2(values[1], "%", *e.current_direction.x); + case "current_direction.y"; + scan2(values[1], "%", *e.current_direction.y); + case "current_direction.z"; + scan2(values[1], "%", *e.current_direction.z); case "last_footstep_audio"; scan2(values[1], "%", *e.last_footstep_audio); case "animation_time"; diff --git a/core/entity.jai b/core/entity.jai index fde96bd..055e576 100644 --- a/core/entity.jai +++ b/core/entity.jai @@ -65,7 +65,6 @@ Entity :: struct { transform: Transform; - grid_position: Vector3i; snap_offset: Vector3; renderable: Renderable; @DontSerialize diff --git a/core/fps.jai b/core/fps.jai index 9b947a1..75d1d44 100644 --- a/core/fps.jai +++ b/core/fps.jai @@ -1,4 +1,4 @@ -FPS_COUNT_AMOUNT :: 8; +FPS_COUNT_AMOUNT :: 30; average_fps: int; fps_counts: [FPS_COUNT_AMOUNT] int; fps_count_cursor: int; diff --git a/metaprogram.jai b/metaprogram.jai index 2676cb5..322e422 100644 --- a/metaprogram.jai +++ b/metaprogram.jai @@ -24,9 +24,9 @@ build :: (main_path: string, game_name: string, working_dir: string = #filepath) array_add(*new_path, "modules"); opts.import_path = new_path; - //if build_release { + if build_release { set_optimization(*opts, .VERY_OPTIMIZED); - //} + } compiler_begin_intercept(w); diff --git a/module.jai b/module.jai index 8e6fb18..cd6d959 100644 --- a/module.jai +++ b/module.jai @@ -60,7 +60,7 @@ coven_run :: (game_update_proc: (float), game_update_post_physics_proc: (float)) time = xx seconds_since_init(); while !quit { - //reset_temporary_storage(); + reset_temporary_storage(); frame_index += 1; @@ -104,7 +104,32 @@ coven_run :: (game_update_proc: (float), game_update_post_physics_proc: (float)) SDL_Quit(); } +update_light_buffer :: () { + scene := current_scene; + light_data : Directional_Light_Buffer_Data; + light_data.direction = scene.directional_light.direction; + light_data.color_and_intensity = scene.directional_light.color_and_intensity; + + dir := to_v3(scene.directional_light.direction); + + z_near := 1.0; + z_far := 50.5; + width := 10.0; + light_projection := orthographic_lh_projection_matrix(-width, width, -width, width, z_near, z_far); + light_view : Matrix4; + eye := scene.directional_light.view_position - dir * 30.0; + + m := look_at_lh(eye, eye + dir * 5.0, .{0,1,0}); + + light_view = m; + + light_data.light_matrix = light_projection * light_view; + + upload_data_to_buffer(renderer, directional_light_buffer, *light_data, size_of(Directional_Light_Buffer_Data)); +} + sync_engine_buffers :: () { + update_light_buffer(); // Camera buffer camera := *current_scene.camera; diff --git a/renderer/directional_light.jai b/renderer/directional_light.jai index 98535ac..ab752f5 100644 --- a/renderer/directional_light.jai +++ b/renderer/directional_light.jai @@ -9,6 +9,6 @@ Directional_Light_Buffer_Data :: struct { color_and_intensity : Vector4; direction : Vector4; - //light_matrix: Matrix4; + light_matrix: Matrix4; } diff --git a/renderer/dx11_renderer.jai b/renderer/dx11_renderer.jai index d5c3554..1c17705 100644 --- a/renderer/dx11_renderer.jai +++ b/renderer/dx11_renderer.jai @@ -1436,7 +1436,10 @@ render :: (backend: *D3D11_Backend, command_buffer: *Render_Command_Buffer) { time = now; // Present the information rendered to the back buffer to the front buffer (the screen) + before_swap := seconds_since_init(); hr := IDXGISwapChain_Present(swap_chain, xx ifx renderer.vsync then 1 else 0, 0); + after_swap := seconds_since_init(); + //print("RENDERING: It took % sec to present the final image\n", after_swap - before_swap); renderer.last_render_time_gpu = cast(float)(now - time) * 1000.0; if FAILED(hr) {