mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-06 00:53:52 +00:00
fix(editor): redo works in all modes, center uses real chunk positions
- Ctrl+Shift+Z redo now works globally (was only in Sculpt mode) - Ctrl+Z undo works in all modes with toast confirmation - centerOnTerrain() uses actual mesh chunk positions instead of formula - Toast shows "Undo" / "Redo" / "Undo placement" for user feedback
This commit is contained in:
parent
66debe9cec
commit
34c06ede4e
1 changed files with 22 additions and 10 deletions
|
|
@ -261,15 +261,24 @@ void EditorApp::processEvents() {
|
|||
if (sc == SDL_SCANCODE_O && (event.key.keysym.mod & KMOD_CTRL))
|
||||
ui_.openLoadDialog();
|
||||
if (sc == SDL_SCANCODE_Z && (event.key.keysym.mod & KMOD_CTRL)) {
|
||||
if (mode_ == EditorMode::Sculpt) {
|
||||
if (event.key.keysym.mod & KMOD_SHIFT)
|
||||
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();
|
||||
else
|
||||
showToast("Redo");
|
||||
}
|
||||
} else {
|
||||
// Ctrl+Z = Undo
|
||||
if (mode_ == EditorMode::PlaceObject || mode_ == EditorMode::NPC) {
|
||||
if (objectPlacer_.canUndoPlace()) {
|
||||
objectPlacer_.undoLastPlace();
|
||||
objectsDirty_ = true;
|
||||
showToast("Undo placement");
|
||||
}
|
||||
} else if (terrainEditor_.history().canUndo()) {
|
||||
terrainEditor_.undo();
|
||||
} else if (mode_ == EditorMode::PlaceObject || mode_ == EditorMode::NPC) {
|
||||
if (!(event.key.keysym.mod & KMOD_SHIFT) && objectPlacer_.canUndoPlace()) {
|
||||
objectPlacer_.undoLastPlace();
|
||||
objectsDirty_ = true;
|
||||
showToast("Undo");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -909,9 +918,12 @@ void EditorApp::clearAllObjects() {
|
|||
|
||||
void EditorApp::centerOnTerrain() {
|
||||
if (!terrain_.isLoaded()) return;
|
||||
float centerX = (32.0f - loadedTileY_) * 533.33333f - 8.0f * 533.33333f / 16.0f;
|
||||
float centerY = (32.0f - loadedTileX_) * 533.33333f - 8.0f * 533.33333f / 16.0f;
|
||||
camera_.setPosition(glm::vec3(centerX, centerY, terrain_.chunks[0].position[2] + 300.0f));
|
||||
auto mesh = terrainEditor_.regenerateMesh();
|
||||
if (mesh.validChunkCount > 0) {
|
||||
float cx = (mesh.chunks[0].worldX + mesh.chunks[255].worldX) * 0.5f;
|
||||
float cy = (mesh.chunks[0].worldY + mesh.chunks[255].worldY) * 0.5f;
|
||||
camera_.setPosition(glm::vec3(cx, cy, terrain_.chunks[0].position[2] + 300.0f));
|
||||
}
|
||||
camera_.setYawPitch(0.0f, -45.0f);
|
||||
showToast("Camera centered on terrain");
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue