Skip to content

Commit

Permalink
small refactoring
Browse files Browse the repository at this point in the history
  • Loading branch information
ISPlatonov committed Jan 22, 2024
1 parent 5e121d6 commit 9f08c51
Show file tree
Hide file tree
Showing 10 changed files with 32 additions and 98 deletions.
4 changes: 2 additions & 2 deletions include/Actor.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -36,7 +36,7 @@ namespace Actor
inline const Multiplayer::Inventory& getInventory() const { return inventory; }
const size_t addObject(Object::ObjectName);
size_t removeObject(Object::ObjectName);
void setInventory(const Multiplayer::Inventory&);
inline void setInventory(const Multiplayer::Inventory& new_inventory) { inventory = new_inventory; }

protected:
sf::Sprite sprite;
Expand Down Expand Up @@ -103,7 +103,7 @@ namespace Actor
inline PlayerId getId() const { return player_id; }
inline Time::Time getLastUpdateTime() const { return last_update_time; }
void setPosition(const sf::Vector2f& position);
void setTime(const sf::Uint32& new_time);
inline void setTime(const sf::Uint32& new_time) { last_update_time = new_time; }
void move(const sf::Vector2f& vector);

private:
Expand Down
2 changes: 1 addition & 1 deletion include/Multiplayer.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -69,7 +69,7 @@ namespace Multiplayer
PlayerData(const PlayerData& player)
: PlayerData(player.getPosition(), player.getId(), player.getTime(), player.getSocketInfo(), player.getInventory()) {}
inline PlayerId getId() const { return player_id; }
const size_t objectNumber(Object::ObjectName) const;
inline const size_t objectNumber(Object::ObjectName name) const { return inventory.count(name) ? inventory.at(name) : 0; }
const size_t addObject(Object::ObjectName);
const size_t removeObject(Object::ObjectName);
const Inventory& getInventory() const { return inventory; }
Expand Down
10 changes: 5 additions & 5 deletions include/Object.hpp
Original file line number Diff line number Diff line change
Expand Up @@ -42,10 +42,10 @@ namespace Object
Object(const Object& object) : Object(object.getName(), object.getPosition(), object.getPassability()) {};
//Object(std::string&& texture_address, sf::Vector2f&& position, Passability&& passability);
//Object(Object&& object) : Object(std::move(object.texture), std::move(object.position), std::move(object.passability)) {};
const Passability& getPassability() const;
const sf::Vector2f& getPosition() const;
const sf::Sprite& getSprite() const;
const ObjectName& getName() const;
inline const Passability& getPassability() const { return passability; }
inline const sf::Vector2f& getPosition() const { return position; }
inline const sf::Sprite& getSprite() const { return sprite; }
inline const ObjectName& getName() const { return name; }
// think about it
void check_collision(sf::Vector2f& vector, const sf::FloatRect& rect) const;
static std::unordered_map<ObjectName, sf::Texture> NameToTextureMap;
Expand All @@ -58,7 +58,7 @@ namespace Object
ObjectName name;

virtual void draw(sf::RenderTarget& target, sf::RenderStates states) const;
bool intersection(const sf::FloatRect& rect) const;
inline bool intersection(const sf::FloatRect& rect) const { return getSprite().getGlobalBounds().intersects(rect); }
void check_collision(sf::Vector2f& vector, const sf::FloatRect& rect, size_t& depth) const;
};
} // namespace Object
16 changes: 2 additions & 14 deletions src/common/Actor.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -113,7 +113,7 @@ namespace Actor

void Player::setPosition(const sf::Vector2f& position)
{
auto prev_position = getPosition();
const auto& prev_position = getPosition();
auto move_vector = position - prev_position;
move(move_vector);
}
Expand All @@ -132,26 +132,14 @@ namespace Actor
Time::Time time = Time::getTimeNow();
packet << position.x << position.y << Constants::getID() << time;
packet << static_cast<sf::Uint32>(user.getInventory().size());
for (auto iter : user.getInventory())
for (const auto& iter : user.getInventory())
{
packet << iter.first << static_cast<sf::Uint32>(iter.second);
}
return packet;
}


void Player::setTime(const sf::Uint32& new_time)
{
last_update_time = new_time;
}


void Actor::setInventory(const std::unordered_map<Object::ObjectName, size_t>& new_inventory)
{
inventory = new_inventory;
}


