mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Merge pull request #5398 from AssassinTee/feature/elasticity-tuning
implement tuning values for elasticity
This commit is contained in:
commit
03fd1b440b
|
@ -130,7 +130,7 @@ void CCharacter::HandleNinja()
|
|||
// Set velocity
|
||||
m_Core.m_Vel = m_Core.m_Ninja.m_ActivationDir * g_pData->m_Weapons.m_Ninja.m_Velocity;
|
||||
vec2 OldPos = m_Pos;
|
||||
Collision()->MoveBox(&m_Core.m_Pos, &m_Core.m_Vel, vec2(m_ProximityRadius, m_ProximityRadius), 0.f);
|
||||
Collision()->MoveBox(&m_Core.m_Pos, &m_Core.m_Vel, vec2(m_ProximityRadius, m_ProximityRadius), vec2(GetTuning(m_TuneZone)->m_GroundElasticityX, GetTuning(m_TuneZone)->m_GroundElasticityY));
|
||||
|
||||
// reset velocity so the client doesn't predict stuff
|
||||
m_Core.m_Vel = vec2(0.f, 0.f);
|
||||
|
|
|
@ -475,7 +475,7 @@ bool CCollision::TestBox(vec2 Pos, vec2 Size) const
|
|||
return false;
|
||||
}
|
||||
|
||||
void CCollision::MoveBox(vec2 *pInoutPos, vec2 *pInoutVel, vec2 Size, float Elasticity) const
|
||||
void CCollision::MoveBox(vec2 *pInoutPos, vec2 *pInoutVel, vec2 Size, vec2 Elasticity, bool *pGrounded) const
|
||||
{
|
||||
// do the move
|
||||
vec2 Pos = *pInoutPos;
|
||||
|
@ -487,6 +487,9 @@ void CCollision::MoveBox(vec2 *pInoutPos, vec2 *pInoutVel, vec2 Size, float Elas
|
|||
if(Distance > 0.00001f)
|
||||
{
|
||||
float Fraction = 1.0f / (float)(Max + 1);
|
||||
float ElasticityX = clamp(Elasticity.x, -1.0f, 1.0f);
|
||||
float ElasticityY = clamp(Elasticity.y, -1.0f, 1.0f);
|
||||
|
||||
for(int i = 0; i <= Max; i++)
|
||||
{
|
||||
// Early break as optimization to stop checking for collisions for
|
||||
|
@ -512,15 +515,17 @@ void CCollision::MoveBox(vec2 *pInoutPos, vec2 *pInoutVel, vec2 Size, float Elas
|
|||
|
||||
if(TestBox(vec2(Pos.x, NewPos.y), Size))
|
||||
{
|
||||
if(pGrounded && ElasticityY > 0 && Vel.y > 0)
|
||||
*pGrounded = true;
|
||||
NewPos.y = Pos.y;
|
||||
Vel.y *= -Elasticity;
|
||||
Vel.y *= -ElasticityY;
|
||||
Hits++;
|
||||
}
|
||||
|
||||
if(TestBox(vec2(NewPos.x, Pos.y), Size))
|
||||
{
|
||||
NewPos.x = Pos.x;
|
||||
Vel.x *= -Elasticity;
|
||||
Vel.x *= -ElasticityX;
|
||||
Hits++;
|
||||
}
|
||||
|
||||
|
@ -528,10 +533,12 @@ void CCollision::MoveBox(vec2 *pInoutPos, vec2 *pInoutVel, vec2 Size, float Elas
|
|||
// this is a real _corner case_!
|
||||
if(Hits == 0)
|
||||
{
|
||||
if(pGrounded && ElasticityY > 0 && Vel.y > 0)
|
||||
*pGrounded = true;
|
||||
NewPos.y = Pos.y;
|
||||
Vel.y *= -Elasticity;
|
||||
Vel.y *= -ElasticityY;
|
||||
NewPos.x = Pos.x;
|
||||
Vel.x *= -Elasticity;
|
||||
Vel.x *= -ElasticityX;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -42,7 +42,7 @@ public:
|
|||
int IntersectLineTeleWeapon(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision, int *pTeleNr) const;
|
||||
int IntersectLineTeleHook(vec2 Pos0, vec2 Pos1, vec2 *pOutCollision, vec2 *pOutBeforeCollision, int *pTeleNr) const;
|
||||
void MovePoint(vec2 *pInoutPos, vec2 *pInoutVel, float Elasticity, int *pBounces) const;
|
||||
void MoveBox(vec2 *pInoutPos, vec2 *pInoutVel, vec2 Size, float Elasticity) const;
|
||||
void MoveBox(vec2 *pInoutPos, vec2 *pInoutVel, vec2 Size, vec2 Elasticity, bool *pGrounded = nullptr) const;
|
||||
bool TestBox(vec2 Pos, vec2 Size) const;
|
||||
|
||||
// DDRace
|
||||
|
|
|
@ -491,7 +491,17 @@ void CCharacterCore::Move()
|
|||
vec2 NewPos = m_Pos;
|
||||
|
||||
vec2 OldVel = m_Vel;
|
||||
m_pCollision->MoveBox(&NewPos, &m_Vel, PhysicalSizeVec2(), 0);
|
||||
bool Grounded = false;
|
||||
m_pCollision->MoveBox(&NewPos, &m_Vel, PhysicalSizeVec2(),
|
||||
vec2(m_Tuning.m_GroundElasticityX,
|
||||
m_Tuning.m_GroundElasticityY),
|
||||
&Grounded);
|
||||
|
||||
if(Grounded)
|
||||
{
|
||||
m_Jumped &= ~2;
|
||||
m_JumpedTotal = 0;
|
||||
}
|
||||
|
||||
m_Colliding = 0;
|
||||
if(m_Vel.x < 0.001f && m_Vel.x > -0.001f)
|
||||
|
|
|
@ -252,7 +252,14 @@ void CCharacter::HandleNinja()
|
|||
// Set velocity
|
||||
m_Core.m_Vel = m_Core.m_Ninja.m_ActivationDir * g_pData->m_Weapons.m_Ninja.m_Velocity;
|
||||
vec2 OldPos = m_Pos;
|
||||
Collision()->MoveBox(&m_Core.m_Pos, &m_Core.m_Vel, vec2(GetProximityRadius(), GetProximityRadius()), 0.f);
|
||||
vec2 GroundElasticity;
|
||||
|
||||
if(!m_TuneZone)
|
||||
GroundElasticity = vec2(GameServer()->Tuning()->m_GroundElasticityX, GameServer()->Tuning()->m_GroundElasticityY);
|
||||
else
|
||||
GroundElasticity = vec2(GameServer()->TuningList()[m_TuneZone].m_GroundElasticityX, GameServer()->TuningList()[m_TuneZone].m_GroundElasticityY);
|
||||
|
||||
Collision()->MoveBox(&m_Core.m_Pos, &m_Core.m_Vel, vec2(GetProximityRadius(), GetProximityRadius()), GroundElasticity);
|
||||
|
||||
// reset velocity so the client doesn't predict stuff
|
||||
m_Core.m_Vel = vec2(0.f, 0.f);
|
||||
|
|
|
@ -59,3 +59,6 @@ MACRO_TUNING_PARAM(GrenadeFireDelay, grenade_fire_delay, 500, "Delay of firing g
|
|||
MACRO_TUNING_PARAM(LaserFireDelay, laser_fire_delay, 800, "Delay of firing laser laser")
|
||||
MACRO_TUNING_PARAM(NinjaFireDelay, ninja_fire_delay, 800, "Delay of firing ninja")
|
||||
MACRO_TUNING_PARAM(HammerHitFireDelay, hammer_hit_fire_delay, 320, "Delay of hammering (when hitting another tee)")
|
||||
|
||||
MACRO_TUNING_PARAM(GroundElasticityX, ground_elasticity_x, 0, "Wall elasticity")
|
||||
MACRO_TUNING_PARAM(GroundElasticityY, ground_elasticity_y, 0, "Ground/ceiling elasticity")
|
||||
|
|
Loading…
Reference in a new issue