feat(editor): complete importOpen, keyboard shortcuts, DBC exporter

- importOpen now loads WHM alpha maps + full WOT metadata (textures,
  layers, holes, water) — was height-only stub
- DBC exporter migrated to nlohmann/json (last naive JSON file)
- Add Z-axis gizmo constraint (Z key) alongside X/Y
- Add Ctrl+Y as alternate redo binding
- Add F1 keyboard shortcut for help panel toggle
- Update help panel: document Z-axis, Ctrl+Y, all shortcuts
This commit is contained in:
Kelsi 2026-05-05 13:15:00 -07:00
parent 5b180c5579
commit 97e7a4c71a
5 changed files with 117 additions and 35 deletions

View file

@ -241,6 +241,9 @@ void EditorApp::processEvents() {
if (sc == SDL_SCANCODE_6) setMode(EditorMode::Quest);
}
// F1 handled by UI (showHelp_ toggle)
// F1 = toggle help
if (sc == SDL_SCANCODE_F1 && !io.WantCaptureKeyboard)
ui_.toggleHelp();
// Transform shortcuts (Blender-style)
if (objectPlacer_.getSelected()) {
if (sc == SDL_SCANCODE_G) startGizmoMode(TransformMode::Move);
@ -248,6 +251,8 @@ void EditorApp::processEvents() {
if (sc == SDL_SCANCODE_T) startGizmoMode(TransformMode::Scale);
if (sc == SDL_SCANCODE_X) setGizmoAxis(TransformAxis::X);
if (sc == SDL_SCANCODE_Y) setGizmoAxis(TransformAxis::Y);
if (sc == SDL_SCANCODE_Z && !(event.key.keysym.mod & KMOD_CTRL))
setGizmoAxis(TransformAxis::Z);
if (sc == SDL_SCANCODE_ESCAPE) {
viewport_.getGizmo().endDrag();
viewport_.getGizmo().setMode(TransformMode::None);
@ -269,10 +274,16 @@ void EditorApp::processEvents() {
ui_.openNewTerrainDialog();
if (sc == SDL_SCANCODE_O && (event.key.keysym.mod & KMOD_CTRL))
ui_.openLoadDialog();
// Ctrl+Y = Redo (alternate binding)
if (sc == SDL_SCANCODE_Y && (event.key.keysym.mod & KMOD_CTRL)) {
if (terrainEditor_.history().canRedo()) {
terrainEditor_.redo();
showToast("Redo");
}
}
if (sc == SDL_SCANCODE_Z && (event.key.keysym.mod & KMOD_CTRL)) {
bool isRedo = (event.key.keysym.mod & KMOD_SHIFT) != 0;
if (isRedo) {
// Ctrl+Shift+Z = Redo (sculpt only for now)
if (terrainEditor_.history().canRedo()) {
terrainEditor_.redo();
showToast("Redo");