1 | /* |
---|
2 | * ORXONOX - the hottest 3D action shooter ever to exist |
---|
3 | * > www.orxonox.net < |
---|
4 | * |
---|
5 | * |
---|
6 | * License notice: |
---|
7 | * |
---|
8 | * This program is free software; you can redistribute it and/or |
---|
9 | * modify it under the terms of the GNU General Public License |
---|
10 | * as published by the Free Software Foundation; either version 2 |
---|
11 | * of the License, or (at your option) any later version. |
---|
12 | * |
---|
13 | * This program is distributed in the hope that it will be useful, |
---|
14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of |
---|
15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
---|
16 | * GNU General Public License for more details. |
---|
17 | * |
---|
18 | * You should have received a copy of the GNU General Public License |
---|
19 | * along with this program; if not, write to the Free Software |
---|
20 | * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
---|
21 | * |
---|
22 | * Author: |
---|
23 | * Fabian 'x3n' Landau |
---|
24 | * Co-authors: |
---|
25 | * ... |
---|
26 | * |
---|
27 | */ |
---|
28 | |
---|
29 | /** |
---|
30 | @file OrxoBloxBall.h |
---|
31 | @brief Declaration of the OrxoBloxBall class. |
---|
32 | @ingroup OrxoBlox |
---|
33 | */ |
---|
34 | |
---|
35 | #ifndef _OrxoBloxBall_H__ |
---|
36 | #define _OrxoBloxBall_H__ |
---|
37 | |
---|
38 | #include "OrxoBlox/OrxoBloxPrereqs.h" |
---|
39 | |
---|
40 | #include "util/Math.h" |
---|
41 | |
---|
42 | #include "worldentities/MovableEntity.h" |
---|
43 | |
---|
44 | |
---|
45 | namespace orxonox |
---|
46 | { |
---|
47 | |
---|
48 | /** |
---|
49 | @brief |
---|
50 | This class manages the ball for @ref orxonox::OrxoBlox "OrxoBlox". |
---|
51 | |
---|
52 | It is responsible for both the movement of the ball in the x,y-plane as well as its interaction with the boundaries of the playing field (defined by the @ref orxonox::OrxoBloxCenterpoint "OrxoBloxCenterpoint") and the @ref orxonox::OrxoBloxBlocks "OrxoBloxBlocks". Or more precisely, it makes the ball bounce off then left and right delimiters of the playing field, it makes the ball bounce off the blocks, damages them and also detects when it reaches the lower bound and takes appropriate measures. |
---|
53 | |
---|
54 | @author |
---|
55 | Fabian 'x3n' Landau |
---|
56 | |
---|
57 | @ingroup OrxoBlox |
---|
58 | */ |
---|
59 | class _OrxoBloxExport OrxoBloxBall : public MovableEntity |
---|
60 | { |
---|
61 | public: |
---|
62 | OrxoBloxBall(Context* context); |
---|
63 | virtual ~OrxoBloxBall(); |
---|
64 | |
---|
65 | virtual void tick(float dt) override; |
---|
66 | |
---|
67 | virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; |
---|
68 | |
---|
69 | /** |
---|
70 | @brief Set the dimensions of the playing field. |
---|
71 | @param width The width of the playing field. |
---|
72 | @param height The height of the playing field. |
---|
73 | */ |
---|
74 | void setFieldDimension(float width, float height) |
---|
75 | { this->fieldWidth_ = width; this->fieldHeight_ = height; } |
---|
76 | /** |
---|
77 | @brief Get the dimensions of the playing field. |
---|
78 | @param dimension A vector with the width as the first and height as the second component. |
---|
79 | */ |
---|
80 | void setFieldDimension(const Vector2& dimension) |
---|
81 | { this->setFieldDimension(dimension.x, dimension.y); } |
---|
82 | /** |
---|
83 | @brief Get the dimensions of the playing field. |
---|
84 | @return Returns a vector with the width as the first and height as the second component. |
---|
85 | */ |
---|
86 | Vector2 getFieldDimension() const |
---|
87 | { return Vector2(this->fieldWidth_, this->fieldHeight_); } |
---|
88 | |
---|
89 | void setSpeed(float speed); //!< Set the speed of the ball (in x-direction). |
---|
90 | /** |
---|
91 | @brief Get the speed of the ball (in x-direction). |
---|
92 | @return Returns the speed of the ball (in x-direction). |
---|
93 | */ |
---|
94 | float getSpeed() const |
---|
95 | { return this->speed_; } |
---|
96 | |
---|
97 | void setBlock(OrxoBloxStone[] blocks, int n); //!< Set the blocks for the ball. |
---|
98 | |
---|
99 | static const float MAX_REL_Z_VELOCITY; |
---|
100 | |
---|
101 | void setDefBoundarySound(const std::string& engineSound); |
---|
102 | const std::string& getDefBoundarySound(); |
---|
103 | |
---|
104 | private: |
---|
105 | void registerVariables(); |
---|
106 | |
---|
107 | float fieldWidth_; //!< The width of the playing field. |
---|
108 | float fieldHeight_; //!< The height of the playing field. |
---|
109 | float speed_; //!< The speed (in x-direction) of the ball. |
---|
110 | WorldSound* defBoundarySound_; |
---|
111 | unsigned int nblocks_ ; |
---|
112 | OrxoBloxStone[] blocks_ ; |
---|
113 | }; |
---|
114 | } |
---|
115 | |
---|
116 | #endif /* _OrxoBloxBall_H__ */ |
---|