1 /*****************************************************************************
2  * Copyright (c) 2014-2020 OpenRCT2 developers
3  *
4  * For a complete list of all authors, please refer to contributors.md
5  * Interested in contributing? Visit https://github.com/OpenRCT2/OpenRCT2
6  *
7  * OpenRCT2 is licensed under the GNU General Public License version 3.
8  *****************************************************************************/
9 
10 #pragma once
11 
12 #include "GameAction.h"
13 
14 enum class ModifyGroupType : uint8_t
15 {
16     AddGroup,
17     RemoveGroup,
18     SetPermissions,
19     SetName,
20     SetDefault,
21     Count
22 };
23 
24 enum class PermissionState : uint8_t
25 {
26     Toggle,
27     SetAll,
28     ClearAll,
29     Count
30 };
31 
32 class NetworkModifyGroupAction final : public GameActionBase<GameCommand::ModifyGroups>
33 {
34 private:
35     ModifyGroupType _type{ ModifyGroupType::Count };
36     uint8_t _groupId{ std::numeric_limits<uint8_t>::max() };
37     std::string _name;
38     uint32_t _permissionIndex{ std::numeric_limits<uint32_t>::max() };
39     PermissionState _permissionState{ PermissionState::Count };
40 
41 public:
42     NetworkModifyGroupAction() = default;
43     NetworkModifyGroupAction(
44         ModifyGroupType type, uint8_t groupId = std::numeric_limits<uint8_t>::max(), const std::string name = "",
45         uint32_t permissionIndex = 0, PermissionState permissionState = PermissionState::Count);
46 
47     uint16_t GetActionFlags() const override;
48 
49     void Serialise(DataSerialiser& stream) override;
50     GameActions::Result::Ptr Query() const override;
51     GameActions::Result::Ptr Execute() const override;
52 };
53