From 55bcb5032dd315d1d0d569db11b3263ca997dbe2 Mon Sep 17 00:00:00 2001 From: Daniel Bross Date: Fri, 8 Nov 2024 23:41:39 +0100 Subject: [PATCH 1/3] Improving entity serialization --- core/scene.jai | 5 +++++ editor/editor_ui.jai | 2 ++ metaprogram.jai | 2 +- module.jai | 1 + 4 files changed, 9 insertions(+), 1 deletion(-) diff --git a/core/scene.jai b/core/scene.jai index 134c232..817a8e3 100644 --- a/core/scene.jai +++ b/core/scene.jai @@ -49,6 +49,11 @@ visitor :: (info : *File_Visit_Info, files: *[..] Entity_File_Info) { load_scene :: (name: string) -> *Scene { scene := create_scene(name, 1024); + + if engine.procs.on_scene_loaded != null { + engine.procs.on_pre_scene_loaded(scene, engine.mode); + } + path := tprint("../assets/scenes/%", name); files : [..] Entity_File_Info; diff --git a/editor/editor_ui.jai b/editor/editor_ui.jai index 11d3e2f..836eaa5 100644 --- a/editor/editor_ui.jai +++ b/editor/editor_ui.jai @@ -100,6 +100,8 @@ editor_ui :: () { if engine.current_scene != null { for engine.current_scene.entities { + if it.flags & .DELETED continue; + ui_set_next_padding(20); clicked := false; selected := array_find(engine.editor.selected_entities, it); diff --git a/metaprogram.jai b/metaprogram.jai index 986ec94..ea54f35 100644 --- a/metaprogram.jai +++ b/metaprogram.jai @@ -333,7 +333,7 @@ generate_code :: (w: Workspace) { builder: String_Builder; for entity_type_names { - print_to_builder(*builder, "\tcase \"%1\"; p, locator := find_and_occupy_empty_slot(*scene.by_type._%1); p._locator = locator; e = p; register_entity(scene, p, id); init_entity(p); deserialize_entity(scene, lines, cast(*%1)e); update_matrix(*e.transform);\n", it); + print_to_builder(*builder, "\tcase \"%1\"; p, locator := find_and_occupy_empty_slot(*scene.by_type._%1); p._locator = locator; e = p; register_entity(scene, p, id); deserialize_entity(scene, lines, cast(*%1)e); init_entity(p); update_matrix(*e.transform);\n", it); } build_string := sprint(DESERIALIZE_ENTITY, builder_to_string(*builder)); diff --git a/module.jai b/module.jai index 0f78b82..ff94880 100644 --- a/module.jai +++ b/module.jai @@ -35,6 +35,7 @@ Engine_Core :: struct { procs: struct { on_scene_loaded: (*Scene, Engine_Mode); + on_pre_scene_loaded: (*Scene, Engine_Mode); } paused: bool; From 2d2d63ae5a67cae7b715d7818590cd82ccdc0c93 Mon Sep 17 00:00:00 2001 From: Daniel Bross Date: Sat, 9 Nov 2024 01:36:19 +0100 Subject: [PATCH 2/3] Fixed some editor bugs --- core/scene.jai | 2 +- editor/editor.jai | 2 +- editor/editor_ui.jai | 49 +++++++++++++++++--------------------------- module.jai | 1 + physics/physics.jai | 4 ++++ ui/ui.jai | 2 ++ 6 files changed, 28 insertions(+), 32 deletions(-) diff --git a/core/scene.jai b/core/scene.jai index 817a8e3..9036e62 100644 --- a/core/scene.jai +++ b/core/scene.jai @@ -160,7 +160,7 @@ create_scene :: (name: string = "", max_entities: s64 = 256) -> *Scene { array_reserve(*scene.entities, max_entities); - scene.directional_light.color_and_intensity = .{1,1,1,1}; + scene.directional_light.color_and_intensity = .{1,1,1,2}; scene.directional_light.direction = to_v4(normalize(Vector3.{0.2, -0.7, 0.4})); dir_light_data : Directional_Light_Buffer_Data; diff --git a/editor/editor.jai b/editor/editor.jai index c194d4b..39ff05d 100644 --- a/editor/editor.jai +++ b/editor/editor.jai @@ -602,7 +602,7 @@ intersect_rotation_gizmo :: (ray: Ray) -> Transform_Axis, Vector3 { update_gizmo_buffers :: () { entity := engine.editor.selected_entities[0]; engine.editor.transform_gizmo.transform.position = entity.transform.position; - engine.editor.transform_gizmo.transform.orientation = entity.transform.orientation; + engine.editor.transform_gizmo.transform.orientation = ifx engine.editor.transform_gizmo.space == .LOCAL then entity.transform.orientation else .{0,0,0,1}; update_matrix(*engine.editor.transform_gizmo.transform); up_rotation := rotation_matrix(Matrix3, euler_to_quaternion(degrees_to_radians(90), degrees_to_radians(90), degrees_to_radians(0))); diff --git a/editor/editor_ui.jai b/editor/editor_ui.jai index 836eaa5..3638493 100644 --- a/editor/editor_ui.jai +++ b/editor/editor_ui.jai @@ -11,7 +11,7 @@ pick_scene_view_at :: (camera: Camera, coordinates: Vector2) { for engine.current_scene.entities { if !(it.flags & .RENDERABLE) continue; - //if it.flags & Entity_Flags.DELETED || !it.selectable || it.parent != null continue; + if it.flags & Entity_Flags.DELETED || it.parent != null continue; success, dist := ray_entity_intersect(ray, it); if success && dist < closest { @@ -211,39 +211,27 @@ text_fun : string; slider_value : float = 0.0; base_editor_update :: () { - if engine.editor.show_menu && (key_down(.MOUSE_LEFT) || key_down(.ESCAPE)) { - engine.editor.show_menu = false; - eat_key(.MOUSE_LEFT); - } - - // @Incomplete: Show that we saved the scene in the editor. Maybe a quick text message or just inside one of the tab titles - if key_pressed(.CTRL) && key_down(.S) { - save_scene(engine.current_scene); - } - - // Check if we hit the gizmo - // @Incomplete: MOVE THIS - engine.editor.should_check_entities = true; - - if engine.editor.selected_entities.count == 1 { - entity := engine.editor.selected_entities[0]; - gizmo_scale := distance(entity.transform.position, engine.editor.camera.position) * 0.1 * 0.5; - engine.editor.transform_gizmo.uniform_gizmo_scale = gizmo_scale; - set_scale(*engine.editor.transform_gizmo.transform, .{gizmo_scale, gizmo_scale, gizmo_scale}); - - coordinates := Vector2.{engine.editor.mouse_viewport_state.normalized_local_mouse_coordinates.x, 1.0 - engine.editor.mouse_viewport_state.normalized_local_mouse_coordinates.y}; - ray := normalized_screen_to_ray_v2(engine.editor.camera, coordinates); - - if update_transform_gizmo(ray, coordinates) { - engine.editor.should_check_entities = false; - } - } - editor_ui(); camera := *engine.editor.camera; - if engine.editor.focused_widget == null { + if engine.editor.focused_widget == null && engine.mode == .EDITING { + engine.editor.should_check_entities = true; + + if engine.editor.selected_entities.count == 1 { + entity := engine.editor.selected_entities[0]; + gizmo_scale := distance(entity.transform.position, engine.editor.camera.position) * 0.1 * 0.5; + engine.editor.transform_gizmo.uniform_gizmo_scale = gizmo_scale; + set_scale(*engine.editor.transform_gizmo.transform, .{gizmo_scale, gizmo_scale, gizmo_scale}); + + coordinates := Vector2.{engine.editor.mouse_viewport_state.normalized_local_mouse_coordinates.x, 1.0 - engine.editor.mouse_viewport_state.normalized_local_mouse_coordinates.y}; + ray := normalized_screen_to_ray_v2(engine.editor.camera, coordinates); + + if update_transform_gizmo(ray, coordinates) { + engine.editor.should_check_entities = false; + } + } + if key_pressed(.CTRL) && key_down(.S) { save_scene(engine.current_scene, "../assets/scenes/"); //show_message("Saved scene"); @@ -254,6 +242,7 @@ base_editor_update :: () { mark_entity_deleted(it); } + engine.editor.transform_gizmo.selected_axis = .NONE; engine.editor.selected_entities.count = 0; } diff --git a/module.jai b/module.jai index ff94880..4861ff9 100644 --- a/module.jai +++ b/module.jai @@ -144,6 +144,7 @@ switch_engine_mode :: (to_mode: Engine_Mode) { #if EDITOR { engine.editor.selected_entities.count = 0; + engine.editor.transform_gizmo.selected_axis = .NONE; } if engine.current_scene != null { diff --git a/physics/physics.jai b/physics/physics.jai index 0ad78b0..2b17aef 100644 --- a/physics/physics.jai +++ b/physics/physics.jai @@ -210,6 +210,10 @@ physics_step :: (scene: *Scene, timestep: float) { if e.collider.ignore continue; if e.flags & .PHYSICS { + if e.body.check_for_grounded { + e.body.grounded = false; + } + for other_e: scene.entities { if e == other_e continue; if other_e.collider.ignore continue; diff --git a/ui/ui.jai b/ui/ui.jai index 9912fb0..9924e7e 100644 --- a/ui/ui.jai +++ b/ui/ui.jai @@ -926,6 +926,8 @@ is_mouse_inside :: (x: float, y: float, rect: Rect) -> bool { } ui_update_input :: () { + if engine.mode == .PLAYING return; // @Robustness + mouse_x := engine.input.mouse.x; mouse_y := engine.input.mouse.y; From c52163f3b420c5620030bca372a35349aa3c33b5 Mon Sep 17 00:00:00 2001 From: Daniel Bross Date: Sun, 10 Nov 2024 01:16:28 +0100 Subject: [PATCH 3/3] Mesh collider update call in engine update loop --- module.jai | 1 + 1 file changed, 1 insertion(+) diff --git a/module.jai b/module.jai index 4861ff9..b253eaa 100644 --- a/module.jai +++ b/module.jai @@ -111,6 +111,7 @@ coven_run :: (game_update_proc: (float), game_update_post_physics_proc: (float)) if engine.current_scene != null && !engine.paused { update_animators(clamped_dt); + update_mesh_colliders(engine.current_scene); update_physics(engine.current_scene, clamped_dt); game_update_post_physics_proc(clamped_dt); }