Files
FC1/Editor/Objects/GizmoManager.cpp
romkazvo 34d6c5d489 123
2023-08-07 19:29:24 +08:00

88 lines
2.1 KiB
C++

////////////////////////////////////////////////////////////////////////////
//
// Crytek Engine Source File.
// Copyright (C), Crytek Studios, 2002.
// -------------------------------------------------------------------------
// File name: gizmomanager.cpp
// Version: v1.00
// Created: 2/7/2002 by Timur.
// Compilers: Visual Studio.NET
// Description:
// -------------------------------------------------------------------------
// History:
//
////////////////////////////////////////////////////////////////////////////
#include "StdAfx.h"
#include "GizmoManager.h"
#include "DisplayContext.h"
#include "ObjectManager.h"
//////////////////////////////////////////////////////////////////////////
void CGizmoManager::Display( DisplayContext &dc )
{
FUNCTION_PROFILER( GetIEditor()->GetSystem(),PROFILE_EDITOR );
BBox bbox;
std::vector<CGizmo*> todelete;
for (Gizmos::iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
{
CGizmo *gizmo = *it;
if (gizmo->GetFlags() & EGIZMO_HIDDEN)
continue;
gizmo->GetWorldBounds( bbox );
if (dc.IsVisible(bbox))
{
gizmo->Display( dc );
}
if (gizmo->IsDelete())
todelete.push_back(gizmo);
}
// Delete gizmos that needs deletion.
for (int i = 0; i < todelete.size(); i++)
{
RemoveGizmo(todelete[i]);
}
}
//////////////////////////////////////////////////////////////////////////
void CGizmoManager::AddGizmo( CGizmo *gizmo )
{
m_gizmos.insert( gizmo );
}
//////////////////////////////////////////////////////////////////////////
void CGizmoManager::RemoveGizmo( CGizmo *gizmo )
{
m_gizmos.erase( gizmo );
}
//////////////////////////////////////////////////////////////////////////
bool CGizmoManager::HitTest( HitContext &hc )
{
float mindist = FLT_MAX;
HitContext ghc = hc;
BBox bbox;
for (Gizmos::iterator it = m_gizmos.begin(); it != m_gizmos.end(); ++it)
{
CGizmo *gizmo = *it;
if (gizmo->GetFlags() & EGIZMO_SELECTABLE)
{
if (gizmo->HitTest( ghc ))
{
if (ghc.dist < mindist)
{
mindist = ghc.dist;
hc = ghc;
}
}
}
}
return hc.object != 0;
};