64 rect.
Hgt = new_height;
68 #if defined(WITH_QT_EDITOR)
96 player->ZoomLimitsToViewport(
this);
106 targetViewX = targetViewY = 0;
118 viewOffsX = viewOffsY = 0;
137 C4ST_STARTNEW(PInfoStat,
"C4Viewport::DrawOverlay: Player Info")
192 player->Cursor->Menu->ResetLocation();
195 bool mouse_dragging =
false;
198 mouse_dragging =
true;
202 player->Cursor->Menu->Draw(cgo);
214 player->Menu.ResetLocation();
268 const C4Rect& clipRectInt(clipRect);
282 FoW = this->
pFoW.get();
292 const C4Rect lightRect(vpRect);
293 if (!lightRect.
Wdt || !lightRect.
Hgt)
300 FoW->
Update(lightRect, vpRect);
329 const int particlePlane = 900;
336 C4ST_STARTNEW(PartStat,
"C4Viewport::Draw: Dynamic Particles")
383 gui_cgo.
Zoom = gui_zoom;
409 C4ST_STARTNEW(GuiWindowStat,
"C4Viewport::DrawOverlay: Menus")
439 pWindow->pSurface->PageFlip(&src, &dst);
455 bool draw_game =
true;
473 Draw(cgo, draw_game,
true);
496 player->ZoomLimitsToViewport(
this);
510 player->ZoomToViewport(
this,
true);
562 bool zoom_by_y =
false;
563 if (size_x && size_y)
577 size_x = C4VP_DefViewRangeX * 2;
584 return float(
ViewHgt) / size_y;
588 return float(
ViewWdt) / size_x;
613 DeltaZoom = 1 / DeltaZoom;
623 float ZoomAdjustFactor = Z0 * pow(DeltaZoom, 1.0f / 8.0f);
632 float view_mid_x = this->viewX + float(this->
ViewWdt) /
Zoom / 2.0f;
633 float view_mid_y = this->viewY + float(this->
ViewHgt) /
Zoom / 2.0f;
645 this->viewX = view_mid_x - float(this->
ViewWdt) /
Zoom / 2.0f;
646 this->viewY = view_mid_y - float(this->
ViewHgt) /
Zoom / 2.0f;
671 float scrollRange = 0;
672 float extraBoundsX = 0;
673 float extraBoundsY = 0;
681 extraBoundsX = extraBoundsY = ViewportScrollBorder;
688 if (targetCenterViewX < ViewportScrollBorder)
690 extraBoundsX = std::min<float>(ViewportScrollBorder - targetCenterViewX, ViewportScrollBorder);
694 extraBoundsX = std::min<float>(targetCenterViewX - ::
Landscape.
GetWidth(), 0) + ViewportScrollBorder;
696 if (targetCenterViewY < ViewportScrollBorder)
698 extraBoundsY = std::min<float>(ViewportScrollBorder - targetCenterViewY, ViewportScrollBorder);
702 extraBoundsY = std::min<float>(targetCenterViewY - ::
Landscape.
GetHeight(), 0) + ViewportScrollBorder;
720 targetCenterViewX =
Clamp(targetCenterViewX, targetCenterViewX - scrollRange, targetCenterViewX + scrollRange);
721 targetCenterViewY =
Clamp(targetCenterViewY, targetCenterViewY - scrollRange, targetCenterViewY + scrollRange);
727 targetViewX = targetCenterViewX -
ViewWdt/
Zoom/2 + viewOffsX;
728 targetViewY = targetCenterViewY -
ViewHgt/
Zoom/2 + viewOffsY;
740 ScrollView((targetViewX - viewX) / smooth, (targetViewY - viewY) / smooth);
763 void C4Viewport::UpdateBordersX()
769 void C4Viewport::UpdateBordersY()
801 pWindow = std::make_unique<C4ViewportWindow>(
this);
859 int32_t name_height_offset = 0;
866 if (controlset_facet.
Wdt)
869 cgo.
X + (cgo.
Wdt - controlset_facet.
Wdt)/2,
873 name_height_offset =
GfxR->fctKeyboard.Hgt;
928 int32_t deltaWidth =
ViewWdt - out_wdt;
929 int32_t deltaHeight =
ViewHgt - out_hgt;
982 player_nr =
player->Number;
990 Init(player_nr,
true);
1047 if (draw_background)
1053 if (viewport->GetWindow())
1055 viewport->GetWindow()->RequestUpdate();
1059 viewport->Execute();
1089 if (prev->Next == viewport)
1091 prev->Next = viewport->
Next;
1106 #ifdef USE_WIN32_WINDOWS
1111 if (cvp->pWindow->hWindow==hwnd)
1124 bool is_okay = viewport->
Init(player_nr,
false);
1137 last->
Next = viewport;
1151 player->ZoomToViewport(viewport,
true,
false,
false);
1152 player->ZoomLimitsToViewport(viewport);
1166 viewport->DisableFoW();
1174 viewport->EnableFoW();
1182 viewport->ClearPointers(obj);
1194 next = viewport->
Next;
1195 if (viewport->Player == player_nr || (player_nr ==
NO_OWNER && viewport->fIsNoOwnerViewport))
1236 int32_t border_top = 0;
1247 ClipCursor(
nullptr);
1260 int32_t view_count = 0;
1269 int32_t iViewsH = (int32_t) sqrt(
float(view_count));
1270 int32_t iViewsX = view_count / iViewsH;
1271 int32_t iViewsL = view_count % iViewsH;
1272 int32_t cViewH, cViewX, ciViewsX;
1273 int32_t cViewWdt, cViewHgt, cOffWdt, cOffHgt, cOffX, cOffY;
1275 for (cViewH = 0; cViewH < iViewsH; cViewH++)
1278 if (cViewH < iViewsL)
1282 for (cViewX=0; cViewX < ciViewsX; cViewX++)
1288 cOffWdt = cOffHgt = 0;
1299 if (cViewX < ciViewsX - 1) cOffWdt=4;
1300 if (cViewH < iViewsH - 1) cOffHgt=4;
1302 int32_t coViewWdt = cViewWdt-cOffWdt;
1303 int32_t coViewHgt = cViewHgt-cOffHgt;
1304 C4Rect rcOut(cOffX+cViewX*cViewWdt, cOffY+cViewH*cViewHgt, coViewWdt, coViewHgt);
1306 viewport = viewport->
Next;
1343 if (!audibility_radius)
1348 int32_t audible = 0;
1352 float distanceToCenterOfViewport =
Distance(viewport->GetViewCenterX(), viewport->GetViewCenterY(), x, y);
1353 int32_t audibility = Clamp<int32_t>(100 - 100 * distanceToCenterOfViewport /
C4AudibilityRadius, 0, 100);
1354 if (audibility > audible)
1356 audible = audibility;
1359 *out_player = viewport->Player;
1362 *pan += (x-(viewport->GetViewCenterX())) / 5;
1364 *pan = Clamp<int32_t>(*pan, -100, 100);
1378 for (prev =
nullptr, viewport =
FirstViewport; viewport && (next = viewport->
Next); viewport=next)
1388 next->
Next = viewport;
1434 static int32_t vp_vx = 0;
1435 static int32_t vp_vy = 0;
1436 static int32_t vp_vf = 0;
1437 int32_t dx = scroll_by.
x;
1438 int32_t dy = scroll_by.
y;
1471 Clamp<int32_t>(x-viewport->OutX,0,viewport->ViewWdt-1),
1472 Clamp<int32_t>(y-viewport->OutY,0,viewport->ViewHgt-1),
const int C4ViewportScrollBorder
const int C4UpperBoardHeight
const int32_t C4D_Foreground
C4GameMessageList Messages
C4Application Application
C4MouseControl MouseControl
C4GraphicsSystem GraphicsSystem
C4GraphicsResource GraphicsResource
const char * LoadResStr(const char *id)
C4ParticleSystem Particles
const int32_t C4PVM_Scrolling
const float C4GFX_ZoomStep
int32_t ValidPlr(int32_t plr)
float fixtof(const C4Fixed &x)
C4GameScriptHost GameScript
C4SoundInstance * StartSoundEffect(const char *szSndName, bool fLoop, int32_t iVolume, C4Object *pObj, int32_t iCustomFalloffDistance, int32_t iPitch, C4SoundModifier *modifier)
const int32_t C4AudibilityRadius
#define C4ST_STOP(StatName)
#define C4ST_STARTNEW(StatName, strName)
int32_t DrawMessageOffset
int32_t Distance(int32_t iX1, int32_t iY1, int32_t iX2, int32_t iY2)
T Clamp(T bval, T lbound, T rbound)
StdStrBuf FormatString(const char *szFmt,...)
int32_t SplitscreenDividers
C4ConfigControls Controls
C4ConfigGraphics Graphics
void SetFoW(const C4FoWRegion *fow)
void DeactivateBlitModulation()
void DrawBoxDw(C4Surface *sfcDest, int iX1, int iY1, int iX2, int iY2, DWORD dwClr)
virtual bool EnsureMainContextSelected()=0
void SetZoom(float X, float Y, float Zoom)
bool SetPrimaryClipper(int iX1, int iY1, int iX2, int iY2)
void ActivateBlitModulation(DWORD dwWithClr)
C4ScriptUniform scriptUniform
virtual bool PrepareRendering(C4Surface *sfcToSurface)=0
bool BlitSurfaceTile(C4Surface *sfcSurface, C4Surface *sfcTarget, float iToX, float iToY, float iToWdt, float iToHgt, float iOffsetX, float iOffsetY, C4ShaderCall *shader_call)
bool TextOut(const char *szText, CStdFont &rFont, float fZoom, C4Surface *sfcDest, float iTx, float iTy, DWORD dwFCol=0xffffffff, BYTE byForm=ALeft, bool fDoMarkup=true)
void Draw(C4TargetFacet &cgo)
void Set(C4Surface &rSfc)
void Draw(C4Facet &cgo, bool fAspect=true, int32_t iPhaseX=0, int32_t iPhaseY=0, bool fTransparent=true)
void Update(C4Rect r, const FLOAT_RECT &vp)
bool Render(const C4TargetFacet *pOnScreen=nullptr)
void SetPreferredDlgRect(const C4Rect &rtNewPref)
void RenderMouse(C4TargetFacet &cgo)
void DrawCrewOverheadText(C4TargetFacet &cgo, int32_t player_nr)
std::unique_ptr< C4ScriptGuiWindow > ScriptGuiRoot
C4PlayerInfoList & PlayerInfos
bool DropFile(const char *filename, float x, float y)
void Draw(C4TargetFacet &gui_cgo, C4TargetFacet &cgo, int32_t iPlayer)
void FlashMessage(const char *message)
int32_t GetHeight() const
void Draw(C4TargetFacet &cgo, class C4FoWRegion *pLight=nullptr)
void Draw(C4TargetFacet &cgo, const ZoomData &GameZoom)
bool IsViewport(C4Viewport *pViewport)
void Move(int32_t iButton, int32_t iX, int32_t iY, DWORD dwKeyFlags, bool fCenter=false)
C4Network2Client * GetLocal() const
void DrawStatus(C4TargetFacet &cgo)
C4Network2ClientList Clients
void Draw(C4TargetFacet &cgo, int player, int MinPlane, int MaxPlane)
void DrawIfCategory(C4TargetFacet &cgo, int player, uint32_t dwCategory, bool invert)
void Draw(C4TargetFacet &cgo)
void DrawGlobalParticles(C4TargetFacet cgo)
void Draw(C4TargetFacet &cgo)
int32_t GetLayoutOrder() const
class C4PlayerControlAssignmentSet * ControlSet
int32_t GetJoinIssuedPlayerCount() const
C4Player * Get(int iPlayer) const
void AddRect(const C4Rect &rNewRect)
void ClipByRect(const C4Rect &rClip)
void Draw(C4TargetFacet &cgo)
void Set(const C4Facet &cpy)
C4PropList * getPropList() const
void ChangeZoom(float by_factor)
C4TargetFacet last_gui_draw_cgo
float GetZoomByViewRange(int32_t size_x, int32_t size_y) const
bool UpdateOutputSize(int32_t new_width=0, int32_t new_height=0)
bool Init(int32_t for_player, bool set_temporary_only)
int32_t ViewportOpenFrame
std::unique_ptr< C4ViewportWindow > pWindow
void DrawMenu(C4TargetFacet &cgo)
void DrawPlayerInfo(C4TargetFacet &cgo)
bool ScrollBarsByViewPosition()
void ScrollView(float by_x, float by_y)
void SetZoomLimits(float to_min_zoom, float to_max_zoom)
C4TargetFacet last_game_draw_cgo
void DrawPlayerStartup(C4TargetFacet &cgo)
void SetOutputSize(int32_t draw_x, int32_t draw_y, int32_t out_x, int32_t out_y, int32_t out_wdt, int32_t out_hgt)
void AdjustZoomAndPosition()
void DropFile(const char *filename, float x, float y)
std::unique_ptr< C4FoWRegion > pFoW
void AdjustPosition(bool immediate=false)
void Draw(C4TargetFacet &cgo, bool draw_game, bool draw_overlay)
void DrawOverlay(C4TargetFacet &cgo, const ZoomData &GameZoom)
bool IsViewportMenu(class C4Menu *menu)
void SetZoom(float zoom_value)
void ClearPointers(C4Object *obj)
bool FreeScroll(C4Vec2D scroll_by)
bool ViewportNextPlayer()
C4Viewport * FirstViewport
int32_t GetViewportCount()
C4Viewport * GetFirstViewport()
void RecalculateViewports()
C4Viewport * GetViewport(int32_t player_nr, C4Viewport *prev=nullptr)
C4RectList BackgroundAreas
void DrawFullscreenBackground()
void Execute(bool DrawBackground)
bool CloseViewport(int32_t player_nr, bool silent)
bool CreateViewport(int32_t player_nr, bool silent=false)
int32_t GetAudibility(int32_t x, int32_t y, int32_t *pan, int32_t audibility_radius=0, int32_t *out_player=nullptr)
void MouseMoveToViewport(int32_t button, int32_t x, int32_t y, DWORD key_param)
void ClearPointers(C4Object *obj)
void SortViewportsByPlayerControl()
const char * getData() const