📄 graphicstab.cpp
字号:
slider=(C_Slider *)control->Parent_->FindControl(DISAGG_LEVEL);
if(slider != NULL)
{
disagglvl = FloatToInt32((float)slider->GetSliderPos()/(slider->GetSliderMax()-slider->GetSliderMin()) * 5 + 0.5F);
if(NumFeatures)
{
for(int i=0;i<NumFeatures;i++)
{
if(Features[i].Priority <= disagglvl)
SetupViewer->AddToView(i + 100);
}
}
}
if(NumObjects)
{
for(int i=0;i<NumObjects;i++)
{
SetupViewer->AddToView(i);
}
}
InsertSmokeCloud();
SetCursor(gCursors[CRSR_F16]);
}
F4LeaveCriticalSection(SetupCritSection);
control->Parent_->RefreshWindow();
}
}
void TextureDistanceCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_MOUSEMOVE)
return;
C_Slider *slider;
slider = (C_Slider *)control;
int pos;
pos = FloatToInt32((float)slider->GetSliderPos()/(slider->GetSliderMax()-slider->GetSliderMin()) * 4.0f);
C_EditBox *ebox;
ebox = (C_EditBox *)control->Parent_->FindControl(slider->GetUserNumber(0));
if(ebox)
{
ebox->SetInteger(pos + 1);
ebox->Refresh();
}
if(SetupViewer)
{
RenderOTW *renderer;
int TexLev;
renderer = SetupViewer->GetRendOTW();
TexLev = renderer->GetTerrainTextureLevel();
//have the rendered view update with new settings
if(pos != TexLev)
{
renderer->SetTerrainTextureLevel(pos);
//control->Parent_->RefreshClient(2);
}
control->Parent_->RefreshWindow();
}
}//TextureDistanceCB
void SfxLevelCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_MOUSEMOVE)
return;
C_Slider *slider;
slider = (C_Slider *)control;
int pos;
pos = FloatToInt32((float)slider->GetSliderPos()/(slider->GetSliderMax()-slider->GetSliderMin()) * 4.0f);
C_EditBox *ebox;
ebox = (C_EditBox *)control->Parent_->FindControl(slider->GetUserNumber(0));
if(ebox)
{
ebox->SetInteger(pos + 1);
ebox->Refresh();
}
}//SfxLevelCB
void BuildVideoCardList(C_ListBox *lbox)
{
const char *buf;
int i = 0;
int Driver;
char buf2[256];
long value;
C_ListBox *VidCardList = (C_ListBox *)lbox->Parent_->FindControl(SET_VIDEO_DRIVER);
Driver = VidCardList->GetTextID() - 1;
value = lbox->GetTextID();
lbox->RemoveAllItems();
while(buf = FalconDisplay.devmgr.GetDeviceName(Driver,i))
{
strcpy(buf2,buf);
i++;
lbox->AddItem(i,C_TYPE_ITEM,buf2);
}
ShiAssert(i>0);
lbox->SetValue(value);
lbox->Refresh();
}
void BuildVideoDriverList(C_ListBox *lbox)
{
char buf2[256];
const char *buf;
int i = 0;
lbox->RemoveAllItems();
while(buf = FalconDisplay.devmgr.GetDriverName(i))
{
if(FalconDisplay.devmgr.GetDeviceName(i,0))
{
strcpy(buf2,buf);
lbox->AddItem(i + 1,C_TYPE_ITEM,buf2);
}
i++;
}
ShiAssert(i>0);
lbox->Refresh();
}
void BuildResolutionList(C_ListBox *lbox)
{
const char *buf;
int i =0,Card,Driver,width,height;
char buf2[256];
long value;
C_ListBox *VidDriverList = (C_ListBox *)lbox->Parent_->FindControl(SET_VIDEO_DRIVER);
Driver = VidDriverList->GetTextID() - 1;
C_ListBox *VidCardList = (C_ListBox *)lbox->Parent_->FindControl(SET_VIDEO_CARD);
Card = VidCardList->GetTextID() - 1;
value = lbox->GetTextID();
lbox->RemoveAllItems();
while(buf = FalconDisplay.devmgr.GetModeName(Driver,Card,i))
{
strcpy(buf2,buf);
i++;
sscanf(buf2,"%d x %d",&width,&height);
//sscanf(buf2,"%d",&width);
lbox->AddItem(width,C_TYPE_ITEM,buf2);
}
ShiAssert(i>0);
lbox->SetValue(value);
lbox->Refresh();
}
void DisableEnableDrivers(C_ListBox *)
{
}
void DisableEnableResolutions(C_ListBox* )
{
}
void VideoCardCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_SELECT)
return;
C_ListBox *lbox;
lbox = (C_ListBox *)control->Parent_->FindControl(SET_RESOLUTION);
if(lbox)
BuildResolutionList(lbox);
//DisableEnableDrivers //SET_VIDEO_DRIVER
//DisableEnableResolutions //SET_RESOLUTION
}
void VideoDriverCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_SELECT)
return;
C_ListBox *lbox = (C_ListBox *)control->Parent_->FindControl(SET_VIDEO_CARD);
if(lbox)
BuildVideoCardList(lbox);
lbox = (C_ListBox *)control->Parent_->FindControl(SET_RESOLUTION);
if(lbox)
BuildResolutionList(lbox);
C_Button *button;
//DisableEnableResolutions //SET_RESOLUTION
if( ((C_ListBox*)control)->GetTextID() > 1)
{
button=(C_Button *)control->Parent_->FindControl(ALPHA_BLENDING);
if(button != NULL)
{
button->SetState(C_STATE_1);
button->Refresh();
}
button=(C_Button *)control->Parent_->FindControl(BILINEAR_FILTERING);
if(button != NULL)
{
button->SetState(C_STATE_1);
button->Refresh();
}
}
else
{
button=(C_Button *)control->Parent_->FindControl(ALPHA_BLENDING);
if(button != NULL)
{
button->SetState(C_STATE_0);
button->Refresh();
}
button=(C_Button *)control->Parent_->FindControl(BILINEAR_FILTERING);
if(button != NULL)
{
button->SetState(C_STATE_0);
button->Refresh();
}
}
}
void ResolutionCB(long,short hittype,C_Base *)
{
if(hittype != C_TYPE_SELECT)
return;
}
void SetupGraphicsControls(void)
{
C_Window *win;
C_Button *button;
C_ListBox *lbox;
C_Slider *slider;
C_EditBox *ebox;
win=gMainHandler->FindWindow(SETUP_WIN);
if(win == NULL)
return;
lbox=(C_ListBox *)win->FindControl(SET_VIDEO_CARD);
if(lbox != NULL)
{
BuildVideoCardList(lbox);
lbox->SetValue(DisplayOptions.DispVideoCard + 1);
lbox->Refresh();
}
lbox=(C_ListBox *)win->FindControl(SET_VIDEO_DRIVER);
if(lbox != NULL)
{
BuildVideoDriverList(lbox);
DisableEnableDrivers(lbox);
lbox->SetValue(DisplayOptions.DispVideoDriver + 1);
lbox->Refresh();
}
lbox=(C_ListBox *)win->FindControl(SET_RESOLUTION);
if(lbox != NULL)
{
DisableEnableResolutions(lbox);
lbox->SetValue( DisplayOptions.DispWidth );
lbox->Refresh();
}
button=(C_Button *)win->FindControl(70136);//GOUROUD
if(button != NULL)
{
if(PlayerOptions.GouraudOn())
button->SetState(C_STATE_1);
else
button->SetState(C_STATE_0);
button->Refresh();
}
button=(C_Button *)win->FindControl(HAZING);
if(button != NULL)
{
if(PlayerOptions.HazingOn())
button->SetState(C_STATE_1);
else
button->SetState(C_STATE_0);
button->Refresh();
}
button=(C_Button *)win->FindControl(ALPHA_BLENDING);
if(button != NULL)
{
if(PlayerOptions.AlphaOn())
button->SetState(C_STATE_1);
else
button->SetState(C_STATE_0);
button->Refresh();
}
button=(C_Button *)win->FindControl(BILINEAR_FILTERING);
if(button != NULL)
{
if(PlayerOptions.FilteringOn())
button->SetState(C_STATE_1);
else
button->SetState(C_STATE_0);
button->Refresh();
}
button=(C_Button *)win->FindControl(OBJECT_TEXTURES);
if(button != NULL)
{
if(PlayerOptions.ObjectTexturesOn())
button->SetState(C_STATE_1);
else
button->SetState(C_STATE_0);
button->Refresh();
}
slider=(C_Slider *)win->FindControl(OBJECT_DETAIL);
if(slider != NULL)
{
slider->Refresh();
ebox = (C_EditBox *)win->FindControl(OBJECT_DETAIL_READOUT);
if(ebox)
{
ebox->SetInteger(FloatToInt32(PlayerOptions.ObjDetailLevel*4.0F - 1.0F));
ebox->Refresh();
slider->SetUserNumber(0,OBJECT_DETAIL_READOUT);
}
slider->SetSliderPos(FloatToInt32((slider->GetSliderMax()-slider->GetSliderMin())*(PlayerOptions.ObjDetailLevel-0.5f)/1.5f));
slider->Refresh();
}
slider=(C_Slider *)win->FindControl(DISAGG_LEVEL);
if(slider != NULL)
{
slider->Refresh();
ebox = (C_EditBox *)win->FindControl(DISAGG_LEVEL_READOUT);
if(ebox)
{
ebox->SetInteger(PlayerOptions.BldDeaggLevel);
ebox->Refresh();
slider->SetUserNumber(0,DISAGG_LEVEL_READOUT);
}
slider->SetSliderPos((slider->GetSliderMax()-slider->GetSliderMin())*PlayerOptions.ObjDeaggLevel/100);
slider->Refresh();
}
slider=(C_Slider *)win->FindControl(VEHICLE_SIZE);
if(slider != NULL)
{
slider->Refresh();
slider->SetSliderPos(FloatToInt32((slider->GetSliderMax()-slider->GetSliderMin())*(PlayerOptions.ObjMagnification - 1.0F)/4.0F));
ebox = (C_EditBox *)win->FindControl(VEHICLE_SIZE_READOUT);
if(ebox)
{
ebox->SetInteger(FloatToInt32(PlayerOptions.ObjMagnification));
ebox->Refresh();
slider->SetUserNumber(0,VEHICLE_SIZE_READOUT);
}
slider->Refresh();
}
slider=(C_Slider *)win->FindControl(TEXTURE_DISTANCE);
if(slider != NULL)
{
slider->Refresh();
ebox = (C_EditBox *)win->FindControl(TEX_DISTANCE_READOUT);
if(ebox)
{
ebox->SetInteger(PlayerOptions.DispTextureLevel + 1);
ebox->Refresh();
slider->SetUserNumber(0,TEX_DISTANCE_READOUT);
}
slider->SetSliderPos((slider->GetSliderMax()-slider->GetSliderMin())*(PlayerOptions.DispTextureLevel)/4);
slider->Refresh();
}
slider=(C_Slider *)win->FindControl(TERRAIN_DETAIL);
if(slider != NULL)
{
int step;
step = (slider->GetSliderMax()-slider->GetSliderMin())/6;
slider->Refresh();
if(PlayerOptions.DispTerrainDist > 40)
slider->SetSliderPos(FloatToInt32(step*(2+(PlayerOptions.DispTerrainDist - 40.0F)/10.0F)));
else
slider->SetSliderPos((2 - PlayerOptions.DispMaxTerrainLevel)*step);
slider->Refresh();
ebox = (C_EditBox *)win->FindControl(TEX_DETAIL_READOUT);
if(ebox)
{
ebox->SetInteger( FloatToInt32(((float)slider->GetSliderPos()/(slider->GetSliderMax()-slider->GetSliderMin()))*6.0F +0.5F) );
ebox->Refresh();
slider->SetUserNumber(0,TEX_DETAIL_READOUT);
}
}
}
void GraphicsDefaultsCB(long,short hittype,C_Base *)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
PlayerOptionsClass Player;
DisplayOptionsClass Display;
if(Display.LoadOptions("default"))
{
DisplayOptions.DispWidth = Display.DispWidth;
DisplayOptions.DispHeight = Display.DispHeight;
DisplayOptions.DispVideoCard = Display.DispVideoCard;
DisplayOptions.DispVideoDriver = Display.DispVideoDriver;
}
else
{
DisplayOptions.DispWidth = 640;
DisplayOptions.DispHeight = 480;
DisplayOptions.DispVideoCard = 0;
DisplayOptions.DispVideoDriver = 0;
}
if(Player.LoadOptions("default"))
{
PlayerOptions.DispFlags = DISP_HAZING|DISP_GOURAUD|DISP_ALPHA_BLENDING;
PlayerOptions.DispTextureLevel = 4;
PlayerOptions.DispTerrainDist = 64.0;
PlayerOptions.DispMaxTerrainLevel = 0;
PlayerOptions.ObjFlags = DISP_OBJ_TEXTURES;
PlayerOptions.SfxLevel = 4.0F;
PlayerOptions.ObjDetailLevel = 1;
PlayerOptions.ObjMagnification = 1;
PlayerOptions.ObjDeaggLevel = 60;
PlayerOptions.BldDeaggLevel = 3;
PlayerOptions.PlayerBubble = 1.0F;
}
SetupGraphicsControls();
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -