The Battle for Wesnoth 1.21.0-dev
 
Loading...
Searching...
No Matches
action.hpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2010 - 2025
3 by Gabriel Morin <gabrielmorin (at) gmail (dot) com>
4 Part of the Battle for Wesnoth Project https://www.wesnoth.org/
5
6 This program is free software; you can redistribute it and/or modify
7 it under the terms of the GNU General Public License as published by
8 the Free Software Foundation; either version 2 of the License, or
9 (at your option) any later version.
10 This program is distributed in the hope that it will be useful,
11 but WITHOUT ANY WARRANTY.
12
13 See the COPYING file for more details.
14*/
15
16/**
17 * @file
18 */
19
20#pragma once
21
22#include "typedefs.hpp"
23#include "map/location.hpp"
24#include "game_errors.hpp"
25
26namespace wb {
27
28class visitor;
29
30/**
31 * Abstract base class for all the whiteboard planned actions.
32 */
33class action : public std::enable_shared_from_this<action>
34{
35public:
36 action(std::size_t team_index, bool hidden);
37 action(const config&, bool hidden); // For deserialization
38 virtual ~action();
39
40 virtual std::ostream& print(std::ostream& s) const = 0;
41
42 virtual void accept(visitor& v) = 0;
43
44 /**
45 * Output parameters:
46 * success: Whether or not to continue an execute-all after this execution
47 * complete: Whether or not to delete this action after execution
48 */
49 virtual void execute(bool& success, bool& complete) = 0;
50
51 /** Applies temporarily the result of this action to the specified unit map. */
53 /** Removes the result of this action from the specified unit map. */
55
56 /** Gets called by display when drawing a hex, to allow actions to draw to the screen. */
57 virtual void draw_hex(const map_location& hex) = 0;
58 /** Redrawing function, called each time the action situation might have changed. */
59 virtual void redraw(){}
60
61 /** Sets whether or not the action should be drawn on the screen. */
62 void hide();
63 void show();
64 bool hidden() const {return hidden_;}
65
66 /** Indicates whether this hex is the preferred hex to draw the numbering for this action. */
67 bool is_numbering_hex(const map_location& hex) const {return hex==get_numbering_hex();}
68 virtual map_location get_numbering_hex() const = 0;
69
70 /** Return the unit targeted by this action. Null if unit doesn't exist. */
71 virtual unit_ptr get_unit() const = 0;
72
73 /** Returns true for recall and recruit actions */
74 virtual bool places_new_unit() const { return false; };
75 /**
76 * Returns the id of the unit targeted by this action.
77 * @retval 0 no unit is targeted.
78 */
79 virtual std::size_t get_unit_id() const;
80
81 /** @return pointer to the fake unit used only for visuals */
83 /** Returns the index of the team that owns this action */
84 std::size_t team_index() const { return team_index_; }
85 /** Returns the number of the side that owns this action, i.e. the team index + 1. */
86 int side_number() const
87 {
88 return static_cast<int>(team_index_) + 1;
89 }
90
91 /** Constructs and returns a config object representing this object. */
92 virtual config to_config() const;
93 /** Constructs an object of a subclass of wb::action using a config. Current behavior is to return a null pointer for unrecognized config. */
94 static action_ptr from_config(const config&, bool hidden);
95
96 struct ctor_err : public game::error
97 {
98 ctor_err(const std::string& message) : game::error(message){}
99 };
100
101 /**
102 * Possible errors.
103 *
104 * Returned by the @ref check_validity function.
105 */
121
122 /**
123 * Check the validity of the action.
124 *
125 * @return the error preventing the action from being executed.
126 * @retval OK if there isn't any error (the action can be executed.)
127 */
128 virtual error check_validity() const = 0;
129
130 /**
131 * Returns whether this action is valid or not.
132 *
133 * @note This value is now calculated each time the function is called.
134 */
135 bool valid(){ return check_validity()==OK; }
136
137private:
138 /** Called by the non-virtual hide() and show(), respectively. */
139 virtual void do_hide() {}
140 virtual void do_show() {}
141
142 std::size_t team_index_;
144};
145
146std::ostream& operator<<(std::ostream& s, const action_ptr& action);
147std::ostream& operator<<(std::ostream& s, const action_const_ptr& action);
148
149} // end namespace wb
A config object defines a single node in a WML file, with access to child nodes.
Definition config.hpp:157
Holds a temporary unit that can be drawn on the map without being placed in the unit_map.
Container associating units to locations.
Definition map.hpp:98
Abstract base class for all the whiteboard planned actions.
Definition action.hpp:34
virtual unit_ptr get_unit() const =0
Return the unit targeted by this action.
std::size_t team_index_
Definition action.hpp:142
bool hidden() const
Definition action.hpp:64
virtual void remove_temp_modifier(unit_map &unit_map)=0
Removes the result of this action from the specified unit map.
void hide()
Sets whether or not the action should be drawn on the screen.
Definition action.cpp:81
bool valid()
Returns whether this action is valid or not.
Definition action.hpp:135
virtual void do_show()
Definition action.hpp:140
virtual ~action()
Definition action.cpp:115
virtual void do_hide()
Called by the non-virtual hide() and show(), respectively.
Definition action.hpp:139
static action_ptr from_config(const config &, bool hidden)
Constructs an object of a subclass of wb::action using a config.
Definition action.cpp:60
std::size_t team_index() const
Returns the index of the team that owns this action.
Definition action.hpp:84
virtual void redraw()
Redrawing function, called each time the action situation might have changed.
Definition action.hpp:59
bool is_numbering_hex(const map_location &hex) const
Indicates whether this hex is the preferred hex to draw the numbering for this action.
Definition action.hpp:67
virtual void execute(bool &success, bool &complete)=0
Output parameters: success: Whether or not to continue an execute-all after this execution complete: ...
virtual bool places_new_unit() const
Returns true for recall and recruit actions.
Definition action.hpp:74
virtual std::size_t get_unit_id() const
Returns the id of the unit targeted by this action.
Definition action.cpp:119
virtual void apply_temp_modifier(unit_map &unit_map)=0
Applies temporarily the result of this action to the specified unit map.
void show()
Definition action.cpp:89
virtual fake_unit_ptr get_fake_unit()=0
virtual std::ostream & print(std::ostream &s) const =0
Definition action.cpp:46
virtual config to_config() const
Constructs and returns a config object representing this object.
Definition action.cpp:51
bool hidden_
Definition action.hpp:143
error
Possible errors.
Definition action.hpp:107
@ INVALID_LOCATION
Definition action.hpp:109
@ NO_ATTACK_LEFT
Definition action.hpp:115
@ NOT_ENOUGH_GOLD
Definition action.hpp:118
@ LOCATION_OCCUPIED
Definition action.hpp:112
@ UNIT_UNAVAILABLE
Definition action.hpp:117
int side_number() const
Returns the number of the side that owns this action, i.e.
Definition action.hpp:86
virtual map_location get_numbering_hex() const =0
virtual void draw_hex(const map_location &hex)=0
Gets called by display when drawing a hex, to allow actions to draw to the screen.
virtual void accept(visitor &v)=0
virtual error check_validity() const =0
Check the validity of the action.
Abstract base class for all the visitors (cf GoF Visitor Design Pattern) the whiteboard uses.
Definition visitor.hpp:33
Definition display.hpp:45
std::shared_ptr< action > action_ptr
Definition typedefs.hpp:62
std::shared_ptr< action const > action_const_ptr
Definition typedefs.hpp:63
std::ostream & operator<<(std::ostream &s, const action_ptr &action)
Definition action.cpp:34
std::shared_ptr< unit > unit_ptr
Definition ptr.hpp:26
Base class for all the errors encountered by the engine.
std::string message
Encapsulates the map of the game.
Definition location.hpp:46
ctor_err(const std::string &message)
Definition action.hpp:98
static map_location::direction s
Contains typedefs for the whiteboard.