From 3957a7404e0c14d4343c7e0b3c52958441a98743 Mon Sep 17 00:00:00 2001 From: c0d3d3v Date: Thu, 24 Mar 2022 01:05:41 +0100 Subject: [PATCH] move m_Ninja in Character Core --- src/game/client/components/hud.h | 12 +++++--- .../client/prediction/entities/character.cpp | 26 ++++++++-------- .../client/prediction/entities/character.h | 15 ++-------- src/game/gamecore.cpp | 1 + src/game/gamecore.h | 9 ++++++ src/game/server/entities/character.cpp | 30 +++++++++---------- src/game/server/entities/character.h | 15 ++-------- 7 files changed, 52 insertions(+), 56 deletions(-) diff --git a/src/game/client/components/hud.h b/src/game/client/components/hud.h index f5a0da23c..6a8331938 100644 --- a/src/game/client/components/hud.h +++ b/src/game/client/components/hud.h @@ -54,6 +54,7 @@ class CHud : public CComponent void PreparePlayerStateQuads(); void RenderPlayerState(const int ClientID); + void RenderNinjaBar(float x, float y, float Progress); void RenderGameTimer(); void RenderPauseNotification(); @@ -101,9 +102,12 @@ private: int m_FlagOffset; int m_AirjumpOffset; int m_AirjumpEmptyOffset; + int m_WeaponHammerOffset; + int m_WeaponGunOffset; int m_WeaponShotgunOffset; int m_WeaponGrenadeOffset; int m_WeaponLaserOffset; + int m_WeaponNinjaOffset; int m_EndlessJumpOffset; int m_EndlessHookOffset; int m_JetpackOffset; @@ -119,10 +123,10 @@ private: int m_NoLaserHitOffset; int m_DummyHammerOffset; int m_DummyCopyOffset; - // int m_FreezeBarFullLeftOffset; - // int m_FreezeBarFullOffset; - // int m_FreezeBarEmptyOffset; - // int m_FreezeBarEmptyRightOffset; + int m_NinjaBarFullLeftOffset; + int m_NinjaBarFullOffset; + int m_NinjaBarEmptyOffset; + int m_NinjaBarEmptyRightOffset; }; #endif diff --git a/src/game/client/prediction/entities/character.cpp b/src/game/client/prediction/entities/character.cpp index d890d8b0c..fb2fd8034 100644 --- a/src/game/client/prediction/entities/character.cpp +++ b/src/game/client/prediction/entities/character.cpp @@ -87,7 +87,7 @@ void CCharacter::HandleJetpack() void CCharacter::RemoveNinja() { - m_Ninja.m_CurrentMoveTime = 0; + m_Core.m_Ninja.m_CurrentMoveTime = 0; m_Core.m_aWeapons[WEAPON_NINJA].m_Got = false; m_Core.m_ActiveWeapon = m_LastWeapon; @@ -99,7 +99,7 @@ void CCharacter::HandleNinja() if(m_Core.m_ActiveWeapon != WEAPON_NINJA) return; - if((GameWorld()->GameTick() - m_Ninja.m_ActivationTick) > (g_pData->m_Weapons.m_Ninja.m_Duration * GameWorld()->GameTickSpeed() / 1000)) + if((GameWorld()->GameTick() - m_Core.m_Ninja.m_ActivationTick) > (g_pData->m_Weapons.m_Ninja.m_Duration * GameWorld()->GameTickSpeed() / 1000)) { // time's up, return RemoveNinja(); @@ -109,18 +109,18 @@ void CCharacter::HandleNinja() // force ninja Weapon SetWeapon(WEAPON_NINJA); - m_Ninja.m_CurrentMoveTime--; + m_Core.m_Ninja.m_CurrentMoveTime--; - if(m_Ninja.m_CurrentMoveTime == 0) + if(m_Core.m_Ninja.m_CurrentMoveTime == 0) { // reset velocity - m_Core.m_Vel = m_Ninja.m_ActivationDir * m_Ninja.m_OldVelAmount; + m_Core.m_Vel = m_Core.m_Ninja.m_ActivationDir * m_Core.m_Ninja.m_OldVelAmount; } - if(m_Ninja.m_CurrentMoveTime > 0) + if(m_Core.m_Ninja.m_CurrentMoveTime > 0) { // Set velocity - m_Core.m_Vel = m_Ninja.m_ActivationDir * g_pData->m_Weapons.m_Ninja.m_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); @@ -445,9 +445,9 @@ void CCharacter::FireWeapon() // reset Hit objects m_NumObjectsHit = 0; - m_Ninja.m_ActivationDir = Direction; - m_Ninja.m_CurrentMoveTime = g_pData->m_Weapons.m_Ninja.m_Movetime * GameWorld()->GameTickSpeed() / 1000; - m_Ninja.m_OldVelAmount = length(m_Core.m_Vel); + m_Core.m_Ninja.m_ActivationDir = Direction; + m_Core.m_Ninja.m_CurrentMoveTime = g_pData->m_Weapons.m_Ninja.m_Movetime * GameWorld()->GameTickSpeed() / 1000; + m_Core.m_Ninja.m_OldVelAmount = length(m_Core.m_Vel); } break; } @@ -482,7 +482,7 @@ void CCharacter::HandleWeapons() void CCharacter::GiveNinja() { - m_Ninja.m_ActivationTick = GameWorld()->GameTick(); + m_Core.m_Ninja.m_ActivationTick = GameWorld()->GameTick(); m_Core.m_aWeapons[WEAPON_NINJA].m_Got = true; if(!m_FreezeTime) m_Core.m_aWeapons[WEAPON_NINJA].m_Ammo = -1; @@ -923,7 +923,7 @@ void CCharacter::DDRaceTick() if(m_FreezeTime > 0) m_FreezeTime--; else - m_Ninja.m_ActivationTick = GameWorld()->GameTick(); + m_Core.m_Ninja.m_ActivationTick = GameWorld()->GameTick(); if(!m_CanMoveInFreeze) { m_Input.m_Direction = 0; @@ -1060,7 +1060,7 @@ CCharacter::CCharacter(CGameWorld *pGameWorld, int ID, CNetObj_Character *pChar, m_Core.Reset(); m_Core.Init(&GameWorld()->m_Core, GameWorld()->Collision(), GameWorld()->Teams()); m_Core.m_Id = ID; - mem_zero(&m_Ninja, sizeof(m_Ninja)); + mem_zero(&m_Core.m_Ninja, sizeof(m_Core.m_Ninja)); mem_zero(&m_SavedInput, sizeof(m_SavedInput)); m_LatestInput = m_LatestPrevInput = m_PrevInput = m_Input = m_SavedInput; m_ProximityRadius = ms_PhysSize; diff --git a/src/game/client/prediction/entities/character.h b/src/game/client/prediction/entities/character.h index 0485c9b4e..700034005 100644 --- a/src/game/client/prediction/entities/character.h +++ b/src/game/client/prediction/entities/character.h @@ -116,9 +116,9 @@ public: void SetWeaponGot(int Type, bool Value) { m_Core.m_aWeapons[Type].m_Got = Value; } int GetWeaponAmmo(int Type) { return m_Core.m_aWeapons[Type].m_Ammo; } void SetWeaponAmmo(int Type, int Value) { m_Core.m_aWeapons[Type].m_Ammo = Value; } - void SetNinjaActivationDir(vec2 ActivationDir) { m_Ninja.m_ActivationDir = ActivationDir; } - void SetNinjaActivationTick(int ActivationTick) { m_Ninja.m_ActivationTick = ActivationTick; } - void SetNinjaCurrentMoveTime(int CurrentMoveTime) { m_Ninja.m_CurrentMoveTime = CurrentMoveTime; } + void SetNinjaActivationDir(vec2 ActivationDir) { m_Core.m_Ninja.m_ActivationDir = ActivationDir; } + void SetNinjaActivationTick(int ActivationTick) { m_Core.m_Ninja.m_ActivationTick = ActivationTick; } + void SetNinjaCurrentMoveTime(int CurrentMoveTime) { m_Core.m_Ninja.m_CurrentMoveTime = CurrentMoveTime; } int GetCID() { return m_ID; } void SetInput(CNetObj_PlayerInput *pNewInput) { @@ -170,15 +170,6 @@ private: int m_NumInputs; - // ninja - struct NinjaStat - { - vec2 m_ActivationDir; - int m_ActivationTick; - int m_CurrentMoveTime; - int m_OldVelAmount; - } m_Ninja; - // the player core for the physics CCharacterCore m_Core; diff --git a/src/game/gamecore.cpp b/src/game/gamecore.cpp index 978628604..077a89f16 100644 --- a/src/game/gamecore.cpp +++ b/src/game/gamecore.cpp @@ -580,6 +580,7 @@ void CCharacterCore::ReadDDNet(const CNetObj_DDNetCharacter *pObjDDNet) m_aWeapons[WEAPON_SHOTGUN].m_Got = (pObjDDNet->m_Flags & CHARACTERFLAG_WEAPON_SHOTGUN) != 0; m_aWeapons[WEAPON_GRENADE].m_Got = (pObjDDNet->m_Flags & CHARACTERFLAG_WEAPON_GRENADE) != 0; m_aWeapons[WEAPON_LASER].m_Got = (pObjDDNet->m_Flags & CHARACTERFLAG_WEAPON_LASER) != 0; + m_aWeapons[WEAPON_NINJA].m_Got = (pObjDDNet->m_Flags & CHARACTERFLAG_WEAPON_NINJA) != 0; // Available jumps m_Jumps = pObjDDNet->m_Jumps; diff --git a/src/game/gamecore.h b/src/game/gamecore.h index 5e20e47be..a5de09b67 100644 --- a/src/game/gamecore.h +++ b/src/game/gamecore.h @@ -231,6 +231,15 @@ public: bool m_Got; } m_aWeapons[NUM_WEAPONS]; + // ninja + struct + { + vec2 m_ActivationDir; + int m_ActivationTick; + int m_CurrentMoveTime; + int m_OldVelAmount; + } m_Ninja; + bool m_NewHook; int m_Jumped; diff --git a/src/game/server/entities/character.cpp b/src/game/server/entities/character.cpp index 506e14c39..d49c936b7 100644 --- a/src/game/server/entities/character.cpp +++ b/src/game/server/entities/character.cpp @@ -185,14 +185,14 @@ void CCharacter::HandleNinja() if(m_Core.m_ActiveWeapon != WEAPON_NINJA) return; - if((Server()->Tick() - m_Ninja.m_ActivationTick) > (g_pData->m_Weapons.m_Ninja.m_Duration * Server()->TickSpeed() / 1000)) + if((Server()->Tick() - m_Core.m_Ninja.m_ActivationTick) > (g_pData->m_Weapons.m_Ninja.m_Duration * Server()->TickSpeed() / 1000)) { // time's up, return RemoveNinja(); return; } - int NinjaTime = m_Ninja.m_ActivationTick + (g_pData->m_Weapons.m_Ninja.m_Duration * Server()->TickSpeed() / 1000) - Server()->Tick(); + int NinjaTime = m_Core.m_Ninja.m_ActivationTick + (g_pData->m_Weapons.m_Ninja.m_Duration * Server()->TickSpeed() / 1000) - Server()->Tick(); if(NinjaTime % Server()->TickSpeed() == 0 && NinjaTime / Server()->TickSpeed() <= 5) { @@ -204,18 +204,18 @@ void CCharacter::HandleNinja() // force ninja Weapon SetWeapon(WEAPON_NINJA); - m_Ninja.m_CurrentMoveTime--; + m_Core.m_Ninja.m_CurrentMoveTime--; - if(m_Ninja.m_CurrentMoveTime == 0) + if(m_Core.m_Ninja.m_CurrentMoveTime == 0) { // reset velocity - m_Core.m_Vel = m_Ninja.m_ActivationDir * m_Ninja.m_OldVelAmount; + m_Core.m_Vel = m_Core.m_Ninja.m_ActivationDir * m_Core.m_Ninja.m_OldVelAmount; } - if(m_Ninja.m_CurrentMoveTime > 0) + if(m_Core.m_Ninja.m_CurrentMoveTime > 0) { // Set velocity - m_Core.m_Vel = m_Ninja.m_ActivationDir * g_pData->m_Weapons.m_Ninja.m_Velocity; + m_Core.m_Vel = m_Core.m_Ninja.m_ActivationDir * g_pData->m_Weapons.m_Ninja.m_Velocity; vec2 OldPos = m_Pos; GameServer()->Collision()->MoveBox(&m_Core.m_Pos, &m_Core.m_Vel, vec2(GetProximityRadius(), GetProximityRadius()), 0.f); @@ -569,9 +569,9 @@ void CCharacter::FireWeapon() // reset Hit objects m_NumObjectsHit = 0; - m_Ninja.m_ActivationDir = Direction; - m_Ninja.m_CurrentMoveTime = g_pData->m_Weapons.m_Ninja.m_Movetime * Server()->TickSpeed() / 1000; - m_Ninja.m_OldVelAmount = length(m_Core.m_Vel); + m_Core.m_Ninja.m_ActivationDir = Direction; + m_Core.m_Ninja.m_CurrentMoveTime = g_pData->m_Weapons.m_Ninja.m_Movetime * Server()->TickSpeed() / 1000; + m_Core.m_Ninja.m_OldVelAmount = length(m_Core.m_Vel); GameServer()->CreateSound(m_Pos, SOUND_NINJA_FIRE, Teams()->TeamMask(Team(), -1, m_pPlayer->GetCID())); } @@ -616,7 +616,7 @@ void CCharacter::HandleWeapons() void CCharacter::GiveNinja() { - m_Ninja.m_ActivationTick = Server()->Tick(); + m_Core.m_Ninja.m_ActivationTick = Server()->Tick(); m_Core.m_aWeapons[WEAPON_NINJA].m_Got = true; m_Core.m_aWeapons[WEAPON_NINJA].m_Ammo = -1; if(m_Core.m_ActiveWeapon != WEAPON_NINJA) @@ -629,7 +629,7 @@ void CCharacter::GiveNinja() void CCharacter::RemoveNinja() { - m_Ninja.m_CurrentMoveTime = 0; + m_Core.m_Ninja.m_CurrentMoveTime = 0; m_Core.m_aWeapons[WEAPON_NINJA].m_Got = false; m_Core.m_ActiveWeapon = m_LastWeapon; @@ -856,7 +856,7 @@ void CCharacter::TickPaused() { ++m_AttackTick; ++m_DamageTakenTick; - ++m_Ninja.m_ActivationTick; + ++m_Core.m_Ninja.m_ActivationTick; ++m_ReckoningTick; if(m_LastAction != -1) ++m_LastAction; @@ -1147,7 +1147,7 @@ void CCharacter::SnapCharacter(int SnappingClient, int ID) if(m_FreezeTime > 0 || m_FreezeTime == -1 || m_DeepFreeze) pCharacter->m_AmmoCount = m_FreezeTick + g_Config.m_SvFreezeDelay * Server()->TickSpeed(); else if(Weapon == WEAPON_NINJA) - pCharacter->m_AmmoCount = m_Ninja.m_ActivationTick + g_pData->m_Weapons.m_Ninja.m_Duration * Server()->TickSpeed() / 1000; + pCharacter->m_AmmoCount = m_Core.m_Ninja.m_ActivationTick + g_pData->m_Weapons.m_Ninja.m_Duration * Server()->TickSpeed() / 1000; pCharacter->m_Health = Health; pCharacter->m_Armor = Armor; @@ -2075,7 +2075,7 @@ void CCharacter::DDRaceTick() if(m_FreezeTime > 0) m_FreezeTime--; else - m_Ninja.m_ActivationTick = Server()->Tick(); + m_Core.m_Ninja.m_ActivationTick = Server()->Tick(); m_Input.m_Direction = 0; m_Input.m_Jump = 0; m_Input.m_Hook = 0; diff --git a/src/game/server/entities/character.h b/src/game/server/entities/character.h index a0e44db8b..8d9f15f4c 100644 --- a/src/game/server/entities/character.h +++ b/src/game/server/entities/character.h @@ -128,15 +128,6 @@ private: int m_Health; int m_Armor; - // ninja - struct - { - vec2 m_ActivationDir; - int m_ActivationTick; - int m_CurrentMoveTime; - int m_OldVelAmount; - } m_Ninja; - // the player core for the physics CCharacterCore m_Core; CGameTeams *m_pTeams = nullptr; @@ -253,9 +244,9 @@ public: int GetWeaponAmmo(int Type) { return m_Core.m_aWeapons[Type].m_Ammo; } void SetWeaponAmmo(int Type, int Value) { m_Core.m_aWeapons[Type].m_Ammo = Value; } bool IsAlive() { return m_Alive; } - void SetNinjaActivationDir(vec2 ActivationDir) { m_Ninja.m_ActivationDir = ActivationDir; } - void SetNinjaActivationTick(int ActivationTick) { m_Ninja.m_ActivationTick = ActivationTick; } - void SetNinjaCurrentMoveTime(int CurrentMoveTime) { m_Ninja.m_CurrentMoveTime = CurrentMoveTime; } + void SetNinjaActivationDir(vec2 ActivationDir) { m_Core.m_Ninja.m_ActivationDir = ActivationDir; } + void SetNinjaActivationTick(int ActivationTick) { m_Core.m_Ninja.m_ActivationTick = ActivationTick; } + void SetNinjaCurrentMoveTime(int CurrentMoveTime) { m_Core.m_Ninja.m_CurrentMoveTime = CurrentMoveTime; } int GetLastAction() const { return m_LastAction; }