diff --git a/Minecraft.Client/Common/Consoles_App.cpp b/Minecraft.Client/Common/Consoles_App.cpp index 43cf73e15..2844de342 100644 --- a/Minecraft.Client/Common/Consoles_App.cpp +++ b/Minecraft.Client/Common/Consoles_App.cpp @@ -1407,8 +1407,7 @@ void CMinecraftApp::ActionGameSettings(int iPad,eGameSetting eVal) if(iPad==ProfileManager.GetPrimaryPad()) { float fovDeg = 70.0f + (float)GameSettingsA[iPad]->ucFov * 40.0f / 100.0f; - pMinecraft->gameRenderer->SetFovVal(fovDeg); - pMinecraft->options->set(Options::Option::FOV, (float)GameSettingsA[iPad]->ucFov / 100.0f); + pMinecraft->gameRenderer->SetFovVal(iPad, fovDeg); } break; case eGameSetting_Difficulty: diff --git a/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp b/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp index fafcea027..5d6658885 100644 --- a/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp +++ b/Minecraft.Client/Common/UI/UIScene_DebugOverlay.cpp @@ -279,7 +279,7 @@ void UIScene_DebugOverlay::handleSliderMove(F64 sliderId, F64 currentValue) if (v < 0) v = 0; if (v > 100) v = 100; int fovDeg = 70 + v * 40 / 100; - pMinecraft->gameRenderer->SetFovVal((float)fovDeg); + pMinecraft->gameRenderer->SetFovVal(m_iPad, (float)fovDeg); app.SetGameSettings(m_iPad, eGameSetting_FOV, v); WCHAR TempString[256]; diff --git a/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp b/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp index 423c8f4b2..a883c5088 100644 --- a/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp +++ b/Minecraft.Client/Common/UI/UIScene_SettingsGraphicsMenu.cpp @@ -219,7 +219,7 @@ void UIScene_SettingsGraphicsMenu::handleSliderMove(F64 sliderId, F64 currentVal m_sliderFOV.handleSliderMove(value); Minecraft* pMinecraft = Minecraft::GetInstance(); int fovValue = sliderValueToFov(value); - pMinecraft->gameRenderer->SetFovVal((float)fovValue); + pMinecraft->gameRenderer->SetFovVal(m_iPad, (float)fovValue); app.SetGameSettings(m_iPad, eGameSetting_FOV, value); WCHAR TempString[256]; swprintf((WCHAR*)TempString, 256, L"FOV: %d", fovValue); diff --git a/Minecraft.Client/Common/XUI/XUI_DebugOverlay.cpp b/Minecraft.Client/Common/XUI/XUI_DebugOverlay.cpp index e6db6a805..17d6b0df8 100644 --- a/Minecraft.Client/Common/XUI/XUI_DebugOverlay.cpp +++ b/Minecraft.Client/Common/XUI/XUI_DebugOverlay.cpp @@ -102,7 +102,7 @@ HRESULT CScene_DebugOverlay::OnInit( XUIMessageInit *pInitData, BOOL &bHandled ) Minecraft *pMinecraft = Minecraft::GetInstance(); m_setTime.SetValue( pMinecraft->level->getLevelData()->getTime() % 24000 ); - m_setFov.SetValue( (int)pMinecraft->gameRenderer->GetFovVal()); + m_setFov.SetValue((int)pMinecraft->gameRenderer->GetFovVal(ProfileManager.GetPrimaryPad())); XuiSetTimer(m_hObj,0,DEBUG_OVERLAY_UPDATE_TIME_PERIOD); @@ -266,20 +266,26 @@ HRESULT CScene_DebugOverlay::OnNotifyValueChanged( HXUIOBJ hObjSource, XUINotify if( hObjSource == m_setFov ) { Minecraft *pMinecraft = Minecraft::GetInstance(); - pMinecraft->gameRenderer->SetFovVal((float)pNotifyValueChangedData->nValue); + pMinecraft->gameRenderer->SetFovVal(pNotifyValueChangedData->UserIndex, (float)pNotifyValueChangedData->nValue); } return S_OK; } -HRESULT CScene_DebugOverlay::OnTimer( XUIMessageTimer *pTimer, BOOL& bHandled ) +HRESULT CScene_DebugOverlay::OnTimer(XUIMessageTimer *pTimer, BOOL &bHandled) { - Minecraft *pMinecraft = Minecraft::GetInstance(); - if(pMinecraft->level != NULL) - { - m_setTime.SetValue( pMinecraft->level->getLevelData()->getTime() % 24000 ); - m_setFov.SetValue( (int)pMinecraft->gameRenderer->GetFovVal()); - } - return S_OK; + Minecraft *pMinecraft = Minecraft::GetInstance(); + if(pMinecraft->level != NULL) + { + m_setTime.SetValue(pMinecraft->level->getLevelData()->getTime() % 24000); + for (int i = 0; i < XUSER_MAX_COUNT; i++) + { + if (pMinecraft->localplayers[i] != NULL) + { + m_setFov.SetValue((int)pMinecraft->gameRenderer->GetFovVal(i)); + } + } + } + return S_OK; } void CScene_DebugOverlay::SetSpawnToPlayerPos() diff --git a/Minecraft.Client/GameRenderer.cpp b/Minecraft.Client/GameRenderer.cpp index 20a0f1e31..126482c08 100644 --- a/Minecraft.Client/GameRenderer.cpp +++ b/Minecraft.Client/GameRenderer.cpp @@ -130,12 +130,11 @@ GameRenderer::GameRenderer(Minecraft *mc) darkenWorldAmount = 0.0f; darkenWorldAmountO = 0.0f; - m_fov=70.0f; - // 4J Stu - Init these so they are setup before the tick for( int i = 0; i < 4; i++ ) { fov[i] = oFov[i] = 1.0f; + m_fov[i] = 70.0f; } this->mc = mc; @@ -358,54 +357,51 @@ void GameRenderer::pick(float a) } } -void GameRenderer::SetFovVal(float fov) +void GameRenderer::tickFov() { - m_fov=fov; + shared_ptr player = dynamic_pointer_cast(mc->cameraTargetPlayer); + int playerIdx = player ? player->GetXboxPad() : 0; + tFov[playerIdx] = player->getFieldOfViewModifier(); + oFov[playerIdx] = fov[playerIdx]; + fov[playerIdx] += (tFov[playerIdx] - fov[playerIdx]) * 0.5f; + if (fov[playerIdx] > 1.5f) + { + fov[playerIdx] = 1.5f; + } + if (fov[playerIdx] < 0.1f) + { + fov[playerIdx] = 0.1f; + } } -float GameRenderer::GetFovVal() +void GameRenderer::SetFovVal(int playerIdx, float fov) { - return m_fov; + m_fov[playerIdx] = fov; } -void GameRenderer::tickFov() +float GameRenderer::GetFovVal(int playerIdx) { - shared_ptrplayer = dynamic_pointer_cast(mc->cameraTargetPlayer); - - int playerIdx = player ? player->GetXboxPad() : 0; - tFov[playerIdx] = player->getFieldOfViewModifier(); - - oFov[playerIdx] = fov[playerIdx]; - fov[playerIdx] += (tFov[playerIdx] - fov[playerIdx]) * 0.5f; - - if (fov[playerIdx] > 1.5f) fov[playerIdx] = 1.5f; - if (fov[playerIdx] < 0.1f) fov[playerIdx] = 0.1f; + return m_fov[playerIdx]; } float GameRenderer::getFov(float a, bool applyEffects) { - if (cameraFlip > 0 ) return 90; - - shared_ptr player = dynamic_pointer_cast(mc->cameraTargetPlayer); - int playerIdx = player ? player->GetXboxPad() : 0; - float fov = m_fov;//70; - if (applyEffects) - { - fov += mc->options->fov * 40; - fov *= oFov[playerIdx] + (this->fov[playerIdx] - oFov[playerIdx]) * a; - } - if (player->getHealth() <= 0) - { - float duration = player->deathTime + a; - - fov /= ((1 - 500 / (duration + 500)) * 2.0f + 1); - } - - int t = Camera::getBlockAt(mc->level, player, a); - if (t != 0 && Tile::tiles[t]->material == Material::water) fov = fov * 60 / 70; - - return fov + fovOffsetO + (fovOffset - fovOffsetO) * a; - + if (cameraFlip > 0 ) return 90; + shared_ptr player = dynamic_pointer_cast(mc->cameraTargetPlayer); + int playerIdx = player ? player->GetXboxPad() : 0; + float fov = m_fov[playerIdx];//70; + if (applyEffects) + { + fov *= oFov[playerIdx] + (this->fov[playerIdx] - oFov[playerIdx]) * a; + } + if (player->getHealth() <= 0) + { + float duration = player->deathTime + a; + fov /= ((1 - 500 / (duration + 500)) * 2.0f + 1); + } + int t = Camera::getBlockAt(mc->level, player, a); + if (t != 0 && Tile::tiles[t]->material == Material::water) fov = fov * 60 / 70; + return fov + fovOffsetO + (fovOffset - fovOffsetO) * a; } void GameRenderer::bobHurt(float a) diff --git a/Minecraft.Client/GameRenderer.h b/Minecraft.Client/GameRenderer.h index 21cf8acba..4dff86174 100644 --- a/Minecraft.Client/GameRenderer.h +++ b/Minecraft.Client/GameRenderer.h @@ -87,12 +87,13 @@ class GameRenderer bool isInClouds; - float m_fov; -public: + float m_fov[4]; + + public: GameRenderer(Minecraft *mc); ~GameRenderer(); - void SetFovVal(float fov); - float GetFovVal(); + void SetFovVal(int playerIdx, float fov); + float GetFovVal(int playerIdx); public: void tick(bool bFirst);