Planet
navi homePPSaboutscreenshotsdownloaddevelopmentforum

source: code/branches/OrxoBlox_FS19/src/modules/OrxoBlox/OrxoBloxCenterpoint.h @ 12337

Last change on this file since 12337 was 12307, checked in by ahuwyler, 6 years ago

A Stone is in the game/ Templates are ajusted

File size: 11.8 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 OrxoBloxCenterpoint.h
31    @brief Declaration of the OrxoBloxCenterpoint class.
32    @ingroup OrxoBlox
33*/
34
35#ifndef _OrxoBloxCenterpoint_H__
36#define _OrxoBloxCenterpoint_H__
37
38#include "OrxoBlox/OrxoBloxPrereqs.h"
39
40#include <string>
41
42#include <util/Math.h>
43
44#include "worldentities/StaticEntity.h"
45
46namespace orxonox
47{
48   
49    /**
50    @brief
51        The OrxoBloxCenterpoint implements the playing field @ref orxonox::OrxoBlox "OrxoBlox" takes place in and allows for many parameters of the minigame to be set.
52        The playing field resides in the x,z-plane, with the x-axis being the horizontal axis and the z-axis being the vertical axis.
53       
54        Various parameters can be set:
55        - The <b>dimension</b> is a vector, that defines the width and height of the playing field. The default is <em>(200, 120)</em>.
56        - The <b>balltemplate</b> is a template that is applied to the @ref orxonox::OrxoBloxBall "OrxoBloxBall", it can be used to attach different things to it, e.g. its @ref orxonox::Model "Model". See below for a usage example.
57        - The <b>battemplate</b> is a template that is applied to the @ref orxonox::OrxoBloxBall "OrxoBloxBat", it can be used to attach different things to it, e.g. its @ref orxonox::Model "Model". See below for a usage example.
58        - The <b>ballspeed</b> is the speed with which the @ref orxonox::OrxoBloxBall "OrxoBloxBall" moves. The default is <em>100</em>.
59        - The <b>ballaccfactor</b> is the acceleration factor for the @ref orxonox::OrxoBloxBall "OrxoBloxBall". The default is <em>1.0</em>.
60        - The <b>batspeed</b> is the speed with which the @ref orxonox::OrxoBloxBat "OrxoBloxBats" move. The default is <em>60</em>.
61        - The <b>batlength</b> is the length of the @ref orxonox::OrxoBloxBat "OrxoBloxBats" as the percentage of the height of the playing field. The default is <em>0.25</em>.
62       
63        An example in XML of the OrxoBloxCenterpoint would be:
64       
65        First the needed templates:
66        The template for the @ref orxonox::OrxoBloxBall "OrxoBloxBall".
67        @code
68        <Template name="OrxoBloxball">
69          <OrxoBloxBall>
70            <attached>
71              <Model mesh="sphere.mesh" scale="2" />
72              <ParticleSpawner name="hiteffect" position="0,0,0" source="Orxonox/sparks2" lifetime="0.01" autostart="0" mainstate="spawn" />
73            </attached>
74            <eventlisteners>
75              <EventTarget target="hiteffect" />
76            </eventlisteners>
77          </OrxoBloxBall>
78        </Template>
79        @endcode
80        As can be seen, a sphere is attached as the @ref orxonox::Model "Model" for the @ref orxonox::OrxoBloxBall "OrxoBloxBall", and also an @ref orxonox::EventListener "EventListener" that triggers a @ref orxonox::ParticleSpawner "ParticleSpawner", whenever the ball hits the boundaries is attached.
81       
82        Additionally the template for the @ref orxonox::OrxoBloxBat "OrxoBloxBat".
83        @code
84        <Template name="OrxoBloxbatcameras" defaults="0">
85          <OrxoBloxBat>
86            <camerapositions>
87              <CameraPosition position="0,200,0" pitch="-90" absolute="true" />
88            </camerapositions>
89          </OrxoBloxBat>
90        </Template>
91
92        <Template name="OrxoBloxbat">
93          <OrxoBloxBat camerapositiontemplate=OrxoBloxbatcameras>
94            <attached>
95              <Model position="0,0,3" mesh="cube.mesh" scale3D="14,2,2" />
96            </attached>
97          </OrxoBloxBat>
98        </Template>
99        @endcode
100        As can be seen, there are actually two templates. The first template is needed to set the camera for the @ref orxonox::OrxoBloxBat "OrxoBloxBat". The second template ist the actual template for the @ref orxonox::OrxoBloxBat "OrxoBloxBat", the template for the camera position is added and a @ref orxonox::Model "Model" for the @ref orxonox::OrxoBloxBat "OrxoBloxBat" is attached.
101       
102        Finally the OrxoBloxCenterpoint is created.
103        @code
104        <OrxoBloxCenterpoint name="OrxoBloxcenter" dimension="200,120" balltemplate="OrxoBloxball" battemplate="OrxoBloxbat" ballspeed="200" ballaccfactor="1.0" batspeed="130" batlength="0.25">
105          <attached>
106            <Model position="0,0,60" mesh="cube.mesh" scale3D="105,1,1" />
107            <Model position="0,0,-60" mesh="cube.mesh" scale3D="105,1,1" />
108          </attached>
109        </OrxoBloxCenterpoint>
110        @endcode
111        All parameters are specified. And also two @ref orxonox::Model "Models" (for the upper and lower boundary) are attached.
112       
113        For a more elaborate example, have a look at the <code>OrxoBlox.oxw</code> level file.
114   
115    @author
116        Fabian 'x3n' Landau
117       
118    @ingroup OrxoBlox
119    */
120    class _OrxoBloxExport OrxoBloxCenterpoint : public StaticEntity
121    {
122        public:
123            OrxoBloxCenterpoint(Context* context); //!< Constructor. Registers and initializes the object and checks whether the gametype is actually OrxoBlox.
124            virtual ~OrxoBloxCenterpoint() {}
125
126            virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode) override; //!< Method to create a OrxoBloxCenterpoint through XML.
127
128            /**
129            @brief Set the template for the ball. (e.g. to attach the model of the ball, but also to attach an EventListener to it to detect, when it hits the boundaries, and e.g. display some ParticleEffets, when it does.)
130            @param balltemplate The name of the template to be set.
131            */
132            void setBalltemplate(const std::string& balltemplate)
133                { this->balltemplate_ = balltemplate; }
134            /**
135            @brief Get the template of the ball.
136            @return Returns the name of the template of the ball.
137            */
138            const std::string& getBalltemplate() const
139                { return this->balltemplate_; }
140
141            /**
142            @brief Set the template for the bats. (e.g. to attach the model of the bat, but also to attach CameraPositions to it, to be able to view the game from the bats perspective)
143            @param battemplate The name of the template to be set.
144            */
145            void setBattemplate(const std::string& battemplate)
146                { this->battemplate_ = battemplate; }
147            /**
148            @brief Get the template of the bats.
149            @return Returns the name of the template of the bats.
150            */
151            const std::string& getBattemplate() const
152                { return this->battemplate_; }
153
154            /**
155            @brief Set the dimensions of the playing field.
156            @param dimension A vector with the width of the playing field as first component and the height as second.
157            */
158            void setFieldDimension(const Vector2& dimension)
159                { this->width_ = dimension.x; this->height_ = dimension.y; }
160            /**
161            @brief Get the dimensions of the playing field.
162            @return Returns a vector with the width of the playing field as first component and the height as second.
163            */
164            Vector2 getFieldDimension() const
165                { return Vector2(this->width_, this->height_); }
166
167            /**
168            @brief Set the speed of the ball.
169            @param ballspeed The speed of the ball.
170            */
171            void setBallSpeed(float ballspeed)
172                { this->ballspeed_ = ballspeed; }
173            /**
174            @brief Get the speed of the ball.
175            @return Returns the speed of the ball.
176            */
177            float getBallSpeed() const
178                { return this->ballspeed_; }
179
180            /**
181            @brief Set the ball's acceleration factor.
182            @param ballaccfactor The ball's acceleration factor.
183            */
184            void setBallAccelerationFactor(float ballaccfactor)
185                { this->ballaccfactor_ = ballaccfactor; }
186            /**
187            @brief Get the ball's acceleration factor
188            @return Returns the ball's acceleration factor.
189            */
190            float getBallAccelerationFactor() const
191                { return this->ballaccfactor_; }
192
193            /**
194            @brief Set the speed of the bats.
195            @param batspeed The speed of the bats.
196            */
197            void setBatSpeed(float batspeed)
198                { this->batspeed_ = batspeed; }
199            /**
200            @brief Get the speed of the bats.
201            @return Returns the speed of the bats.
202            */
203            float getBatSpeed() const
204                { return this->batspeed_; }
205
206            /**
207            @brief Set the length of the bats.
208            @param batlength The length of the bats (in z-direction) as a percentage of the height of the playing field.
209            */
210            void setBatLength(float batlength)
211                { this->batlength_ = batlength; }
212            /**
213            @brief Get the length of the bats.
214            @return Returns the length of the bats (in z-direction) as a percentage of the height of the playing field.
215            */
216            float getBatLength() const
217                { return this->batlength_; }
218
219            /**
220            @brief Set the template for the stones.
221            @param templateName The template name to be applied to each stone.
222            */
223            void setStoneTemplate(const std::string& templateName)
224                { this->stoneTemplate_ = templateName; }
225            /**
226            @brief Get the template for the stones.
227            @return Returns the template name to be applied to each stone.
228            */
229            const std::string& getStoneTemplate(void) const
230                { return this->stoneTemplate_; }
231           
232
233            /**
234            @brief Set the template for the bricks.
235            @param templateName The template name to be applied to each brick.
236            */
237            void setWallTemplate(const std::string& templateName)
238                { this->WallTemplate_ = templateName; }
239
240            /**
241            @brief Get the template for the bricks.
242            @return Returns the template name to be applied to each brick.
243            */
244            const std::string& getWallTemplate(void) const
245                { return this->WallTemplate_; }
246
247
248        private:
249            void checkGametype(); //!< Checks whether the gametype is OrxoBlox and if it is, sets its centerpoint.
250
251            std::string balltemplate_; //!< The template for the ball.
252            std::string battemplate_; //!< The template for the bats.
253            std::string WallTemplate_;
254            std::string stoneTemplate_;
255
256            float ballspeed_; //!< The speed of then ball.
257            float ballaccfactor_; //!< The acceleration factor of the ball.
258            float batspeed_; //!< The speed of the bat.
259            float batlength_; //!< The length of the bat (in z-direction) as a percentage of the height of the playing field.
260
261            float width_; //!< The height of the playing field.
262            float height_; //!< The width of the playing field.
263
264           
265    };
266}
267
268#endif /* _OrxoBloxCenterpoint_H__ */
Note: See TracBrowser for help on using the repository browser.