The Battle for Wesnoth 1.21.0-dev
 
Loading...
Searching...
No Matches
halo.hpp
Go to the documentation of this file.
1/*
2 Copyright (C) 2003 - 2025
3 by David White <dave@whitevine.net>
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
18class display;
19struct rect;
20
21#include "map/location.hpp"
22
23#include <memory>
24
25namespace halo
26{
27
28
29class halo_impl;
30
31class halo_record;
32
33typedef std::shared_ptr<halo_record> handle;
34
36
37const int NO_HALO = 0;
38
40{
41public:
42 manager();
43
44 /**
45 * Add a haloing effect using 'image centered on (x,y).
46 * @return The handle to the halo object.
47 * @retval 0 is the invalid handle.
48 *
49 * If the halo is attached to an item, it needs to be hidden if the
50 * shroud is active. (Note it will be shown with the fog active.)
51 * If it is not attached to an item, the location should be set to -1, -1
52 */
53 handle add(int x, int y, const std::string& image, const map_location& loc,
54 halo::ORIENTATION orientation=NORMAL, bool infinite=true);
55
56 /** Set the position of an existing haloing effect, according to its handle. */
57 void set_location(const handle & h, int x, int y);
58
59 /** Remove the halo with the given handle. */
60 void remove(const handle & h);
61
62 /** Process animations, remove deleted halos, and invalidate screen
63 * regions now requiring redraw. */
64 void update();
65
66 /** Render halos in region. */
67 void render(const rect& r);
68
69private:
70 std::shared_ptr<halo_impl> impl_;
71};
72
73/**
74 * RAII object which manages a halo. When it goes out of scope it removes the corresponding halo entry.
75 */
77{
78public:
79 halo_record(const halo_record&) = delete;
81
83 halo_record(int id, const std::shared_ptr<halo_impl> & my_manager);
85
86 bool valid() const {
87 return id_ != NO_HALO && !my_manager_.expired();
88 }
89
90 friend class manager;
91private:
92 int id_;
93 std::weak_ptr<halo_impl> my_manager_;
94
95};
96
97} // end namespace halo
map_location loc
Definition move.cpp:172
Sort-of-Singleton that many classes, both GUI and non-GUI, use to access the game data.
Definition display.hpp:88
RAII object which manages a halo.
Definition halo.hpp:77
halo_record(const halo_record &)=delete
std::weak_ptr< halo_impl > my_manager_
Definition halo.hpp:93
halo_record()
halo::halo_record implementation
Definition halo.cpp:445
bool valid() const
Definition halo.hpp:86
halo_record & operator=(const halo_record &)=delete
std::shared_ptr< halo_impl > impl_
Definition halo.hpp:70
void update()
Process animations, remove deleted halos, and invalidate screen regions now requiring redraw.
Definition halo.cpp:428
void set_location(const handle &h, int x, int y)
Set the position of an existing haloing effect, according to its handle.
Definition halo.cpp:416
handle add(int x, int y, const std::string &image, const map_location &loc, halo::ORIENTATION orientation=NORMAL, bool infinite=true)
Add a haloing effect using 'image centered on (x,y).
Definition halo.cpp:408
void remove(const handle &h)
Remove the halo with the given handle.
Definition halo.cpp:422
void render(const rect &r)
Render halos in region.
Definition halo.cpp:433
Definition halo.cpp:41
ORIENTATION
Definition halo.hpp:35
@ HVREVERSE
Definition halo.hpp:35
@ VREVERSE
Definition halo.hpp:35
@ HREVERSE
Definition halo.hpp:35
@ NORMAL
Definition halo.hpp:35
const int NO_HALO
Definition halo.hpp:37
std::shared_ptr< halo_record > handle
Definition halo.hpp:33
Functions to load and save images from/to disk.
Encapsulates the map of the game.
Definition location.hpp:46
An abstract description of a rectangle with integer coordinates.
Definition rect.hpp:49
#define h