The Battle for Wesnoth 1.21.0-dev
 
Loading...
Searching...
No Matches
teleport.hpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2010 - 2025
3 by Fabian Mueller <fabianmueller5@gmx.de>
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#pragma once
17
18#include "config.hpp"
19#include "map/location.hpp"
20
21#include <unordered_map>
22#include <unordered_set>
23
24class team;
25class unit;
26class vconfig;
27
28
29namespace pathfind {
30
31typedef std::pair<std::set<map_location>, std::set<map_location>>
33
34/*
35 * Represents the tunnel wml tag.
36 */
38{
39public:
40 /*
41 * Constructs the object from a saved file.
42 * @param cfg the contents of a [tunnel] tag
43 */
45
46 /*
47 * Constructs the object from a config file.
48 * @param cfg the contents of a [tunnel] tag
49 * @param way_back inverts the direction of the teleport
50 */
51 teleport_group(const vconfig& cfg, bool way_back = false);
52
53 /*
54 * Fills the argument loc_pair if the unit u matches the groups filter.
55 * @param loc_pair returned teleport_pair if the unit matches
56 * @param u this unit must match the group's filter
57 * @param ignore_units don't consider zoc and blocking when calculating the shorted path between
58 */
60 teleport_pair& loc_pair
61 , const unit& u
62 , const bool ignore_units) const;
63
64 /*
65 * Can be set by the id attribute or is randomly chosen.
66 * @return unique id of the teleport group
67 */
68 const std::string& get_teleport_id() const;
69
70 /*
71 * Returns whether the group should always be visible,
72 * even for enemy movement under shroud.
73 * @return visibility of the teleport group
74 */
75 bool always_visible() const;
76
77 /*
78 * Returns whether allied units on the exit hex can be passed.
79 */
80 bool pass_allied_units() const;
81
82 /*
83 * Returns whether vision through tunnels is possible.
84 */
85 bool allow_vision() const;
86
87 /** Inherited from savegame_config. */
88 config to_config() const;
89
90private:
91
92 config cfg_; // unexpanded contents of a [tunnel] tag
93 bool reversed_; // Whether the tunnel's direction is reversed
94 std::string id_; // unique id of the group
95};
96
97
99public:
100 /*
101 * @param teleport_groups
102 * @param u
103 * @param viewing_team
104 * @param see_all
105 * @param ignore_units
106 * @param check_vision
107 */
109 const std::vector<teleport_group>& teleport_groups
110 , const unit& u
111 , const team &viewing_team
112 , const bool see_all
113 , const bool ignore_units
114 , const bool check_vision);
115
116 /*
117 * Constructs an empty teleport map.
118 */
121
122 /**
123 * @param loc the map location for which we want to know the adjacent hexes
124 * @todo what does this function actually have to do with adjacent hexes?
125 */
126 const std::unordered_set<map_location>& get_adjacents(map_location loc) const;
127
128 /** Returns the locations that are an entrance of the tunnel. */
129 const std::unordered_set<map_location>& get_sources() const;
130
131 /** Returns the locations that are an exit of the tunnel. */
132 const std::unordered_set<map_location>& get_targets() const;
133
134 /*
135 * @returns whether the teleport_map does contain any defined tunnel
136 */
137 bool empty() const {
138 return sources_.empty();
139 }
140
141private:
142 std::unordered_map<map_location, std::unordered_set<map_location>> teleport_map_;
143 std::unordered_set<map_location> sources_;
144 std::unordered_set<map_location> targets_;
145 std::unordered_set<map_location> empty_set_;
146};
147
148/*
149 * @param u The unit that is processed by pathfinding
150 * @param viewing_team The team the player belongs to
151 * @param see_all Whether the teleport can be seen below shroud
152 * @param ignore_units Whether to ignore zoc and blocking by units
153 * @param check_vision Whether to check vision as opposed to movement range
154 * @returns a teleport_map
155 */
156const teleport_map get_teleport_locations(const unit &u, const team &viewing_team,
157 bool see_all = false, bool ignore_units = false, bool check_vision = false);
158
160{
161public:
162 manager(const config &cfg);
163
164 /*
165 * @param group teleport_group to be added
166 */
167 void add(const teleport_group &group);
168
169 /*
170 * @param id id of the teleport_group that is to be removed by the method
171 */
172 void remove(const std::string &id);
173
174 /*
175 * @return all registered teleport groups on the game field
176 */
177 const std::vector<teleport_group>& get() const;
178
179 /** Inherited from savegame_config. */
180 config to_config() const;
181
182 /*
183 * @returns the next free unique id for a teleport group
184 */
185 std::string next_unique_id();
186private:
187 std::vector<teleport_group> tunnels_;
188 int id_;
189};
190
191}
map_location loc
Definition move.cpp:172
A config object defines a single node in a WML file, with access to child nodes.
Definition config.hpp:157
config to_config() const
Inherited from savegame_config.
Definition teleport.cpp:304
void add(const teleport_group &group)
Definition teleport.cpp:285
std::vector< teleport_group > tunnels_
Definition teleport.hpp:187
void remove(const std::string &id)
Definition teleport.cpp:289
const std::vector< teleport_group > & get() const
Definition teleport.cpp:300
std::string next_unique_id()
Definition teleport.cpp:316
config to_config() const
Inherited from savegame_config.
Definition teleport.cpp:156
bool always_visible() const
Definition teleport.cpp:144
const std::string & get_teleport_id() const
Definition teleport.cpp:140
bool pass_allied_units() const
Definition teleport.cpp:148
void get_teleport_pair(teleport_pair &loc_pair, const unit &u, const bool ignore_units) const
Definition teleport.cpp:113
bool allow_vision() const
Definition teleport.cpp:152
const std::unordered_set< map_location > & get_sources() const
Returns the locations that are an entrance of the tunnel.
Definition teleport.cpp:241
std::unordered_set< map_location > targets_
Definition teleport.hpp:144
std::unordered_map< map_location, std::unordered_set< map_location > > teleport_map_
Definition teleport.hpp:142
std::unordered_set< map_location > sources_
Definition teleport.hpp:143
const std::unordered_set< map_location > & get_targets() const
Returns the locations that are an exit of the tunnel.
Definition teleport.cpp:246
std::unordered_set< map_location > empty_set_
Definition teleport.hpp:145
const std::unordered_set< map_location > & get_adjacents(map_location loc) const
Definition teleport.cpp:231
This class stores all the data for a single 'side' (in game nomenclature).
Definition team.hpp:74
This class represents a single unit of a specific type.
Definition unit.hpp:39
A variable-expanding proxy for the config class.
Definition variable.hpp:45
Definitions for the interface to Wesnoth Markup Language (WML).
const config * cfg
std::pair< std::set< map_location >, std::set< map_location > > teleport_pair
Definition teleport.hpp:32
const teleport_map get_teleport_locations(const unit &u, const team &viewing_team, bool see_all, bool ignore_units, bool check_vision)
Definition teleport.cpp:251
Encapsulates the map of the game.
Definition location.hpp:46