Editor UI
This commit is contained in:
@@ -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;
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user