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 TileModifyType : uint8_t
15 {
16     AnyRemove,
17     AnySwap,
18     AnyInsertCorrupt,
19     AnyRotate,
20     AnyPaste,
21     AnySort,
22     AnyBaseHeightOffset,
23     SurfaceShowParkFences,
24     SurfaceToggleCorner,
25     SurfaceToggleDiagonal,
26     PathSetSlope,
27     PathSetBroken,
28     PathToggleEdge,
29     EntranceMakeUsable,
30     WallSetSlope,
31     WallSetAnimationFrame,
32     TrackBaseHeightOffset,
33     TrackSetChain,
34     TrackSetChainBlock,
35     TrackSetBlockBrake,
36     TrackSetIndestructible,
37     ScenerySetQuarterLocation,
38     ScenerySetQuarterCollision,
39     BannerToggleBlockingEdge,
40     CorruptClamp,
41     Count,
42 };
43 
44 class TileModifyAction final : public GameActionBase<GameCommand::ModifyTile>
45 {
46 private:
47     CoordsXY _loc;
48     TileModifyType _setting{};
49     uint32_t _value1{};
50     uint32_t _value2{};
51     TileElement _pasteElement{};
52 
53 public:
54     TileModifyAction() = default;
55     TileModifyAction(
56         CoordsXY loc, TileModifyType setting, uint32_t value1 = 0, uint32_t value2 = 0, TileElement pasteElement = {});
57 
58     uint16_t GetActionFlags() const override;
59 
60     void Serialise(DataSerialiser& stream) override;
61     GameActions::Result::Ptr Query() const override;
62     GameActions::Result::Ptr Execute() const override;
63 
64 private:
65     GameActions::Result::Ptr QueryExecute(bool isExecuting) const;
66 };
67