Skip to content

Commit

Permalink
Add missing modeservice calls, add mode cvar changes, add parameter t…
Browse files Browse the repository at this point in the history
…o silently switch modes
  • Loading branch information
zer0k-z committed Dec 19, 2023
1 parent 2092120 commit 09711b9
Show file tree
Hide file tree
Showing 7 changed files with 66 additions and 7 deletions.
2 changes: 1 addition & 1 deletion metamod-source
5 changes: 4 additions & 1 deletion src/kz/kz_player.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ void KZPlayer::Reset()
this->checkpointService->Reset();
this->quietService->Reset();
// TODO: Make a cvar for default mode
KZ::mode::GetKZModeManager()->SwitchToMode(this, "CKZ");
KZ::mode::GetKZModeManager()->SwitchToMode(this, "CKZ", true);
}

float KZPlayer::GetPlayerMaxSpeed()
Expand Down Expand Up @@ -235,16 +235,19 @@ void KZPlayer::OnPostThinkPost()
void KZPlayer::OnStartTouchGround()
{
this->jumpstatsService->EndJump();
this->modeService->OnStartTouchGround();
}

void KZPlayer::OnStopTouchGround()
{
this->jumpstatsService->AddJump();
this->modeService->OnStopTouchGround();
}

void KZPlayer::OnChangeMoveType(MoveType_t oldMoveType)
{
this->jumpstatsService->OnChangeMoveType(oldMoveType);
this->modeService->OnChangeMoveType(oldMoveType);
}


