mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Extract SnapPickup() to CGameContext helpers
This commit is contained in:
parent
2ad5c020e0
commit
3a9e4ee067
|
@ -173,6 +173,7 @@ void CPickup::Snap(int SnappingClient)
|
|||
pChar = GameServer()->GetPlayerChar(GameServer()->m_apPlayers[SnappingClient]->m_SpectatorID);
|
||||
|
||||
int SnappingClientVersion = GameServer()->GetClientVersion(SnappingClient);
|
||||
bool Sixup = SnappingClientVersion == VERSION_NONE ? Server()->IsSixup(SnappingClient) : false;
|
||||
|
||||
CNetObj_EntityEx *pEntData = 0;
|
||||
if(SnappingClientVersion >= VERSION_DDNET_SWITCH && (m_Layer == LAYER_SWITCH || length(m_Core) > 0))
|
||||
|
@ -191,30 +192,7 @@ void CPickup::Snap(int SnappingClient)
|
|||
return;
|
||||
}
|
||||
|
||||
int Size = Server()->IsSixup(SnappingClient) ? sizeof(protocol7::CNetObj_Pickup) : sizeof(CNetObj_Pickup);
|
||||
CNetObj_Pickup *pPickup = static_cast<CNetObj_Pickup *>(Server()->SnapNewItem(NETOBJTYPE_PICKUP, GetID(), Size));
|
||||
if(!pPickup)
|
||||
return;
|
||||
|
||||
pPickup->m_X = (int)m_Pos.x;
|
||||
pPickup->m_Y = (int)m_Pos.y;
|
||||
pPickup->m_Type = m_Type;
|
||||
if(SnappingClientVersion < VERSION_DDNET_WEAPON_SHIELDS)
|
||||
{
|
||||
if(m_Type >= POWERUP_ARMOR_SHOTGUN && m_Type <= POWERUP_ARMOR_LASER)
|
||||
{
|
||||
pPickup->m_Type = POWERUP_ARMOR;
|
||||
}
|
||||
}
|
||||
if(Server()->IsSixup(SnappingClient))
|
||||
{
|
||||
if(m_Type == POWERUP_WEAPON)
|
||||
pPickup->m_Type = m_Subtype == WEAPON_SHOTGUN ? protocol7::PICKUP_SHOTGUN : m_Subtype == WEAPON_GRENADE ? protocol7::PICKUP_GRENADE : protocol7::PICKUP_LASER;
|
||||
else if(m_Type == POWERUP_NINJA)
|
||||
pPickup->m_Type = protocol7::PICKUP_NINJA;
|
||||
}
|
||||
else
|
||||
pPickup->m_Subtype = m_Subtype;
|
||||
GameServer()->SnapPickup(CSnapContext(SnappingClientVersion, Sixup), GetID(), m_Pos, m_Type, m_Subtype);
|
||||
}
|
||||
|
||||
void CPickup::Move()
|
||||
|
|
|
@ -404,6 +404,45 @@ bool CGameContext::SnapLaserObject(const CSnapContext &Context, int SnapID, cons
|
|||
return true;
|
||||
}
|
||||
|
||||
bool CGameContext::SnapPickup(const CSnapContext &Context, int SnapID, const vec2 &Pos, int Type, int SubType)
|
||||
{
|
||||
if(Context.IsSixup())
|
||||
{
|
||||
protocol7::CNetObj_Pickup *pPickup = Server()->SnapNewItem<protocol7::CNetObj_Pickup>(SnapID);
|
||||
if(!pPickup)
|
||||
return false;
|
||||
|
||||
pPickup->m_X = (int)Pos.x;
|
||||
pPickup->m_Y = (int)Pos.y;
|
||||
|
||||
if(Type == POWERUP_WEAPON)
|
||||
pPickup->m_Type = SubType == WEAPON_SHOTGUN ? protocol7::PICKUP_SHOTGUN : SubType == WEAPON_GRENADE ? protocol7::PICKUP_GRENADE : protocol7::PICKUP_LASER;
|
||||
else if(Type == POWERUP_NINJA)
|
||||
pPickup->m_Type = protocol7::PICKUP_NINJA;
|
||||
}
|
||||
else
|
||||
{
|
||||
CNetObj_Pickup *pPickup = Server()->SnapNewItem<CNetObj_Pickup>(SnapID);
|
||||
if(!pPickup)
|
||||
return false;
|
||||
|
||||
pPickup->m_X = (int)Pos.x;
|
||||
pPickup->m_Y = (int)Pos.y;
|
||||
|
||||
pPickup->m_Type = Type;
|
||||
if(Context.GetClientVersion() < VERSION_DDNET_WEAPON_SHIELDS)
|
||||
{
|
||||
if(Type >= POWERUP_ARMOR_SHOTGUN && Type <= POWERUP_ARMOR_LASER)
|
||||
{
|
||||
pPickup->m_Type = POWERUP_ARMOR;
|
||||
}
|
||||
}
|
||||
pPickup->m_Subtype = SubType;
|
||||
}
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
void CGameContext::CallVote(int ClientID, const char *pDesc, const char *pCmd, const char *pReason, const char *pChatmsg, const char *pSixupDesc)
|
||||
{
|
||||
// check if a vote is already running
|
||||
|
|
|
@ -61,15 +61,17 @@ struct CScoreRandomMapResult;
|
|||
|
||||
struct CSnapContext
|
||||
{
|
||||
CSnapContext(int Version) :
|
||||
m_ClientVersion(Version)
|
||||
CSnapContext(int Version, bool Sixup = false) :
|
||||
m_ClientVersion(Version), m_Sixup(Sixup)
|
||||
{
|
||||
}
|
||||
|
||||
int GetClientVersion() const { return m_ClientVersion; }
|
||||
bool IsSixup() const { return m_Sixup; }
|
||||
|
||||
private:
|
||||
int m_ClientVersion;
|
||||
bool m_Sixup;
|
||||
};
|
||||
|
||||
class CGameContext : public IGameServer
|
||||
|
@ -227,6 +229,7 @@ public:
|
|||
void CreateSoundGlobal(int Sound, int Target = -1);
|
||||
|
||||
bool SnapLaserObject(const CSnapContext &Context, int SnapID, const vec2 &To, const vec2 &From, int StartTick, int Owner = -1, int LaserType = -1);
|
||||
bool SnapPickup(const CSnapContext &Context, int SnapID, const vec2 &Pos, int Type, int SubType);
|
||||
|
||||
enum
|
||||
{
|
||||
|
|
Loading…
Reference in a new issue