Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/OrxoBlox_FS19/src/modules/OrxoBlox/OrxoBloxBall.h @ 12364

Last change on this file since 12364 was 12360, checked in by pomselj, 6 years ago

bounces moore smoothly

File size: 6.1 KB
Line 
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/pawns/Pawn.h"
43#include <bullet/BulletCollision/NarrowPhaseCollision/btManifoldPoint.h>
44
45
46namespace orxonox
47{
48
49    /**
50    @brief
51        This class manages the ball for @ref orxonox::OrxoBlox "OrxoBlox".
52
53        It is responsible for both the movement of the ball in the x,z-plane as well as its interaction with the boundaries of the playing field (defined by the @ref orxonox::OrxoBloxCenterpoint "OrxoBloxCenterpoint") and the @ref orxonox::OrxoBloxBat "OrxoBloxBats". Or more precisely, it makes the ball bounce off then upper and lower delimiters of the playing field, it makes the ball bounce off the bats and also detects when a player scores and takes appropriate measures.
54
55    @author
56        Fabian 'x3n' Landau
57
58    @ingroup OrxoBlox
59    */
60    class _OrxoBloxExport OrxoBloxBall : public Pawn
61    {
62        public:
63            OrxoBloxBall(Context* context);
64            virtual ~OrxoBloxBall();
65
66            virtual void tick(float dt) override;
67
68            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override;
69
70            /**
71            @brief Set the dimensions of the playing field.
72            @param width The width of the playing field.
73            @param height The height of the playing field.
74            */
75            void setFieldDimension(float width, float height)
76                { this->fieldWidth_ = width; this->fieldHeight_ = height; }
77            /**
78            @brief Get the dimensions of the playing field.
79            @param dimension A vector with the width as the first and height as the second component.
80            */
81            void setFieldDimension(const Vector2& dimension)
82                { this->setFieldDimension(dimension.x, dimension.y); }
83            /**
84            @brief Get the dimensions of the playing field.
85            @return Returns a vector with the width as the first and height as the second component.
86            */
87            Vector2 getFieldDimension() const
88                { return Vector2(this->fieldWidth_, this->fieldHeight_); }
89
90            void setSpeed(float speed); //!< Set the speed of the ball (in x-direction).
91            /**
92            @brief Get the speed of the ball (in x-direction).
93            @return Returns the speed of the ball (in x-direction).
94            */
95            float getSpeed() const
96                { return this->speed_; }
97
98            /**
99            @brief Set the acceleration factor of the ball.
100            @param factor The factor the acceleration of the ball is set to.
101            */
102            void setAccelerationFactor(float factor)
103                { this->accelerationFactor_ = factor; }
104            /**
105            @brief Get the acceleration factor of the ball.
106            @return Returns the acceleration factor of the ball.
107            */
108            float getAccelerationFactor() const
109                { return this->accelerationFactor_; }
110
111            /**
112            @brief Set the length of the bats.
113            @param batlength The length of the bats (in z-direction) as percentage of the height of the playing field.
114            */
115            void setBatLength(float batlength)
116                { this->batlength_ = batlength; }
117            /**
118            @brief Get the length of the bats.
119            @return Returns the length of the bats (in z-direction) as percentage of the height of the playing field.
120            */
121            float getBatLength() const
122                { return this->batlength_; }
123
124
125            void Bounce(OrxoBloxStones* otherObject);
126            void Collides(OrxoBloxStones* otherObject);
127
128            static const float MAX_REL_Z_VELOCITY;
129
130            void setDefScoreSound(const std::string& engineSound);
131            const std::string& getDefScoreSound();
132            void setDefBatSound(const std::string& engineSound);
133            const std::string& getDefBatSound();
134            void setDefBoundarySound(const std::string& engineSound);
135            const std::string& getDefBoundarySound();
136            float getRadius();
137
138
139        private:
140            void registerVariables();
141
142            OrxoBlox* getOrxoBlox();
143            float radius_;
144            float fieldWidth_; //!< The width of the playing field.
145            float fieldHeight_; //!< The height of the playing field.
146            float speed_; //!< The speed (in x-direction) of the ball.
147            float accelerationFactor_; //!< The acceleration factor of the ball.
148            float batlength_; //!< The length of the bats (in z-direction) as percentage of the height of the playing field.
149            bool bDeleteBats_; //!< Bool, to keep track, of whether this->bat_ exists or not.
150            unsigned int* batID_; //!< The object IDs of the bats, to be able to synchronize them over the network.
151            float relMercyOffset_; //!< Offset, that makes the player not loose, when, in all fairness, he would have.
152            WorldSound* defScoreSound_;
153            WorldSound* defBatSound_;
154            WorldSound* defBoundarySound_;
155            OrxoBlox* orxoblox_;
156    };
157}
158
159#endif /* _OrxoBloxBall_H__ */
Note: See TracBrowser for help on using the repository browser.