Disabled editor tools and camera when console is toggled and active

dev
Shariq Shah 6 years ago
parent b0a887ed87
commit 1cb99c89c0
  1. 3
      src/common/linmath.h
  2. 2
      src/game/bounding_volumes.h
  3. 120
      src/game/editor.c
  4. 14
      todo.txt

@ -72,7 +72,8 @@ void vec2_add(vec2* res, vec2* v1, vec2* v2);
void vec2_sub(vec2* res, vec2* v1, vec2* v2); void vec2_sub(vec2* res, vec2* v1, vec2* v2);
void vec2_assign(vec2* res, const vec2* val); void vec2_assign(vec2* res, const vec2* val);
void vec2_mul(vec2* res, vec2* v1, vec2* v2); void vec2_mul(vec2* res, vec2* v1, vec2* v2);
float vec2_len(vec2* val);void vec2_norm(vec2* res, vec2* val); float vec2_len(vec2* val);
void vec2_norm(vec2* res, vec2* val);
/* vec3 */ /* vec3 */
void vec3_fill(vec3* res, float x, float y, float z); void vec3_fill(vec3* res, float x, float y, float z);

@ -4,7 +4,7 @@
#include "../common/linmath.h" #include "../common/linmath.h"
#include "../common/num_types.h" #include "../common/num_types.h"
#define MAX_RAYCAST_ENTITIES_INTERSECT 256 #define MAX_RAYCAST_ENTITIES_INTERSECT 32
struct Bounding_Box struct Bounding_Box
{ {

@ -29,6 +29,7 @@
#include "im_render.h" #include "im_render.h"
#include "geometry.h" #include "geometry.h"
#include "gui.h" #include "gui.h"
#include "console.h"
#include <stdio.h> #include <stdio.h>
#include <stdlib.h> #include <stdlib.h>
@ -739,7 +740,6 @@ void editor_update(struct Editor* editor, float dt)
if(editor->tool_rotate_total_rotation != 0.f) if(editor->tool_rotate_total_rotation != 0.f)
{ {
arc_color.w = 0.5f; arc_color.w = 0.5f;
log_message("Starting: %f", editor->tool_rotate_starting_rotation);
im_arc(editor->tool_rotate_arc_radius / 2.f, editor->tool_rotate_starting_rotation, editor->tool_rotate_total_rotation, editor->tool_rotate_arc_segments, true, position, rotation, arc_color, 4); im_arc(editor->tool_rotate_arc_radius / 2.f, editor->tool_rotate_starting_rotation, editor->tool_rotate_total_rotation, editor->tool_rotate_arc_segments, true, position, rotation, arc_color, 4);
} }
} }
@ -757,7 +757,7 @@ void editor_on_mousebutton_release(const struct Event* event)
struct Editor* editor = game_state->editor; struct Editor* editor = game_state->editor;
struct Gui* gui = game_state->gui; struct Gui* gui = game_state->gui;
if(game_state->game_mode != GAME_MODE_EDITOR) if(game_state->game_mode != GAME_MODE_EDITOR || nk_window_is_any_hovered(&gui->context) || game_state->console->visible)
return; return;
if(editor->camera_looking_around) if(editor->camera_looking_around)
@ -859,7 +859,7 @@ void editor_on_mousebutton_press(const struct Event* event)
struct Game_State* game_state = game_state_get(); struct Game_State* game_state = game_state_get();
struct Editor* editor = game_state->editor; struct Editor* editor = game_state->editor;
struct Gui* gui = game_state->gui; struct Gui* gui = game_state->gui;
if(game_state->game_mode != GAME_MODE_EDITOR && nk_window_is_any_hovered(&gui->context) == 0) if(game_state->game_mode != GAME_MODE_EDITOR || nk_window_is_any_hovered(&gui->context) || game_state->console->visible)
return; return;
if(event->mousebutton.button == MSB_LEFT && editor->selected_entity) if(event->mousebutton.button == MSB_LEFT && editor->selected_entity)
@ -917,7 +917,8 @@ void editor_on_mousemotion(const struct Event* event)
struct Game_State* game_state = game_state_get(); struct Game_State* game_state = game_state_get();
struct Editor* editor = game_state->editor; struct Editor* editor = game_state->editor;
struct Gui* gui = game_state->gui; struct Gui* gui = game_state->gui;
if(nk_window_is_any_hovered(&gui->context)) return; if(game_state->game_mode != GAME_MODE_EDITOR || nk_window_is_any_hovered(&gui->context) || game_state->console->visible)
return;
switch(editor->current_tool) switch(editor->current_tool)
{ {
@ -1108,62 +1109,61 @@ void editor_on_mousemotion(const struct Event* event)
void editor_on_key_release(const struct Event* event) void editor_on_key_release(const struct Event* event)
{ {
struct Editor* editor = game_state_get()->editor; struct Game_State* game_state = game_state_get();
struct Gui* gui = game_state_get()->gui; struct Editor* editor = game_state->editor;
struct Gui* gui = game_state->gui;
if(game_state->game_mode != GAME_MODE_EDITOR || nk_window_is_any_hovered(&gui->context) || game_state->console->visible)
return;
if(!nk_window_is_any_hovered(&gui->context)) /* Tool Cycle */
if(event->key.key == KEY_TAB)
{ {
/* Tool Cycle */ int tool = editor->current_tool;
if(event->key.key == KEY_TAB) if(++tool == EDITOR_TOOL_MAX)
{ tool = EDITOR_TOOL_NORMAL;
int tool = editor->current_tool; editor_tool_set(editor, tool);
if(++tool == EDITOR_TOOL_MAX) }
tool = EDITOR_TOOL_NORMAL;
editor_tool_set(editor, tool);
}
/* Tool Select */ /* Tool Select */
if(!editor->camera_looking_around) if(!editor->camera_looking_around)
{ {
if(event->key.key == KEY_Q) editor_tool_set(editor, EDITOR_TOOL_NORMAL); if(event->key.key == KEY_Q) editor_tool_set(editor, EDITOR_TOOL_NORMAL);
if(event->key.key == KEY_W) editor_tool_set(editor, EDITOR_TOOL_TRANSLATE); if(event->key.key == KEY_W) editor_tool_set(editor, EDITOR_TOOL_TRANSLATE);
if(event->key.key == KEY_E) editor_tool_set(editor, EDITOR_TOOL_ROTATE); if(event->key.key == KEY_E) editor_tool_set(editor, EDITOR_TOOL_ROTATE);
if(event->key.key == KEY_R) editor_tool_set(editor, EDITOR_TOOL_SCALE); if(event->key.key == KEY_R) editor_tool_set(editor, EDITOR_TOOL_SCALE);
} }
/* Axis select */ /* Axis select */
int selected_axis = editor->current_axis; int selected_axis = editor->current_axis;
if(event->key.key == KEY_X) editor_axis_set(editor, EDITOR_AXIS_X); if(event->key.key == KEY_X) editor_axis_set(editor, EDITOR_AXIS_X);
if(event->key.key == KEY_Y) editor_axis_set(editor, EDITOR_AXIS_Y); if(event->key.key == KEY_Y) editor_axis_set(editor, EDITOR_AXIS_Y);
if(event->key.key == KEY_Z) editor_axis_set(editor, EDITOR_AXIS_Z); if(event->key.key == KEY_Z) editor_axis_set(editor, EDITOR_AXIS_Z);
if(event->key.key == KEY_X && input_is_key_pressed(KEY_LSHIFT)) editor_axis_set(editor, EDITOR_AXIS_YZ); if(event->key.key == KEY_X && input_is_key_pressed(KEY_LSHIFT)) editor_axis_set(editor, EDITOR_AXIS_YZ);
if(event->key.key == KEY_Y && input_is_key_pressed(KEY_LSHIFT)) editor_axis_set(editor, EDITOR_AXIS_XZ); if(event->key.key == KEY_Y && input_is_key_pressed(KEY_LSHIFT)) editor_axis_set(editor, EDITOR_AXIS_XZ);
if(event->key.key == KEY_Z && input_is_key_pressed(KEY_LSHIFT)) editor_axis_set(editor, EDITOR_AXIS_XY); if(event->key.key == KEY_Z && input_is_key_pressed(KEY_LSHIFT)) editor_axis_set(editor, EDITOR_AXIS_XY);
if(event->key.key == KEY_ALT && editor->current_tool == EDITOR_TOOL_TRANSLATE && editor->current_axis == EDITOR_AXIS_Y) if(event->key.key == KEY_ALT && editor->current_tool == EDITOR_TOOL_TRANSLATE && editor->current_axis == EDITOR_AXIS_Y)
{ {
if(editor->previous_axis != EDITOR_AXIS_Y) if(editor->previous_axis != EDITOR_AXIS_Y)
editor_axis_set(editor, editor->previous_axis); editor_axis_set(editor, editor->previous_axis);
else else
editor_axis_set(editor, EDITOR_AXIS_NONE); editor_axis_set(editor, EDITOR_AXIS_NONE);
editor->previous_axis = EDITOR_AXIS_NONE; editor->previous_axis = EDITOR_AXIS_NONE;
}
/* Grid Scale select */
if(event->key.key == KEY_1) editor->grid_scale = 1.f;
if(event->key.key == KEY_2) editor->grid_scale = 2.f;
if(event->key.key == KEY_3) editor->grid_scale = 3.f;
if(event->key.key == KEY_4) editor->grid_scale = 4.f;
if(event->key.key == KEY_5) editor->grid_scale = 5.f;
if(event->key.key == KEY_6) editor->grid_scale = 6.f;
if(event->key.key == KEY_7) editor->grid_scale = 7.f;
if(event->key.key == KEY_8) editor->grid_scale = 8.f;
if(event->key.key == KEY_9) editor->grid_scale = 9.f;
if(event->key.key == KEY_0) editor->grid_scale = 0.5f;
if(event->key.key == KEY_G) editor->grid_enabled = !editor->grid_enabled;
if(event->key.key == KEY_ESCAPE) editor_entity_select(editor, NULL);
} }
/* Grid Scale select */
if(event->key.key == KEY_1) editor->grid_scale = 1.f;
if(event->key.key == KEY_2) editor->grid_scale = 2.f;
if(event->key.key == KEY_3) editor->grid_scale = 3.f;
if(event->key.key == KEY_4) editor->grid_scale = 4.f;
if(event->key.key == KEY_5) editor->grid_scale = 5.f;
if(event->key.key == KEY_6) editor->grid_scale = 6.f;
if(event->key.key == KEY_7) editor->grid_scale = 7.f;
if(event->key.key == KEY_8) editor->grid_scale = 8.f;
if(event->key.key == KEY_9) editor->grid_scale = 9.f;
if(event->key.key == KEY_0) editor->grid_scale = 0.5f;
if(event->key.key == KEY_G) editor->grid_enabled = !editor->grid_enabled;
if(event->key.key == KEY_ESCAPE) editor_entity_select(editor, NULL);
} }
void editor_tool_set(struct Editor* editor, int tool) void editor_tool_set(struct Editor* editor, int tool)
@ -1246,7 +1246,12 @@ void editor_tool_reset(struct Editor* editor)
void editor_on_key_press(const struct Event* event) void editor_on_key_press(const struct Event* event)
{ {
struct Editor* editor = game_state_get()->editor; struct Game_State* game_state = game_state_get();
struct Editor* editor = game_state->editor;
struct Gui* gui = game_state->gui;
if(game_state->game_mode != GAME_MODE_EDITOR || nk_window_is_any_hovered(&gui->context) || game_state->console->visible)
return;
if(!nk_window_is_any_hovered(&game_state_get()->gui->context)) if(!nk_window_is_any_hovered(&game_state_get()->gui->context))
{ {
if(event->key.key == KEY_ALT && editor->current_tool == EDITOR_TOOL_TRANSLATE && editor->current_axis != EDITOR_AXIS_Y) editor_axis_set(editor, EDITOR_AXIS_Y); if(event->key.key == KEY_ALT && editor->current_tool == EDITOR_TOOL_TRANSLATE && editor->current_axis != EDITOR_AXIS_Y) editor_axis_set(editor, EDITOR_AXIS_Y);
@ -1307,6 +1312,11 @@ void editor_axis_set(struct Editor* editor, int axis)
void editor_camera_update(struct Editor* editor, float dt) void editor_camera_update(struct Editor* editor, float dt)
{ {
struct Game_State* game_state = game_state_get();
struct Gui* gui = game_state->gui;
if(nk_window_is_any_hovered(&gui->context) || game_state->console->visible)
return;
struct Camera* editor_camera = &game_state_get()->scene->cameras[CAM_EDITOR]; struct Camera* editor_camera = &game_state_get()->scene->cameras[CAM_EDITOR];
static float total_up_down_rot = 0.f; static float total_up_down_rot = 0.f;
float move_speed = editor->camera_move_speed, turn_speed = editor->camera_turn_speed; float move_speed = editor->camera_move_speed, turn_speed = editor->camera_turn_speed;

@ -1,4 +1,16 @@
Todo: Todo:
- Entity to file read/write
- Console command to read/write entity to file and add it to scene
- Editor functionality to add entity from specific file to scene
- Scene read/write to file with scene file only containing names of
entity archetypes
- Console command to read/write scene to/from file
- Editor functionality to read/write scene to/from file
? Entity creator window to create new types of entities and write them
to disk
- Entity browser window which lists all existing entity types from
where new entities can be creating by dragging and dropping on to
the current scene
- Better, more accurate picking - Better, more accurate picking
- Editor related messages/notifications in the bottom status bar - Editor related messages/notifications in the bottom status bar
? Disable entity picking when tool is in use or only allow picking when pressing ALT ? Disable entity picking when tool is in use or only allow picking when pressing ALT
@ -31,7 +43,6 @@ Todo:
- Quick scene filter and entity selection by popping up a menu which has list of entities and fuzzy matches them based on the typed name - Quick scene filter and entity selection by popping up a menu which has list of entities and fuzzy matches them based on the typed name
- Screen mouse coordinates to world-coordinates for aiming - Screen mouse coordinates to world-coordinates for aiming
- Player projectiles and sounds - Player projectiles and sounds
- Console commands
- Console command history - Console command history
- Console command help - Console command help
- Debug drawing/variable display that also works in game mode. Can be toggled with a console command. Can show variable values or plots their graphs or debug textures etc - Debug drawing/variable display that also works in game mode. Can be toggled with a console command. Can show variable values or plots their graphs or debug textures etc
@ -288,4 +299,5 @@ Done:
* Fix rotation arc starting and ending degree calculations * Fix rotation arc starting and ending degree calculations
* Fix releasing ALT in translate tool not reverting back to previous * Fix releasing ALT in translate tool not reverting back to previous
axis axis
* Disabled editor functionalites when console is toggled

Loading…
Cancel
Save