Gizmo rot and scale collision working

This commit is contained in:
MegaMech
2025-04-24 13:26:08 -06:00
parent 04ff9a117e
commit 2f08607c75
3 changed files with 37 additions and 5 deletions
+15 -2
View File
@@ -38,7 +38,7 @@ void Gizmo::Load() {
BlueCollision.Pos = &Pos;
BlueCollision.Model = (Gfx*)"__OTR__editor/gizmo/translate_handle_blue";
/* Rotate handle Collision */
/* Rotate handle collision */
RedRotateCollision.Pos = &Pos;
RedRotateCollision.Model = (Gfx*)"__OTR__editor/gizmo/rot_handle_red";
@@ -48,7 +48,16 @@ void Gizmo::Load() {
BlueRotateCollision.Pos = &Pos;
BlueRotateCollision.Model = (Gfx*)"__OTR__editor/gizmo/rot_handle_blue";
// GenerateCollisionMesh(&RedCollision, (Gfx*)(handle_Cylinder_mesh), 1);
/* Scale handle collision */
RedScaleCollision.Pos = &Pos;
RedScaleCollision.Model = (Gfx*)"__OTR__editor/gizmo/scale_handle_red";
GreenScaleCollision.Pos = &Pos;
GreenScaleCollision.Model = (Gfx*)"__OTR__editor/gizmo/scale_handle_green";
BlueScaleCollision.Pos = &Pos;
BlueScaleCollision.Model = (Gfx*)"__OTR__editor/gizmo/scale_handle_blue";
GenerateCollisionMesh(&RedCollision, (Gfx*)LOAD_ASSET_RAW(RedCollision.Model), 1.0f);
GenerateCollisionMesh(&GreenCollision, (Gfx*)LOAD_ASSET_RAW(GreenCollision.Model), 1.0f);
GenerateCollisionMesh(&BlueCollision, (Gfx*)LOAD_ASSET_RAW(BlueCollision.Model), 1.0f);
@@ -56,6 +65,10 @@ void Gizmo::Load() {
GenerateCollisionMesh(&RedRotateCollision, (Gfx*)LOAD_ASSET_RAW(RedRotateCollision.Model), 1.0f);
GenerateCollisionMesh(&GreenRotateCollision, (Gfx*)LOAD_ASSET_RAW(GreenRotateCollision.Model), 1.0f);
GenerateCollisionMesh(&BlueRotateCollision, (Gfx*)LOAD_ASSET_RAW(BlueRotateCollision.Model), 1.0f);
GenerateCollisionMesh(&RedScaleCollision, (Gfx*)LOAD_ASSET_RAW(RedScaleCollision.Model), 1.0f);
GenerateCollisionMesh(&GreenScaleCollision, (Gfx*)LOAD_ASSET_RAW(GreenScaleCollision.Model), 1.0f);
GenerateCollisionMesh(&BlueScaleCollision, (Gfx*)LOAD_ASSET_RAW(BlueScaleCollision.Model), 1.0f);
}
void Gizmo::Tick() {
+4
View File
@@ -60,6 +60,10 @@ public:
GameObject GreenRotateCollision;
GameObject BlueRotateCollision;
GameObject RedScaleCollision;
GameObject GreenScaleCollision;
GameObject BlueScaleCollision;
MtxF Mtx_RedX;
MtxF Mtx_GreenY;
MtxF Mtx_BlueZ;
+18 -3
View File
@@ -98,9 +98,24 @@ void ObjectPicker::DragHandle() {
}
};
tryHandle(Gizmo::GizmoHandle::Z_Axis, eGizmo.Mtx_RedX, eGizmo.RedCollision.Triangles);
tryHandle(Gizmo::GizmoHandle::X_Axis, eGizmo.Mtx_GreenY, eGizmo.GreenCollision.Triangles);
tryHandle(Gizmo::GizmoHandle::Y_Axis, eGizmo.Mtx_BlueZ, eGizmo.BlueCollision.Triangles);
switch(static_cast<Gizmo::TranslationMode>(CVarGetInteger("eGizmoMode", 0))) {
case Gizmo::TranslationMode::Move:
tryHandle(Gizmo::GizmoHandle::Z_Axis, eGizmo.Mtx_RedX, eGizmo.RedCollision.Triangles);
tryHandle(Gizmo::GizmoHandle::X_Axis, eGizmo.Mtx_GreenY, eGizmo.GreenCollision.Triangles);
tryHandle(Gizmo::GizmoHandle::Y_Axis, eGizmo.Mtx_BlueZ, eGizmo.BlueCollision.Triangles);
break;
case Gizmo::TranslationMode::Rotate:
tryHandle(Gizmo::GizmoHandle::Z_Axis, eGizmo.Mtx_RedX, eGizmo.RedRotateCollision.Triangles);
tryHandle(Gizmo::GizmoHandle::X_Axis, eGizmo.Mtx_GreenY, eGizmo.GreenRotateCollision.Triangles);
tryHandle(Gizmo::GizmoHandle::Y_Axis, eGizmo.Mtx_BlueZ, eGizmo.BlueRotateCollision.Triangles);
break;
case Gizmo::TranslationMode::Scale:
tryHandle(Gizmo::GizmoHandle::Z_Axis, eGizmo.Mtx_RedX, eGizmo.RedScaleCollision.Triangles);
tryHandle(Gizmo::GizmoHandle::X_Axis, eGizmo.Mtx_GreenY, eGizmo.GreenScaleCollision.Triangles);
tryHandle(Gizmo::GizmoHandle::Y_Axis, eGizmo.Mtx_BlueZ, eGizmo.BlueScaleCollision.Triangles);
break;
}
if (closestHandle != Gizmo::GizmoHandle::None && closestClickPos.has_value()) {
eGizmo.SelectedHandle = closestHandle;