Freeciv21
Develop your civilization from humble roots to a global empire
layer_roads.h
Go to the documentation of this file.
1 // SPDX-License-Identifier: GPLv3-or-later
2 // SPDX-FileCopyrightText: Freeciv authors
3 // SPDX-FileCopyrightText: Freeciv21 authors
4 // SPDX-FileCopyrightText: Louis Moureaux <m_louis30@yahoo.com>
5 
6 #pragma once
7 
8 #include "fc_types.h"
9 #include "layer.h"
10 
11 #include <array>
12 #include <map>
13 #include <utility>
14 #include <vector>
15 
16 namespace freeciv {
17 
18 class layer_roads : public layer {
20  struct corner_sprites {
21  const extra_type *extra = nullptr;
22  QPixmap *isolated = nullptr;
23  std::array<QPixmap *, DIR8_MAGIC_MAX> corners = {nullptr};
24  };
25 
27  template <class Sprites> struct data : corner_sprites {
28  Sprites sprites;
29  };
30 
38  std::array<QPixmap *, MAX_INDEX_HALF>>>;
39 
40 public:
41  explicit layer_roads(struct tileset *ts);
42  virtual ~layer_roads() = default;
43 
44  void initialize_extra(const extra_type *extra, const QString &tag,
45  extrastyle_id style) override;
46 
47  std::vector<drawn_sprite>
48  fill_sprite_array(const tile *ptile, const tile_edge *pedge,
49  const tile_corner *pcorner,
50  const unit *punit) const override;
51 
52  void reset_ruleset() override;
53 
54 private:
56  const QString &tag, const terrain *terrain);
57  void fill_corners(std::vector<drawn_sprite> &sprs,
58  const corner_sprites &data, const tile *ptile) const;
59 
60  void initialize_all_combined(all_combined_data &data, const QString &tag,
61  const terrain *terrain);
62  void fill_all_combined(std::vector<drawn_sprite> &sprs,
63  const all_combined_data &data,
64  const tile *ptile) const;
65 
66  void initialize_all_separate(all_separate_data &data, const QString &tag,
67  const terrain *terrain);
68  void fill_all_separate(std::vector<drawn_sprite> &sprs,
69  const all_separate_data &data,
70  const tile *ptile) const;
71 
73  const QString &tag,
74  const terrain *terrain);
75  void fill_parity_combined(std::vector<drawn_sprite> &sprs,
77  const tile *ptile) const;
78 
79  // All sprites depend on the terrain (first index) and extra (stored in the
80  // data structures, one structure per extra).
81  std::vector<std::vector<all_combined_data>> m_all_combined;
82  std::vector<std::vector<all_separate_data>> m_all_separate;
83  std::vector<std::vector<parity_combined_data>> m_parity_combined;
84 };
85 
86 } // namespace freeciv
Draws "road" extras on the map.
Definition: layer_roads.h:18
std::vector< std::vector< all_combined_data > > m_all_combined
Definition: layer_roads.h:81
void fill_all_combined(std::vector< drawn_sprite > &sprs, const all_combined_data &data, const tile *ptile) const
Fill sprites for extras with type RoadAllCombined.
std::vector< std::vector< parity_combined_data > > m_parity_combined
Definition: layer_roads.h:83
layer_roads(struct tileset *ts)
Constructor.
Definition: layer_roads.cpp:31
void initialize_all_combined(all_combined_data &data, const QString &tag, const terrain *terrain)
Initializes sprite data for RoadAllCombined.
Definition: layer_roads.cpp:94
void reset_ruleset() override
Resets cached data that depends on the ruleset.
std::vector< std::vector< all_separate_data > > m_all_separate
Definition: layer_roads.h:82
void fill_all_separate(std::vector< drawn_sprite > &sprs, const all_separate_data &data, const tile *ptile) const
Fill sprites for extras with type RoadAllSeparate.
std::vector< drawn_sprite > fill_sprite_array(const tile *ptile, const tile_edge *pedge, const tile_corner *pcorner, const unit *punit) const override
Returns the sprites to draw roads.
virtual ~layer_roads()=default
void fill_corners(std::vector< drawn_sprite > &sprs, const corner_sprites &data, const tile *ptile) const
Fills "corner" sprites that help complete diagonal roads where they overlap with adjacent tiles.
void initialize_parity_combined(parity_combined_data &data, const QString &tag, const terrain *terrain)
Initializes sprite data for RoadAllSeparate.
void initialize_all_separate(all_separate_data &data, const QString &tag, const terrain *terrain)
Initializes sprite data for RoadAllSeparate.
void fill_parity_combined(std::vector< drawn_sprite > &sprs, const parity_combined_data &data, const tile *ptile) const
Fill sprites for extras with type RoadAllSeparate.
void initialize_corners(corner_sprites &data, const extra_type *extra, const QString &tag, const terrain *terrain)
Initializes "corner" sprite data.
Definition: layer_roads.cpp:73
void initialize_extra(const extra_type *extra, const QString &tag, extrastyle_id style) override
Collects all extras to be drawn.
Definition: layer_roads.cpp:39
A layer when drawing the map.
Definition: layer.h:153
Definition: path.cpp:10
Stores the data common to all road types.
Definition: layer_roads.h:20
std::array< QPixmap *, DIR8_MAGIC_MAX > corners
Definition: layer_roads.h:23
Definition: tile.h:42
Definition: unit.h:134