Expand Down
3 changes: 2 additions & 1 deletion src/kz/mode/kz_mode.h
Original file line number Diff line number Diff line change
Expand Up @@ -87,7 +87,7 @@ class KZModeManager
}
virtual bool RegisterMode(const char *shortModeName, const char *longModeName, ModeServiceFactory factory);
virtual void UnregisterMode(const char *modeName);
bool SwitchToMode(KZPlayer *player, const char *modeName);
bool SwitchToMode(KZPlayer *player, const char *modeName, bool silent = false);
private:
u32 currentID = 0;
CUtlStringMap<int> nameIDMap;
Expand All @@ -113,6 +113,7 @@ namespace KZ::mode
"sv_friction",
"sv_gravity",
"sv_jump_impulse",
"sv_jump_spam_penalty_time",
"sv_ladder_angle",
"sv_ladder_dampen",
"sv_ladder_scale_speed",
Expand Down
29 changes: 28 additions & 1 deletion src/kz/mode/kz_mode_ckz.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -117,10 +117,37 @@ DistanceTier KZClassicModeService::GetDistanceTier(JumpType jumpType, f32 distan

f32 KZClassicModeService::GetPlayerMaxSpeed()
{
return 250.0f;
// TODO: prestrafe
return 276.0f;
}

const char **KZClassicModeService::GetModeConVarValues()
{
return modeCvarValues;
}

void KZClassicModeService::OnStopTouchGround()
{
Vector velocity;
this->player->GetVelocity(&velocity);
f32 speed = velocity.Length2D();

f32 timeOnGround = this->player->takeoffTime - this->player->landingTime;
// Perf
if (timeOnGround <= 0.02)
{
Vector2D landingVelocity2D(this->player->landingVelocity.x, this->player->landingVelocity.y);
landingVelocity2D.NormalizeInPlace();
float newSpeed = this->player->landingVelocity.Length2D();
if (newSpeed > 276.0f)
{
newSpeed = (52 - timeOnGround * 128) * log(newSpeed) - 5.020043;
}
//META_CONPRINTF("currentSpeed = %.3f, timeOnGround = %.3f, landingspeed = %.3f, newSpeed = %.3f\n", speed, timeOnGround, this->player->landingVelocity.Length2D(), newSpeed);
velocity.x = newSpeed * landingVelocity2D.x;
velocity.y = newSpeed * landingVelocity2D.y;
this->player->SetVelocity(velocity);
this->player->takeoffVelocity = velocity;
}
// TODO: perf heights
}
3 changes: 3 additions & 0 deletions src/kz/mode/kz_mode_ckz.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,6 +50,7 @@ class KZClassicModeService : public KZModeService
"5.2", // sv_friction
"800", // sv_gravity
"302.0", // sv_jump_impulse
"0.0078125", // sv_jump_spam_penalty_time
"-0.707", // sv_ladder_angle
"1", // sv_ladder_dampen
"1", // sv_ladder_scale_speed
Expand All @@ -73,4 +74,6 @@ class KZClassicModeService : public KZModeService
virtual DistanceTier GetDistanceTier(JumpType jumpType, f32 distance) override;
virtual const char **GetModeConVarValues() override;
virtual f32 GetPlayerMaxSpeed() override;

virtual void OnStopTouchGround() override;
};
30 changes: 27 additions & 3 deletions src/kz/mode/kz_mode_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,30 @@ void KZ::mode::ApplyModeCvarValues(KZPlayer *player)
{
for (u32 i = 0; i < numCvar; i++)
{
u8 byteArray[16] = {};
if (modeCvars[i]->m_eVarType == EConVarType_Float32)
{
f32 newValue = atof(player->modeService->GetModeConVarValues()[i]);
V_memcpy(byteArray, &newValue, sizeof(f32));
}
else
{
u32 newValue;
if (V_stricmp(player->modeService->GetModeConVarValues()[i], "true") == 0)
{
newValue = 1;
}
else if (V_stricmp(player->modeService->GetModeConVarValues()[i], "false") == 0)
{
newValue = 0;
}
else
{
newValue = atoi(player->modeService->GetModeConVarValues()[i]);
}
V_memcpy(byteArray, &newValue, sizeof(u32));
}
V_memcpy(&(modeCvars[i]->values), byteArray, 16);
//g_pCVar->SetConVarValue(modeCvarHandles[i], 0, (CVValue_t *)player->modeService->GetModeConVarValues()[i], (CVValue_t *)modeCvars[i]->values);
}
}
Expand Down Expand Up @@ -125,7 +149,7 @@ void KZModeManager::UnregisterMode(const char *modeName)
{
return; // Special case for VNL (0)
}
for (u32 i = 0; i < this->nameIDMap.GetNumStrings(); i++)
for (int i = 0; i < this->nameIDMap.GetNumStrings(); i++)
{
if (this->nameIDMap[i] == modeID)
{
Expand All @@ -144,7 +168,7 @@ void KZModeManager::UnregisterMode(const char *modeName)
}
}

bool KZModeManager::SwitchToMode(KZPlayer *player, const char *modeName)
bool KZModeManager::SwitchToMode(KZPlayer *player, const char *modeName, bool silent)
{
// Don't change mode if it doesn't exist.
if (!modeName || !this->nameIDMap.Defined(modeName)) return false;
Expand All @@ -157,7 +181,7 @@ bool KZModeManager::SwitchToMode(KZPlayer *player, const char *modeName)
delete player->modeService;
player->modeService = factory(player);

if (player->GetController())
if (player->GetController() && !silent)
{
utils::CPrintChat(player->GetController(), "%s {grey}You have switched to the {purple}%s {grey}mode.", KZ_CHAT_PREFIX, player->modeService->GetModeName());
}
Expand Down
1 change: 1 addition & 0 deletions src/kz/mode/kz_mode_vnl.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ class KZVanillaModeService : public KZModeService
"5.2", // sv_friction
"800", // sv_gravity
"301.993377411", // sv_jump_impulse
"0.015625", // sv_jump_spam_penalty_time
"-0.707", // sv_ladder_angle
"0.2", // sv_ladder_dampen
"0.78", // sv_ladder_scale_speed
Expand Down

0 comments on commit 09711b9

Please sign in to comment.