return 0;
}
-int level_editor_event(LevelEditor *level_editor,
- const SDL_Event *event,
- const Camera *camera)
+static
+int level_editor_saveas_event(LevelEditor *level_editor,
+ const SDL_Event *event,
+ const Camera *camera)
{
trace_assert(level_editor);
trace_assert(event);
trace_assert(camera);
- if (level_editor->state == LEVEL_EDITOR_SAVEAS) {
- switch (event->type) {
- case SDL_KEYDOWN: {
- if (event->key.keysym.sym == SDLK_RETURN) {
- trace_assert(level_editor->file_name == NULL);
- level_editor->file_name = PUSH_LT(
- level_editor->lt,
- string_duplicate(
- edit_field_as_text(
- level_editor->edit_field_filename),
- NULL),
- free);
- level_editor_dump(level_editor);
- SDL_StopTextInput();
- level_editor->state = LEVEL_EDITOR_IDLE;
- return 0;
- }
- } break;
+ switch (event->type) {
+ case SDL_KEYDOWN: {
+ if (event->key.keysym.sym == SDLK_RETURN) {
+ trace_assert(level_editor->file_name == NULL);
+ level_editor->file_name = PUSH_LT(
+ level_editor->lt,
+ string_duplicate(
+ edit_field_as_text(
+ level_editor->edit_field_filename),
+ NULL),
+ free);
+ level_editor_dump(level_editor);
+ SDL_StopTextInput();
+ level_editor->state = LEVEL_EDITOR_IDLE;
+ return 0;
}
+ } break;
+ }
- return edit_field_event(level_editor->edit_field_filename, event);
- } else {
- switch (event->type) {
- case SDL_KEYDOWN: {
- switch(event-> key.keysym.sym) {
- case SDLK_s: {
- /* TODO(#903): There is no indication that the level is saved when you press S in Level Editor */
- if (level_editor->file_name) {
- level_editor_dump(level_editor);
- log_info("Saving level to `%s`\n", level_editor->file_name);
- } else {
- SDL_StartTextInput();
- level_editor->state = LEVEL_EDITOR_SAVEAS;
- }
- } break;
- }
- } break;
-
- case SDL_MOUSEWHEEL: {
- // TODO(#679): zooming in edit mode is not smooth enough
- if (event->wheel.y > 0) {
- level_editor->camera_scale += 0.1f;
- } else if (event->wheel.y < 0) {
- level_editor->camera_scale = fmaxf(0.1f, level_editor->camera_scale - 0.1f);
- }
- } break;
+ return edit_field_event(level_editor->edit_field_filename, event);
+}
- case SDL_MOUSEBUTTONUP:
- case SDL_MOUSEBUTTONDOWN: {
- if (event->type == SDL_MOUSEBUTTONDOWN && event->button.button == SDL_BUTTON_MIDDLE) {
- level_editor->drag = true;
- }
+static
+int level_editor_idle_event(LevelEditor *level_editor,
+ const SDL_Event *event,
+ const Camera *camera)
+{
+ trace_assert(level_editor);
+ trace_assert(event);
+ trace_assert(camera);
- if (event->type == SDL_MOUSEBUTTONUP && event->button.button == SDL_BUTTON_MIDDLE) {
- level_editor->drag = false;
+ switch (event->type) {
+ case SDL_KEYDOWN: {
+ switch(event-> key.keysym.sym) {
+ case SDLK_s: {
+ /* TODO(#903): There is no indication that the level is saved when you press S in Level Editor */
+ if (level_editor->file_name) {
+ level_editor_dump(level_editor);
+ log_info("Saving level to `%s`\n", level_editor->file_name);
+ } else {
+ SDL_StartTextInput();
+ level_editor->state = LEVEL_EDITOR_SAVEAS;
}
} break;
+ }
+ } break;
+
+ case SDL_MOUSEWHEEL: {
+ // TODO(#679): zooming in edit mode is not smooth enough
+ if (event->wheel.y > 0) {
+ level_editor->camera_scale += 0.1f;
+ } else if (event->wheel.y < 0) {
+ level_editor->camera_scale = fmaxf(0.1f, level_editor->camera_scale - 0.1f);
+ }
+ } break;
- case SDL_MOUSEMOTION: {
- if (level_editor->drag) {
- const Vec next_position = camera_map_screen(camera, event->motion.x, event->motion.y);
- const Vec prev_position = camera_map_screen(
- camera,
- event->motion.x + event->motion.xrel,
- event->motion.y + event->motion.yrel);
+ case SDL_MOUSEBUTTONUP:
+ case SDL_MOUSEBUTTONDOWN: {
+ if (event->type == SDL_MOUSEBUTTONDOWN && event->button.button == SDL_BUTTON_MIDDLE) {
+ level_editor->drag = true;
+ }
- vec_add(&level_editor->camera_position,
- vec_sub(next_position, prev_position));
- }
+ if (event->type == SDL_MOUSEBUTTONUP && event->button.button == SDL_BUTTON_MIDDLE) {
+ level_editor->drag = false;
+ }
+ } break;
- } break;
+ case SDL_MOUSEMOTION: {
+ if (level_editor->drag) {
+ const Vec next_position = camera_map_screen(camera, event->motion.x, event->motion.y);
+ const Vec prev_position = camera_map_screen(
+ camera,
+ event->motion.x + event->motion.xrel,
+ event->motion.y + event->motion.yrel);
+
+ vec_add(&level_editor->camera_position,
+ vec_sub(next_position, prev_position));
}
- bool selected = false;
- if (layer_picker_event(
- &level_editor->layer_picker,
+ } break;
+ }
+
+ bool selected = false;
+ if (layer_picker_event(
+ &level_editor->layer_picker,
+ event,
+ camera,
+ &selected) < 0) {
+ return -1;
+ }
+
+ if (!selected) {
+ if (layer_event(
+ level_editor->layers[level_editor->layer_picker],
event,
- camera,
- &selected) < 0) {
+ camera) < 0) {
return -1;
}
+ }
- if (!selected) {
- if (layer_event(
- level_editor->layers[level_editor->layer_picker],
- event,
- camera) < 0) {
- return -1;
- }
- }
+
+ return 0;
+}
+
+int level_editor_event(LevelEditor *level_editor,
+ const SDL_Event *event,
+ const Camera *camera)
+{
+ trace_assert(level_editor);
+ trace_assert(event);
+ trace_assert(camera);
+
+ switch (level_editor->state) {
+ case LEVEL_EDITOR_IDLE:
+ return level_editor_idle_event(level_editor, event, camera);
+
+ case LEVEL_EDITOR_SAVEAS:
+ return level_editor_saveas_event(level_editor, event, camera);
}
return 0;