OpenRCT2/src/openrct2/network/NetworkGroup.h

56 lines
1.5 KiB
C++

/*****************************************************************************
* Copyright (c) 2014-2024 OpenRCT2 developers
*
* For a complete list of all authors, please refer to contributors.md
* Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
*
* OpenRCT2 is licensed under the GNU General Public License version 3.
*****************************************************************************/
#pragma once
#include "../Game.h"
#include "../common.h"
#include "NetworkPacket.h"
#include <array>
#include <string>
#include <string_view>
enum class NetworkPermission : uint32_t;
class NetworkGroup final
{
public:
std::array<uint8_t, 8> ActionsAllowed{};
uint8_t Id = 0;
/**
* Creates a NetworkGroup object from a JSON object
*
* @param json JSON data source
* @return A NetworkGroup object
* @note json is deliberately left non-const: json_t behaviour changes when const
*/
static NetworkGroup FromJson(const json_t& json);
const std::string& GetName() const noexcept;
void SetName(std::string_view name);
void Read(NetworkPacket& packet);
void Write(NetworkPacket& packet) const;
void ToggleActionPermission(NetworkPermission index);
bool CanPerformAction(NetworkPermission index) const noexcept;
bool CanPerformCommand(GameCommand command) const;
/**
* Serialise a NetworkGroup object into a JSON object
*
* @return JSON representation of the NetworkGroup object
*/
json_t ToJson() const;
private:
std::string _name;
};