void Actor::load_textures(const std::string& texture_dir_path)
{
// Load a sprite to display
Expand Down
4 changes: 2 additions & 2 deletions src/common/Controls.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ void Controls::addEvent(const sf::Event& event)
else
{
// handle object selection
for (auto iter : object_map.getObjectMap(Object::Passability::foreground))
for (const auto& iter : object_map.getObjectMap(Object::Passability::foreground))
{
if (iter.second.getSprite().getGlobalBounds().contains(window.mapPixelToCoords(sf::Mouse::getPosition())))
{
Expand Down Expand Up @@ -155,7 +155,7 @@ void Controls::drawInterfaces()
if (draw_inventory)
{
inventory.clear();
auto center = user.getView().getCenter();
const auto& center = user.getView().getCenter();
auto text = sf::Text("Inventory", font);
text.setFillColor(sf::Color::White);
inventory_rect.setPosition(center - inventory_rect.getSize() / 2.f);
Expand Down
35 changes: 13 additions & 22 deletions src/common/Multiplayer/Multiplayer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,21 +4,9 @@

namespace Multiplayer
{
const size_t PlayerData::objectNumber(Object::ObjectName name) const
{
if (!inventory.count(name))
return 0;
else
return inventory.at(name);
}


const size_t PlayerData::addObject(Object::ObjectName name)
{
if (!inventory.count(name))
inventory[name] = 1;
else
inventory[name] += 1;
inventory.count(name) ? inventory[name] += 1 : inventory[name] = 1;
return objectNumber(name);
}

Expand All @@ -44,7 +32,6 @@ namespace Multiplayer
port = Constants::getPORT_LISTEN();
#endif

auto broadcast_ip = Constants::getSERVER_IP();
ip = sf::IpAddress::getPublicAddress(sf::seconds(Constants::getMAX_PING()));
socket.setBlocking(false);
// bind the socket to a port
Expand Down Expand Up @@ -113,7 +100,7 @@ namespace Multiplayer
if (player_data.getInventory().empty() && !player_data_pool[id].getInventory().empty())
{
// send all inventory
for (auto iter : player_data_pool[id].getInventory())
for (const auto& iter : player_data_pool[id].getInventory())
{
for (size_t i = 0; i < iter.second; ++i)
{
Expand All @@ -125,7 +112,7 @@ namespace Multiplayer
}
}
else
for (auto iter : player_data_pool[id].getInventory())
for (const auto& iter : player_data_pool[id].getInventory())
{
size_t msg_number;
if (player_data.getInventory().count(iter.first) && player_data.getInventory().at(iter.first) >= iter.second)
Expand Down Expand Up @@ -174,10 +161,13 @@ namespace Multiplayer
}
case DataType::Event:
{
EventType event_type;
// event handling
sf::Uint32 event_type_enum;
data >> event_type_enum;
EventType event_type = static_cast<EventType>(event_type_enum);
{
sf::Uint32 event_type_enum;
data >> event_type_enum;
event_type = static_cast<EventType>(event_type_enum);
}
switch (event_type)
{
case EventType::takeObjectToInventory:
Expand All @@ -199,9 +189,10 @@ namespace Multiplayer
}
else
{
player_data_pool[id].setPosition(player_data.getPosition());
player_data_pool[id].setTime(player_data.getTime());
player_data_pool[id].addObject(object_data.getName());
auto& player = player_data_pool[id];
player.setPosition(player_data.getPosition());
player.setTime(player_data.getTime());
player.addObject(object_data.getName());
data.clear();
if (!removeObject(object_data)) {
// no such object in the world :|
Expand Down
2 changes: 1 addition & 1 deletion src/common/Multiplayer/Operators.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,7 +39,7 @@ sf::Packet& operator <<(sf::Packet& packet, const Multiplayer::PlayerData& playe
{
packet << player_data.getPosition().x << player_data.getPosition().y << player_data.getId() << player_data.getTime();
packet << static_cast<sf::Uint32>(player_data.getInventory().size());
for (auto pair : player_data.getInventory())
for (const auto& pair : player_data.getInventory())
{
packet << pair.first << static_cast<sf::Uint32>(pair.second);
}
Expand Down
30 changes: 0 additions & 30 deletions src/common/Object.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -66,36 +66,6 @@ namespace Object
}


const Passability& Object::getPassability() const
{
return passability;
}


const sf::Vector2f& Object::getPosition() const
{
return position;
}


const sf::Sprite& Object::getSprite() const
{
return sprite;
}


const ObjectName& Object::getName() const
{
return name;
}


bool Object::intersection(const sf::FloatRect& new_rect) const
{
return getSprite().getGlobalBounds().intersects(new_rect);
}


void Object::check_collision(sf::Vector2f& vector, const sf::FloatRect& rect, size_t& depth) const
{
if (this->intersection(sf::FloatRect(rect.getPosition() + vector, rect.getSize())))
Expand Down
2 changes: 1 addition & 1 deletion src/common/WorldMap.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ namespace WorldMap
{
Object::Object object;
object << object_data;
auto point = object.getPosition();
const auto& point = object.getPosition();
switch (object.getPassability())
{
case Object::Passability::background:
Expand Down
25 changes: 5 additions & 20 deletions src/server/server.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -20,35 +20,22 @@ void UdpWorker(Multiplayer::UdpManager& UdpManager)
UdpManager.receive();
}

for (auto iter : UdpManager.getPlayerDataPool())
for (const auto& iter : UdpManager.getPlayerDataPool())
{
//std::cout << "unpacking player from pool: " << (*iter).first << std::endl;
auto time_now = Time::getTimeNow();
//iter.second.setTime(time_now);
int ping = static_cast<int>(time_now) - static_cast<int>(iter.second.getTime());
std::cout << iter.second.getSocketInfo().first << ":" << iter.second.getSocketInfo().second << std::endl;
//std::cout << "id: " << (*iter).first << ", last timepoint: " << std::to_string(time) << std::endl;
if (ping > Constants::getMAX_PING())
{
//std::cout << "reached MAX_PING" << std::endl;
//UdpManager.removePlayerBySocketInfo((*iter++).first);
continue;
}
auto sector_data = UdpManager.checkSector(iter.second.getPosition());
UdpManager.send(sector_data, iter.second.getSocketInfo().first, iter.second.getSocketInfo().second);
for (auto dest_iter = UdpManager.getPlayerDataPool().begin(); dest_iter != UdpManager.getPlayerDataPool().end(); ++dest_iter)
for (const auto& dest_iter : UdpManager.getPlayerDataPool())
{
//std::cout << "sending " << iter->first << " data to " << dest_iter->first << std::endl;
if (dest_iter->first == iter.first)
{
//std::cout << "*dest_iter == *iter" << std::endl;
//std::cout << "made ++dest_iter" << std::endl;
if (dest_iter.first == iter.first)
continue;
}
sf::Packet data;
data << Multiplayer::DataType::Player << iter.second;
UdpManager.send(data, dest_iter->second.getSocketInfo().first, dest_iter->second.getSocketInfo().second);
//std::cout << "sent" << std::endl;
UdpManager.send(data, dest_iter.second.getSocketInfo().first, dest_iter.second.getSocketInfo().second);
}
}
}
Expand All @@ -60,7 +47,7 @@ void UdpWorker(Multiplayer::UdpManager& UdpManager)
* @param path: path to file
* @return vector of ObjectData
*/
std::vector<Multiplayer::ObjectData> load_terrain(const std::string& path)
static std::vector<Multiplayer::ObjectData> load_terrain(const std::string& path)
{
std::vector<Multiplayer::ObjectData> object_data_pool_init;
std::ifstream infile(path);
Expand All @@ -86,7 +73,6 @@ std::vector<Multiplayer::ObjectData> load_terrain(const std::string& path)

int main()
{
//std::cout << std::flush << std::endl;
Multiplayer::UdpManager UdpManager(sf::IpAddress::getLocalAddress(), sf::IpAddress::Any);
auto last_timepoint = std::chrono::steady_clock::now();
{
Expand All @@ -97,7 +83,6 @@ int main()
std::cout << "server started" << std::endl;
while (true)
{
// needs another thread
last_timepoint += std::chrono::milliseconds(1000 / Constants::getFRAMERATE_LIMIT());
UdpWorker(UdpManager);
std::this_thread::sleep_until(last_timepoint);
Expand Down

0 comments on commit 9f08c51

Please sign in to comment.