reman3/Rayman_X/cpa/tempgrp/OSC/Src/SECdVis.cpp

664 lines
18 KiB
C++

/*=========================================================================
*
* SECTdVis.cpp : Visual Environment dialog - Implementation file
*
*
* Version 1.0
* Creation date
* Revision date
*
* Shaitan
*=======================================================================*/
/*
#include "stdafx.h"
#include "acp_base.h"
#include "SECTint.hpp"
#include "SECdVis.hpp"
#include "SECmodif.hpp"
#include "SECdEnv.hpp"
#include "SEClEnvs.hpp"
#include "SECdEnvs.hpp"
#include "SECdSrfs.hpp"
#include "..\Main\Inc\_EditID.h"
#include "TUT.h"
*/
//#################################################################################
// SECT_DialogVis dialog
//#################################################################################
/*----------------------------------------
----------------------------------------*/
/*
SECT_DialogVis::SECT_DialogVis(CWnd* pParent)
: CFormView(SECT_DialogVis::IDD)
{
//{{AFX_DATA_INIT(SECT_DialogVis)
//}}AFX_DATA_INIT
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::DoDataExchange(CDataExchange* pDX)
{
CFormView::DoDataExchange(pDX);
//{{AFX_DATA_MAP(SECT_DialogVis)
DDX_Control(pDX, SECT_IDC_VISNAME, m_cName);
DDX_Control(pDX, SECT_IDC_VISDEFAULT, m_cDefault);
DDX_Control(pDX, SECT_IDC_VISSAVE, m_cSave);
DDX_Control(pDX, SECT_IDC_VISCANCEL, m_cCancel);
DDX_Control(pDX, SECT_IDC_NEAR, m_cNear);
DDX_Control(pDX, SECT_IDC_FAR, m_cFar);
DDX_Control(pDX, SECT_IDC_BLENDNEAR, m_cBlendNear);
DDX_Control(pDX, SECT_IDC_BLENDFAR, m_cBlendFar);
DDX_Control(pDX, SECT_IDC_INFINITE, m_cInfinite);
DDX_Control(pDX, SECT_IDC_COLOR, m_cColor);
DDX_Control(pDX, SECT_IDC_REDSLIDER, m_cRSlider);
DDX_Control(pDX, SECT_IDC_GREENSLIDER, m_cGSlider);
DDX_Control(pDX, SECT_IDC_BLUESLIDER, m_cBSlider);
//}}AFX_DATA_MAP
}
*/
/*----------------------------------------
----------------------------------------*/
/*
BEGIN_MESSAGE_MAP(SECT_DialogVis, CFormView)
//{{AFX_MSG_MAP(SECT_DialogVis)
ON_WM_SIZE()
ON_WM_DESTROY()
ON_WM_DRAWITEM()
ON_BN_CLICKED(SECT_IDC_VISSAVE, OnSave)
ON_BN_CLICKED(SECT_IDC_VISCANCEL, OnCancel)
ON_EN_KILLFOCUS(SECT_IDC_VISNAME, OnChangeName)
ON_BN_CLICKED(SECT_IDC_VISDEFAULT, OnDefault)
ON_EN_KILLFOCUS(SECT_IDC_NEAR, OnChangeNear)
ON_EN_KILLFOCUS(SECT_IDC_FAR, OnChangeFar)
ON_EN_KILLFOCUS(SECT_IDC_INFINITE, OnChangeInfinite)
ON_WM_VSCROLL()
ON_WM_HSCROLL()
ON_BN_DOUBLECLICKED(SECT_IDC_COLOR, OnEditColor)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
*/
//#################################################################################
// SECT_DialogVis Inits
//#################################################################################
/*===========================================================================
* Description: Init dialog
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
/*
void SECT_DialogVis::fn_vInitDialog (Sector_Interface *p_oDLL, CWnd *pParent)
{
// create the dialog
m_bInitialised = FALSE;
m_pSectorInterface = p_oDLL;
CFormView::Create(NULL, "", AFX_WS_DEFAULT_VIEW, CRect(0,0,120,180), pParent, AFX_IDW_PANE_FIRST, NULL);
// init data for dialog
CFormView::UpdateData(FALSE);
// FOR TUTORIAL
TUT_M_vGetTutDll();
// visual environment
TUT_M_vRegisterControl(m_cName.m_hWnd, "OSC_DVIS_EDIT_VISENV", TUT_e_TextEdit);
TUT_M_vRegisterControl(m_cDefault.m_hWnd, "OSC_DVIS_BUTTON_DEFAULT", TUT_e_Button);
TUT_M_vRegisterControl(m_cCancel.m_hWnd, "OSC_DVIS_BUTTON_CANCEL", TUT_e_Button);
TUT_M_vRegisterControl(m_cSave.m_hWnd, "OSC_DVIS_BUTTON_SAVE", TUT_e_Button);
// parameters
TUT_M_vRegisterControl(m_cNear.m_hWnd, "OSC_DVIS_EDIT_NEAR", TUT_e_TextEdit);
TUT_M_vRegisterControl(m_cFar.m_hWnd, "OSC_DVIS_EDIT_FAR", TUT_e_TextEdit);
TUT_M_vRegisterControl(m_cInfinite.m_hWnd, "OSC_DVIS_EDIT_INFINITE", TUT_e_TextEdit);
TUT_M_vRegisterControl(m_cBlendNear.m_hWnd, "OSC_DVIS_EDIT_BLENDNEAR", TUT_e_Slider);
TUT_M_vRegisterControl(m_cBlendFar.m_hWnd, "OSC_DVIS_EDIT_BLENDFAR", TUT_e_Slider);
// color
TUT_M_vRegisterControl(m_cRSlider.m_hWnd, "OSC_DVIS_SLIDER_RED", TUT_e_Slider);
TUT_M_vRegisterControl(m_cGSlider.m_hWnd, "OSC_DVIS_SLIDER_GREEN", TUT_e_Slider);
TUT_M_vRegisterControl(m_cBSlider.m_hWnd, "OSC_DVIS_SLIDER_BLUE", TUT_e_Slider);
TUT_M_vRegisterControl(m_cColor.m_hWnd, "OSC_DVIS_BUTTON_COLOR", TUT_e_Button);
// END TUTORIAL
// init blend
m_cBlendNear.SetRange(0, 255);
m_cBlendFar.SetRange(0, 255);
// init range
m_cRSlider.SetRange(0, 254);
m_cGSlider.SetRange(0, 254);
m_cBSlider.SetRange(0, 254);
// init environment values
m_pDefaultVisEnv = NULL;
fn_vInitVisEnvironment(NULL, FALSE);
m_bInitialised = TRUE;
}
*/
/*===========================================================================
* Description: Init default vis env
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
/*
void SECT_DialogVis::fn_vReinitDialog (void)
{
if (!m_pDefaultVisEnv)
{
m_pDefaultVisEnv = new SECT_VisEnvironment(m_pSectorInterface, "");
m_pDefaultVisEnv->fn_bUnValidate();
m_pDefaultVisEnv->fn_vNotifyUnSave();
}
}
*/
/*===========================================================================
* Description: Init controls
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
/*
void SECT_DialogVis::fn_vInitControls (BOOL bEnable)
{
// init button states
m_cSave.EnableWindow(bEnable);
m_cCancel.EnableWindow(bEnable);
// init name
m_cName.SetReadOnly(!bEnable);
m_cDefault.EnableWindow(bEnable);
// init fog controls
m_cNear.SetReadOnly(!bEnable);
m_cFar.SetReadOnly(!bEnable);
m_cBlendNear.EnableWindow(bEnable);
m_cBlendFar.EnableWindow(bEnable);
m_cInfinite.SetReadOnly(!bEnable);
// init color controls
m_cRSlider.EnableWindow(bEnable);
m_cGSlider.EnableWindow(bEnable);
m_cBSlider.EnableWindow(bEnable);
}
*/
/*===========================================================================
* Description: register initial values
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
/*
void SECT_DialogVis::fn_vInitVisEnvironment (SECT_VisEnvironment *pVisEnv, BOOL bEnable)
{
char szVal[256];
int iRValue, iGValue, iBValue;
// update or create mec env
if ((!pVisEnv) && bEnable)
m_pVisEnv = m_pDefaultVisEnv;
else
m_pVisEnv = pVisEnv;
// update all controls
fn_vInitControls(bEnable);
// init name
m_csName = (m_pVisEnv) ? m_pVisEnv->GetName() : "";
// init fog parameters
m_xNear = (m_pVisEnv) ? m_pVisEnv->GetFogNear() : 0;
m_xFar = (m_pVisEnv) ? m_pVisEnv->GetFogFar() : 0;
m_xBlendNear = (m_pVisEnv) ? m_pVisEnv->GetFogBlendNear() : 0;
m_xBlendFar = (m_pVisEnv) ? m_pVisEnv->GetFogBlendFar() : 0;
m_xInfinite = (m_pVisEnv) ? m_pVisEnv->GetFogInfinite() : 0;
// init fog color
iRValue = (m_pVisEnv) ? (int) (254 * m_pVisEnv->GetFogColor()->xR) : 0;
iGValue = (m_pVisEnv) ? (int) (254 * m_pVisEnv->GetFogColor()->xG) : 0;
iBValue = (m_pVisEnv) ? (int) (254 * m_pVisEnv->GetFogColor()->xB) : 0;
m_stColor = RGB(iRValue, iGValue, iBValue);
// init controls
if (!m_pVisEnv)
{
m_cName.SetWindowText("");
m_cNear.SetWindowText("");
m_cFar.SetWindowText("");
m_cBlendNear.SetPos((int) m_xBlendNear);
m_cBlendFar.SetPos((int) m_xBlendFar);
m_cInfinite.SetWindowText("");
fn_vUpdateSliders();
fn_vUpdateColor();
}
else
{
// name
m_cName.SetWindowText(m_csName);
// near
sprintf(szVal, "%5.2f", m_xNear);
m_cNear.SetWindowText(szVal);
// far
sprintf(szVal, "%5.2f", m_xFar);
m_cFar.SetWindowText(szVal);
// blend near
m_cBlendNear.SetPos((int) m_xBlendNear);
// blend far
m_cBlendFar.SetPos((int) m_xBlendFar);
// infinite
sprintf(szVal, "%5.2f", m_xInfinite);
m_cInfinite.SetWindowText(szVal);
// color
fn_vUpdateSliders();
fn_vUpdateColor();
}
}
*/
/*===========================================================================
* Description: Update sliders
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
/*
void SECT_DialogVis::fn_vUpdateSliders (void)
{
m_cRSlider.SetPos(254 - GetRValue(m_stColor));
m_cGSlider.SetPos(254 - GetGValue(m_stColor));
m_cBSlider.SetPos(254 - GetBValue(m_stColor));
}
*/
/*===========================================================================
* Description: Update Color
* Creation date:
* Author: Shaitan
*---------------------------------------------------------------------------
* Revision date: Author:
*=========================================================================*/
/*
void SECT_DialogVis::fn_vUpdateColor (void)
{
RECT rColor;
CDC *pColorDC;
// get controls parameters
pColorDC = m_cColor.GetDC();
m_cColor.GetClientRect(&rColor);
// fill control
pColorDC->FillSolidRect(&rColor, m_stColor);
}
*/
//#################################################################################
// SECT_DialogVis Messages
//#################################################################################
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnChangeName (void)
{
CString csFinalName;
char szNewName[256];
// no mec env => no changes
if ((!m_pVisEnv)||(!m_cName.GetModify()))
return;
// get corresponding name
m_cName.GetWindowText(szNewName, 255);
if (!strcmp(szNewName, ""))
{
m_cName.SetWindowText(m_csName);
return;
}
// get prefixed name
csFinalName = m_pSectorInterface->GetInterface()->GetPrefixedName(szNewName);
// check name validity
if (m_pVisEnv->fn_eCheckValidity(csFinalName) == E_mc_None)
m_csName = csFinalName;
// update window
m_cName.SetWindowText(m_csName);
m_cName.SetModify(FALSE);
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnChangeNear (void)
{
float xNear;
char szVal[15];
if (m_cNear.GetModify())
{
m_cNear.GetWindowText(szVal, 15);
xNear = (float) atof(szVal);
if ((xNear <= m_xFar) && (xNear <= m_xInfinite) && (xNear >= 0))
m_xNear = xNear;
else
{
sprintf(szVal, "%5.2f", m_xNear);
m_cNear.SetWindowText(szVal);
}
m_cNear.SetModify(FALSE);
}
}
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnChangeFar (void)
{
float xFar;
char szVal[15];
if (m_cFar.GetModify())
{
m_cFar.GetWindowText(szVal, 15);
xFar = (float) atof(szVal);
if ((xFar >= m_xNear) && (xFar <= m_xInfinite) && (xFar >= 0))
m_xFar = xFar;
else
{
sprintf(szVal, "%5.2f", m_xFar);
m_cFar.SetWindowText(szVal);
}
m_cFar.SetModify(FALSE);
}
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnChangeInfinite (void)
{
float xInfinite;
char szVal[15];
if (m_cInfinite.GetModify())
{
m_cInfinite.GetWindowText(szVal, 15);
xInfinite = (float) atof(szVal);
if ((xInfinite >= m_xNear) && (xInfinite >= m_xFar) && (xInfinite >= 0))
m_xInfinite = xInfinite;
else
{
sprintf(szVal, "%5.2f", m_xInfinite);
m_cInfinite.SetWindowText(szVal);
}
m_cInfinite.SetModify(FALSE);
}
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnVScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
int iRValue, iGValue, iBValue;
// color
if ((pScrollBar == (void*) &m_cRSlider) ||
(pScrollBar == (void*) &m_cGSlider) ||
(pScrollBar == (void*) &m_cBSlider))
{
// update color
iRValue = 254 - m_cRSlider.GetPos();
iGValue = 254 - m_cGSlider.GetPos();
iBValue = 254 - m_cBSlider.GetPos();
m_stColor = RGB(iRValue, iGValue, iBValue);
// update control
fn_vUpdateColor();
}
CFormView::OnVScroll(nSBCode, nPos, pScrollBar);
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)
{
if (pScrollBar == (void*) &m_cBlendNear)
{
// get new near value
m_xBlendNear = (float) m_cBlendNear.GetPos();
// if necessary, update far value
if (m_xBlendFar < m_xBlendNear)
{
m_xBlendFar = m_xBlendNear + 1;
m_cBlendFar.SetPos((int)m_xBlendFar);
}
}
if (pScrollBar == (void*) &m_cBlendFar)
{
// get new far value
m_xBlendFar = (float) m_cBlendFar.GetPos();
// if necessary, update near value
if (m_xBlendFar < m_xBlendNear)
{
m_xBlendNear = m_xBlendFar - 1;
m_cBlendNear.SetPos((int)m_xBlendNear);
}
}
CFormView::OnHScroll(nSBCode, nPos, pScrollBar);
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnEditColor ()
{
CColorDialog oColorDialog;
// display color dialog
if (oColorDialog.DoModal() == IDOK)
{
// get selected color
m_stColor = oColorDialog.GetColor();
// update controls
fn_vUpdateSliders();
fn_vUpdateColor();
}
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnSave()
{
SECT_ModifVisEnvParams *pModif;
GLI_tdstColor stColor;
int iRValue, iGValue, iBValue;
// no mec env => no changes
if (!m_pVisEnv)
return;
// default mec env => create new one
if (m_pVisEnv == m_pDefaultVisEnv)
m_pVisEnv = new SECT_VisEnvironment(m_pSectorInterface, m_csName);
// get real color
iRValue = GetRValue(m_stColor);
iGValue = GetGValue(m_stColor);
iBValue = GetBValue(m_stColor);
stColor.xR = ((float) iRValue) / ((float) 254.0);
stColor.xG = ((float) iGValue) / ((float) 254.0);
stColor.xB = ((float) iBValue) / ((float) 254.0);
// modif
pModif = new SECT_ModifVisEnvParams(m_pSectorInterface, E_tm_ModifVisEnv, m_pVisEnv,
m_csName, m_xNear, m_xFar, m_xBlendNear,
m_xBlendFar, m_xInfinite, &stColor);
m_pSectorInterface->M_GetEditManager()->AskFor(pModif);
// give controtl to dialog env & update combo meca
m_pSectorInterface->GetDialogEnv()->fn_vInitVisListBox();
m_pSectorInterface->GetDialogEnv()->fn_vSelectVisual(m_pVisEnv);
m_pSectorInterface->GetDialogEnv()->fn_vInitControls(TRUE);
m_pSectorInterface->GetDialogSrf()->fn_vInitControls(TRUE);
m_pSectorInterface->GetDialogEnvs()->fn_vInitControls(TRUE);
m_pSectorInterface->GetDialogEnvList()->fn_vInitControls(TRUE);
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnCancel()
{
// new mec env => cancel
if (m_pVisEnv == m_pDefaultVisEnv)
m_pVisEnv = NULL;
// reinit controls
fn_vInitVisEnvironment(m_pVisEnv, FALSE);
// give controtl to dialog env
m_pSectorInterface->GetDialogEnv()->fn_vInitControls(TRUE);
m_pSectorInterface->GetDialogSrf()->fn_vInitControls(TRUE);
m_pSectorInterface->GetDialogEnvs()->fn_vInitControls(TRUE);
m_pSectorInterface->GetDialogEnvList()->fn_vInitControls(TRUE);
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnDefault()
{
if (m_cName.GetModify())
{
OnChangeName();
m_cName.SetFocus();
}
if (m_cNear.GetModify())
{
OnChangeNear();
m_cNear.SetFocus();
}
if (m_cFar.GetModify())
{
OnChangeFar();
m_cFar.SetFocus();
}
if (m_cInfinite.GetModify())
{
OnChangeInfinite();
m_cInfinite.SetFocus();
}
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnSize(UINT, int, int)
{
RECT WindowPosition;
int ecx, ecy;
if (!m_bInitialised)
return;
// calculate name position
GetWindowRect(&WindowPosition);
ecx = WindowPosition.right - WindowPosition.left;
ecx = (ecx < 160) ? 10 : ecx - 150;
ecy = WindowPosition.bottom - WindowPosition.top;
ecy = (ecy < 180) ? 0 : ecy-180;
// buttons
m_cCancel.MoveWindow(ecx/2, 5, 40, 16);
m_cSave.MoveWindow(ecx/2+110, 5, 40, 16);
// name
m_cName.MoveWindow(ecx/2, 25, 150, 20);
// Fog
GetDlgItem(SECT_IDC_STATICFOG)->MoveWindow(ecx/2, 50, 150, 120);
// parameters
GetDlgItem(SECT_IDC_STATICINFINITE)->MoveWindow(ecx/2+5, 65, 40, 15);
GetDlgItem(SECT_IDC_STATICNEAR)->MoveWindow(ecx/2+5, 80, 40 , 15);
GetDlgItem(SECT_IDC_STATICFAR)->MoveWindow(ecx/2+5, 95, 40, 15);
m_cInfinite.MoveWindow(ecx/2+50, 65, 45, 15);
m_cNear.MoveWindow(ecx/2+50, 80, 45, 15);
m_cFar.MoveWindow(ecx/2+50, 95, 45, 15);
GetDlgItem(SECT_IDC_STATICBLEND)->MoveWindow(ecx/2+100, 65, 45 , 15);
m_cBlendNear.MoveWindow(ecx/2+100, 80, 45, 15);
m_cBlendFar.MoveWindow(ecx/2+100, 95, 45, 15);
// color
GetDlgItem(SECT_IDC_STATICCOLOR)->MoveWindow(ecx/2+5, 133, 40, 15);
m_cColor.MoveWindow(ecx/2+100, 117, 40, 40);
m_cRSlider.MoveWindow(ecx/2+50, 123, 15, 40);
m_cGSlider.MoveWindow(ecx/2+67, 123, 15, 40);
m_cBSlider.MoveWindow(ecx/2+84, 123, 15, 40);
// update
fn_vUpdateColor();
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnDrawItem (int nIDCtl, LPDRAWITEMSTRUCT lpDIS)
{
// not interested => default handling
if ((lpDIS->itemID == LB_ERR) || (nIDCtl != SECT_IDC_COLOR))
return;
// draw item
fn_vUpdateColor();
}
*/
/*----------------------------------------
----------------------------------------*/
/*
void SECT_DialogVis::OnDestroy (void)
{
// FOR TUTORIAL
TUT_M_vGetTutDll();
// visual environment
TUT_M_vUnregisterControl(m_cName.m_hWnd);
TUT_M_vUnregisterControl(m_cDefault.m_hWnd);
TUT_M_vUnregisterControl(m_cCancel.m_hWnd);
TUT_M_vUnregisterControl(m_cSave.m_hWnd);
// parameters
TUT_M_vUnregisterControl(m_cNear.m_hWnd);
TUT_M_vUnregisterControl(m_cFar.m_hWnd);
TUT_M_vUnregisterControl(m_cInfinite.m_hWnd);
// color
TUT_M_vUnregisterControl(m_cRSlider.m_hWnd);
TUT_M_vUnregisterControl(m_cGSlider.m_hWnd);
TUT_M_vUnregisterControl(m_cBSlider.m_hWnd);
TUT_M_vUnregisterControl(m_cColor.m_hWnd);
// END TUTORIAL
CFormView::OnDestroy();
}
*/