|
5 | 5 | #include "IconsForkAwesome.h" |
6 | 6 | #include "UIUtil.hpp" |
7 | 7 | #include "Options.hpp" |
| 8 | +#include "history/Mat4HistoryItem.hpp" |
8 | 9 |
|
9 | 10 | //#include <DiscordIntegration.hpp> |
10 | 11 |
|
@@ -138,8 +139,21 @@ void LActorMode::RenderDetailsWindow() |
138 | 139 | ImGui::Separator(); |
139 | 140 |
|
140 | 141 | if(mPreviousSelection == mSelectionManager.GetPrimarySelection()){ |
141 | | - if (mSelectionManager.IsMultiSelection()) |
| 142 | + if (mSelectionManager.IsMultiSelection()){ |
142 | 143 | ImGui::Text("[Multiple Selection]"); |
| 144 | + /* Some WIP multi selection |
| 145 | + ImGui::BeginTabBar("##multiSelectionTabs"); |
| 146 | +
|
| 147 | + for(auto item : mSelectionManager.GetSelection()){ |
| 148 | + if(ImGui::BeginTabItem(std::format("{}##{}", item->GetName(), item->GetID()).c_str())){ |
| 149 | + std::static_pointer_cast<LUIRenderDOMNode>(item)->RenderDetailsUI(0); |
| 150 | + ImGui::EndTabItem(); |
| 151 | + } |
| 152 | + } |
| 153 | +
|
| 154 | + ImGui::EndTabBar(); |
| 155 | + */ |
| 156 | + } |
143 | 157 | else if (mSelectionManager.GetPrimarySelection() != nullptr) |
144 | 158 | std::static_pointer_cast<LUIRenderDOMNode>(mSelectionManager.GetPrimarySelection())->RenderDetailsUI(0); |
145 | 159 | } else if(mPreviousSelection != nullptr){ |
@@ -197,19 +211,28 @@ void LActorMode::RenderGizmo(LEditorScene* renderer_scene){ |
197 | 211 |
|
198 | 212 | if(mSelectionManager.GetPrimarySelection()->GetNodeType() != EDOMNodeType::Room){ |
199 | 213 | glm::mat4* m = static_cast<LBGRenderDOMNode*>(mSelectionManager.GetPrimarySelection().get())->GetMat(); |
200 | | - glm::mat4 delta(1.0); |
| 214 | + glm::mat4 delta(1.0f); |
201 | 215 | if(ImGuizmo::Manipulate(&view[0][0], &proj[0][0], mGizmoMode, ImGuizmo::WORLD, &(*m)[0][0], &delta[0][0], NULL)){ |
| 216 | + mGizmoDelta *= delta; |
202 | 217 | for(auto node : mSelectionManager.GetSelection()){ |
203 | 218 | if(node != mSelectionManager.GetPrimarySelection()){ |
204 | | - (*dynamic_pointer_cast<LBGRenderDOMNode>(node)->GetMat()) = (*dynamic_pointer_cast<LBGRenderDOMNode>(node)->GetMat()) * delta; |
| 219 | + (*dynamic_pointer_cast<LBGRenderDOMNode>(node)->GetMat()) = (*dynamic_pointer_cast<LBGRenderDOMNode>(node)->GetMat()) * mGizmoDelta; |
205 | 220 | } |
206 | 221 | EDOMNodeType type = node->GetNodeType(); |
207 | 222 | if(type == EDOMNodeType::PathPoint || type == EDOMNodeType::Event || type == EDOMNodeType::Observer || type == EDOMNodeType::Object){ |
208 | 223 | renderer_scene->UpdateRenderers(); |
209 | 224 | break; |
210 | 225 | } |
211 | 226 | } |
| 227 | + mGizmoWasUsing = true; |
| 228 | + } |
| 229 | + |
| 230 | + if(!ImGuizmo::IsUsing() && mGizmoWasUsing){ |
| 231 | + mHistoryManager.AddUndoItem(std::make_shared<LMat4HistoryItem>(std::static_pointer_cast<LBGRenderDOMNode>(mSelectionManager.GetPrimarySelection()), mGizmoDelta)); |
| 232 | + mGizmoDelta = glm::mat4(1.0f); |
| 233 | + mGizmoWasUsing = false; |
212 | 234 | } |
| 235 | + |
213 | 236 | } else { |
214 | 237 | std::shared_ptr<LRoomDOMNode> curRoom = dynamic_pointer_cast<LRoomDOMNode>(mSelectionManager.GetPrimarySelection()); |
215 | 238 | if(prevRoom != curRoom){ |
@@ -261,6 +284,16 @@ void LActorMode::RenderGizmo(LEditorScene* renderer_scene){ |
261 | 284 |
|
262 | 285 | } |
263 | 286 | } |
| 287 | + |
| 288 | + if(!ImGui::GetIO().WantTextInput){ |
| 289 | + if(ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyPressed(ImGuiKey_Z)){ |
| 290 | + mHistoryManager.PerformUndo(); |
| 291 | + } |
| 292 | + |
| 293 | + if(ImGui::IsKeyDown(ImGuiKey_LeftCtrl) && ImGui::IsKeyPressed(ImGuiKey_Y)){ |
| 294 | + mHistoryManager.PerformRedo(); |
| 295 | + } |
| 296 | + } |
264 | 297 | } |
265 | 298 |
|
266 | 299 | void LActorMode::OnBecomeActive() |
|
0 commit comments