📄 graphicstab.cpp
字号:
newAlt = MAX_ALT;
SetupViewer->SetCamera(SetupViewer->GetCameraX(),SetupViewer->GetCameraY(),
newAlt,newYaw,newPitch,0.0f);
//win->RefreshClient(2);
F4LeaveCriticalSection(SetupCritSection);
//UI_Leave(Leave);
win->RefreshWindow();
}
}
count++;
}
}//ChangeViewpointCB
void ScalingCB(long,short hittype,C_Base *)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
}
void GouraudCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
if(SetupViewer == NULL)
return;
RenderOTW *renderer;
renderer = SetupViewer->GetRendOTW();
if(((C_Button *)control)->GetState())
renderer->SetSmoothShadingMode( 1 );
else
renderer->SetSmoothShadingMode( 0 );
control->Parent_->RefreshClient(2);
control->Parent_->RefreshClient(2);
//have the rendered view update with new settings
}//GouraudCB
void HazingCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
if(SetupViewer == NULL)
return;
RenderOTW *renderer;
renderer = SetupViewer->GetRendOTW();
if(((C_Button *)control)->GetState())
renderer->SetHazeMode( 1 );
else
renderer->SetHazeMode( 0 );
control->Parent_->RefreshClient(2);
//have the rendered view update with new settings
}//HazingCB
void AlphaBlendCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
if(SetupViewer == NULL)
return;
RenderOTW *renderer;
renderer = SetupViewer->GetRendOTW();
if(((C_Button *)control)->GetState())
renderer->SetAlphaMode( TRUE );
else
renderer->SetAlphaMode( FALSE );
control->Parent_->RefreshClient(2);
//have the rendered view update with new settings
}//AlphaBlendCB
void BilinearFilterCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
if(SetupViewer == NULL)
return;
RenderOTW *renderer;
renderer = SetupViewer->GetRendOTW();
if(((C_Button *)control)->GetState())
renderer->SetFilteringMode( TRUE );
else
renderer->SetFilteringMode( FALSE );
control->Parent_->RefreshClient(2);
//have the rendered view update with new settings
}//BilinearFilterCB
void ObjectTextureCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_LMOUSEUP)
return;
if(SetupViewer == NULL)
return;
RenderOTW *renderer;
renderer = SetupViewer->GetRendOTW();
if(((C_Button *)control)->GetState())
renderer->SetObjectTextureState( TRUE );
else
renderer->SetObjectTextureState( FALSE );
control->Parent_->RefreshClient(2);
//have the rendered view update with new settings
}//ObjectTextureCB
void RemoveObjFromView(int objID)
{
C_BSPList *bsplist;
BSPLIST *list;
F4EnterCriticalSection(SetupCritSection);
bsplist = SetupViewer->GetBSPList();
// I don't think this will happen, but time is short so lets be safe...
if (!bsplist) return;
list = bsplist->Root_;
while (list)
{
if(list->ID == objID)
break;
list = list->Next;
}
if (list)
{
RViewPoint *tVP;
tVP = SetupViewer->GetVP();
tVP->RemoveObject(list->object);
}
F4LeaveCriticalSection(SetupCritSection);
}
void BuildingDetailCB(long,short hittype,C_Base *control)
{
C_Slider *slider;
int objdetail;
static int prevdetail = -1;
if(hittype != C_TYPE_MOUSEMOVE)
return;
slider = (C_Slider *)control;
objdetail = FloatToInt32((float)slider->GetSliderPos()/(slider->GetSliderMax()-slider->GetSliderMin()) * 5 + 0.5F);
C_EditBox *ebox;
ebox = (C_EditBox *)control->Parent_->FindControl(slider->GetUserNumber(0));
if(ebox)
{
ebox->SetInteger(objdetail + 1);
ebox->Refresh();
}
F4EnterCriticalSection(SetupCritSection);
if(SetupViewer == NULL)
{
F4LeaveCriticalSection(SetupCritSection);
return;
}
if(NumFeatures)
{
if(prevdetail < objdetail)
{
if(NumFeatures)
{
for(int i=0;i<NumFeatures;i++)
{
if((Features[i].Priority <= objdetail) && (Features[i].Priority > prevdetail))
SetupViewer->AddToView(i + 100);
}
}
}
else if(prevdetail > objdetail)
{
for(int i=0;i<NumFeatures;i++)
{
if((Features[i].Priority > objdetail) && (Features[i].Priority <= prevdetail))
RemoveObjFromView(i+100);
}
}
prevdetail = objdetail;
}
control->Parent_->RefreshWindow();
F4LeaveCriticalSection(SetupCritSection);
}//BuildingDetailCB
void PlayerBubbleCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_MOUSEMOVE)
return;
C_Slider *slider;
slider=(C_Slider *)control;
C_EditBox *ebox;
ebox = (C_EditBox *)control->Parent_->FindControl(slider->GetUserNumber(0));
if(ebox)
{
ebox->SetInteger(FloatToInt32((float)slider->GetSliderPos()/(slider->GetSliderMax()-slider->GetSliderMin())*6*GraphicSettingMult + 1.5f));
ebox->Refresh();
}
}
void ObjectDetailCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_MOUSEMOVE)
return;
float detail;
C_Slider *slider;
slider=(C_Slider *)control;
C_EditBox *ebox;
ebox = (C_EditBox *)control->Parent_->FindControl(slider->GetUserNumber(0));
if(ebox)
{
ebox->SetInteger(FloatToInt32((float)slider->GetSliderPos()/(slider->GetSliderMax()-slider->GetSliderMin())*6*GraphicSettingMult + 1.5f));
ebox->Refresh();
}
if(SetupViewer == NULL)
return;
RenderOTW *renderer;
renderer = SetupViewer->GetRendOTW();
detail = ((float)slider->GetSliderPos()/(slider->GetSliderMax()-slider->GetSliderMin())*1.5f*GraphicSettingMult);
renderer->SetObjectDetail(detail);
//have the rendered view update with new settings
control->Parent_->RefreshWindow();
}//VehicleDetailCB
void VehicleSizeCB(long,short hittype,C_Base *control)
{
if(hittype != C_TYPE_MOUSEMOVE)
return;
C_Slider *slider;
BSPLIST *list;
int scale;
slider=(C_Slider *)control;
scale = FloatToInt32((float)slider->GetSliderPos()/(slider->GetSliderMax()-slider->GetSliderMin()) * 4 + 1);
C_EditBox *ebox;
ebox = (C_EditBox *)control->Parent_->FindControl(slider->GetUserNumber(0));
if(ebox)
{
ebox->SetInteger(scale);
ebox->Refresh();
}
if(SetupViewer == NULL)
return;
static int prevscale;
if(prevscale != scale)
{
list = ((C_BSPList *)SetupViewer->GetBSPList())->Root_;
while(list)
{
if(list->ID < 100)
list->object->SetScale((float)scale);
list = list->Next;
}
prevscale = scale;
}
//have the rendered view update with new settings
control->Parent_->RefreshWindow();
}//VehicleSizeCB
void TerrainDetailCB(long,short hittype,C_Base *control)
{
C_Slider *slider;
static int prevpos = -1;
if(hittype != C_TYPE_MOUSEMOVE)
return;
slider=(C_Slider *)control;
C_EditBox *ebox;
ebox = (C_EditBox *)control->Parent_->FindControl(slider->GetUserNumber(0));
if(ebox)
{
ebox->SetInteger(FloatToInt32((float)slider->GetSliderPos()/(slider->GetSliderMax()-slider->GetSliderMin())*6.0F*GraphicSettingMult + 1.5F));
ebox->Refresh();
}
if(SetupViewer == NULL)
return;
int step;
step = (slider->GetSliderMax()-slider->GetSliderMin())/(6*GraphicSettingMult);
if(abs(slider->GetSliderPos() - prevpos) > step - 1)
{
SetCursor(gCursors[CRSR_WAIT]);
int disagglvl;
short terrlvl;
float terrdist;
RenderOTW *renderer;
RViewPoint *viewpt;
C_BSPList *bsplist;
BSPLIST *cur;
Tpoint pos;
prevpos = slider->GetSliderPos();
if(slider->GetSliderPos() > 2*step)
{
terrdist = 40.0f + ( (float)slider->GetSliderPos()/step - 2) * 10.0f;
terrlvl = 0;
}
else
{
terrdist = 40.0f;
terrlvl = static_cast<short>(FloatToInt32(2.0F - ((float)slider->GetSliderPos()/step)));
}
F4EnterCriticalSection(SetupCritSection);
if(SetupViewer)
{
C_Slider *tslider;
C_Button *button;
renderer = SetupViewer->GetRendOTW();
viewpt = SetupViewer->GetVP();
viewpt->GetPos(&pos);
//SetupViewer->Cleanup();
bsplist = SetupViewer->GetBSPList();
cur=bsplist->GetFirst();
while(cur)
{
if(((DrawableBSP*)cur->object)->InDisplayList())
viewpt->RemoveObject(cur->object);
cur=cur->Next;
}
viewpt->RemoveObject(Smoke);
delete Smoke;
Smoke = NULL;
viewpt->Cleanup();
//viewpt = new RViewPoint;
viewpt->Setup(terrdist * FEET_PER_KM, terrlvl, 4, terrdist * FEET_PER_KM *PlayerOptions.WeatherOn());
viewpt->Update(&pos);
renderer->Cleanup();
renderer->Setup(gMainHandler->GetFront(),viewpt);
//reset all values for new renderer
tslider = (C_Slider *)control->Parent_->FindControl(OBJECT_DETAIL);
if(tslider)
{
renderer->SetObjectDetail((float)tslider->GetSliderPos()/(tslider->GetSliderMax()-tslider->GetSliderMin())*1.5f + 0.5f);
}
tslider = (C_Slider *)control->Parent_->FindControl(TEXTURE_DISTANCE);
if(tslider)
{
renderer->SetTerrainTextureLevel(FloatToInt32((float)tslider->GetSliderPos()/(tslider->GetSliderMax()-tslider->GetSliderMin())* 4.0f));
}
button = (C_Button *)control->Parent_->FindControl(OBJECT_TEXTURES);
if(button)
{
if(button->GetState())
renderer->SetObjectTextureState( TRUE );
else
renderer->SetObjectTextureState( FALSE );
}
button = (C_Button *)control->Parent_->FindControl(BILINEAR_FILTERING);
if(button)
{
if(button->GetState())
renderer->SetFilteringMode( TRUE );
else
renderer->SetFilteringMode( FALSE );
}
button = (C_Button *)control->Parent_->FindControl(ALPHA_BLENDING);
if(button)
{
if(button->GetState())
renderer->SetAlphaMode( TRUE );
else
renderer->SetAlphaMode( FALSE );
}
button = (C_Button *)control->Parent_->FindControl(HAZING);
if(button)
{
if(button->GetState())
renderer->SetHazeMode( TRUE );
else
renderer->SetHazeMode( FALSE );
}
button = (C_Button *)control->Parent_->FindControl(GOUROUD);
if(button)
{
if(button->GetState())
renderer->SetSmoothShadingMode( TRUE );
else
renderer->SetSmoothShadingMode( FALSE );
}
InitializeViewer((C_Window *)control->Parent_, renderer);
SetupViewer->Viewport((C_Window *)control->Parent_,2);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -