1 // This file is part of Dust Racing 2D.
2 // Copyright (C) 2012 Jussi Lind <jussi.lind@iki.fi>
3 //
4 // Dust Racing 2D is free software: you can redistribute it and/or modify
5 // it under the terms of the GNU General Public License as published by
6 // the Free Software Foundation, either version 3 of the License, or
7 // (at your option) any later version.
8 // Dust Racing 2D is distributed in the hope that it will be useful,
9 // but WITHOUT ANY WARRANTY; without even the implied warranty of
10 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 // GNU General Public License for more details.
12 //
13 // You should have received a copy of the GNU General Public License
14 // along with Dust Racing 2D. If not, see <http://www.gnu.org/licenses/>.
15 
16 #ifndef MESSAGEOVERLAY_HPP
17 #define MESSAGEOVERLAY_HPP
18 
19 #include "overlaybase.hpp"
20 
21 #include <MCTextureText>
22 #include <QObject>
23 #include <QString>
24 #include <list>
25 
26 class MCTextureFontManager;
27 class MCTextureFont;
28 
29 //! A class that draws the radar, texts and displays messages.
30 class MessageOverlay : public QObject, public OverlayBase
31 {
32     Q_OBJECT
33 
34 public:
35     //! Alignment of the MessageOverlay messages.
36     enum class Alignment
37     {
38         Top,
39         Bottom
40     };
41 
42     //! Constructor.
43     MessageOverlay(Alignment align = Alignment::Bottom, size_t messageMaxTime = 180);
44 
45     //! \reimp
46     virtual void render() override;
47 
48     //! \reimp
49     virtual bool update() override;
50 
51 public slots:
52 
53     //! Add a message to the MessageOverlay.
54     void addMessage(const std::wstring & msg);
55 
56     //! Add a message to the MessageOverlay.
57     void addMessage(QString msg);
58 
59     //! Add a message to the MessageOverlay.
60     void addMessage(const wchar_t * msg);
61 
62 private:
63     //! Render messages.
64     void renderMessages();
65 
66     //! MessageOverlay message struct.
67     struct Message
68     {
69         //! Time the message has been shown
70         size_t timeShown = 0;
71 
72         //! The time after which message will be deleted
73         size_t maxTime = 0;
74 
75         //! Current y
76         float y = 0;
77 
78         //! Target y
79         float targetY = 0;
80 
81         //! Message
82         std::wstring text;
83 
84         //! True, if y is initialized
85         bool isYInitialized = false;
86 
87         bool isRemoving = false;
88     };
89 
90     MCTextureFontManager & m_fontManager;
91 
92     MCTextureFont & m_font;
93 
94     MCTextureText m_text;
95 
96     size_t m_messageMaxTime;
97 
98     Alignment m_align;
99 
100     std::list<Message> m_listMessages;
101 };
102 
103 #endif // MESSAGEOVERLAY_HPP
104