Huge refactoring v3

master
Vectozavr 2021-10-28 21:06:10 +07:00
parent 870842b682
commit 875f9f85ec
7 changed files with 52 additions and 53 deletions

View File

@ -10,10 +10,10 @@ add_executable(shooter
Source.cpp Source.cpp
Player.cpp Player.cpp
Player.h Player.h
Client.cpp ShooterClient.cpp
Client.h ShooterClient.h
Server.cpp ShooterServer.cpp
Server.h ShooterServer.h
weapon/Weapon.cpp weapon/Weapon.cpp
weapon/Weapon.h weapon/Weapon.h
weapon/Ak47.cpp weapon/Ak47.cpp

View File

@ -11,7 +11,6 @@
#include "engine/animation/Timeline.h" #include "engine/animation/Timeline.h"
#include "ShooterConsts.h" #include "ShooterConsts.h"
#include "engine/SoundController.h" #include "engine/SoundController.h"
#include "engine/animation/ATranslateToPoint.h"
using namespace std; using namespace std;
@ -60,7 +59,7 @@ void Shooter::InitNetwork() {
client->connect(clientIp, clientPort); client->connect(clientIp, clientPort);
player->setPlayerNickName(playerName); player->setPlayerNickName(playerName);
// TODO: encapsulate call backs inside Client // TODO: encapsulate call backs inside ShooterClient
client->setSpawnPlayerCallBack([this](sf::Uint16 id){ spawnPlayer(id); }); client->setSpawnPlayerCallBack([this](sf::Uint16 id){ spawnPlayer(id); });
client->setRemovePlayerCallBack([this](sf::Uint16 id){ removePlayer(id); }); client->setRemovePlayerCallBack([this](sf::Uint16 id){ removePlayer(id); });
client->setAddFireTraceCallBack([this](const Vec3D& from, const Vec3D& to){ addFireTrace(from, to); }); client->setAddFireTraceCallBack([this](const Vec3D& from, const Vec3D& to){ addFireTrace(from, to); });
@ -98,8 +97,8 @@ void Shooter::start() {
world->addBody(player); world->addBody(player);
player->translate(Vec3D{0, 10, 0}); player->translate(Vec3D{0, 10, 0});
client = std::make_shared<Client>(player); client = std::make_shared<ShooterClient>(player);
server = std::make_shared<Server>(); server = std::make_shared<ShooterServer>();
// connecting to the server // connecting to the server
InitNetwork(); InitNetwork();

View File

@ -11,8 +11,8 @@
#include "PlayerController.h" #include "PlayerController.h"
#include "engine/gui/Window.h" #include "engine/gui/Window.h"
#include "Client.h" #include "ShooterClient.h"
#include "Server.h" #include "ShooterServer.h"
class Shooter final : public Engine { class Shooter final : public Engine {
@ -24,8 +24,8 @@ private:
Window mainMenu; Window mainMenu;
std::shared_ptr<Server> server; std::shared_ptr<ShooterServer> server;
std::shared_ptr<Client> client; std::shared_ptr<ShooterClient> client;
bool inGame = false; bool inGame = false;

View File

@ -2,7 +2,7 @@
// Created by Иван Ильин on 25.05.2021. // Created by Иван Ильин on 25.05.2021.
// //
#include "Client.h" #include "ShooterClient.h"
#include <utility> #include <utility>
#include "engine/utils/Log.h" #include "engine/utils/Log.h"
@ -10,13 +10,13 @@
#include "engine/animation/ATranslateToPoint.h" #include "engine/animation/ATranslateToPoint.h"
#include "ShooterMsgType.h" #include "ShooterMsgType.h"
void Client::updatePacket() { void ShooterClient::updatePacket() {
sf::Packet packet; sf::Packet packet;
packet << MsgType::ClientUpdate << _player->position().x() << _player->position().y() << _player->position().z() << _player->angle().y() << _player->headAngle() << _player->playerNickName(); packet << MsgType::ClientUpdate << _player->position().x() << _player->position().y() << _player->position().z() << _player->angle().y() << _player->headAngle() << _player->playerNickName();
_socket.send(packet, _socket.serverId()); _socket.send(packet, _socket.serverId());
} }
void Client::processInit(sf::Packet& packet) { void ShooterClient::processInit(sf::Packet& packet) {
sf::Uint16 targetId; sf::Uint16 targetId;
double buf[4]; double buf[4];
int kills, deaths; int kills, deaths;
@ -36,7 +36,7 @@ void Client::processInit(sf::Packet& packet) {
} }
} }
void Client::processUpdate(sf::Packet& packet) { void ShooterClient::processUpdate(sf::Packet& packet) {
sf::Uint16 targetId; sf::Uint16 targetId;
double buf[6]; double buf[6];
std::string playerName; std::string playerName;
@ -68,7 +68,7 @@ void Client::processUpdate(sf::Packet& packet) {
} }
} }
void Client::processNewClient(sf::Packet& packet) { void ShooterClient::processNewClient(sf::Packet& packet) {
sf::Uint16 targetId; sf::Uint16 targetId;
packet >> targetId; packet >> targetId;
@ -78,7 +78,7 @@ void Client::processNewClient(sf::Packet& packet) {
} }
} }
void Client::processDisconnect(sf::Uint16 targetId) { void ShooterClient::processDisconnect(sf::Uint16 targetId) {
if (targetId != _socket.ownId() && _players.count(targetId)) { if (targetId != _socket.ownId() && _players.count(targetId)) {
_players.erase(targetId); _players.erase(targetId);
_removePlayerCallBack(targetId); _removePlayerCallBack(targetId);
@ -86,7 +86,7 @@ void Client::processDisconnect(sf::Uint16 targetId) {
} }
void Client::processCustomPacket(sf::Packet& packet) { void ShooterClient::processCustomPacket(sf::Packet& packet) {
sf::Uint16 buffId[2]; sf::Uint16 buffId[2];
double dbuff[10]; double dbuff[10];
std::string tmp, tmp2; std::string tmp, tmp2;
@ -160,34 +160,34 @@ void Client::processCustomPacket(sf::Packet& packet) {
} }
break; break;
default: default:
Log::log("Client::processCustomPacket: unknown message type " + std::to_string(static_cast<int>(type))); Log::log("ShooterClient::processCustomPacket: unknown message type " + std::to_string(static_cast<int>(type)));
return; return;
} }
} }
void Client::processDisconnected() { void ShooterClient::processDisconnected() {
for (auto it = _players.begin(); it != _players.end();) { for (auto it = _players.begin(); it != _players.end();) {
processDisconnect(it++->first); processDisconnect(it++->first);
} }
} }
void Client::damagePlayer(sf::Uint16 targetId, double damage) { void ShooterClient::damagePlayer(sf::Uint16 targetId, double damage) {
sf::Packet packet; sf::Packet packet;
packet << MsgType::Custom << ShooterMsgType::Damage << targetId << damage; packet << MsgType::Custom << ShooterMsgType::Damage << targetId << damage;
_socket.sendRely(packet, _socket.serverId()); _socket.sendRely(packet, _socket.serverId());
Log::log("Client: damagePlayer " + std::to_string(targetId) + " ( -" + std::to_string(damage) + "hp )"); Log::log("ShooterClient: damagePlayer " + std::to_string(targetId) + " ( -" + std::to_string(damage) + "hp )");
} }
void Client::addTrace(const Vec3D& from, const Vec3D& to) { void ShooterClient::addTrace(const Vec3D& from, const Vec3D& to) {
sf::Packet packet; sf::Packet packet;
packet << MsgType::Custom << ShooterMsgType::FireTrace << from.x() << from.y() << from.z() << to.x() << to.y() << to.z(); packet << MsgType::Custom << ShooterMsgType::FireTrace << from.x() << from.y() << from.z() << to.x() << to.y() << to.z();
_socket.send(packet, _socket.serverId()); _socket.send(packet, _socket.serverId());
} }
void Client::takeBonus(const std::string& bonusName) { void ShooterClient::takeBonus(const std::string& bonusName) {
sf::Packet packet; sf::Packet packet;
packet << MsgType::Custom << ShooterMsgType::RemoveBonus << bonusName; packet << MsgType::Custom << ShooterMsgType::RemoveBonus << bonusName;
@ -198,37 +198,37 @@ void Client::takeBonus(const std::string& bonusName) {
} }
} }
void Client::changeWeapon(const std::string &weaponName) { void ShooterClient::changeWeapon(const std::string &weaponName) {
sf::Packet packet; sf::Packet packet;
packet << MsgType::Custom << ShooterMsgType::ChangeWeapon << weaponName; packet << MsgType::Custom << ShooterMsgType::ChangeWeapon << weaponName;
_socket.sendRely(packet, _socket.serverId()); _socket.sendRely(packet, _socket.serverId());
} }
void Client::addPlayer(sf::Uint16 id, std::shared_ptr<Player> player) { void ShooterClient::addPlayer(sf::Uint16 id, std::shared_ptr<Player> player) {
_players.insert({ id, player }); _players.insert({ id, player });
} }
void Client::setSpawnPlayerCallBack(std::function<void(sf::Uint16)> spawn) { void ShooterClient::setSpawnPlayerCallBack(std::function<void(sf::Uint16)> spawn) {
_spawnPlayerCallBack = std::move(spawn); _spawnPlayerCallBack = std::move(spawn);
} }
void Client::setRemovePlayerCallBack(std::function<void(sf::Uint16)> remove) { void ShooterClient::setRemovePlayerCallBack(std::function<void(sf::Uint16)> remove) {
_removePlayerCallBack = std::move(remove); _removePlayerCallBack = std::move(remove);
} }
void Client::setAddFireTraceCallBack(std::function<void(const Vec3D &, const Vec3D &)> addTrace) { void ShooterClient::setAddFireTraceCallBack(std::function<void(const Vec3D &, const Vec3D &)> addTrace) {
_addFireTraceCallBack = std::move(addTrace); _addFireTraceCallBack = std::move(addTrace);
} }
void Client::setAddBonusCallBack(std::function<void(const std::string &, const Vec3D &)> addBonus) { void ShooterClient::setAddBonusCallBack(std::function<void(const std::string &, const Vec3D &)> addBonus) {
_addBonusCallBack = std::move(addBonus); _addBonusCallBack = std::move(addBonus);
} }
void Client::setRemoveBonusCallBack(std::function<void(const ObjectNameTag &)> removeBonus) { void ShooterClient::setRemoveBonusCallBack(std::function<void(const ObjectNameTag &)> removeBonus) {
_removeBonusCallBack = std::move(removeBonus); _removeBonusCallBack = std::move(removeBonus);
} }
void Client::setChangeEnemyWeaponCallBack(std::function<void(const std::string&, sf::Uint16)> changeEnemyWeapon) { void ShooterClient::setChangeEnemyWeaponCallBack(std::function<void(const std::string&, sf::Uint16)> changeEnemyWeapon) {
_changeEnemyWeaponCallBack = std::move(changeEnemyWeapon); _changeEnemyWeaponCallBack = std::move(changeEnemyWeapon);
} }

View File

@ -2,13 +2,13 @@
// Created by Иван Ильин on 25.05.2021. // Created by Иван Ильин on 25.05.2021.
// //
#ifndef SHOOTER_CLIENT_H #ifndef SHOOTER_SHOOTERCLIENT_H
#define SHOOTER_CLIENT_H #define SHOOTER_SHOOTERCLIENT_H
#include "engine/network/ClientUDP.h" #include "engine/network/ClientUDP.h"
#include "Player.h" #include "Player.h"
class Client final : public ClientUDP { class ShooterClient final : public ClientUDP {
private: private:
std::string _lastEvent; std::string _lastEvent;
@ -22,7 +22,7 @@ private:
std::function<void(const ObjectNameTag&)> _removeBonusCallBack; std::function<void(const ObjectNameTag&)> _removeBonusCallBack;
std::function<void(const std::string&, sf::Uint16)> _changeEnemyWeaponCallBack; std::function<void(const std::string&, sf::Uint16)> _changeEnemyWeaponCallBack;
public: public:
explicit Client(std::shared_ptr<Player> player) : _player(player){}; explicit ShooterClient(std::shared_ptr<Player> player) : _player(player){};
void updatePacket() override; void updatePacket() override;

View File

@ -2,11 +2,11 @@
// Created by Иван Ильин on 25.05.2021. // Created by Иван Ильин on 25.05.2021.
// //
#include "Server.h" #include "ShooterServer.h"
#include "engine/utils/Log.h" #include "engine/utils/Log.h"
#include "ShooterMsgType.h" #include "ShooterMsgType.h"
void Server::broadcast() { void ShooterServer::broadcast() {
sf::Packet updatePacket; sf::Packet updatePacket;
updatePacket << MsgType::ServerUpdate; updatePacket << MsgType::ServerUpdate;
@ -20,7 +20,7 @@ void Server::broadcast() {
} }
void Server::processConnect(sf::Uint16 targetId) { void ShooterServer::processConnect(sf::Uint16 targetId) {
sf::Packet sendPacket1, sendPacket2; sf::Packet sendPacket1, sendPacket2;
sf::Packet extraPacket; sf::Packet extraPacket;
@ -46,7 +46,7 @@ void Server::processConnect(sf::Uint16 targetId) {
} }
void Server::processClientUpdate(sf::Uint16 senderId, sf::Packet& packet) { void ShooterServer::processClientUpdate(sf::Uint16 senderId, sf::Packet& packet) {
double buf[5]; double buf[5];
std::string playerName; std::string playerName;
@ -57,7 +57,7 @@ void Server::processClientUpdate(sf::Uint16 senderId, sf::Packet& packet) {
_players.at(senderId)->setPlayerNickName(playerName); _players.at(senderId)->setPlayerNickName(playerName);
} }
void Server::processDisconnect(sf::Uint16 senderId) { void ShooterServer::processDisconnect(sf::Uint16 senderId) {
sf::Packet sendPacket; sf::Packet sendPacket;
sendPacket << MsgType::Disconnect << senderId; sendPacket << MsgType::Disconnect << senderId;
@ -68,7 +68,7 @@ void Server::processDisconnect(sf::Uint16 senderId) {
} }
void Server::processCustomPacket(sf::Packet& packet, sf::Uint16 senderId) { void ShooterServer::processCustomPacket(sf::Packet& packet, sf::Uint16 senderId) {
sf::Packet sendPacket; sf::Packet sendPacket;
double dbuff[10]; double dbuff[10];
sf::Uint16 targetId; sf::Uint16 targetId;
@ -137,17 +137,17 @@ void Server::processCustomPacket(sf::Packet& packet, sf::Uint16 senderId) {
break; break;
default: default:
Log::log("Server::processCustomPacket: unknown message type " + std::to_string(static_cast<int>(type))); Log::log("ShooterServer::processCustomPacket: unknown message type " + std::to_string(static_cast<int>(type)));
return; return;
} }
} }
void Server::processStop() { void ShooterServer::processStop() {
_players.clear(); _players.clear();
_bonuses.clear(); _bonuses.clear();
} }
void Server::generateBonuses() { void ShooterServer::generateBonuses() {
_bonuses.insert({"Bonus_gun_1", std::make_shared<BonusInfo>(BonusInfo{Vec3D(-10, -2, -15), -2*ShooterConsts::BONUS_RECHARGE_TIME, true})}); _bonuses.insert({"Bonus_gun_1", std::make_shared<BonusInfo>(BonusInfo{Vec3D(-10, -2, -15), -2*ShooterConsts::BONUS_RECHARGE_TIME, true})});
_bonuses.insert({"Bonus_gun_2", std::make_shared<BonusInfo>(BonusInfo{Vec3D(10, -2, 15), -2*ShooterConsts::BONUS_RECHARGE_TIME, true})}); _bonuses.insert({"Bonus_gun_2", std::make_shared<BonusInfo>(BonusInfo{Vec3D(10, -2, 15), -2*ShooterConsts::BONUS_RECHARGE_TIME, true})});
@ -170,7 +170,7 @@ void Server::generateBonuses() {
_bonuses.insert({"Bonus_ability_2", std::make_shared<BonusInfo>(BonusInfo{Vec3D(-25, 18, 33), -2*ShooterConsts::BONUS_RECHARGE_TIME, true})}); _bonuses.insert({"Bonus_ability_2", std::make_shared<BonusInfo>(BonusInfo{Vec3D(-25, 18, 33), -2*ShooterConsts::BONUS_RECHARGE_TIME, true})});
} }
void Server::updateInfo() { void ShooterServer::updateInfo() {
for(auto& [bonusName, bonusInfo] : _bonuses) { for(auto& [bonusName, bonusInfo] : _bonuses) {
if(!bonusInfo->onTheMap && std::abs(Time::time() - bonusInfo->lastTake) > ShooterConsts::BONUS_RECHARGE_TIME) { if(!bonusInfo->onTheMap && std::abs(Time::time() - bonusInfo->lastTake) > ShooterConsts::BONUS_RECHARGE_TIME) {
sf::Packet sendPacket; sf::Packet sendPacket;
@ -183,6 +183,6 @@ void Server::updateInfo() {
} }
} }
Server::~Server() { ShooterServer::~ShooterServer() {
processStop(); processStop();
} }

View File

@ -2,8 +2,8 @@
// Created by Иван Ильин on 25.05.2021. // Created by Иван Ильин on 25.05.2021.
// //
#ifndef SHOOTER_SERVER_H #ifndef SHOOTER_SHOOTERSERVER_H
#define SHOOTER_SERVER_H #define SHOOTER_SHOOTERSERVER_H
#include "engine/network/ServerUDP.h" #include "engine/network/ServerUDP.h"
#include "Player.h" #include "Player.h"
@ -14,12 +14,12 @@ struct BonusInfo final {
const bool onTheMap = false; const bool onTheMap = false;
}; };
class Server final : public ServerUDP { class ShooterServer final : public ServerUDP {
private: private:
std::map<sf::Uint16, std::shared_ptr<Player>> _players{}; std::map<sf::Uint16, std::shared_ptr<Player>> _players{};
std::map<std::string, std::shared_ptr<BonusInfo>> _bonuses{}; std::map<std::string, std::shared_ptr<BonusInfo>> _bonuses{};
public: public:
Server() = default; ShooterServer() = default;
void broadcast() override; void broadcast() override;
@ -35,7 +35,7 @@ public:
void updateInfo() override; void updateInfo() override;
~Server() override; ~ShooterServer() override;
}; };