Editor UI

This commit is contained in:
2024-10-19 00:58:31 +02:00
parent 1d5b4499a4
commit fae8ea7cba
7 changed files with 134 additions and 97 deletions

View File

@@ -58,7 +58,6 @@ Transform_Gizmo :: struct {
uniform_gizmo_scale: float;
}
Editor :: struct {
show_menu: bool;
should_check_entities: bool;
@@ -72,6 +71,11 @@ Editor :: struct {
menu_position: Vector2;
}
init_editor :: () {
aspect_ratio := cast(float)engine.renderer.render_target_width / cast(float)engine.renderer.render_target_height;
engine.editor.camera = create_perspective_camera(.{0, 10, -10}, yaw=0, pitch=-40, roll=0.0, fov=40, aspect=aspect_ratio);
}
update_transform_gizmo :: (ray: Ray, mouse_position: Vector2) -> bool {
return false;
// selected_entity := engine.editor.selected_entity;

View File

@@ -1,9 +1,9 @@
#load "../ui/widgets.jai";
pick_scene_view_at :: (coordinates: Vector2) {
ray := normalized_screen_to_ray_v2(*engine.current_scene.camera, coordinates);
pick_scene_view_at :: (camera: Camera, coordinates: Vector2) {
ray := normalized_screen_to_ray_v2(camera, coordinates);
if editor.should_check_entities {
if engine.editor.should_check_entities {
hit_entity : *Entity;
closest : float = 100000000;
@@ -19,14 +19,14 @@ pick_scene_view_at :: (coordinates: Vector2) {
}
if hit_entity != null {
if !array_find(editor.selected_entities, hit_entity) {
if !array_find(engine.editor.selected_entities, hit_entity) {
if !key_pressed(.CTRL) {
editor.selected_entities.count = 0;
engine.editor.selected_entities.count = 0;
}
array_add(*editor.selected_entities, hit_entity);
array_add(*engine.editor.selected_entities, hit_entity);
}
} else {
editor.selected_entities.count = 0;
engine.editor.selected_entities.count = 0;
}
}
}
@@ -99,15 +99,24 @@ editor_ui :: () {
for engine.current_scene.entities {
ui_set_next_padding(20);
clicked := false;
selected := array_find(editor.selected_entities, it);
selected := array_find(engine.editor.selected_entities, it);
if it.name.count == 0 {
clicked = ui_clickable_label(tprint("%", it.type), selected, it_index);
} else {
clicked = ui_clickable_label(it.name, selected, it_index);
}
if clicked && !selected {
array_add(*editor.selected_entities, it);
if clicked {
if !key_pressed(.CTRL) {
engine.editor.selected_entities.count = 0;
array_add(*engine.editor.selected_entities, it);
} else {
if selected {
array_unordered_remove_by_value(*engine.editor.selected_entities, it);
} else {
array_add(*engine.editor.selected_entities, it);
}
}
}
//ui_space(0, 5);
}
@@ -130,11 +139,11 @@ editor_ui :: () {
state := ui_interactable_texture(get_texture_from_pass("UI Blend Pass"));
if state.left_mouse_down {
pick_scene_view_at(.{state.normalized_local_mouse_coordinates.x, 1.0-state.normalized_local_mouse_coordinates.y});
pick_scene_view_at(engine.editor.camera, .{state.normalized_local_mouse_coordinates.x, 1.0-state.normalized_local_mouse_coordinates.y});
}
editor.mouse_viewport_state = state;
engine.editor.mouse_viewport_state = state;
ui_set_next_size_x(.PCT, 1.0);
ui_set_next_size_y(.PCT, 0.1);
@@ -173,14 +182,14 @@ editor_ui :: () {
slider_value : float = 0.0;
base_editor_update :: () {
if editor.show_menu && (key_down(.MOUSE_LEFT) || key_down(.ESCAPE)) {
editor.show_menu = false;
if engine.editor.show_menu && (key_down(.MOUSE_LEFT) || key_down(.ESCAPE)) {
engine.editor.show_menu = false;
eat_key(.MOUSE_LEFT);
}
// Check if we hit the gizmo
// @Incomplete: MOVE THIS
editor.should_check_entities = true;
engine.editor.should_check_entities = true;
//if editor.selected_entity != null {
// gizmo_scale := distance(editor.selected_entity.transform.position, editor.camera.position) * 0.1 * 0.5;
@@ -207,7 +216,7 @@ base_editor_update :: () {
// }
//}
camera := *editor.camera;
camera := *engine.editor.camera;
if key_pressed(.CTRL) && key_down(.S) {
save_scene(engine.current_scene, "../assets/scenes/");
@@ -236,7 +245,7 @@ base_editor_update :: () {
// editor_undo();
//}
if mode == .EDITING {
if engine.mode == .EDITING {
if key_pressed(.MOUSE_RIGHT) {
set_show_cursor(false);
// Update camera
@@ -274,30 +283,30 @@ base_editor_update :: () {
camera.rotation.pitch += -engine.input.mouse.delta_y * MOUSE_SENSITIVITY;
if key_down(.MOUSE_RIGHT) {
editor.last_right_mouse_click_time = time;
engine.editor.last_right_mouse_click_time = time;
}
} else {
set_show_cursor(true);
if time - editor.last_right_mouse_click_time < 0.2 {
if time - engine.editor.last_right_mouse_click_time < 0.2 {
mouse_position : Vector2;
mouse_position.x = xx engine.input.mouse.x;
mouse_position.y = xx engine.input.mouse.y;
editor.show_menu = true;
editor.menu_position.x = mouse_position.x;
editor.menu_position.y = cast(float)engine.renderer.render_target_height - mouse_position.y;
engine.editor.show_menu = true;
engine.editor.menu_position.x = mouse_position.x;
engine.editor.menu_position.y = cast(float)engine.renderer.render_target_height - mouse_position.y;
}
if key_down(.W) {
editor.transform_gizmo.transform_type = .TRANSLATION;
engine.editor.transform_gizmo.transform_type = .TRANSLATION;
}
if key_down(.E) {
editor.transform_gizmo.transform_type = .ROTATION;
engine.editor.transform_gizmo.transform_type = .ROTATION;
}
if key_down(.R) {
editor.transform_gizmo.transform_type = .SCALE;
engine.editor.transform_gizmo.transform_type = .SCALE;
}
}