// DiaView.cpp : implementation file // #include "stdafx.h" #include "ACP_Base.h" #include "matres.h" #include "itf.h" #include "gli.h" #include "gmt.h" #include "dpt.h" #include "MatList.hpp" #include "inctex.h" #include "_interf.hpp" #include "GMatObj.hpp" #include "VMatObj.hpp" #include "TexObj.hpp" #include "DiaView.hpp" #include "PatternList.hpp" #include "DiaText.hpp" #include "TextureDlg.h" #include "choosecolor.hpp" #include "x:\cpa\main\inc\_editid.h" #include "TUT.h" #define C_fAutoScrollEditCoeff 100.0f #define C_szAutoScrollStringFormat "%6.2f" extern Material_Interface *gs_p_oMaterialInterface; ///////////////////////////////////////////////////////////////////////////// // DiaView dialog IMPLEMENT_DYNCREATE(DiaView, CFormView) //================================================================================================== //================================================================================================== DiaView::DiaView() : CFormView(DiaView::IDD) { //{{AFX_DATA_INIT(DiaView) //}}AFX_DATA_INIT m_bControlsFilledFromMaterial = FALSE; m_hEditedVisualMaterial = NULL; //NULL is the invalid value, until otherwise specified... } //================================================================================================== //================================================================================================== DiaView::~DiaView() { } //================================================================================================== //================================================================================================== void DiaView::DoDataExchange(CDataExchange* pDX) { CFormView::DoDataExchange(pDX); //{{AFX_DATA_MAP(DiaView) //}}AFX_DATA_MAP } //================================================================================================== //================================================================================================== BEGIN_MESSAGE_MAP(DiaView, CFormView) //{{AFX_MSG_MAP(DiaView) ON_WM_CREATE() ON_BN_CLICKED(IDC_CHECK_TEXTURE, OnCheckTexture) ON_WM_DRAWITEM() ON_BN_CLICKED(IDC_BUTTON_DIFFUSE, OnButtonDiffuse) ON_BN_CLICKED(IDC_BUTTON_SPECULAR, OnButtonSpecular) ON_BN_CLICKED(IDC_BUTTON_AMBIENT, OnButtonAmbient) ON_BN_CLICKED(IDC_CHECK_GOURAUD, OnCheckGouraud) ON_EN_CHANGE(IDC_EDIT_SPECEXP, OnChangeEditSpecExp) ON_BN_CLICKED(IDC_CHECK_CHROME, OnCheckChrome) ON_BN_CLICKED(IDC_CHECK_TRANS, OnCheckTrans) ON_BN_CLICKED(IDC_CHECK_ALPHASENSITIVE, OnCheckAlphaSensitive) ON_BN_CLICKED(IDC_BUTTON_ADDANIMATED, OnButtonAddAnimatedTexture) ON_CBN_SELCHANGE(IDC_COMBO_ANIMATEDTEXTURES, OnSelchangeComboAnimatedTextures) ON_BN_CLICKED(IDC_BUTTON_REMOVEANIMATED, OnButtonRemoveAnimatedTexture) ON_BN_CLICKED(IDC_BUTTON_MOVEUP, OnButtonMoveUpTexture) ON_BN_CLICKED(IDC_BUTTON_MOVEDOWN, OnButtonMoveDownTexture) ON_BN_CLICKED(IDC_CHECK_AUTOSCROLL, OnCheckAutoScroll) ON_EN_KILLFOCUS(IDC_EDIT_HORIZONTALSCROLL, OnKillFocusEditHorizontalScroll) ON_EN_KILLFOCUS(IDC_EDIT_VERTICALSCROLL, OnKillFocusEditVerticalScroll) ON_BN_CLICKED(IDC_CHECK_BACKFACE, OnCheckBackface) //}}AFX_MSG_MAP END_MESSAGE_MAP() //================================================================================================== //================================================================================================== int DiaView::OnToolHitTest(CPoint point, TOOLINFO* pTI) const { CString csMessage; switch ( CWnd::OnToolHitTest(point, pTI) ) { default: csMessage = "???????????????????????????????????????????????????"; break; case IDC_STATIC: csMessage = ""; break; case IDC_BUTTON_DIFFUSE: case IDC_BUTTON_AMBIENT: case IDC_BUTTON_SPECULAR: csMessage = "view/edit the color of the current game material"; break; case IDC_EDIT_SPECEXP: csMessage = "edit the specularity of the current game material"; break; case IDC_CHECK_CHROME: csMessage = "make the material chromed"; break; case IDC_CHECK_BACKFACE: csMessage = "tell that the material is to be seen from both sides of a single-sided face"; break; case IDC_CHECK_TEXTURE: csMessage = "enable/disable the texture of the current game material"; break; case IDC_CHECK_GOURAUD: csMessage = "select the rendering method for the current game material"; break; case IDC_CHECK_TRANS: csMessage = "enable/disable transparency of the current game material"; break; case IDC_CHECK_ALPHASENSITIVE: csMessage = "enable/disable transparent light sensitivity"; break; case IDC_CHECK_AUTOSCROLL: csMessage = "enable/disable texture autoscrolling"; break; } //output the help info in the status bar fn_vGiveProgressInfo(csMessage, -1); //there is no hit for a true tooltip return -1; } //================================================================================================== //================================================================================================== //void DiaView::fn_vInitDialog ( void ) //{ // UpdateData(FALSE); //} //================================================================================================== //================================================================================================== void DiaView::m_fn_vShowMaterial(GMT_tdxHandleToGameMaterial _hMat, int _iTextureIndex /*= -1*/) { tdoEditorGameMaterial *p_oEditedGameMaterial = gs_p_oMaterialInterface->m_p_oGetEditedMaterial(); BOOL bAGameMAterialIsEdited = p_oEditedGameMaterial ? TRUE : FALSE; static BOOL s_bFirstDone = FALSE; if ( !s_bFirstDone ) { s_bFirstDone = TRUE; //enable the buttons so that they will be redisplayed properly GetDlgItem(IDC_BUTTON_MOVEUP )->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON_MOVEDOWN )->EnableWindow(TRUE); //attach the icons to the buttons HICON hIcon; hIcon = AfxGetApp()->LoadIcon(IDI_ICON_MOVEDOWN); ((CButton *) GetDlgItem(IDC_BUTTON_MOVEDOWN))->SetIcon(hIcon); hIcon = AfxGetApp()->LoadIcon(IDI_ICON_MOVEUP); ((CButton *) GetDlgItem(IDC_BUTTON_MOVEUP))->SetIcon(hIcon); //and force redisplay of their contents GetDlgItem(IDC_BUTTON_MOVEUP)->Invalidate(); GetDlgItem(IDC_BUTTON_MOVEDOWN)->Invalidate(); } /* if no material is currently selected, disable everything */ if ( !bAGameMAterialIsEdited ) { m_hEditedVisualMaterial = NULL; //invalidate the handle //clear the controls ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->SetCurSel(CB_ERR); GetDlgItem(IDC_EDIT_HORIZONTALSCROLL )->SetWindowText(""); GetDlgItem(IDC_EDIT_VERTICALSCROLL )->SetWindowText(""); GetDlgItem(IDC_EDIT_SPECEXP )->SetWindowText(""); ((CButton *) GetDlgItem(IDC_CHECK_AUTOSCROLL))->SetCheck(FALSE); //and disable them GetDlgItem(IDC_CHECK_GOURAUD )->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_DIFFUSE )->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_AMBIENT )->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_SPECULAR )->EnableWindow(FALSE); GetDlgItem(IDC_CHECK_AUTOSCROLL )->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_HORIZONTALSCROLL )->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_VERTICALSCROLL )->EnableWindow(FALSE); GetDlgItem(IDC_CHECK_TRANS )->EnableWindow(FALSE); GetDlgItem(IDC_EDIT_SPECEXP )->EnableWindow(FALSE); GetDlgItem(IDC_SPIN_SPECEXP )->EnableWindow(FALSE); GetDlgItem(IDC_CHECK_TEXTURE )->EnableWindow(FALSE); GetDlgItem(IDC_CHECK_CHROME )->EnableWindow(FALSE); GetDlgItem(IDC_CHECK_BACKFACE )->EnableWindow(FALSE); GetDlgItem(IDC_CHECK_ALPHASENSITIVE )->EnableWindow(FALSE); GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_ADDANIMATED )->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_REMOVEANIMATED )->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_MOVEUP )->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_MOVEDOWN )->EnableWindow(FALSE); //tell the texture view to clear itself gs_p_oMaterialInterface->m_p_oGetTexView()->m_fn_vShowMaterial(_hMat); return; } //normally, the specified engine game material must belong to the current editor game material... ASSERT(_hMat == p_oEditedGameMaterial->GetData()); //get the submaterial's handle m_hEditedVisualMaterial = GMT_fn_hGetVisualMaterial(_hMat); //prevent self-induced windows messages handling m_bControlsFilledFromMaterial = TRUE; //here bAGameMAterialIsEdited is TRUE, so enable the controls GetDlgItem(IDC_CHECK_GOURAUD )->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON_DIFFUSE )->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON_AMBIENT )->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON_SPECULAR )->EnableWindow(TRUE); GetDlgItem(IDC_CHECK_AUTOSCROLL )->EnableWindow(TRUE); GetDlgItem(IDC_CHECK_TRANS )->EnableWindow(TRUE); GetDlgItem(IDC_EDIT_SPECEXP )->EnableWindow(TRUE); GetDlgItem(IDC_SPIN_SPECEXP )->EnableWindow(TRUE); GetDlgItem(IDC_CHECK_TEXTURE )->EnableWindow(TRUE); GetDlgItem(IDC_CHECK_CHROME )->EnableWindow(TRUE); GetDlgItem(IDC_CHECK_BACKFACE )->EnableWindow(TRUE); GetDlgItem(IDC_CHECK_ALPHASENSITIVE )->EnableWindow(TRUE); GetDlgItem(IDC_BUTTON_ADDANIMATED )->EnableWindow(TRUE); unsigned long xMType; CString csEditContents; GLI_xGetMaterialType(m_hEditedVisualMaterial, &xMType); BOOL bMaterialIsTextured = (xMType & GLI_C_lIsTextured); if ( _iTextureIndex < 0 ) _iTextureIndex = 0; ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->ResetContent(); long lNbTextures = GLI_lGetMaterialNumberOfAnimatedTexture(m_hEditedVisualMaterial); if (_iTextureIndex > lNbTextures - 1) _iTextureIndex = lNbTextures - 1; if ( lNbTextures > 0 ) { //since the first texture will be selected in the combo, it cannot be moved up GetDlgItem(IDC_BUTTON_MOVEUP )->EnableWindow(_iTextureIndex > 0); //but it can be moved down, if there are more than one texture, and the selected texture is not the last GetDlgItem(IDC_BUTTON_MOVEDOWN )->EnableWindow(bMaterialIsTextured && (lNbTextures > 1) && (_iTextureIndex < (lNbTextures - 1)) ); //there are animated textures, so enable the combo if there is more than one GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES)->EnableWindow(bMaterialIsTextured && (lNbTextures > 1)); //TODO: retirer la partie && (lNbTextures > 1) quand la fct moteur fonctionnera pour le cas lNbTextures == 1 GetDlgItem(IDC_BUTTON_REMOVEANIMATED )->EnableWindow(bMaterialIsTextured); //now add entries in the combo for the additional textures for ( ; lNbTextures > 0; lNbTextures -- ) { GLI_tdstTexture *hAnimatedTexture; float fDuration; GLI_vGetMaterialAnimatedTexture(m_hEditedVisualMaterial, lNbTextures - 1, &hAnimatedTexture, &fDuration); tdoEditorTexture *p_oEditorTexture = (tdoEditorTexture *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hAnimatedTexture); short wInsert = ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->InsertString(0, p_oEditorTexture ? p_oEditorTexture->GetName() : "N/A"); if ( wInsert != CB_ERR ) ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->SetItemDataPtr(wInsert, p_oEditorTexture); } } else //there is no texture { if ( bMaterialIsTextured ) //if the material believed it was textured though it is not { //remove the textured flag attribute GLI_xSetMaterialType(m_hEditedVisualMaterial, xMType & ~GLI_C_lIsTextured); m_vNotifyChangeToScripts(); bMaterialIsTextured = FALSE; } //disable the irrelevant combos GetDlgItem(IDC_BUTTON_MOVEUP )->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_MOVEDOWN )->EnableWindow(FALSE); GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_REMOVEANIMATED )->EnableWindow(FALSE); } //now select the default texture of the combo ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->SetCurSel(bMaterialIsTextured ? _iTextureIndex : -1); //and make the texture view update its display according to the selected item in the combo gs_p_oMaterialInterface->m_p_oGetTexView()->m_fn_vShowMaterial(_hMat, bMaterialIsTextured ? _iTextureIndex : -1); //update the rest of the controls according to the edited material GetDlgItem(IDC_CHECK_GOURAUD)->SetWindowText((xMType & GLI_C_lIsGouraud) ? "Gouraud" : "Flat"); ((CButton *) GetDlgItem(IDC_CHECK_TEXTURE))->SetCheck(bMaterialIsTextured); ((CButton *) GetDlgItem(IDC_CHECK_CHROME))->SetCheck(GLI_bIsMaterialChromed(m_hEditedVisualMaterial)); ((CButton *) GetDlgItem(IDC_CHECK_BACKFACE))->SetCheck(GLI_bIsMaterialBackface(m_hEditedVisualMaterial)); ((CButton *) GetDlgItem(IDC_CHECK_ALPHASENSITIVE))->SetCheck(!(xMType & GLI_C_lIsNotLightAlphaSensitive)); ((CButton *) GetDlgItem(IDC_CHECK_TRANS))->SetCheck(!(xMType & GLI_C_lIsNotGrided)); //get the autoscroll speed float fUSpeed, fVSpeed; long lSwitch; GLI_xGetMaterialTextureScrollingCoef(m_hEditedVisualMaterial, 0, &lSwitch, &fUSpeed, &fVSpeed); csEditContents.Format(C_szAutoScrollStringFormat, fUSpeed * C_fAutoScrollEditCoeff); csEditContents.TrimLeft(); GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->SetWindowText(csEditContents); csEditContents.Format(C_szAutoScrollStringFormat, fVSpeed * C_fAutoScrollEditCoeff); csEditContents.TrimLeft(); GetDlgItem(IDC_EDIT_VERTICALSCROLL)->SetWindowText(csEditContents); ((CButton *) GetDlgItem(IDC_CHECK_AUTOSCROLL))->SetCheck(lSwitch); //the autoscroll parameters are modifiable only if autoscroll is enabled GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->EnableWindow(lSwitch); GetDlgItem(IDC_EDIT_VERTICALSCROLL )->EnableWindow(lSwitch); //get the specular color's exponent GEO_tdstColor stColor; long lSpecExp; GLI_xGetMaterialSpecularCoef(m_hEditedVisualMaterial, &lSpecExp, &stColor); csEditContents.Format("%d", lSpecExp); GetDlgItem(IDC_EDIT_SPECEXP)->SetWindowText(csEditContents); //note that the 3 color buttons contents will be updated by OnDrawItem() GetDlgItem(IDC_BUTTON_DIFFUSE )->Invalidate(); GetDlgItem(IDC_BUTTON_AMBIENT )->Invalidate(); GetDlgItem(IDC_BUTTON_SPECULAR)->Invalidate(); m_bControlsFilledFromMaterial = FALSE; //Invalidate(); } ///////////////////////////////////////////////////////////////////////////// // DiaView diagnostics #ifdef _DEBUG void DiaView::AssertValid() const { CFormView::AssertValid(); } void DiaView::Dump(CDumpContext& dc) const { CFormView::Dump(dc); } #endif //_DEBUG ///////////////////////////////////////////////////////////////////////////// // DiaView message handlers //----------------------------------------------------------------------------- // Description : handle function for BN_CLICKED //--------------------------------------------------------------------------- void DiaView::OnCheckTexture() { unsigned long xMType, xOldType; GLI_xGetMaterialType(m_hEditedVisualMaterial, &xMType); xOldType = xMType; //check if the material references textures long lNbTextures = GLI_lGetMaterialNumberOfAnimatedTexture(m_hEditedVisualMaterial); if ( ((CButton *) GetDlgItem(IDC_CHECK_TEXTURE))->GetCheck() ) //we try to enable material texturing { if ( lNbTextures == 0 ) //but there is no texture { xMType &= ~GLI_C_lIsTextured; //and clear the texture flag } else //there are textures xMType |= GLI_C_lIsTextured; //lets set the texture flag } else //we want to clear the flag xMType &= ~GLI_C_lIsTextured; if ( xOldType != xMType ) { M_p_oGetEditManager()->AskFor(new tdoChangeMaterialStateModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeMaterialStateModif::E_st_Textured )); /* //make listview update the displayed texture for the edited game material GLI_tdstTexture *p_stTexture; //we display the first texture of the animation GLI_xGetMaterialTexture(m_hEditedVisualMaterial, &p_stTexture); gs_p_oMaterialInterface->m_p_oGetMaterialListView()->m_fn_vSetItemImage( gs_p_oMaterialInterface->m_p_oGetMaterialListView()->m_fn_lGetSelectedItem(), (short) ( (xMType & GLI_C_lIsTextured) ? gs_p_oMaterialInterface->m_p_oGetMaterialsTextureList()->m_fn_iGetBitmapIndexByLong((long) p_stTexture) : gs_p_oMaterialInterface->m_p_oGetMaterialsTextureList()->m_fn_iGetBitmapIndex(C_szNoBitmapName) ) ); gs_p_oMaterialInterface->m_p_oGetMaterialListView()->m_fn_vRedrawSelectedItem(); //update the "textured" attribute of the material GLI_xSetMaterialType(m_hEditedVisualMaterial, xMType); //tell the object it changed, and has to be saved m_vNotifyChangeToScripts(); //if the edited game material is used in the scene if ( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_bIsReferenced() ) //tell the main view to redraw itself because a material changed aspect M_GetMainDevice3D()->DrawObject(); */ } //now make the visual and texture views update their contents gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vShowMaterial( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->GetCurSel() ); GetDlgItem(IDC_BUTTON_ADDANIMATED)->EnableWindow(((CButton *) GetDlgItem(IDC_CHECK_TEXTURE))->GetCheck()); } //----------------------------------------------------------------------------- // Description : handle function for WM_DRAWITEM //--------------------------------------------------------------------------- void DiaView::OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpDrawItemStruct) { CDC *pDC = CDC::FromHandle(lpDrawItemStruct->hDC); RECT *rect = &lpDrawItemStruct->rcItem; GEO_tdstColor stColor; long lSpecularExponent; COLORREF xColor; BOOL bAMaterialIsEdited = m_hEditedVisualMaterial ? TRUE : FALSE; BOOL bNormalDraw = FALSE; switch ( nIDCtl ) { default: CFormView::OnDrawItem(nIDCtl, lpDrawItemStruct); bNormalDraw = TRUE; break; case IDC_BUTTON_DIFFUSE: if ( bAMaterialIsEdited ) { GLI_xGetMaterialDiffuseCoef(m_hEditedVisualMaterial, &stColor); xColor = RGB( stColor.xR * 255, stColor.xG * 255, stColor.xB * 255 ); } else xColor = RGB(192,192,192); pDC->FillSolidRect( rect, xColor); break; case IDC_BUTTON_AMBIENT: if ( bAMaterialIsEdited ) { GLI_xGetMaterialAmbientCoef(m_hEditedVisualMaterial, &stColor); xColor = RGB( stColor.xR * 255, stColor.xG * 255, stColor.xB * 255 ); } else xColor = RGB(192,192,192); pDC->FillSolidRect( rect, xColor); break; case IDC_BUTTON_SPECULAR: if ( bAMaterialIsEdited ) { GLI_xGetMaterialSpecularCoef(m_hEditedVisualMaterial, &lSpecularExponent, &stColor); xColor = RGB( stColor.xR * 255, stColor.xG * 255, stColor.xB * 255 ); } else xColor = RGB(192,192,192); pDC->FillSolidRect( rect, xColor); break; } //if we have drawn a color button if ( bAMaterialIsEdited && !bNormalDraw ) { //draw the alpha color in the button too, in the righthand third of the rectangle short wOffset = (rect->right * 2) / 3; rect->left += wOffset; xColor = RGB(stColor.xA * 255, stColor.xA * 255, stColor.xA * 255); pDC->FillSolidRect(rect, xColor); } } //================================================================================================== // Description : handle function for WM_CREATE //================================================================================================== int DiaView::OnCreate(LPCREATESTRUCT lpCreateStruct) { if (CFormView::OnCreate(lpCreateStruct) == -1) return -1; EnableToolTips(TRUE); return 0; } //================================================================================================== // Description : handle function for WM_DRAWITEM //================================================================================================== BOOL DiaView::Create( LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwRequestedStyle, const RECT& rect, CWnd* pParentWnd, UINT nID, CCreateContext* pContext ) { BOOL bResult = CFormView::Create( lpszClassName, lpszWindowName, dwRequestedStyle, rect, pParentWnd, nID, pContext ); //control registration for tutorial and assistants, should be unregistered when view is destroyed TUT_M_vGetTutDll(); TUT_M_vRegisterControlID(IDC_CHECK_ALPHASENSITIVE,"TGM_DiaViewCheckAlphaSensitive",TUT_e_Button); TUT_M_vRegisterControlID(IDC_CHECK_TRANS,"TGM_DiaViewCheckTransparency",TUT_e_Button); TUT_M_vRegisterControlID(IDC_CHECK_TEXTURE,"TGM_DiaViewCheckTextured",TUT_e_Button); TUT_M_vRegisterControlID(IDC_CHECK_GOURAUD,"TGM_DiaViewCheckGouraud",TUT_e_Button); TUT_M_vRegisterControlID(IDC_CHECK_CHROME,"TGM_DiaViewCheckChrome",TUT_e_Button); TUT_M_vRegisterControlID(IDC_CHECK_BACKFACE,"TGM_DiaViewCheckBackface",TUT_e_Button); TUT_M_vRegisterControlID(IDC_CHECK_AUTOSCROLL,"TGM_DiaViewCheckAutoScroll",TUT_e_Button); TUT_M_vRegisterControlID(IDC_EDIT_HORIZONTALSCROLL,"TGM_DiaViewEditHorScroll",TUT_e_TextEdit); TUT_M_vRegisterControlID(IDC_EDIT_VERTICALSCROLL,"TGM_DiaViewEditVertScroll",TUT_e_TextEdit); TUT_M_vRegisterControlID(IDC_BUTTON_AMBIENT,"TGM_DiaViewButtonAmbientColor",TUT_e_Button); TUT_M_vRegisterControlID(IDC_BUTTON_DIFFUSE,"TGM_DiaViewButtonDiffusecolor",TUT_e_Button); TUT_M_vRegisterControlID(IDC_BUTTON_SPECULAR,"TGM_DiaViewButtonSpecularcolor",TUT_e_Button); TUT_M_vRegisterControlID(IDC_EDIT_SPECEXP,"TGM_DiaViewEditSpecularExponent",TUT_e_TextEdit); TUT_M_vRegisterControlID(IDC_SPIN_SPECEXP,"TGM_DiaViewSpinSpecularExponent",TUT_e_Spin); TUT_M_vRegisterControlID(IDC_COMBO_ANIMATEDTEXTURES,"TGM_DiaViewTexturesCombo",TUT_e_ComboBox); TUT_M_vRegisterControlID(IDC_BUTTON_ADDANIMATED,"TGM_DiaViewButtonAddAnimated",TUT_e_Button); TUT_M_vRegisterControlID(IDC_BUTTON_REMOVEANIMATED,"TGM_DiaViewButtonRemoveAnimated",TUT_e_Button); TUT_M_vRegisterControlID(IDC_BUTTON_MOVEUP,"TGM_DiaViewButtonMoveUp",TUT_e_Button); TUT_M_vRegisterControlID(IDC_BUTTON_MOVEDOWN,"TGM_DiaViewButtonMoveDown",TUT_e_Button); return bResult; } //================================================================================================== // Description : change texture in m_oMemDC //================================================================================================== void DiaView::OnButtonDiffuse() { M_p_oGetEditManager()->AskFor(new tdoChangeMaterialColorModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeMaterialColorModif::E_ct_Diffuse )); } //================================================================================================== // Description : change texture in m_oMemDC //================================================================================================== void DiaView::OnButtonSpecular() { M_p_oGetEditManager()->AskFor(new tdoChangeMaterialColorModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeMaterialColorModif::E_ct_Specular )); } //================================================================================================== // Description : edit a color of the VMT //================================================================================================== void DiaView::OnButtonAmbient() { M_p_oGetEditManager()->AskFor(new tdoChangeMaterialColorModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeMaterialColorModif::E_ct_Ambient )); } //================================================================================================== //================================================================================================== void DiaView::OnCheckGouraud() { M_p_oGetEditManager()->AskFor(new tdoChangeMaterialStateModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeMaterialStateModif::E_st_Gouraud )); /* unsigned long xMType; GLI_xGetMaterialType(m_hEditedVisualMaterial, &xMType); //change if ( xMType & GLI_C_lIsGouraud ) xMType &= ~GLI_C_lIsGouraud; else xMType |= GLI_C_lIsGouraud; GLI_xSetMaterialType(m_hEditedVisualMaterial, xMType); m_vNotifyChangeToScripts(); //if the edited game material is used in the scene if ( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_bIsReferenced() ) //tell the main view to redraw itself because a material changed aspect M_GetMainDevice3D()->DrawObject(); //update controls according to the edited material ((CButton *) GetDlgItem(IDC_CHECK_GOURAUD))->SetCheck(FALSE); GetDlgItem(IDC_CHECK_GOURAUD)->SetWindowText((xMType & GLI_C_lIsGouraud) ? "Gouraud" : "Flat"); */ } //================================================================================================== //================================================================================================== void DiaView::m_vNotifyChangeToScripts() { gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(m_hEditedVisualMaterial) ->fn_vNotifySave(); } //================================================================================================== //================================================================================================== void DiaView::OnChangeEditSpecExp() { if ( !m_bControlsFilledFromMaterial && m_hEditedVisualMaterial != NULL ) //test handle validity { //get the old values long lSpecExp; GEO_tdstColor stColor; GLI_xGetMaterialSpecularCoef(m_hEditedVisualMaterial, &lSpecExp, &stColor); //read the contents of the specular exponent edit CString csSpecExp; GetDlgItem(IDC_EDIT_SPECEXP)->GetWindowText(csSpecExp); lSpecExp = atoi((char*)LPCTSTR(csSpecExp)); //and store it back in the visual material GLI_xSetMaterialSpecularCoef(m_hEditedVisualMaterial, lSpecExp, &stColor); //notify the change m_vNotifyChangeToScripts(); } } //================================================================================================== //================================================================================================== void DiaView::OnCheckAutoScroll() { if ( !m_bControlsFilledFromMaterial && m_hEditedVisualMaterial != NULL ) //test handle validity { //prevent SetWindowText() generated windows messages from being handled m_bControlsFilledFromMaterial = TRUE; long lSwitch = ((CButton *) GetDlgItem(IDC_CHECK_AUTOSCROLL))->GetCheck(); M_p_oGetEditManager()->AskFor(new tdoChangeAutoScrollModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeAutoScrollModif::E_as_Switch, lSwitch, 0.0f, 0.0f) ); /* //get the old values float fUSpeed, fVSpeed; long lSwitch; GLI_xGetMaterialTextureScrollingCoef(m_hEditedVisualMaterial, 0, &lSwitch, &fUSpeed, &fVSpeed); //read the contents of the autoscroll switch if ( lSwitch = (((CButton *) GetDlgItem(IDC_CHECK_AUTOSCROLL))->GetCheck() ? 1 : 0) ) { //if we want to enable autoscroll, make sure the engine function will not clear the flag //when it sees that the speeds are null... if ( fUSpeed == 0.0 && fVSpeed == 0.0 ) { fUSpeed = (float) (1.0 / C_fAutoScrollEditCoeff); //dont forget to set the control's contents accordingly GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->SetWindowText("1"); } //enable tiling of all the textures used by this material, so that autoscroll remains nice long lNbtextures = GLI_lGetMaterialNumberOfAnimatedTexture(m_hEditedVisualMaterial); for ( lNbtextures --; lNbtextures >= 0; lNbtextures -- ) { GLI_tdstTexture *hTexture; float fDuration; GLI_vGetMaterialAnimatedTexture(m_hEditedVisualMaterial, lNbtextures, &hTexture, &fDuration); TEX_vSetTextureTilingMode(hTexture, TRUE, TRUE); //do not forget to save the section gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hTexture)->fn_vNotifySave(); } //make the texture view redisplay the current texture gs_p_oMaterialInterface->m_p_oGetTexView()->m_fn_vShowMaterial( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->GetCurSel() ); } //and store it back in the visual material GLI_xSetMaterialTextureScrollingCoef(m_hEditedVisualMaterial, 0, lSwitch, fUSpeed, fVSpeed); //notify the change m_vNotifyChangeToScripts(); //the autoscroll parameters are modifiable only if autoscroll is enabled GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->EnableWindow(lSwitch); GetDlgItem(IDC_EDIT_VERTICALSCROLL )->EnableWindow(lSwitch); */ //restore normal message handling m_bControlsFilledFromMaterial = FALSE; } } //================================================================================================== //================================================================================================== void DiaView::OnKillFocusEditHorizontalScroll() { if ( !m_bControlsFilledFromMaterial && m_hEditedVisualMaterial != NULL ) //test handle validity { //prevent SetWindowText() generated windows messages from being handled m_bControlsFilledFromMaterial = TRUE; //read the contents of the autoscroll horizontal speed edit CString csHorScroll; GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->GetWindowText(csHorScroll); float fUSpeed = (float) atof((char*)LPCTSTR(csHorScroll)); if ( fUSpeed < -C_fAutoScrollEditCoeff ) fUSpeed = -C_fAutoScrollEditCoeff; else if ( fUSpeed > C_fAutoScrollEditCoeff ) fUSpeed = C_fAutoScrollEditCoeff; //and store it back in the visual material fUSpeed /= C_fAutoScrollEditCoeff; M_p_oGetEditManager()->AskFor(new tdoChangeAutoScrollModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeAutoScrollModif::E_as_USpeed, 1, fUSpeed, 0.0f) ); /* //get the old values float fUSpeed, fVSpeed; long lSwitch; GLI_xGetMaterialTextureScrollingCoef(m_hEditedVisualMaterial, 0, &lSwitch, &fUSpeed, &fVSpeed); //read the contents of the autoscroll horizontal speed edit CString csHorScroll; GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->GetWindowText(csHorScroll); fUSpeed = (float) atof((char*)LPCTSTR(csHorScroll)); if ( fUSpeed < -C_fAutoScrollEditCoeff ) fUSpeed = -C_fAutoScrollEditCoeff; else if ( fUSpeed > C_fAutoScrollEditCoeff ) fUSpeed = C_fAutoScrollEditCoeff; //and store it back in the visual material fUSpeed /= C_fAutoScrollEditCoeff; GLI_xSetMaterialTextureScrollingCoef(m_hEditedVisualMaterial, 0, ((fUSpeed != 0.0f) || (fVSpeed != 0.0f)), fUSpeed, fVSpeed); //notify the change m_vNotifyChangeToScripts(); //read the values again, to see if the flag is still set GLI_xGetMaterialTextureScrollingCoef(m_hEditedVisualMaterial, 0, &lSwitch, &fUSpeed, &fVSpeed); ((CButton *) GetDlgItem(IDC_CHECK_AUTOSCROLL))->SetCheck(lSwitch); //rewrite the contents of the edit according to the definitive value of the coefficient CString csValue; csValue.Format(C_szAutoScrollStringFormat, fUSpeed * C_fAutoScrollEditCoeff); csValue.TrimLeft(); GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->SetWindowText(csValue); //the autoscroll parameters are modifiable only if autoscroll is enabled // GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->EnableWindow(lSwitch); // GetDlgItem(IDC_EDIT_VERTICALSCROLL )->EnableWindow(lSwitch); */ //restore normal message handling m_bControlsFilledFromMaterial = FALSE; } } //================================================================================================== //================================================================================================== void DiaView::OnKillFocusEditVerticalScroll() { if ( !m_bControlsFilledFromMaterial && m_hEditedVisualMaterial != NULL ) //test handle validity { //prevent SetWindowText() generated windows messages from being handled m_bControlsFilledFromMaterial = TRUE; //read the contents of the autoscroll horizontal speed edit CString csVertScroll; GetDlgItem(IDC_EDIT_VERTICALSCROLL)->GetWindowText(csVertScroll); float fVSpeed = (float) atof((char*)LPCTSTR(csVertScroll)); if ( fVSpeed < -C_fAutoScrollEditCoeff ) fVSpeed = -C_fAutoScrollEditCoeff; else if ( fVSpeed > C_fAutoScrollEditCoeff ) fVSpeed = C_fAutoScrollEditCoeff; //and store it back in the visual material fVSpeed /= C_fAutoScrollEditCoeff; M_p_oGetEditManager()->AskFor(new tdoChangeAutoScrollModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeAutoScrollModif::E_as_VSpeed, 1, 0.0f, fVSpeed) ); /* //get the old values float fUSpeed, fVSpeed; long lSwitch; GLI_xGetMaterialTextureScrollingCoef(m_hEditedVisualMaterial, 0, &lSwitch, &fUSpeed, &fVSpeed); //read the contents of the autoscroll horizontal speed edit CString csVertScroll; GetDlgItem(IDC_EDIT_VERTICALSCROLL)->GetWindowText(csVertScroll); fVSpeed = (float) atof((char*)LPCTSTR(csVertScroll)); if ( fVSpeed < -C_fAutoScrollEditCoeff ) fVSpeed = -C_fAutoScrollEditCoeff; else if ( fVSpeed > C_fAutoScrollEditCoeff ) fVSpeed = C_fAutoScrollEditCoeff; //and store it back in the visual material fVSpeed /= C_fAutoScrollEditCoeff; GLI_xSetMaterialTextureScrollingCoef(m_hEditedVisualMaterial, 0, ((fUSpeed != 0.0f) || (fVSpeed != 0.0f)), fUSpeed, fVSpeed); //notify the change m_vNotifyChangeToScripts(); //read the values again, to see if the flag is still set GLI_xGetMaterialTextureScrollingCoef(m_hEditedVisualMaterial, 0, &lSwitch, &fUSpeed, &fVSpeed); ((CButton *) GetDlgItem(IDC_CHECK_AUTOSCROLL))->SetCheck(lSwitch); //rewrite the contents of the edit according to the definitive value of the coefficient CString csValue; csValue.Format(C_szAutoScrollStringFormat, fVSpeed * C_fAutoScrollEditCoeff); csValue.TrimLeft(); GetDlgItem(IDC_EDIT_VERTICALSCROLL)->SetWindowText(csValue); //the autoscroll parameters are modifiable only if autoscroll is enabled // GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->EnableWindow(lSwitch); // GetDlgItem(IDC_EDIT_VERTICALSCROLL )->EnableWindow(lSwitch); */ //restore normal message handling m_bControlsFilledFromMaterial = FALSE; } } //================================================================================================== //================================================================================================== void DiaView::OnCheckBackface() { M_p_oGetEditManager()->AskFor(new tdoChangeMaterialStateModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeMaterialStateModif::E_st_Backface )); /* unsigned long xType; GLI_xGetMaterialType(m_hEditedVisualMaterial, &xType); BOOL bBackface = ((CButton *) GetDlgItem(IDC_CHECK_BACKFACE))->GetCheck(); //until the chrome removal function is available... in SetTextureAsEnvironnement() if ( bBackface ) GLI_xSetMaterialType(m_hEditedVisualMaterial, xType & (GLI_C_lAllIsEnable - GLI_C_lIsTestingBackface)); else GLI_xSetMaterialType(m_hEditedVisualMaterial, xType | GLI_C_lIsTestingBackface); //if the edited game material is used in the scene if ( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_bIsReferenced() ) //tell the main view to redraw itself because a material changed aspect M_GetMainDevice3D()->DrawObject(); //notify the change m_vNotifyChangeToScripts(); */ } //================================================================================================== //================================================================================================== void DiaView::OnCheckChrome() { M_p_oGetEditManager()->AskFor(new tdoChangeMaterialStateModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeMaterialStateModif::E_st_Chrome )); /* unsigned long xType; GLI_xGetMaterialType(m_hEditedVisualMaterial, &xType); BOOL bChrome = ((CButton *) GetDlgItem(IDC_CHECK_CHROME))->GetCheck(); //until the chrome removal function is available... in SetTextureAsEnvironnement() if ( bChrome ) GLI_xSetMaterialType(m_hEditedVisualMaterial, xType & (GLI_C_lAllIsEnable - GLI_C_lIsNotChromed)); else GLI_xSetMaterialType(m_hEditedVisualMaterial, xType | GLI_C_lIsNotChromed); //if the edited game material is used in the scene if ( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_bIsReferenced() ) //tell the main view to redraw itself because a material changed aspect M_GetMainDevice3D()->DrawObject(); //notify the change m_vNotifyChangeToScripts(); */ } //================================================================================================== //================================================================================================== void DiaView::OnCheckTrans() { M_p_oGetEditManager()->AskFor(new tdoChangeMaterialStateModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeMaterialStateModif::E_st_Transparent )); /* unsigned long xType; GLI_xGetMaterialType(m_hEditedVisualMaterial, &xType); BOOL bTransparent = ((CButton *) GetDlgItem(IDC_CHECK_TRANS))->GetCheck(); if ( bTransparent ) GLI_xSetMaterialType(m_hEditedVisualMaterial, xType & (GLI_C_lAllIsEnable - GLI_C_lIsNotGrided)); else GLI_xSetMaterialType(m_hEditedVisualMaterial, xType | GLI_C_lIsNotGrided); //if the edited game material is used in the scene if ( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_bIsReferenced() ) //tell the main view to redraw itself because a material changed aspect M_GetMainDevice3D()->DrawObject(); //notify the change m_vNotifyChangeToScripts(); */ } //================================================================================================== //================================================================================================== void DiaView::OnCheckAlphaSensitive() { M_p_oGetEditManager()->AskFor(new tdoChangeMaterialStateModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), tdoChangeMaterialStateModif::E_st_Alpha )); /* unsigned long xType; GLI_xGetMaterialType(m_hEditedVisualMaterial, &xType); BOOL bAlphaSensitive = ((CButton *) GetDlgItem(IDC_CHECK_ALPHASENSITIVE))->GetCheck(); if ( bAlphaSensitive ) //set the alpha and transparency flags to make it work { GLI_xSetMaterialType(m_hEditedVisualMaterial, xType & (GLI_C_lAllIsEnable - GLI_C_lIsNotLightAlphaSensitive - GLI_C_lIsNotGrided)); //if we check the alpha sensitiveness, we have to set the transparency flag in order to have it work ((CButton *) GetDlgItem(IDC_CHECK_TRANS))->SetCheck(TRUE); } else //clear only the alpha flag, because the transparency flag works by itself too GLI_xSetMaterialType(m_hEditedVisualMaterial, xType | GLI_C_lIsNotLightAlphaSensitive); //if the edited game material is used in the scene if ( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_bIsReferenced() ) //tell the main view to redraw itself because a material changed aspect M_GetMainDevice3D()->DrawObject(); //notify the change m_vNotifyChangeToScripts(); */ } //================================================================================================== //================================================================================================== void DiaView::OnButtonAddAnimatedTexture() { gs_p_oMaterialInterface->m_p_oGetTextureChooserDialog()->DoModal(); GLI_tdstTexture *hTextureToInsert = NULL; int iImage = gs_p_oMaterialInterface->m_p_oGetTextureChooserDialog()->m_fn_iGetSelectedImage(); if (iImage != -1) hTextureToInsert = (GLI_tdstTexture *) gs_p_oMaterialInterface->m_p_oGetMaterialsTextureList()->m_fn_lGetBitmapLong(iImage); if ( hTextureToInsert ) { short wCurrentTexture = ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->GetCurSel(); if ( wCurrentTexture == CB_ERR ) //if there are no texture yet wCurrentTexture = 0; //add at the beginning of the list else wCurrentTexture ++; //else add after the current texture //perform the modif M_p_oGetEditManager()->AskFor(new tdoInsertAnimatedTextureModif( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), wCurrentTexture, hTextureToInsert, (float) (100.0 + (((float) rand()) / RAND_MAX * 10.0)) )); } } //================================================================================================== //================================================================================================== void DiaView::OnButtonRemoveAnimatedTexture() { //get the current animated texture index short wCurrentTexture = ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->GetCurSel(); if ( wCurrentTexture != CB_ERR ) { tdoEditorGameMaterial *p_oGameMaterial = gs_p_oMaterialInterface->m_p_oGetEditedMaterial(); if (GLI_lGetMaterialNumberOfAnimatedTexture(GMT_fn_hGetVisualMaterial(p_oGameMaterial->m_hGetEngineMaterial())) <= 1) return; //perform the modif M_p_oGetEditManager()->AskFor(new tdoRemoveAnimatedTextureModif( p_oGameMaterial->m_hGetEngineMaterial(), wCurrentTexture )); } } //================================================================================================== //================================================================================================== void DiaView::OnSelchangeComboAnimatedTextures() { //make the texture view dialog display the correponding animated texture short wItem = ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->GetCurSel(); if ( wItem != CB_ERR ) { gs_p_oMaterialInterface->m_p_oGetTexView()->m_fn_vShowMaterial( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), wItem ); //update the moveup/movedown buttons GetDlgItem(IDC_BUTTON_MOVEUP)->EnableWindow(wItem > 0); GetDlgItem(IDC_BUTTON_MOVEDOWN)->EnableWindow(wItem < GLI_lGetMaterialNumberOfAnimatedTexture(m_hEditedVisualMaterial) - 1); } else { GetDlgItem(IDC_BUTTON_MOVEUP)->EnableWindow(FALSE); GetDlgItem(IDC_BUTTON_MOVEDOWN)->EnableWindow(FALSE); } } //================================================================================================== //================================================================================================== void DiaView::OnButtonMoveUpTexture() { //get the current animated texture index short wCurrentTexture = ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->GetCurSel(); //if it can be moved up if ( wCurrentTexture != CB_ERR && wCurrentTexture > 0 ) { tdoEditorGameMaterial *p_oGameMaterial = gs_p_oMaterialInterface->m_p_oGetEditedMaterial(); //move the texture one step earlier in the animation list M_p_oGetEditManager()->AskFor(new tdoMoveAnimatedTextureModif( p_oGameMaterial->m_hGetEngineMaterial(), wCurrentTexture, -1 )); } } //================================================================================================== //================================================================================================== void DiaView::OnButtonMoveDownTexture() { //get the current animated texture index CComboBox *p_oCombo = (CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES); short wCurrentTexture = p_oCombo->GetCurSel(); //if it can be moved down if ( (wCurrentTexture != CB_ERR) && (wCurrentTexture < (p_oCombo->GetCount() - 1)) ) { tdoEditorGameMaterial *p_oGameMaterial = gs_p_oMaterialInterface->m_p_oGetEditedMaterial(); //move the texture one step later in the animation list M_p_oGetEditManager()->AskFor(new tdoMoveAnimatedTextureModif( p_oGameMaterial->m_hGetEngineMaterial(), wCurrentTexture, 1 )); } } //================================================================================================== //================================================================================================== void DiaView::m_fn_vUpdateAlphaButton (GMT_tdxHandleToGameMaterial _hMat, BOOL bActivate) { ACP_tdxHandleOfMaterial hEditedVisualMaterial = GMT_fn_hGetVisualMaterial(_hMat); if (hEditedVisualMaterial != m_hEditedVisualMaterial) m_fn_vShowMaterial(_hMat); else ((CButton *) GetDlgItem(IDC_CHECK_ALPHASENSITIVE))->SetCheck(bActivate); } //================================================================================================== //================================================================================================== void DiaView::m_fn_vUpdateChromeButton (GMT_tdxHandleToGameMaterial _hMat, BOOL bActivate) { ACP_tdxHandleOfMaterial hEditedVisualMaterial = GMT_fn_hGetVisualMaterial(_hMat); if (hEditedVisualMaterial != m_hEditedVisualMaterial) m_fn_vShowMaterial(_hMat); else ((CButton *) GetDlgItem(IDC_CHECK_CHROME))->SetCheck(bActivate); } //================================================================================================== //================================================================================================== void DiaView::m_fn_vUpdateGouraudButton (GMT_tdxHandleToGameMaterial _hMat, BOOL bActivate) { ACP_tdxHandleOfMaterial hEditedVisualMaterial = GMT_fn_hGetVisualMaterial(_hMat); if (hEditedVisualMaterial != m_hEditedVisualMaterial) m_fn_vShowMaterial(_hMat); else { ((CButton *) GetDlgItem(IDC_CHECK_GOURAUD))->SetCheck(FALSE); GetDlgItem(IDC_CHECK_GOURAUD)->SetWindowText(bActivate ? "Gouraud" : "Flat"); } } //================================================================================================== //================================================================================================== void DiaView::m_fn_vUpdateTextureButton (GMT_tdxHandleToGameMaterial _hMat, BOOL bActivate) { ACP_tdxHandleOfMaterial hEditedVisualMaterial = GMT_fn_hGetVisualMaterial(_hMat); if (hEditedVisualMaterial != m_hEditedVisualMaterial) m_fn_vShowMaterial(_hMat); else { ((CButton *) GetDlgItem(IDC_CHECK_TEXTURE))->SetCheck(bActivate); //now make the visual and texture views update their contents m_fn_vShowMaterial(gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->GetCurSel()); GetDlgItem(IDC_BUTTON_ADDANIMATED)->EnableWindow(bActivate); } } //================================================================================================== //================================================================================================== void DiaView::m_fn_vUpdateBackfaceButton (GMT_tdxHandleToGameMaterial _hMat, BOOL bActivate) { ACP_tdxHandleOfMaterial hEditedVisualMaterial = GMT_fn_hGetVisualMaterial(_hMat); if (hEditedVisualMaterial != m_hEditedVisualMaterial) m_fn_vShowMaterial(_hMat); else ((CButton *) GetDlgItem(IDC_CHECK_BACKFACE))->SetCheck(bActivate); } //================================================================================================== //================================================================================================== void DiaView::m_fn_vUpdateTransparentButton (GMT_tdxHandleToGameMaterial _hMat, BOOL bActivate) { ACP_tdxHandleOfMaterial hEditedVisualMaterial = GMT_fn_hGetVisualMaterial(_hMat); if (hEditedVisualMaterial != m_hEditedVisualMaterial) m_fn_vShowMaterial(_hMat); else ((CButton *) GetDlgItem(IDC_CHECK_TRANS))->SetCheck(bActivate); } //================================================================================================== //================================================================================================== void DiaView::m_fn_vUpdateAutoScroll (GMT_tdxHandleToGameMaterial _hMat, long lSwitch, float fUSpeed, float fVSpeed) { ACP_tdxHandleOfMaterial hEditedVisualMaterial = GMT_fn_hGetVisualMaterial(_hMat); if (hEditedVisualMaterial != m_hEditedVisualMaterial) m_fn_vShowMaterial(_hMat); else { CString csValue; // update autoscroll button ((CButton *) GetDlgItem(IDC_CHECK_AUTOSCROLL))->SetCheck(lSwitch); // update U value csValue.Format(C_szAutoScrollStringFormat, fUSpeed * C_fAutoScrollEditCoeff); csValue.TrimLeft(); GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->SetWindowText(csValue); // update V value csValue.Format(C_szAutoScrollStringFormat, fVSpeed * C_fAutoScrollEditCoeff); csValue.TrimLeft(); GetDlgItem(IDC_EDIT_VERTICALSCROLL)->SetWindowText(csValue); //make the texture view redisplay the current texture gs_p_oMaterialInterface->m_p_oGetTexView()->m_fn_vShowMaterial( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_hGetEngineMaterial(), ((CComboBox *) GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES))->GetCurSel() ); //the autoscroll parameters are modifiable only if autoscroll is enabled GetDlgItem(IDC_EDIT_HORIZONTALSCROLL)->EnableWindow(lSwitch); GetDlgItem(IDC_EDIT_VERTICALSCROLL )->EnableWindow(lSwitch); } } //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== tdoInsertAnimatedTextureModif::tdoInsertAnimatedTextureModif ( GMT_tdxHandleToGameMaterial _MyMatHandle, long _lInsertPoint, GLI_tdstTexture *_hTexture, float _fDuration ) : CPA_Modif(0, "") { m_hEditedGameMaterial = _MyMatHandle; m_p_oEditedGameMaterial = (tdoEditorGameMaterial *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(m_hEditedGameMaterial); m_hTexture = _hTexture; m_p_oEditorTexture = (tdoEditorTexture *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(m_hTexture); m_lInsertPoint = _lInsertPoint; m_fDuration = _fDuration; m_p_oRemoveAnimatedTextureModif = NULL; SetName(CString("insertion of texture '") + m_p_oEditorTexture->GetName() + "' in material '" + m_p_oEditedGameMaterial->GetName() + "'"); } //================================================================================================== //================================================================================================== tdoInsertAnimatedTextureModif::~tdoInsertAnimatedTextureModif() { if ( m_p_oRemoveAnimatedTextureModif ) { delete m_p_oRemoveAnimatedTextureModif; m_p_oRemoveAnimatedTextureModif = NULL; } } //================================================================================================== //================================================================================================== BOOL tdoInsertAnimatedTextureModif::Do() { if ( m_p_oRemoveAnimatedTextureModif ) return m_p_oRemoveAnimatedTextureModif->Undo(); else { ACP_tdxHandleOfMaterial hMaterialVisual = GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial); GLI_vAddMaterialAnimatedTexture(hMaterialVisual, m_lInsertPoint, m_hTexture, m_fDuration); if ( m_lInsertPoint == 0 ) //if we insert the texture at the beginning of the list { //make it the standard unanimated texture too GLI_xSetMaterialTexture(hMaterialVisual, m_hTexture); //tell the material list view to update the bitmap associated to this game material gs_p_oMaterialInterface->m_p_oGetMaterialListView()->m_vResetMaterialItemTexture(m_p_oEditedGameMaterial); } //set the textured flag, if it was not set unsigned long xMType; GLI_xGetMaterialType(hMaterialVisual, &xMType); GLI_xSetMaterialType(hMaterialVisual, xMType | GLI_C_lIsTextured); //tel the engine that something changed about the texture animation for this material GLI_xRefreshAnimatedTexture(hMaterialVisual); //notify the changes to the scripts tdoEditorVisualMaterial *p_oVisualMaterial = (tdoEditorVisualMaterial *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hMaterialVisual); p_oVisualMaterial->fn_vNotifySave(); //create the coherence manager link if ( m_p_oEditorTexture ) g_oCoherenceManager.m_fn_vAddALink(p_oVisualMaterial, m_p_oEditorTexture); //if the material is currenly visible if ( m_p_oEditedGameMaterial == gs_p_oMaterialInterface->m_p_oGetEditedMaterial() ) //make the texture and material view update their display gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vShowMaterial(m_hEditedGameMaterial, m_lInsertPoint); //now create an opposite modif for further do/undo operation m_p_oRemoveAnimatedTextureModif = new tdoRemoveAnimatedTextureModif(m_hEditedGameMaterial, m_lInsertPoint); return TRUE; } } //================================================================================================== //================================================================================================== BOOL tdoInsertAnimatedTextureModif::Undo() { return m_p_oRemoveAnimatedTextureModif ? m_p_oRemoveAnimatedTextureModif->Do() : FALSE; } //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== tdoRemoveAnimatedTextureModif::tdoRemoveAnimatedTextureModif ( GMT_tdxHandleToGameMaterial _MyMatHandle, long _lRemovePoint ) : CPA_Modif(0, "") { m_hEditedGameMaterial = _MyMatHandle; m_p_oEditedGameMaterial = (tdoEditorGameMaterial *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(m_hEditedGameMaterial); m_lRemovePoint = _lRemovePoint; GLI_vGetMaterialAnimatedTexture(GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial), m_lRemovePoint, &m_hTexture, &m_fDuration); m_p_oEditorTexture = (tdoEditorTexture *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(m_hTexture); m_p_oInsertAnimatedTextureModif = NULL; SetName(CString("Removal of texture '") + m_p_oEditorTexture->GetName() + "' from material '" + m_p_oEditedGameMaterial->GetName() + "'"); } //================================================================================================== //================================================================================================== tdoRemoveAnimatedTextureModif::~tdoRemoveAnimatedTextureModif() { if ( m_p_oInsertAnimatedTextureModif ) { delete m_p_oInsertAnimatedTextureModif; m_p_oInsertAnimatedTextureModif = NULL; } } //================================================================================================== //================================================================================================== BOOL tdoRemoveAnimatedTextureModif::Do() { if ( m_p_oInsertAnimatedTextureModif ) return m_p_oInsertAnimatedTextureModif->Undo(); else { ACP_tdxHandleOfMaterial hMaterialVisual = GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial); //remove the animated texture from the list GLI_vDeleteMaterialAnimatedTexture(hMaterialVisual, m_lRemovePoint); //if this was the last texture, untexture the material completely long lNewNbAnimatedTextures = GLI_lGetMaterialNumberOfAnimatedTexture(hMaterialVisual); if ( lNewNbAnimatedTextures == 0 ) { //remove the texture pointer GLI_xSetMaterialTexture(hMaterialVisual, NULL); //remove the textured flag, and setthe flag telling the chrome effect is disabled unsigned long xMType; GLI_xGetMaterialType(hMaterialVisual, &xMType); GLI_xSetMaterialType(hMaterialVisual, xMType & ~GLI_C_lIsTextured | ~GLI_C_lIsNotChromed); } else if ( m_lRemovePoint == 0 ) //there remains at least one texture in the animation list { //make the material reference the new first texture as its standard unanimated texture GLI_tdstTexture *hNewStdTexture; float fDuration; GLI_vGetMaterialAnimatedTexture(hMaterialVisual, m_lRemovePoint, &hNewStdTexture, &fDuration); GLI_xSetMaterialTexture(hMaterialVisual, hNewStdTexture); //tell the material list view to update the bitmap associated to this game material gs_p_oMaterialInterface->m_p_oGetMaterialListView()->m_vResetMaterialItemTexture(m_p_oEditedGameMaterial); } //tel the engine that something changed about the texture animation for this material GLI_xRefreshAnimatedTexture(hMaterialVisual); //save the visual material section tdoEditorVisualMaterial *p_oVisualMaterial = (tdoEditorVisualMaterial *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hMaterialVisual); p_oVisualMaterial->fn_vNotifySave(); //remove the cohemngr link g_oCoherenceManager.m_fn_vRemoveALink(p_oVisualMaterial, m_p_oEditorTexture); //if the material is currenly visible if ( m_p_oEditedGameMaterial == gs_p_oMaterialInterface->m_p_oGetEditedMaterial() ) //redisplay it completely gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vShowMaterial(m_hEditedGameMaterial, m_lRemovePoint); m_p_oInsertAnimatedTextureModif = new tdoInsertAnimatedTextureModif(m_hEditedGameMaterial, m_lRemovePoint, m_hTexture, m_fDuration); } return TRUE; } //================================================================================================== //================================================================================================== BOOL tdoRemoveAnimatedTextureModif::Undo() { return m_p_oInsertAnimatedTextureModif ? m_p_oInsertAnimatedTextureModif->Do() : FALSE; } //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== tdoMoveAnimatedTextureModif::tdoMoveAnimatedTextureModif(GMT_tdxHandleToGameMaterial _MyMatHandle, long _lMoved, long _lDirection) : CPA_Modif(0, "") { m_hEditedGameMaterial = _MyMatHandle; m_p_oEditedGameMaterial = (tdoEditorGameMaterial *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(m_hEditedGameMaterial); m_lMovedPoint = _lMoved; //we work only by swap: we dont exchange position of non-contiguous animation components m_lDirection = (_lDirection > 0) ? 1 : -1; //check that the move is al least possible ACP_tdxHandleOfMaterial hMaterialVisual = GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial); if ( !GLI_lGetMaterialNumberOfAnimatedTexture(hMaterialVisual) ) m_lDirection = 0; else { GLI_tdstTexture *hTexture; float fDuration; GLI_vGetMaterialAnimatedTexture(hMaterialVisual, m_lMovedPoint, &hTexture, &fDuration); CString csName = gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hTexture)->GetName() + " texture moved "; csName += m_lDirection < 0 ? "up" : "down"; SetName(csName); } } //================================================================================================== //================================================================================================== tdoMoveAnimatedTextureModif::~tdoMoveAnimatedTextureModif() { } //================================================================================================== //================================================================================================== BOOL tdoMoveAnimatedTextureModif::Do() { //if the constructor decided the move is irrelevant, tell the modif did not occur if ( !m_lDirection ) return FALSE; //compute the upper and lower index being swapped long lUpper, lLower = lUpper = m_lMovedPoint; if ( m_lDirection > 0 ) lUpper += m_lDirection; else lLower += m_lDirection; //we swap by removing the element with the higher index and insert it at the lower index ACP_tdxHandleOfMaterial hMaterialVisual = GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial); //read the animation nodes GLI_tdstTexture *hTextureUp, *hTextureDown; float fDurationUp, fDurationDown; GLI_vGetMaterialAnimatedTexture(hMaterialVisual, lUpper, &hTextureUp, &fDurationUp); GLI_vGetMaterialAnimatedTexture(hMaterialVisual, lLower, &hTextureDown, &fDurationDown); //and modify them, swapping the datae GLI_vModifyMaterialAnimatedTexture(hMaterialVisual, lLower, hTextureUp, fDurationUp); GLI_vModifyMaterialAnimatedTexture(hMaterialVisual, lUpper, hTextureDown, fDurationDown); //if the swapped element is the first of the list if ( lLower == 0 ) { //make the ex-upper texture the default unanimated texture GLI_xSetMaterialTexture(hMaterialVisual, hTextureUp); //tell the material list view to update the bitmap associated to this game material gs_p_oMaterialInterface->m_p_oGetMaterialListView()->m_vResetMaterialItemTexture(m_p_oEditedGameMaterial); } //tel the engine that something changed about the texture animation for this material GLI_xRefreshAnimatedTexture(hMaterialVisual); //and save the visual material section gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hMaterialVisual)->fn_vNotifySave(); //now do the same thing for the combo box, if the material is the one being edited if ( m_p_oEditedGameMaterial == gs_p_oMaterialInterface->m_p_oGetEditedMaterial() ) { CComboBox *p_oCombo = (CComboBox *) gs_p_oMaterialInterface->m_p_oGetVisualView()->GetDlgItem(IDC_COMBO_ANIMATEDTEXTURES); long lCurSel = p_oCombo->GetCurSel(); //if the element is the lower, resinsert it one step later, else one step earlier lCurSel += (lCurSel == lLower) ? 1 : -1; gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vShowMaterial(m_hEditedGameMaterial, lCurSel); //read the name and texture pointer in the current item of the texture list /*CString csName; p_oCombo->GetLBText(lCurSel, csName); tdoEditorTexture *p_oTexture = (tdoEditorTexture *) p_oCombo->GetItemDataPtr(lCurSel); p_oCombo->DeleteString(lCurSel); p_oCombo->InsertString(lCurSel, csName); p_oCombo->SetItemDataPtr(lCurSel, p_oTexture); //reselect the item in the combo p_oCombo->SetCurSel(lCurSel);*/ } return TRUE; } //================================================================================================== //================================================================================================== BOOL tdoMoveAnimatedTextureModif::Undo() { //do and undo are equivalent, because it is a position swap return Do(); } //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== tdoChangeMaterialColorModif::tdoChangeMaterialColorModif ( GMT_tdxHandleToGameMaterial _MyMatHandle, tdeColorType _eType ) : CPA_Modif(0, "") { m_bGoForIt = FALSE; //get the edited game material handles m_hEditedGameMaterial = _MyMatHandle; m_p_oEditedGameMaterial = (tdoEditorGameMaterial *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(m_hEditedGameMaterial); m_eType = _eType; //read the color to be edited CString csName; ACP_tdxHandleOfMaterial hMaterialVisual = GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial); long lDlgItem; switch (m_eType) { case E_ct_Ambient: GLI_xGetMaterialAmbientCoef(hMaterialVisual, &m_xColorBeforeDo); csName = "Ambient"; lDlgItem = IDC_BUTTON_AMBIENT; break; case E_ct_Diffuse: GLI_xGetMaterialDiffuseCoef(hMaterialVisual, &m_xColorBeforeDo); csName = "Diffuse"; lDlgItem = IDC_BUTTON_DIFFUSE; break; case E_ct_Specular: GLI_xGetMaterialSpecularCoef(hMaterialVisual, &m_lSpecExp, &m_xColorBeforeDo); csName = "Specular"; lDlgItem = IDC_BUTTON_SPECULAR; break; } //call the color edit dialog m_xColorAfterDo = m_xColorBeforeDo; m_bGoForIt = fn_bEditColor(gs_p_oMaterialInterface->m_p_oGetVisualView()->GetDlgItem(lDlgItem), &m_xColorAfterDo); //set the name of the modif csName += " color change (" + m_p_oEditedGameMaterial->GetName() + ")"; SetName(csName); } //================================================================================================== //================================================================================================== tdoChangeMaterialColorModif::~tdoChangeMaterialColorModif() { } //================================================================================================== //================================================================================================== BOOL tdoChangeMaterialColorModif::Do() { return m_bGoForIt ? m_bDoIt(m_xColorAfterDo) : FALSE; } //================================================================================================== //================================================================================================== BOOL tdoChangeMaterialColorModif::Undo() { return m_bGoForIt ? m_bDoIt(m_xColorBeforeDo) : FALSE; } //================================================================================================== //================================================================================================== BOOL tdoChangeMaterialColorModif::m_bDoIt(GLI_tdstColor _xNewColor) { ACP_tdxHandleOfMaterial hMaterialVisual = GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial); long lDglItem; switch ( m_eType ) { case E_ct_Ambient: GLI_xSetMaterialAmbientCoef(hMaterialVisual, &_xNewColor); lDglItem = IDC_BUTTON_AMBIENT; break; case E_ct_Diffuse: GLI_xSetMaterialDiffuseCoef(hMaterialVisual, &_xNewColor); lDglItem = IDC_BUTTON_DIFFUSE; break; case E_ct_Specular: GLI_xSetMaterialSpecularCoef(hMaterialVisual, m_lSpecExp, &_xNewColor); lDglItem = IDC_BUTTON_SPECULAR; break; } if ( m_p_oEditedGameMaterial == gs_p_oMaterialInterface->m_p_oGetEditedMaterial() ) { gs_p_oMaterialInterface->m_p_oGetVisualView()->GetDlgItem(lDglItem)->Invalidate(); } //if the edited game material is used in the scene if ( m_p_oEditedGameMaterial->m_bIsReferenced() ) //tell the main view to redraw itself because a material changed aspect M_GetMainDevice3D()->DrawObject(); //tell the material has to be saved tdoEditorVisualMaterial *p_oVisualMaterial = (tdoEditorVisualMaterial *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hMaterialVisual); p_oVisualMaterial->fn_vNotifySave(); return TRUE; } //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== tdoChangeMaterialStateModif::tdoChangeMaterialStateModif (GMT_tdxHandleToGameMaterial _MyMatHandle, tdeStateType _eType) : CPA_Modif(0, "") { //get the edited game material handles m_hEditedGameMaterial = _MyMatHandle; m_p_oEditedGameMaterial = (tdoEditorGameMaterial *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(m_hEditedGameMaterial); m_eType = _eType; m_bFirstTime = TRUE; // get current material type ACP_tdxHandleOfMaterial hEditedVisualMaterial= GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial); GLI_xGetMaterialType(hEditedVisualMaterial, &m_xMaterialType); CString csName = "Change "; switch (m_eType) { case E_st_Alpha: m_bActivated = !(m_xMaterialType & GLI_C_lIsNotLightAlphaSensitive); m_bTransparent = (m_xMaterialType & GLI_C_lIsNotGrided); csName += "alpha sensitivity"; break; case E_st_Transparent: m_bActivated = !(m_xMaterialType & GLI_C_lIsNotGrided); csName += "transparency"; break; case E_st_Textured: m_bActivated = (m_xMaterialType & GLI_C_lIsTextured); csName += "textured state"; break; case E_st_Gouraud: m_bActivated = (m_xMaterialType & GLI_C_lIsGouraud); csName += "gouraud state"; break; case E_st_Chrome: m_bActivated = GLI_bIsMaterialChromed(hEditedVisualMaterial); csName += "chrome state"; break; case E_st_Backface: m_bActivated = GLI_bIsMaterialBackface(hEditedVisualMaterial); csName += "backface state"; break; default: break; } //set the name of the modif csName += " of " + m_p_oEditedGameMaterial->GetName(); SetName(csName); } //================================================================================================== //================================================================================================== tdoChangeMaterialStateModif::~tdoChangeMaterialStateModif() { } //================================================================================================== //================================================================================================== BOOL tdoChangeMaterialStateModif::Do() { return fn_bChangeState(!m_bActivated); } //================================================================================================== //================================================================================================== BOOL tdoChangeMaterialStateModif::Undo() { return fn_bChangeState(m_bActivated); } //================================================================================================== //================================================================================================== BOOL tdoChangeMaterialStateModif::fn_bChangeState (BOOL bActivate) { // get current material type ACP_tdxHandleOfMaterial hEditedVisualMaterial; GLI_tdstTexture *p_stTexture; unsigned long xType; hEditedVisualMaterial= GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial); GLI_xGetMaterialType(hEditedVisualMaterial, &xType); switch (m_eType) { case E_st_Alpha: // change material state if (bActivate) { GLI_xSetMaterialType(hEditedVisualMaterial, xType & (GLI_C_lAllIsEnable - GLI_C_lIsNotLightAlphaSensitive - GLI_C_lIsNotGrided)); gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vUpdateTransparentButton(m_hEditedGameMaterial, TRUE); } else { GLI_xSetMaterialType(hEditedVisualMaterial, xType | GLI_C_lIsNotLightAlphaSensitive); gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vUpdateTransparentButton(m_hEditedGameMaterial, m_bTransparent); } // if necessary, update sate of controls if (!m_bFirstTime) gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vUpdateAlphaButton(m_hEditedGameMaterial,bActivate); break; case E_st_Transparent: // change material state if (bActivate) GLI_xSetMaterialType(hEditedVisualMaterial, xType & (GLI_C_lAllIsEnable - GLI_C_lIsNotGrided)); else GLI_xSetMaterialType(hEditedVisualMaterial, xType | GLI_C_lIsNotGrided); // if necessary, update sate of controls if (!m_bFirstTime) gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vUpdateTransparentButton(m_hEditedGameMaterial,bActivate); break; case E_st_Textured: //we display the first texture of the animation GLI_xGetMaterialTexture(hEditedVisualMaterial, &p_stTexture); gs_p_oMaterialInterface->m_p_oGetMaterialListView()->m_fn_vSetItemImage( gs_p_oMaterialInterface->m_p_oGetMaterialListView()->m_fn_lGetSelectedItem(), (short) ( bActivate ? gs_p_oMaterialInterface->m_p_oGetMaterialsTextureList()->m_fn_iGetBitmapIndexByLong((long) p_stTexture) : gs_p_oMaterialInterface->m_p_oGetMaterialsTextureList()->m_fn_iGetBitmapIndex(C_szNoBitmapName) ) ); gs_p_oMaterialInterface->m_p_oGetMaterialListView()->m_fn_vRedrawSelectedItem(); // change material state if (bActivate) GLI_xSetMaterialType(hEditedVisualMaterial, xType | GLI_C_lIsTextured); else GLI_xSetMaterialType(hEditedVisualMaterial, xType & ~GLI_C_lIsTextured); // if necessary, update sate of controls if (!m_bFirstTime) gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vUpdateTextureButton(m_hEditedGameMaterial,bActivate); break; case E_st_Gouraud: // change material state if (bActivate) GLI_xSetMaterialType(hEditedVisualMaterial, xType | GLI_C_lIsGouraud); else GLI_xSetMaterialType(hEditedVisualMaterial, xType & ~GLI_C_lIsGouraud); // if necessary, update sate of controls gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vUpdateGouraudButton(m_hEditedGameMaterial,bActivate); break; case E_st_Chrome: // change material state if (bActivate) GLI_xSetMaterialType(hEditedVisualMaterial, xType & (GLI_C_lAllIsEnable - GLI_C_lIsNotChromed)); else GLI_xSetMaterialType(hEditedVisualMaterial, xType | GLI_C_lIsNotChromed); // if necessary, update sate of controls if (!m_bFirstTime) gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vUpdateChromeButton(m_hEditedGameMaterial,bActivate); break; case E_st_Backface: // change material state if (bActivate) GLI_xSetMaterialType(hEditedVisualMaterial, xType & (GLI_C_lAllIsEnable - GLI_C_lIsTestingBackface)); else GLI_xSetMaterialType(hEditedVisualMaterial, xType | GLI_C_lIsTestingBackface); // if necessary, update sate of controls if (!m_bFirstTime) gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vUpdateBackfaceButton(m_hEditedGameMaterial,bActivate); break; default: return FALSE; } //if the edited game material is used in the scene if ( gs_p_oMaterialInterface->m_p_oGetEditedMaterial()->m_bIsReferenced() ) //tell the main view to redraw itself because a material changed aspect M_GetMainDevice3D()->DrawObject(); //notify the change gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hEditedVisualMaterial)->fn_vNotifySave(); m_bFirstTime = FALSE; return TRUE; } //================================================================================================== //================================================================================================== //================================================================================================== //================================================================================================== tdoChangeAutoScrollModif::tdoChangeAutoScrollModif (GMT_tdxHandleToGameMaterial _MyMatHandle, tdeAutoScroll eType, long lSwitch, float fUSpeed, float fVSpeed) : CPA_Modif(0, "") { //get the edited game material handles m_hEditedGameMaterial = _MyMatHandle; m_p_oEditedGameMaterial = (tdoEditorGameMaterial *) gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(m_hEditedGameMaterial); m_eType = eType; // get current material type ACP_tdxHandleOfMaterial hEditedVisualMaterial= GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial); //get the old values GLI_xGetMaterialTextureScrollingCoef(hEditedVisualMaterial, 0, &m_lOldSwitch, &m_fOldUSpeed, &m_fOldVSpeed); m_lNewSwitch = (eType == E_as_Switch) ? lSwitch : m_lOldSwitch; m_fNewUSpeed = (eType == E_as_USpeed) ? fUSpeed : m_fOldUSpeed; m_fNewVSpeed = (eType == E_as_VSpeed) ? fVSpeed : m_fOldVSpeed; //set the name of the modif CString csName = "Change Autoscroll of " + m_p_oEditedGameMaterial->GetName(); SetName(csName); } //================================================================================================== //================================================================================================== tdoChangeAutoScrollModif::~tdoChangeAutoScrollModif() { } //================================================================================================== //================================================================================================== BOOL tdoChangeAutoScrollModif::Do() { return fn_bChangeState(TRUE); } //================================================================================================== //================================================================================================== BOOL tdoChangeAutoScrollModif::Undo() { return fn_bChangeState(FALSE); } //================================================================================================== //================================================================================================== BOOL tdoChangeAutoScrollModif::fn_bChangeState (BOOL bDo) { ACP_tdxHandleOfMaterial hEditedVisualMaterial= GMT_fn_hGetVisualMaterial(m_hEditedGameMaterial); float fUSpeed, fVSpeed; long lSwitch; switch (m_eType) { case E_as_Switch: // check new state lSwitch = (!bDo) ? m_lOldSwitch : m_lNewSwitch; //read the contents of the autoscroll switch if (lSwitch) { //if we want to enable autoscroll, make sure the engine function will not clear the flag //when it sees that the speeds are null... if ( m_fOldUSpeed == 0.0 && m_fOldVSpeed == 0.0 ) m_fOldUSpeed = (float) (1.0 / C_fAutoScrollEditCoeff); //enable tiling of all the textures used by this material, so that autoscroll remains nice long lNbtextures = GLI_lGetMaterialNumberOfAnimatedTexture(hEditedVisualMaterial); for ( lNbtextures --; lNbtextures >= 0; lNbtextures -- ) { GLI_tdstTexture *hTexture; float fDuration; GLI_vGetMaterialAnimatedTexture(hEditedVisualMaterial, lNbtextures, &hTexture, &fDuration); TEX_vSetTextureTilingMode(hTexture, TRUE, TRUE); //do not forget to save the section gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hTexture)->fn_vNotifySave(); } } //and store it back in the visual material GLI_xSetMaterialTextureScrollingCoef(hEditedVisualMaterial, 0, lSwitch, m_fOldUSpeed, m_fOldVSpeed); //notify the change gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hEditedVisualMaterial)->fn_vNotifySave(); // update dialog gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vUpdateAutoScroll(m_hEditedGameMaterial,lSwitch, m_fOldUSpeed, m_fOldVSpeed); break; case E_as_USpeed: case E_as_VSpeed: // check new values fUSpeed = (!bDo) ? m_fOldUSpeed : m_fNewUSpeed; fVSpeed = (!bDo) ? m_fOldVSpeed : m_fNewVSpeed; // update material GLI_xSetMaterialTextureScrollingCoef(hEditedVisualMaterial, 0, ((fUSpeed != 0.0f) || (fVSpeed != 0.0f)), fUSpeed, fVSpeed); //notify the change gs_p_oMaterialInterface->m_p_oGetEditorObjectForEngine(hEditedVisualMaterial)->fn_vNotifySave(); //read the values again, to see if the flag is still set GLI_xGetMaterialTextureScrollingCoef(hEditedVisualMaterial, 0, &lSwitch, &fUSpeed, &fVSpeed); // update dialog gs_p_oMaterialInterface->m_p_oGetVisualView()->m_fn_vUpdateAutoScroll(m_hEditedGameMaterial,lSwitch, fUSpeed, fVSpeed); break; default : return FALSE; } return TRUE; }