mirror of
https://github.com/ddnet/ddnet.git
synced 2024-09-20 09:34:19 +00:00
Merge #3531
3531: Add set_view camera position command r=heinrich5991 a=ChillerDragon Allows to bind spectator camera positions. Can be used to write teleport binds for test server or quickly spectate specific spots of the map. ## Checklist - [x] Tested the change ingame - [ ] Provided screenshots if it is a visual change - [ ] Tested in combination with possibly related configuration options - [ ] Written a unit test if it works standalone, system.c especially - [ ] Considered possible null pointers and out of bounds array indexing - [x] Changed no physics that affect existing maps - [ ] Tested the change with [ASan+UBSan or valgrind's memcheck](https://github.com/ddnet/ddnet/#using-addresssanitizer--undefinedbehavioursanitizer-or-valgrinds-memcheck) (optional) Co-authored-by: ChillerDragon <ChillerDragon@gmail.com>
This commit is contained in:
commit
a3ae016177
|
@ -24,6 +24,7 @@ CCamera::CCamera()
|
||||||
m_ZoomSet = false;
|
m_ZoomSet = false;
|
||||||
m_Zoom = 1.0f;
|
m_Zoom = 1.0f;
|
||||||
m_Zooming = false;
|
m_Zooming = false;
|
||||||
|
m_ForceFreeviewPos = vec2(-1, -1);
|
||||||
}
|
}
|
||||||
|
|
||||||
float CCamera::ZoomProgress(float CurrentTime) const
|
float CCamera::ZoomProgress(float CurrentTime) const
|
||||||
|
@ -170,6 +171,11 @@ void CCamera::OnRender()
|
||||||
m_Center = m_pClient->m_LocalCharacterPos + s_CurrentCameraOffset[g_Config.m_ClDummy];
|
m_Center = m_pClient->m_LocalCharacterPos + s_CurrentCameraOffset[g_Config.m_ClDummy];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(m_ForceFreeviewPos != vec2(-1, -1) && m_CamType == CAMTYPE_SPEC)
|
||||||
|
{
|
||||||
|
m_Center = m_pClient->m_pControls->m_MousePos[g_Config.m_ClDummy] = m_ForceFreeviewPos;
|
||||||
|
m_ForceFreeviewPos = vec2(-1, -1);
|
||||||
|
}
|
||||||
m_PrevCenter = m_Center;
|
m_PrevCenter = m_Center;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -178,6 +184,7 @@ void CCamera::OnConsoleInit()
|
||||||
Console()->Register("zoom+", "", CFGFLAG_CLIENT, ConZoomPlus, this, "Zoom increase");
|
Console()->Register("zoom+", "", CFGFLAG_CLIENT, ConZoomPlus, this, "Zoom increase");
|
||||||
Console()->Register("zoom-", "", CFGFLAG_CLIENT, ConZoomMinus, this, "Zoom decrease");
|
Console()->Register("zoom-", "", CFGFLAG_CLIENT, ConZoomMinus, this, "Zoom decrease");
|
||||||
Console()->Register("zoom", "", CFGFLAG_CLIENT, ConZoomReset, this, "Zoom reset");
|
Console()->Register("zoom", "", CFGFLAG_CLIENT, ConZoomReset, this, "Zoom reset");
|
||||||
|
Console()->Register("set_view", "i[x]i[y]", CFGFLAG_CLIENT, ConSetView, this, "Set camera position to x and y in the map");
|
||||||
}
|
}
|
||||||
|
|
||||||
void CCamera::OnReset()
|
void CCamera::OnReset()
|
||||||
|
@ -206,3 +213,11 @@ void CCamera::ConZoomReset(IConsole::IResult *pResult, void *pUserData)
|
||||||
{
|
{
|
||||||
((CCamera *)pUserData)->ChangeZoom(pow(ZoomStep, g_Config.m_ClDefaultZoom - 10));
|
((CCamera *)pUserData)->ChangeZoom(pow(ZoomStep, g_Config.m_ClDefaultZoom - 10));
|
||||||
}
|
}
|
||||||
|
void CCamera::ConSetView(IConsole::IResult *pResult, void *pUserData)
|
||||||
|
{
|
||||||
|
CCamera *pSelf = (CCamera *)pUserData;
|
||||||
|
// wait until free view camera type to update the position
|
||||||
|
pSelf->m_ForceFreeviewPos = vec2(
|
||||||
|
clamp(pResult->GetInteger(0) * 32.0f, 200.0f, pSelf->Collision()->GetWidth() * 32 - 200.0f),
|
||||||
|
clamp(pResult->GetInteger(1) * 32.0f, 200.0f, pSelf->Collision()->GetWidth() * 32 - 200.0f));
|
||||||
|
}
|
||||||
|
|
|
@ -51,6 +51,9 @@ private:
|
||||||
static void ConZoomPlus(IConsole::IResult *pResult, void *pUserData);
|
static void ConZoomPlus(IConsole::IResult *pResult, void *pUserData);
|
||||||
static void ConZoomMinus(IConsole::IResult *pResult, void *pUserData);
|
static void ConZoomMinus(IConsole::IResult *pResult, void *pUserData);
|
||||||
static void ConZoomReset(IConsole::IResult *pResult, void *pUserData);
|
static void ConZoomReset(IConsole::IResult *pResult, void *pUserData);
|
||||||
|
static void ConSetView(IConsole::IResult *pResult, void *pUserData);
|
||||||
|
|
||||||
|
vec2 m_ForceFreeviewPos;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue