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 #include "StaffSetNameAction.h"
11
12 #include "../Cheats.h"
13 #include "../Context.h"
14 #include "../core/MemoryStream.h"
15 #include "../drawing/Drawing.h"
16 #include "../interface/Window.h"
17 #include "../localisation/Localisation.h"
18 #include "../localisation/StringIds.h"
19 #include "../peep/Staff.h"
20 #include "../windows/Intent.h"
21 #include "../world/Entity.h"
22 #include "../world/Park.h"
23
StaffSetNameAction(uint16_t spriteIndex,const std::string & name)24 StaffSetNameAction::StaffSetNameAction(uint16_t spriteIndex, const std::string& name)
25 : _spriteIndex(spriteIndex)
26 , _name(name)
27 {
28 }
29
GetActionFlags() const30 uint16_t StaffSetNameAction::GetActionFlags() const
31 {
32 return GameAction::GetActionFlags() | GameActions::Flags::AllowWhilePaused;
33 }
34
Serialise(DataSerialiser & stream)35 void StaffSetNameAction::Serialise(DataSerialiser& stream)
36 {
37 GameAction::Serialise(stream);
38
39 stream << DS_TAG(_spriteIndex) << DS_TAG(_name);
40 }
41
Query() const42 GameActions::Result::Ptr StaffSetNameAction::Query() const
43 {
44 if (_spriteIndex >= MAX_ENTITIES)
45 {
46 return std::make_unique<GameActions::Result>(
47 GameActions::Status::InvalidParameters, STR_STAFF_ERROR_CANT_NAME_STAFF_MEMBER, STR_NONE);
48 }
49
50 auto staff = TryGetEntity<Staff>(_spriteIndex);
51 if (staff == nullptr)
52 {
53 log_warning("Invalid game command for sprite %u", _spriteIndex);
54 return std::make_unique<GameActions::Result>(
55 GameActions::Status::InvalidParameters, STR_STAFF_ERROR_CANT_NAME_STAFF_MEMBER, STR_NONE);
56 }
57
58 return std::make_unique<GameActions::Result>();
59 }
60
Execute() const61 GameActions::Result::Ptr StaffSetNameAction::Execute() const
62 {
63 auto staff = TryGetEntity<Staff>(_spriteIndex);
64 if (staff == nullptr)
65 {
66 log_warning("Invalid game command for sprite %u", _spriteIndex);
67 return std::make_unique<GameActions::Result>(
68 GameActions::Status::InvalidParameters, STR_STAFF_ERROR_CANT_NAME_STAFF_MEMBER, STR_NONE);
69 }
70
71 auto curName = staff->GetName();
72 if (curName == _name)
73 {
74 return std::make_unique<GameActions::Result>();
75 }
76
77 if (!staff->SetName(_name))
78 {
79 return std::make_unique<GameActions::Result>(GameActions::Status::Unknown, STR_CANT_NAME_GUEST, STR_NONE);
80 }
81
82 gfx_invalidate_screen();
83
84 auto intent = Intent(INTENT_ACTION_REFRESH_STAFF_LIST);
85 context_broadcast_intent(&intent);
86
87 auto res = std::make_unique<GameActions::Result>();
88 res->Position = staff->GetLocation();
89
90 return res;
91 }
92