/* ** Command & Conquer Renegade(tm) ** Copyright 2025 Electronic Arts Inc. ** ** This program is free software: you can redistribute it and/or modify ** it under the terms of the GNU General Public License as published by ** the Free Software Foundation, either version 3 of the License, or ** (at your option) any later version. ** ** This program is distributed in the hope that it will be useful, ** but WITHOUT ANY WARRANTY; without even the implied warranty of ** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ** GNU General Public License for more details. ** ** You should have received a copy of the GNU General Public License ** along with this program. If not, see . */ /****************************************************************************** * * FILE * $Archive: /Commando/Code/WWOnline/WOLSquad.cpp $ * * DESCRIPTION * * PROGRAMMER * $Author: Denzil_l $ * * VERSION INFO * $Revision: 9 $ * $Modtime: 1/12/02 9:45p $ * ******************************************************************************/ #include #include #include "WOLSquad.h" #include namespace WWOnline { SquadData::SquadColl SquadData::_mSquadColl; /****************************************************************************** * * NAME * SquadData::Reset * * DESCRIPTION * Release all cached squads * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ void SquadData::Reset(void) { _mSquadColl.clear(); } /****************************************************************************** * * NAME * SquadData::FindByID * * DESCRIPTION * Find a squad in the local cache by its ID * * INPUTS * SquadID - ID of squad to search for. * * RESULT * Squad - Reference to squad * ******************************************************************************/ RefPtr SquadData::FindByID(unsigned long id) { const unsigned int count = _mSquadColl.size(); for (unsigned int index = 0; index < count; ++index) { const RefPtr& squad = _mSquadColl[index]; WWASSERT(squad.IsValid()); if (squad->GetID() == id) { return squad; } } return NULL; } /****************************************************************************** * * NAME * SquadData::FindByAbbr * * DESCRIPTION * Find a squad in the local cache by its abbreviation. * * INPUTS * Abbr - Abbreviation of squad to search for. * * RESULT * Squad - Reference to squad * ******************************************************************************/ RefPtr SquadData::FindByAbbr(const wchar_t* abbr) { if (abbr && (wcslen(abbr) > 0)) { char squadAbbr[64]; wcstombs(squadAbbr, abbr, sizeof(squadAbbr)); squadAbbr[sizeof(squadAbbr) - 1] = 0; const unsigned int count = _mSquadColl.size(); for (unsigned int index = 0; index < count; ++index) { const RefPtr& squad = _mSquadColl[index]; WWASSERT(squad.IsValid()); if ((strcmp(squad->GetAbbr(), squadAbbr) == 0)) { return squad; } } } return NULL; } /****************************************************************************** * * NAME * SquadData::Create * * DESCRIPTION * Create a squad data * * INPUTS * WOLSquad - WOLAPI squad data structure * * RESULT * SquadData - Instance of squad data. * ******************************************************************************/ RefPtr SquadData::Create(const WOL::Squad& wolSquad) { if (wolSquad.id == 0) { return NULL; } RefPtr squad = FindByID(wolSquad.id); if (squad.IsValid()) { squad->UpdateData(wolSquad); } else { squad = new SquadData(wolSquad); _mSquadColl.push_back(squad); } return squad; } /****************************************************************************** * * NAME * SquadData::SquadData * * DESCRIPTION * Constructor * * INPUTS * WOLSquad - WOLAPI squad structure * * RESULT * NONE * ******************************************************************************/ SquadData::SquadData(const WOL::Squad& squad) { WWDEBUG_SAY(("WOL: Instantiating SquadData '%s'\n", (char*)squad.name)); UpdateData(squad); } /****************************************************************************** * * NAME * SquadData::~SquadData * * DESCRIPTION * Destructor * * INPUTS * NONE * * RESULT * NONE * ******************************************************************************/ SquadData::~SquadData() { WWDEBUG_SAY(("WOL: Destructing SquadData '%s'\n", (char*)mData.name)); } /****************************************************************************** * * NAME * SquadData::UpdateData * * DESCRIPTION * * INPUTS * * RESULT * NONE * ******************************************************************************/ void SquadData::UpdateData(const WOL::Squad& squad) { memcpy(&mData, &squad, sizeof(mData)); mData.next = NULL; } /****************************************************************************** * * NAME * SquadData::SetLadder * * DESCRIPTION * * INPUTS * * RESULT * NONE * ******************************************************************************/ void SquadData::SetLadder(const RefPtr& ladder) { mLadder = ladder; } } // namespace WWOnline