void CCharacterCore::Move() { float RampValue = VelocityRamp(length(m_Vel)*50, m_pWorld->m_Tuning.m_VelrampStart, m_pWorld->m_Tuning.m_VelrampRange, m_pWorld->m_Tuning.m_VelrampCurvature); m_Vel.x = m_Vel.x*RampValue; m_pCollision->MoveBox(&m_Pos, &m_Vel, vec2(28.0f, 28.0f), 0); m_Vel.x = m_Vel.x*(1.0f/RampValue); }
void CDebugHud::RenderNetCorrections() { if(!g_Config.m_Debug || g_Config.m_DbgGraphs || !m_pClient->m_Snap.m_pLocalCharacter || !m_pClient->m_Snap.m_pLocalPrevCharacter) return; float Width = 300*Graphics()->ScreenAspect(); Graphics()->MapScreen(0, 0, Width, 300); /*float speed = distance(vec2(netobjects.local_prev_character->x, netobjects.local_prev_character->y), vec2(netobjects.local_character->x, netobjects.local_character->y));*/ float Velspeed = length(vec2(m_pClient->m_Snap.m_pLocalCharacter->m_VelX/256.0f, m_pClient->m_Snap.m_pLocalCharacter->m_VelY/256.0f))*50; float Ramp = VelocityRamp(Velspeed, m_pClient->m_Tuning.m_VelrampStart, m_pClient->m_Tuning.m_VelrampRange, m_pClient->m_Tuning.m_VelrampCurvature); const char *paStrings[] = {"velspeed:", "velspeed*ramp:", "ramp:", "Pos", " x:", " y:", "netobj corrections", " num:", " on:"}; const int Num = sizeof(paStrings)/sizeof(char *); const float LineHeight = 6.0f; const float Fontsize = 5.0f; float x = Width-100.0f, y = 50.0f; for(int i = 0; i < Num; ++i) TextRender()->Text(0, x, y+i*LineHeight, Fontsize, paStrings[i], -1); x = Width-10.0f; char aBuf[128]; str_format(aBuf, sizeof(aBuf), "%.0f", Velspeed); float w = TextRender()->TextWidth(0, Fontsize, aBuf, -1); TextRender()->Text(0, x-w, y, Fontsize, aBuf, -1); y += LineHeight; str_format(aBuf, sizeof(aBuf), "%.0f", Velspeed*Ramp); w = TextRender()->TextWidth(0, Fontsize, aBuf, -1); TextRender()->Text(0, x-w, y, Fontsize, aBuf, -1); y += LineHeight; str_format(aBuf, sizeof(aBuf), "%.2f", Ramp); w = TextRender()->TextWidth(0, Fontsize, aBuf, -1); TextRender()->Text(0, x-w, y, Fontsize, aBuf, -1); y += 2*LineHeight; str_format(aBuf, sizeof(aBuf), "%d", m_pClient->m_Snap.m_pLocalCharacter->m_X); w = TextRender()->TextWidth(0, Fontsize, aBuf, -1); TextRender()->Text(0, x-w, y, Fontsize, aBuf, -1); y += LineHeight; str_format(aBuf, sizeof(aBuf), "%d", m_pClient->m_Snap.m_pLocalCharacter->m_Y); w = TextRender()->TextWidth(0, Fontsize, aBuf, -1); TextRender()->Text(0, x-w, y, Fontsize, aBuf, -1); y += 2*LineHeight; str_format(aBuf, sizeof(aBuf), "%d", m_pClient->NetobjNumCorrections()); w = TextRender()->TextWidth(0, Fontsize, aBuf, -1); TextRender()->Text(0, x-w, y, Fontsize, aBuf, -1); y += LineHeight; w = TextRender()->TextWidth(0, Fontsize, m_pClient->NetobjCorrectedOn(), -1); TextRender()->Text(0, x-w, y, Fontsize, m_pClient->NetobjCorrectedOn(), -1); }
void CCharacterCore::Move() { float RampValue = VelocityRamp(length(m_Vel)*50, m_pWorld->m_Tuning.m_VelrampStart, m_pWorld->m_Tuning.m_VelrampRange, m_pWorld->m_Tuning.m_VelrampCurvature); m_Vel.x = m_Vel.x*RampValue; vec2 NewPos = m_Pos; m_pCollision->MoveBox(&NewPos, &m_Vel, vec2(28.0f, 28.0f), 0); m_Vel.x = m_Vel.x*(1.0f/RampValue); if(m_pWorld && m_pWorld->m_Tuning.m_PlayerCollision && this->m_Collision) { // check player collision float Distance = distance(m_Pos, NewPos); int End = Distance+1; vec2 LastPos = m_Pos; for(int i = 0; i < End; i++) { float a = i/Distance; vec2 Pos = mix(m_Pos, NewPos, a); for(int p = 0; p < MAX_CLIENTS; p++) { CCharacterCore *pCharCore = m_pWorld->m_apCharacters[p]; if(!pCharCore || pCharCore == this || !pCharCore->m_Collision) continue; float D = distance(Pos, pCharCore->m_Pos); if(D < 28.0f && D > 0.0f) { if(a > 0.0f) m_Pos = LastPos; else if(distance(NewPos, pCharCore->m_Pos) > D) m_Pos = NewPos; return; } else if(D <= 0.001f && D >= -0.001f) { if(a > 0.0f) m_Pos = LastPos; else if(distance(NewPos, pCharCore->m_Pos) > D) m_Pos = NewPos; return; } } LastPos = Pos; } } m_Pos = NewPos; }
void CCharacterCore::Move() { float RampValue = VelocityRamp(length(m_Vel)*50, m_pWorld->m_Tuning.m_VelrampStart, m_pWorld->m_Tuning.m_VelrampRange, m_pWorld->m_Tuning.m_VelrampCurvature); m_Vel.x = m_Vel.x*RampValue; vec2 NewPos = m_Pos; m_pCollision->MoveBox(&NewPos, &m_Vel, vec2(28.0f, 28.0f), 0); m_Vel.x = m_Vel.x*(1.0f/RampValue); if(m_pWorld && m_pWorld->m_Tuning.m_PlayerCollision && m_CanCollide) { // check player collision float Distance = distance(m_Pos, NewPos); int End = Distance+1; vec2 LastPos = m_Pos; for(int i = 0; i < End; i++) { float a = i/Distance; vec2 Pos = mix(m_Pos, NewPos, a); for(int p = 0; p < MAX_CLIENTS; p++) { CCharacterCore *pCharCore = m_pWorld->m_apCharacters[p]; if(!pCharCore || pCharCore == this || !pCharCore->m_CanCollide) continue; float D = distance(Pos, pCharCore->m_Pos); if(D < 28.0f && D > 0.0f) { if(a > 0.0f) m_Pos = LastPos; else if(distance(NewPos, pCharCore->m_Pos) > D) m_Pos = NewPos; return; } } LastPos = Pos; } } // MineTee int BlockIndex = m_pCollision->GetMineTeeTileIndexAt(m_Pos); CBlockManager::CBlockInfo *pBlockInfo = m_pCollision->BlockManager()->GetBlockInfo(BlockIndex); if (BlockIndex != -1 && pBlockInfo) { int FluidType = -1; if (m_pCollision->GetBlockManager()->IsFluid(BlockIndex, &FluidType)) { if (FluidType == CCollision::FLUID_WATER) m_Vel.y -= 0.1f; else if (FluidType == CCollision::FLUID_LAVA) m_Vel.y -= 0.35f; m_Jumped &= ~2; } m_Vel *= pBlockInfo->m_PlayerVel; } // m_Pos = NewPos; }
void CDebugHud::RenderTuning() { // render tuning debugging if(!g_Config.m_DbgTuning) return; CTuningParams StandardTuning; Graphics()->MapScreen(0, 0, 300*Graphics()->ScreenAspect(), 300); float y = 50.0f; int Count = 0; for(int i = 0; i < m_pClient->m_Tuning.Num(); i++) { char aBuf[128]; float Current, Standard; m_pClient->m_Tuning.Get(i, &Current); StandardTuning.Get(i, &Standard); if(Standard == Current) TextRender()->TextColor(1,1,1,1.0f); else TextRender()->TextColor(1,0.25f,0.25f,1.0f); float w; float x = 5.0f; str_format(aBuf, sizeof(aBuf), "%.2f", Standard); x += 20.0f; w = TextRender()->TextWidth(0, 5, aBuf, -1); TextRender()->Text(0x0, x-w, y+Count*6, 5, aBuf, -1); str_format(aBuf, sizeof(aBuf), "%.2f", Current); x += 20.0f; w = TextRender()->TextWidth(0, 5, aBuf, -1); TextRender()->Text(0x0, x-w, y+Count*6, 5, aBuf, -1); x += 5.0f; TextRender()->Text(0x0, x, y+Count*6, 5, m_pClient->m_Tuning.m_apNames[i], -1); Count++; } y = y+Count*6; Graphics()->TextureSet(-1); Graphics()->BlendNormal(); Graphics()->LinesBegin(); float Height = 50.0f; float pv = 1; IGraphics::CLineItem Array[100]; for(int i = 0; i < 100; i++) { float Speed = i/100.0f * 3000; float Ramp = VelocityRamp(Speed, m_pClient->m_Tuning.m_VelrampStart, m_pClient->m_Tuning.m_VelrampRange, m_pClient->m_Tuning.m_VelrampCurvature); float RampedSpeed = (Speed * Ramp)/1000.0f; Array[i] = IGraphics::CLineItem((i-1)*2, y+Height-pv*Height, i*2, y+Height-RampedSpeed*Height); //Graphics()->LinesDraw((i-1)*2, 200, i*2, 200); pv = RampedSpeed; } Graphics()->LinesDraw(Array, 100); Graphics()->LinesEnd(); TextRender()->TextColor(1,1,1,1); }