72static inline float PcToFrac(
int pc)
74 return (
float)pc/100.0f;
77static inline int FracToPc(
float f)
79 if (f<0.0)
return (
int)(100.0f*f - .5f);
80 else return (
int) (100.0f*f + .5f);
114 DiffuseSwatch =
NULL;
115 SpecularSwatch =
NULL;
117 AmbientCoeffSwatch =
NULL;
118 DiffuseCoeffSwatch =
NULL;
119 SpecularCoeffSwatch =
NULL;
120 EmissiveCoeffSwatch =
NULL;
122 DCTFramesSpin =
NULL;
123 DITFramesSpin =
NULL;
124 SCTFramesSpin =
NULL;
125 SITFramesSpin =
NULL;
133 TranslucencySpin =
NULL;
134 ShininessSpin =
NULL;
153 ReleaseIColorSwatch(DiffuseSwatch);
154 DiffuseSwatch =
NULL;
157 if (SpecularSwatch) {
158 ReleaseIColorSwatch(SpecularSwatch);
159 SpecularSwatch =
NULL;
162 if (AmbientCoeffSwatch) {
163 ReleaseIColorSwatch(AmbientCoeffSwatch);
164 AmbientCoeffSwatch =
NULL;
167 if (DiffuseCoeffSwatch) {
168 ReleaseIColorSwatch(DiffuseCoeffSwatch);
169 DiffuseCoeffSwatch =
NULL;
172 if (SpecularCoeffSwatch) {
173 ReleaseIColorSwatch(SpecularCoeffSwatch);
174 SpecularCoeffSwatch =
NULL;
177 if (EmissiveCoeffSwatch) {
178 ReleaseIColorSwatch(EmissiveCoeffSwatch);
179 EmissiveCoeffSwatch =
NULL;
183 HDC hdc = GetDC(HwndPanel);
184 GetGPort()->RestorePalette(hdc,
HpalOld);
185 ReleaseDC(HwndPanel,hdc);
188 TheMtl->SetFlag(GAMEMTL_ROLLUP1_OPEN,
IParams->IsRollupPanelOpen(HwndPanel));
189 TheMtl->SetFlag(GAMEMTL_ROLLUP2_OPEN,
IParams->IsRollupPanelOpen(HwndPsx));
190 TheMtl->SetFlag(GAMEMTL_ROLLUP3_OPEN,
IParams->IsRollupPanelOpen(HwndHints));
191 TheMtl->SetFlag(GAMEMTL_ROLLUP4_OPEN,
IParams->IsRollupPanelOpen(HwndNotes));
195 IParams->UnRegisterDlgWnd(HwndPanel);
196 IParams->DeleteRollupPage(HwndPanel);
199 IParams->UnRegisterDlgWnd(HwndPsx);
200 IParams->DeleteRollupPage(HwndPsx);
203 IParams->UnRegisterDlgWnd(HwndHints);
204 IParams->DeleteRollupPage(HwndHints);
207 IParams->UnRegisterDlgWnd(HwndNotes);
208 IParams->DeleteRollupPage(HwndNotes);
245 InvalidateRect(HwndPanel,
NULL,0);
246 InvalidateRect(HwndPsx,
NULL,0);
247 InvalidateRect(HwndHints,
NULL,0);
248 InvalidateRect(HwndNotes,
NULL,0);
305BOOL GameMtlDlg::PanelProc(HWND hwndDlg,
UINT msg, WPARAM wParam, LPARAM lParam )
307 int id = LOWORD(wParam);
308 int code = HIWORD(wParam);
315 HDC theHDC = GetDC(hwndDlg);
316 HpalOld = GetGPort()->PlugPalette(theHDC);
317 ReleaseDC(hwndDlg,theHDC);
374 if (TheManager->SelectFileInput(&bmi,
HwndEdit)) {
375 texture = NewDefaultBitmapTex();
377 texture->SetMapName((
char *)bmi.Name());
378 TheMtl->SetSubTexmap(ID_DI,texture);
391 if (TheManager->SelectFileInput(&bmi,
HwndEdit)) {
392 texture = NewDefaultBitmapTex();
394 texture->SetMapName((
char *)bmi.Name());
395 TheMtl->SetSubTexmap(ID_SI,texture);
408 if (TheManager->SelectFileInput(&bmi,
HwndEdit)) {
409 texture = NewDefaultBitmapTex();
411 texture->SetMapName((
char *)bmi.Name());
412 TheMtl->SetSubTexmap(ID_SP,texture);
425 if (TheManager->SelectFileInput(&bmi,
HwndEdit)) {
426 texture = NewDefaultBitmapTex();
428 texture->SetMapName((
char *)bmi.Name());
429 TheMtl->SetSubTexmap(ID_RL,texture);
438 TheMtl->EnableMap(ID_DI,GetCheckBox(hwndDlg,
id));
439 if (!GetCheckBox(hwndDlg,
id))
TheMtl->SetSubTexmap(ID_DI,
NULL);
440 UpdateTexmapDisplay(ID_DI);
445 TheMtl->EnableMap(ID_SI,GetCheckBox(hwndDlg,
id));
446 if (!GetCheckBox(hwndDlg,
id))
TheMtl->SetSubTexmap(ID_SI,
NULL);
447 UpdateTexmapDisplay(ID_SI);
452 TheMtl->EnableMap(ID_SP,GetCheckBox(hwndDlg,
id));
453 if (!GetCheckBox(hwndDlg,
id))
TheMtl->SetSubTexmap(ID_SP,
NULL);
454 UpdateTexmapDisplay(ID_SP);
459 TheMtl->EnableMap(ID_RL,GetCheckBox(hwndDlg,
id));
460 if (!GetCheckBox(hwndDlg,
id))
TheMtl->SetSubTexmap(ID_RL,
NULL);
461 UpdateTexmapDisplay(ID_RL);
475 TheMtl->DCTMappingType = mtype;
479 TheMtl->DITMappingType = mtype;
483 TheMtl->SCTMappingType = mtype;
487 TheMtl->SITMappingType = mtype;
498 case CC_COLOR_CHANGE:
501 TheMtl->Diffuse = DiffuseSwatch->GetColor();
502 TheMtl->Specular = SpecularSwatch->GetColor();
503 TheMtl->AmbientCoeff = AmbientCoeffSwatch->GetColor();
504 TheMtl->DiffuseCoeff = DiffuseCoeffSwatch->GetColor();
505 TheMtl->SpecularCoeff = SpecularCoeffSwatch->GetColor();
506 TheMtl->EmissiveCoeff = EmissiveCoeffSwatch->GetColor();
517 IParams->RollupMouseMessage(hwndDlg,
msg,wParam,lParam);
521 case CC_SPINNER_CHANGE:
523 TheMtl->DCTFrames = DCTFramesSpin->GetIVal();
524 TheMtl->DITFrames = DITFramesSpin->GetIVal();
525 TheMtl->SCTFrames = SCTFramesSpin->GetIVal();
526 TheMtl->SITFrames = SITFramesSpin->GetIVal();
528 TheMtl->DCTFrameRate = DCTRateSpin->GetFVal();
529 TheMtl->DITFrameRate = DITRateSpin->GetFVal();
530 TheMtl->SCTFrameRate = SCTRateSpin->GetFVal();
531 TheMtl->SITFrameRate = SITRateSpin->GetFVal();
533 TheMtl->SetOpacity(OpacitySpin->GetFVal());
534 TheMtl->SetTranslucency(TranslucencySpin->GetFVal());
535 TheMtl->SetShininess(ShininessSpin->GetFVal());
536 TheMtl->FogCoeff = FogSpin->GetFVal();
543 case CC_SPINNER_BUTTONUP:
565 TheMtl->DCTFrames = DCTFramesSpin->GetIVal();
566 TheMtl->DITFrames = DITFramesSpin->GetIVal();
567 TheMtl->SCTFrames = SCTFramesSpin->GetIVal();
568 TheMtl->SITFrames = SITFramesSpin->GetIVal();
570 TheMtl->DCTFrameRate = DCTRateSpin->GetFVal();
571 TheMtl->DITFrameRate = DITRateSpin->GetFVal();
572 TheMtl->SCTFrameRate = SCTRateSpin->GetFVal();
573 TheMtl->SITFrameRate = SITRateSpin->GetFVal();
575 TheMtl->SetOpacity(OpacitySpin->GetFVal());
576 TheMtl->SetTranslucency(TranslucencySpin->GetFVal());
577 TheMtl->SetShininess(ShininessSpin->GetFVal());
578 TheMtl->FogCoeff = FogSpin->GetFVal();
580 ReleaseISpinner(DCTFramesSpin);
581 ReleaseISpinner(DITFramesSpin);
582 ReleaseISpinner(SCTFramesSpin);
583 ReleaseISpinner(SITFramesSpin);
584 ReleaseISpinner(DCTRateSpin);
585 ReleaseISpinner(DITRateSpin);
586 ReleaseISpinner(SCTRateSpin);
587 ReleaseISpinner(SITRateSpin);
588 ReleaseISpinner(OpacitySpin);
589 ReleaseISpinner(TranslucencySpin);
590 ReleaseISpinner(ShininessSpin);
591 ReleaseISpinner(FogSpin);
593 DCTFramesSpin = DITFramesSpin = SCTFramesSpin = SITFramesSpin =
NULL;
594 DCTRateSpin = DITRateSpin = SCTRateSpin = SITRateSpin =
NULL;
595 OpacitySpin = TranslucencySpin = ShininessSpin = FogSpin =
NULL;
617static BOOL CALLBACK PanelDlgProc(HWND hwndDlg,
UINT msg, WPARAM wParam, LPARAM lParam)
621 if (
msg==WM_INITDIALOG) {
623 theDlg->HwndPanel = hwndDlg;
624 SetWindowLong(hwndDlg, GWL_USERDATA,lParam);
626 if ((theDlg = (
GameMtlDlg *)GetWindowLong(hwndDlg, GWL_USERDATA) ) ==
NULL) {
633 res = theDlg->PanelProc(hwndDlg,
msg,wParam,lParam);
650BOOL GameMtlDlg::NotesProc(HWND hwndDlg,
UINT msg, WPARAM wParam, LPARAM lParam)
652 int id = LOWORD(wParam);
653 int code = HIWORD(wParam);
661 IParams->RollupMouseMessage(hwndDlg,
msg,wParam,lParam);
688static BOOL CALLBACK NotesDlgProc(HWND hwndDlg,
UINT msg, WPARAM wParam, LPARAM lParam)
692 if (
msg==WM_INITDIALOG) {
694 theDlg->HwndNotes = hwndDlg;
695 SetWindowLong(hwndDlg, GWL_USERDATA,lParam);
697 if ((theDlg = (
GameMtlDlg *)GetWindowLong(hwndDlg, GWL_USERDATA) ) ==
NULL) {
704 res = theDlg->NotesProc(hwndDlg,
msg,wParam,lParam);
722BOOL GameMtlDlg::HintsProc(HWND hwndDlg,
UINT msg, WPARAM wParam, LPARAM lParam)
724 int id = LOWORD(wParam);
725 int code = HIWORD(wParam);
734 IParams->RollupMouseMessage(hwndDlg,
msg,wParam,lParam);
781static BOOL CALLBACK HintsDlgProc(HWND hwndDlg,
UINT msg, WPARAM wParam, LPARAM lParam)
785 if (
msg==WM_INITDIALOG) {
787 theDlg->HwndHints = hwndDlg;
788 SetWindowLong(hwndDlg, GWL_USERDATA,lParam);
790 if ((theDlg = (
GameMtlDlg *)GetWindowLong(hwndDlg, GWL_USERDATA) ) ==
NULL) {
797 res = theDlg->HintsProc(hwndDlg,
msg,wParam,lParam);
815BOOL GameMtlDlg::PsxProc(HWND hwndDlg,
UINT msg, WPARAM wParam, LPARAM lParam)
817 int id = LOWORD(wParam);
818 int code = HIWORD(wParam);
826 IParams->RollupMouseMessage(hwndDlg,
msg,wParam,lParam);
835 TheMtl->SetMaskedAttribute(GAMEMTL_PSX_TRANS_MASK,0);
839 TheMtl->SetMaskedAttribute(GAMEMTL_PSX_TRANS_MASK,GAMEMTL_PSX_100_TRANS);
843 TheMtl->SetMaskedAttribute(GAMEMTL_PSX_TRANS_MASK,GAMEMTL_PSX_50_TRANS);
847 TheMtl->SetMaskedAttribute(GAMEMTL_PSX_TRANS_MASK,GAMEMTL_PSX_25_TRANS);
851 TheMtl->SetMaskedAttribute(GAMEMTL_PSX_TRANS_MASK,GAMEMTL_PSX_MINUS_100_TRANS);
877static BOOL CALLBACK PsxDlgProc(HWND hwndDlg,
UINT msg, WPARAM wParam, LPARAM lParam)
881 if (
msg==WM_INITDIALOG) {
883 theDlg->HwndPsx = hwndDlg;
884 SetWindowLong(hwndDlg, GWL_USERDATA,lParam);
886 if ((theDlg = (
GameMtlDlg *)GetWindowLong(hwndDlg, GWL_USERDATA) ) ==
NULL) {
893 res = theDlg->PsxProc(hwndDlg,
msg,wParam,lParam);
911void GameMtlDlg::LoadDialog(
BOOL draw)
917 if (
TheMtl && HwndPanel) {
923 DiffuseSwatch->InitColor(
TheMtl->GetDiffuse());
925 if (SpecularSwatch) {
926 SpecularSwatch->InitColor(
TheMtl->GetSpecular());
928 if (AmbientCoeffSwatch) {
929 AmbientCoeffSwatch->InitColor(
TheMtl->GetAmbientCoeff());
931 if (DiffuseCoeffSwatch) {
932 DiffuseCoeffSwatch->InitColor(
TheMtl->GetDiffuseCoeff());
934 if (SpecularCoeffSwatch) {
935 SpecularCoeffSwatch->InitColor(
TheMtl->GetSpecularCoeff());
937 if (EmissiveCoeffSwatch) {
938 EmissiveCoeffSwatch->InitColor(
TheMtl->GetEmissiveCoeff());
981 TranslucencySpin->SetValue(
TheMtl->Translucency,
FALSE);
996 switch (
TheMtl->GetMaskedAttribute(GAMEMTL_PSX_TRANS_MASK)) {
1000 case GAMEMTL_PSX_100_TRANS:
1003 case GAMEMTL_PSX_50_TRANS:
1006 case GAMEMTL_PSX_25_TRANS:
1009 case GAMEMTL_PSX_MINUS_100_TRANS:
1027 for (
int i=0; i<NTEXMAPS; i++) {
1028 UpdateTexmapDisplay(i);
1045void GameMtlDlg::UpdateMtlDisplay()
1065 if (DiffuseSwatch) {
1066 DiffuseSwatch->Activate(onOff);
1068 if (SpecularSwatch) {
1069 SpecularSwatch->Activate(onOff);
1071 if (AmbientCoeffSwatch) {
1072 AmbientCoeffSwatch->Activate(onOff);
1074 if (DiffuseCoeffSwatch) {
1075 DiffuseCoeffSwatch->Activate(onOff);
1077 if (SpecularCoeffSwatch) {
1078 SpecularCoeffSwatch->Activate(onOff);
1080 if (EmissiveCoeffSwatch) {
1081 EmissiveCoeffSwatch->Activate(onOff);
1099 assert (m->SuperClassID()==MATERIAL_CLASS_ID);
1109 TheMtl->ParamPanel =
this;
1114 if (HwndPanel && DiffuseSwatch) {
1115 DiffuseSwatch->InitColor(
TheMtl->GetDiffuse());
1117 if (HwndPanel && SpecularSwatch) {
1118 SpecularSwatch->InitColor(
TheMtl->GetSpecular());
1120 if (HwndPanel && AmbientCoeffSwatch) {
1121 AmbientCoeffSwatch->InitColor(
TheMtl->GetAmbientCoeff());
1123 if (HwndPanel && DiffuseCoeffSwatch) {
1124 DiffuseCoeffSwatch->InitColor(
TheMtl->GetDiffuseCoeff());
1126 if (HwndPanel && SpecularCoeffSwatch) {
1127 SpecularCoeffSwatch->InitColor(
TheMtl->GetSpecularCoeff());
1129 if (HwndPanel && EmissiveCoeffSwatch) {
1130 EmissiveCoeffSwatch->InitColor(
TheMtl->GetEmissiveCoeff());
1146void GameMtlDlg::BuildDialog()
1152 HwndPanel =
IParams->AddRollupPage(
1158 (
TheMtl->GetFlag(GAMEMTL_ROLLUP1_OPEN) ? 0:APPENDROLL_CLOSED)
1161 HwndPsx =
IParams->AddRollupPage(
1167 (
TheMtl->GetFlag(GAMEMTL_ROLLUP2_OPEN) ? 0:APPENDROLL_CLOSED)
1170 HwndHints =
IParams->AddRollupPage(
1176 (
TheMtl->GetFlag(GAMEMTL_ROLLUP3_OPEN) ? 0:APPENDROLL_CLOSED)
1179 HwndNotes =
IParams->AddRollupPage(
1181 MAKEINTRESOURCE(IDD_MATERIAL_NOTES_PANEL),
1185 (
TheMtl->GetFlag(GAMEMTL_ROLLUP4_OPEN) ? 0:APPENDROLL_CLOSED)
1203void GameMtlDlg::UpdateTexmapDisplay(
int i)
1206 Texmap *texmap = (*
TheMtl->Maps)[i].Map;
1207 if (texmap) nm = texmap->GetFullName();
GameMtlDlg(HWND hwMtlEdit, IMtlParams *imp, GameMtl *m)
void SetTime(TimeValue t)
void ActivateDlg(BOOL onOff)
void SetThing(ReferenceTarget *m)
TCHAR * Get_String(int id)
#define GAMEMTL_ROLLUP_FLAGS
Class_ID GameMaterialClassID