2016-03-12 01:20:51 +01:00
|
|
|
/* Copyright (c) 2002-2012 Croteam Ltd.
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
|
|
it under the terms of version 2 of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation
|
|
|
|
|
|
|
|
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License along
|
|
|
|
with this program; if not, write to the Free Software Foundation, Inc.,
|
|
|
|
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. */
|
2016-03-11 14:57:17 +01:00
|
|
|
|
|
|
|
// EditMipSwitchDistance.cpp : implementation file
|
|
|
|
//
|
|
|
|
|
|
|
|
#include "stdafx.h"
|
|
|
|
#include "EditMipSwitchDistance.h"
|
|
|
|
|
|
|
|
#ifdef _DEBUG
|
|
|
|
#undef new
|
|
|
|
#define new DEBUG_NEW
|
|
|
|
#undef THIS_FILE
|
|
|
|
static char THIS_FILE[] = __FILE__;
|
|
|
|
#endif
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// CEditMipSwitchDistance
|
|
|
|
|
|
|
|
CEditMipSwitchDistance::CEditMipSwitchDistance()
|
|
|
|
{
|
|
|
|
m_pbrmBrushMipSelected = NULL;
|
|
|
|
m_fLastValue = -1;
|
|
|
|
}
|
|
|
|
|
|
|
|
CEditMipSwitchDistance::~CEditMipSwitchDistance()
|
|
|
|
{
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
BEGIN_MESSAGE_MAP(CEditMipSwitchDistance, CEdit)
|
|
|
|
//{{AFX_MSG_MAP(CEditMipSwitchDistance)
|
|
|
|
//}}AFX_MSG_MAP
|
|
|
|
END_MESSAGE_MAP()
|
|
|
|
|
|
|
|
/////////////////////////////////////////////////////////////////////////////
|
|
|
|
// CEditMipSwitchDistance message handlers
|
|
|
|
|
|
|
|
CBrushMip *GetMipBrush(void)
|
|
|
|
{
|
|
|
|
CMainFrame* pMainFrame = STATIC_DOWNCAST(CMainFrame, AfxGetMainWnd());
|
|
|
|
CEntity *penSelected = pMainFrame->m_CSGDesitnationCombo.GetSelectedBrushEntity();
|
|
|
|
CWorldEditorView *pWedView = theApp.GetActiveView();
|
|
|
|
|
|
|
|
if( pWedView != NULL)
|
|
|
|
{
|
|
|
|
CBrushMip *pbmCurrentMip = pWedView->GetCurrentBrushMip();
|
|
|
|
return pbmCurrentMip;
|
|
|
|
}
|
|
|
|
|
|
|
|
return NULL;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL IsEditingEnabled(void)
|
|
|
|
{
|
|
|
|
CWorldEditorView *pWedView = theApp.GetActiveView();
|
|
|
|
if( pWedView != NULL)
|
|
|
|
{
|
|
|
|
CChildFrame *pWedChild = pWedView->GetChildFrame();
|
|
|
|
if( pWedChild != NULL)
|
|
|
|
{
|
|
|
|
CBrushMip *pbrm = GetMipBrush();
|
|
|
|
CWorldEditorDoc *pDoc = pWedView->GetDocument();
|
|
|
|
if( (pDoc != NULL) && (pDoc->GetEditingMode() == ENTITY_MODE) && (pbrm != NULL))
|
|
|
|
{
|
|
|
|
return !pWedChild->m_bAutoMipBrushingOn;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return FALSE;
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL CEditMipSwitchDistance::PreTranslateMessage(MSG* pMsg)
|
|
|
|
{
|
|
|
|
// if we caught key down message
|
|
|
|
if( pMsg->message==WM_KEYDOWN)
|
|
|
|
{
|
|
|
|
if( ((int)pMsg->wParam==VK_RETURN) && IsEditingEnabled() )
|
|
|
|
{
|
|
|
|
// set new mip switch distance
|
|
|
|
CString strWindowText;
|
|
|
|
GetWindowText( strWindowText);
|
|
|
|
CTString strValue = CStringA(strWindowText);
|
|
|
|
FLOAT fValue = 100.0f;
|
|
|
|
CBrushMip *pbrm = GetMipBrush();
|
|
|
|
// if value is valid and brush exists
|
|
|
|
if( (strValue.ScanF( "%g", &fValue) == 1) && (pbrm != NULL) )
|
|
|
|
{
|
|
|
|
pbrm->SetMipDistance( fValue);
|
|
|
|
m_fLastValue = fValue;
|
|
|
|
CWorldEditorView *pWedView = theApp.GetActiveView();
|
|
|
|
CWorldEditorDoc *pDoc = pWedView->GetDocument();
|
|
|
|
pDoc->SetModifiedFlag( TRUE);
|
|
|
|
pDoc->m_chSelections.MarkChanged();
|
|
|
|
pDoc->UpdateAllViews( NULL);
|
|
|
|
}
|
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
|
|
|
TranslateMessage(pMsg);
|
|
|
|
SendMessage( WM_KEYDOWN, pMsg->wParam, pMsg->lParam);
|
|
|
|
}
|
|
|
|
|
|
|
|
return TRUE;
|
|
|
|
}
|
|
|
|
|
|
|
|
return CEdit::PreTranslateMessage(pMsg);
|
|
|
|
}
|
|
|
|
|
|
|
|
BOOL CEditMipSwitchDistance::OnIdle(LONG lCount)
|
|
|
|
{
|
|
|
|
CBrushMip *pbrmip = GetMipBrush();
|
|
|
|
// if editing is disabled
|
|
|
|
if( !IsEditingEnabled() )
|
|
|
|
{
|
|
|
|
EnableWindow( FALSE);
|
|
|
|
}
|
|
|
|
// if we should update value
|
|
|
|
else
|
|
|
|
{
|
|
|
|
EnableWindow( TRUE);
|
|
|
|
FLOAT fValue = pbrmip->GetMipDistance();
|
|
|
|
if( (pbrmip != m_pbrmBrushMipSelected) || (fValue != m_fLastValue) )
|
|
|
|
{
|
|
|
|
CTString strValue;
|
|
|
|
m_fLastValue = fValue;
|
|
|
|
strValue.PrintF( "%g", fValue);
|
|
|
|
SetWindowText( CString(strValue));
|
|
|
|
}
|
|
|
|
}
|
|
|
|
m_pbrmBrushMipSelected = pbrmip;
|
|
|
|
return TRUE;
|
|
|
|
}
|