File indexing completed on 2024-05-05 05:40:24
0001 /*************************************************************************** 0002 * Copyright (C) 2019 by Renaud Guezennec * 0003 * http://www.rolisteam.org/contact * 0004 * * 0005 * This software is free software; you can redistribute it and/or modify * 0006 * it under the terms of the GNU General Public License as published by * 0007 * the Free Software Foundation; either version 2 of the License, or * 0008 * (at your option) any later version. * 0009 * * 0010 * This program is distributed in the hope that it will be useful, * 0011 * but WITHOUT ANY WARRANTY; without even the implied warranty of * 0012 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * 0013 * GNU General Public License for more details. * 0014 * * 0015 * You should have received a copy of the GNU General Public License * 0016 * along with this program; if not, write to the * 0017 * Free Software Foundation, Inc., * 0018 * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * 0019 ***************************************************************************/ 0020 #include "controller/playercontroller.h" 0021 0022 #include "controller/gamecontroller.h" 0023 #include "data/player.h" 0024 #include "model/charactermodel.h" 0025 #include "model/characterstatemodel.h" 0026 #include "model/playermodel.h" 0027 #include "undoCmd/addlocalcharactercommand.h" 0028 #include "undoCmd/removelocalcharactercommand.h" 0029 #include "updater/controller/playerupdater.h" 0030 #include "worker/characterfinder.h" 0031 #include <QtDebug> 0032 0033 PlayerController::PlayerController(NetworkController* network, QObject* parent) 0034 : AbstractControllerInterface(parent) 0035 , m_model(new PlayerModel) 0036 , m_characterModel(new CharacterModel) 0037 , m_updater(new PlayerUpdater(network, this)) 0038 , m_localPlayer(new Player) 0039 { 0040 0041 m_characterModel->setSourceModel(m_model.get()); 0042 CharacterFinder::setPcModel(m_characterModel.get()); 0043 0044 connect(m_model.get(), &PlayerModel::gameMasterIdChanged, this, &PlayerController::gameMasterIdChanged); 0045 connect(m_localPlayer, &Player::uuidChanged, this, &PlayerController::localPlayerIdChanged); 0046 connect(m_localPlayer, &Player::uuidChanged, m_model.get(), &PlayerModel::setLocalPlayerId); 0047 0048 m_model->setLocalPlayerId(m_localPlayer->uuid()); 0049 } 0050 0051 PlayerController::~PlayerController()= default; 0052 0053 void PlayerController::clear() 0054 { 0055 m_model->clear(); 0056 } 0057 0058 QString PlayerController::gameMasterId() const 0059 { 0060 return m_model->gameMasterId(); 0061 } 0062 0063 QString PlayerController::localPlayerId() const 0064 { 0065 if(nullptr == m_localPlayer) 0066 return {}; 0067 return m_localPlayer->uuid(); 0068 } 0069 0070 QColor PlayerController::localColor() const 0071 { 0072 return (m_localPlayer) ? m_localPlayer->getColor() : QColor(Qt::black); 0073 } 0074 0075 void PlayerController::setGameController(GameController* gameCtrl) 0076 { 0077 m_characterStateModel= gameCtrl->campaign()->stateModel(); 0078 m_updater->setGameController(gameCtrl); 0079 emit characterStateModelChanged(); 0080 } 0081 0082 Player* PlayerController::localPlayer() const 0083 { 0084 return m_localPlayer; 0085 } 0086 0087 PlayerModel* PlayerController::model() const 0088 { 0089 return m_model.get(); 0090 } 0091 0092 bool PlayerController::localIsGm() const 0093 { 0094 return (localPlayerId() == gameMasterId()); 0095 } 0096 0097 QAbstractItemModel* PlayerController::characterStateModel() const 0098 { 0099 return m_characterStateModel; 0100 } 0101 0102 CharacterModel* PlayerController::characterModel() const 0103 { 0104 return m_characterModel.get(); 0105 } 0106 0107 void PlayerController::addPlayer(Player* player) 0108 { 0109 m_model->addPlayer(player); 0110 } 0111 0112 void PlayerController::removePlayer(Player* player) 0113 { 0114 m_model->removePlayer(player); 0115 } 0116 0117 void PlayerController::addLocalCharacter() 0118 { 0119 if(!m_characterStateModel || m_characterStateModel->rowCount() > 0) 0120 return; 0121 auto idState= m_characterStateModel->index(0, 0).data(CharacterStateModel::ID).toString(); 0122 auto cmd= new AddLocalCharacterCommand(m_model.get(), idState, m_model->index(0, 0)); 0123 emit performCommand(cmd); 0124 } 0125 0126 void PlayerController::removeLocalCharacter(const QModelIndex& index) 0127 { 0128 auto cmd= new RemoveLocalCharacterCommand(m_model.get(), index); 0129 emit performCommand(cmd); 0130 }