[Orxonox-commit 3563] r8249 - in code/branches/tetris/src/modules: . tetris
dafrick at orxonox.net
dafrick at orxonox.net
Mon Apr 18 12:50:02 CEST 2011
Author: dafrick
Date: 2011-04-18 12:50:01 +0200 (Mon, 18 Apr 2011)
New Revision: 8249
Added:
code/branches/tetris/src/modules/tetris/
code/branches/tetris/src/modules/tetris/CMakeLists.txt
code/branches/tetris/src/modules/tetris/Tetris.cc
code/branches/tetris/src/modules/tetris/Tetris.h
code/branches/tetris/src/modules/tetris/TetrisCenterpoint.cc
code/branches/tetris/src/modules/tetris/TetrisCenterpoint.h
code/branches/tetris/src/modules/tetris/TetrisPrereqs.h
code/branches/tetris/src/modules/tetris/TetrisStone.cc
code/branches/tetris/src/modules/tetris/TetrisStone.h
Log:
Re-adding tetris module.
Added: code/branches/tetris/src/modules/tetris/CMakeLists.txt
===================================================================
--- code/branches/tetris/src/modules/tetris/CMakeLists.txt (rev 0)
+++ code/branches/tetris/src/modules/tetris/CMakeLists.txt 2011-04-18 10:50:01 UTC (rev 8249)
@@ -0,0 +1,13 @@
+SET_SOURCE_FILES(TETRIS_SRC_FILES
+ Tetris.cc
+ TetrisCenterpoint.cc
+ TetrisStone.cc
+)
+
+ORXONOX_ADD_LIBRARY(tetris
+ MODULE
+ FIND_HEADER_FILES
+ LINK_LIBRARIES
+ orxonox
+ SOURCE_FILES ${TETRIS_SRC_FILES}
+)
Added: code/branches/tetris/src/modules/tetris/Tetris.cc
===================================================================
--- code/branches/tetris/src/modules/tetris/Tetris.cc (rev 0)
+++ code/branches/tetris/src/modules/tetris/Tetris.cc 2011-04-18 10:50:01 UTC (rev 8249)
@@ -0,0 +1,233 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * ...
+ * Co-authors:
+ * ...
+ *
+ */
+
+/**
+ @file Tetris.cc
+ @brief Implementation of the Tetris class.
+*/
+
+#include "Tetris.h"
+
+#include "core/CoreIncludes.h"
+#include "core/EventIncludes.h"
+#include "core/command/Executor.h"
+
+#include "gamestates/GSLevel.h"
+
+#include "TetrisCenterpoint.h"
+#include "TetrisStone.h"
+#include "infos/PlayerInfo.h"
+
+namespace orxonox
+{
+
+ CreateUnloadableFactory(Tetris);
+
+ /**
+ @brief
+ Constructor. Registers and initializes the object.
+ */
+ Tetris::Tetris(BaseObject* creator) : Deathmatch(creator)
+ {
+ RegisterObject(Tetris);
+
+ this->activeStone_ = NULL;
+
+ // Pre-set the timer, but don't start it yet.
+ this->starttimer_.setTimer(1.0, false, createExecutor(createFunctor(&Tetris::startStone, this)));
+ this->starttimer_.stopTimer();
+ }
+
+ /**
+ @brief
+ Destructor. Cleans up, if initialized.
+ */
+ Tetris::~Tetris()
+ {
+ if (this->isInitialized())
+ this->cleanup();
+ }
+
+ /**
+ @brief
+ Cleans up the Gametype.
+ */
+ void Tetris::cleanup()
+ {
+
+ }
+
+ void Tetris::tick(float dt)
+ {
+ SUPER(Tetris, tick, dt);
+
+ TetrisStone* stone = this->activeStone_;
+ if(stone != NULL)
+ {
+ Vector3 position = stone->getPosition();
+ if(position.x < this->center_->getStoneSize()/2.0)
+ position.x = this->center_->getStoneSize()/2.0;
+ else if(position.x > (this->center_->getWidth()-0.5)*this->center_->getStoneSize())
+ position.x = (this->center_->getWidth()-0.5)*this->center_->getStoneSize();
+
+ if(position.y < this->center_->getStoneSize()/2.0)
+ {
+ position.y = this->center_->getStoneSize()/2.0;
+ stone->setVelocity(Vector3::ZERO);
+ this->createStone();
+ this->startStone();
+ }
+
+ stone->setPosition(position);
+ }
+ }
+
+ /**
+ @brief
+ Starts the Tetris minigame.
+ */
+ void Tetris::start()
+ {
+ if (this->center_ != NULL) // There needs to be a TetrisCenterpoint, i.e. the area the game takes place.
+ {
+ // Create the first stone.
+ this->createStone();
+ }
+ else // If no centerpoint was specified, an error is thrown and the level is exited.
+ {
+ COUT(1) << "Error: No Centerpoint specified." << std::endl;
+ GSLevel::startMainMenu();
+ return;
+ }
+
+ // Start the timer. After it has expired the ball is started.
+ this->starttimer_.startTimer();
+
+ // Set variable to temporarily force the player to spawn.
+ bool temp = this->bForceSpawn_;
+ this->bForceSpawn_ = true;
+
+ // Call start for the parent class.
+ Deathmatch::start();
+
+ // Reset the variable.
+ this->bForceSpawn_ = temp;
+ }
+
+ /**
+ @brief
+ Ends the Tetris minigame.
+ */
+ void Tetris::end()
+ {
+ this->cleanup();
+
+ // Call end for the parent class.
+ Deathmatch::end();
+ }
+
+ /**
+ @brief
+ Spawns player.
+ */
+ void Tetris::spawnPlayersIfRequested()
+ {
+ // Spawn a human player.
+ for (std::map<PlayerInfo*, Player>::iterator it = this->players_.begin(); it != this->players_.end(); ++it)
+ if (it->first->isHumanPlayer() && (it->first->isReadyToSpawn() || this->bForceSpawn_))
+ this->spawnPlayer(it->first);
+ }
+
+ /**
+ @brief
+ Spawns the input player.
+ @param player
+ The player to be spawned.
+ */
+ void Tetris::spawnPlayer(PlayerInfo* player)
+ {
+ assert(player);
+
+ if(this->player_ != NULL)
+ {
+ this->player_ = player;
+ this->players_[player].state_ = PlayerState::Alive;
+ }
+ }
+
+ /**
+ @brief
+ Starts the first stone.
+ */
+ void Tetris::startStone(void)
+ {
+ if(this->player_ == NULL)
+ return;
+
+ if(this->activeStone_ != NULL)
+ this->player_->stopControl();
+
+ // Make the last stone to be created the active stone.
+ this->activeStone_ = this->stones_.back();
+
+ this->player_->startControl(this->activeStone_);
+ this->activeStone_->setVelocity(0.0f, -this->center_->getStoneSpeed(), 0.0f);
+ }
+
+ /**
+ @brief
+ Creates a new stone.
+ */
+ void Tetris::createStone(void)
+ {
+ // Create a new stone and add it to the list of stones.
+ TetrisStone* stone = new TetrisStone(this->center_);
+ this->stones_.push_back(stone);
+
+ // Apply the stone template to the stone.
+ stone->addTemplate(this->center_->getStoneTemplate());
+
+ // Attach the stone to the Centerpoint and set the position of the stone to be at the top middle.
+ this->center_->attach(stone);
+ float xPos = (this->center_->getWidth()/2 + ((this->center_->getWidth() % 2)*2-1)/2.0)*this->center_->getStoneSize();
+ float yPos = (this->center_->getHeight()-0.5)*this->center_->getStoneSize();
+ stone->setPosition(xPos, yPos, 0.0f);
+ }
+
+ /**
+ @brief
+ Get the player.
+ @return
+ Returns a pointer to the player. If there is no player, NULL is returned.
+ */
+ PlayerInfo* Tetris::getPlayer(void) const
+ {
+ return this->player_;
+ }
+
+}
Added: code/branches/tetris/src/modules/tetris/Tetris.h
===================================================================
--- code/branches/tetris/src/modules/tetris/Tetris.h (rev 0)
+++ code/branches/tetris/src/modules/tetris/Tetris.h 2011-04-18 10:50:01 UTC (rev 8249)
@@ -0,0 +1,93 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * ...
+ * Co-authors:
+ * ...
+ *
+ */
+
+/**
+ @file Tetris.h
+ @brief Declaration of the Tetris class.
+ @ingroup Tetris
+*/
+
+#ifndef _Tetris_H__
+#define _Tetris_H__
+
+#include "tetris/TetrisPrereqs.h"
+
+#include "tools/Timer.h"
+
+#include "gametypes/Deathmatch.h"
+
+namespace orxonox
+{
+
+ /**
+ @brief
+
+ @author
+
+ @ingroup Tetris
+ */
+ class _TetrisExport Tetris : public Deathmatch
+ {
+ public:
+ Tetris(BaseObject* creator); //!< Constructor. Registers and initializes the object.
+ virtual ~Tetris(); //!< Destructor. Cleans up, if initialized.
+
+ virtual void tick(float dt);
+
+ virtual void start(void); //!< Starts the Tetris minigame.
+ virtual void end(void); ///!< Ends the Tetris minigame.
+
+ virtual void spawnPlayer(PlayerInfo* player); //!< Spawns the input player.
+
+ /**
+ @brief Set the TetrisCenterpoint (the playing field).
+ @param center A pointer to the TetrisCenterpoint to be set.
+ */
+ void setCenterpoint(TetrisCenterpoint* center)
+ { this->center_ = center; }
+
+ PlayerInfo* getPlayer(void) const; //!< Get the player.
+
+ protected:
+ virtual void spawnPlayersIfRequested(); //!< Spawns player.
+
+ void startStone(void); //!< Starts with the first stone.
+ void createStone(void);
+ void cleanup(void); //!< Cleans up the Gametype by destroying the ball and the bats.
+
+ PlayerInfo* player_;
+
+ WeakPtr<TetrisCenterpoint> center_; //!< The playing field.
+ std::vector<TetrisStone*> stones_; //!< A list of all stones in play.
+ TetrisStone* activeStone_;
+
+ Timer starttimer_; //!< A timer to delay the start of the game.
+ };
+}
+
+#endif /* _Tetris_H__ */
Added: code/branches/tetris/src/modules/tetris/TetrisCenterpoint.cc
===================================================================
--- code/branches/tetris/src/modules/tetris/TetrisCenterpoint.cc (rev 0)
+++ code/branches/tetris/src/modules/tetris/TetrisCenterpoint.cc 2011-04-18 10:50:01 UTC (rev 8249)
@@ -0,0 +1,101 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * ...
+ * Co-authors:
+ * ...
+ *
+ */
+
+/**
+ @file TetrisCenterpoint.cc
+ @brief Implementation of the TetrisCenterpoint class.
+*/
+
+#include "TetrisCenterpoint.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+
+#include "Tetris.h"
+
+namespace orxonox
+{
+ CreateFactory(TetrisCenterpoint);
+
+ /**
+ @brief
+ Constructor. Registers and initializes the object and checks whether the gametype is actually Tetris.
+ */
+ TetrisCenterpoint::TetrisCenterpoint(BaseObject* creator) : StaticEntity(creator)
+ {
+ RegisterObject(TetrisCenterpoint);
+
+ this->width_ = 10;
+ this->height_ = 11;
+ this->stoneSize_ = 10.0f;
+ this->stoneTemplate_ = "";
+ this->stoneSpeed_ = 20.0f;
+
+ this->checkGametype();
+ }
+
+ /**
+ @brief
+ Method to create a TetrisCenterpoint through XML.
+ */
+ void TetrisCenterpoint::XMLPort(Element& xmlelement, XMLPort::Mode mode)
+ {
+ SUPER(TetrisCenterpoint, XMLPort, xmlelement, mode);
+
+ XMLPortParam(TetrisCenterpoint, "width", setWidth, getWidth, xmlelement, mode);
+ XMLPortParam(TetrisCenterpoint, "height", setHeight, setWidth, xmlelement, mode);
+ XMLPortParam(TetrisCenterpoint, "stoneSize", setStoneSize, getStoneSize, xmlelement, mode);
+ XMLPortParam(TetrisCenterpoint, "stoneTemplate", setStoneTemplate, getStoneTemplate, xmlelement, mode);
+ XMLPortParam(TetrisCenterpoint, "stoneSpeed", setStoneSpeed, getStoneSpeed, xmlelement, mode);
+ }
+
+ /**
+ @brief
+ Is called when the gametype has changed.
+ */
+ void TetrisCenterpoint::changedGametype()
+ {
+ SUPER(TetrisCenterpoint, changedGametype);
+
+ // Check, whether it's still Tetris.
+ this->checkGametype();
+ }
+
+ /**
+ @brief
+ Checks whether the gametype is Tetris and if it is, sets its centerpoint.
+ */
+ void TetrisCenterpoint::checkGametype()
+ {
+ if (this->getGametype() != NULL && this->getGametype()->isA(Class(Tetris)))
+ {
+ Tetris* tetrisGametype = orxonox_cast<Tetris*>(this->getGametype().get());
+ tetrisGametype->setCenterpoint(this);
+ }
+ }
+}
Added: code/branches/tetris/src/modules/tetris/TetrisCenterpoint.h
===================================================================
--- code/branches/tetris/src/modules/tetris/TetrisCenterpoint.h (rev 0)
+++ code/branches/tetris/src/modules/tetris/TetrisCenterpoint.h 2011-04-18 10:50:01 UTC (rev 8249)
@@ -0,0 +1,144 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * ...
+ * Co-authors:
+ * ...
+ *
+ */
+
+/**
+ @file TetrisCenterpoint.h
+ @brief Declaration of the TetrisCenterpoint class.
+ @ingroup Tetris
+*/
+
+#ifndef _TetrisCenterpoint_H__
+#define _TetrisCenterpoint_H__
+
+#include "tetris/TetrisPrereqs.h"
+
+#include <string>
+
+#include <util/Math.h>
+
+#include "worldentities/StaticEntity.h"
+
+namespace orxonox
+{
+
+ /**
+ @brief
+
+
+ @author
+
+ @ingroup Tetris
+ */
+ class _TetrisExport TetrisCenterpoint : public StaticEntity
+ {
+ public:
+ TetrisCenterpoint(BaseObject* creator); //!< Constructor. Registers and initializes the object and checks whether the gametype is actually Tetris.
+ virtual ~TetrisCenterpoint() {}
+
+ virtual void XMLPort(Element& xmlelement, XMLPort::Mode mode); //!< Method to create a TetrisCenterpoint through XML.
+
+ virtual void changedGametype(); //!< Is called when the gametype has changed.
+
+ /**
+ @brief Set the width of the playing field.
+ @param width The width in number of tiles.
+ */
+ void setWidth(unsigned int width)
+ { this->width_ = width; }
+ /**
+ @brief Get the width of the playing field.
+ @return Returns the width in number of tiles.
+ */
+ unsigned int getWidth(void) const
+ { return this->width_; }
+
+ /**
+ @brief Set the height of the playing field.
+ @param height The height in number of tiles.
+ */
+ void setHeight(unsigned int height)
+ { this->height_ = height; }
+ /**
+ @brief Get the height of the playing field.
+ @return Returns the height in number of tiles.
+ */
+ unsigned int getHeight(void) const
+ { return this->height_; }
+
+ /**
+ @brief Set the size of a single stone.
+ @param size The dimensions a stone has in the game world. (A stone is a cube)
+ */
+ void setStoneSize(float size)
+ { this->stoneSize_ = size; }
+ /**
+ @brief Get the size of a single stone.
+ @return Returns the dimensions a stone has in the game world.
+ */
+ float getStoneSize(void) const
+ { return this->stoneSize_; }
+
+ /**
+ @brief Set the template for the stones.
+ @param template The template name to be applied to each stone.
+ */
+ void setStoneTemplate(const std::string& templateName)
+ { this->stoneTemplate_ = templateName; }
+ /**
+ @brief Get the template for the stones.
+ @return Returns the template name to be applied to each stone.
+ */
+ const std::string& getStoneTemplate(void) const
+ { return this->stoneTemplate_; }
+
+ /**
+ @brief Set the speed of the stones.
+ @param speed The speed to be set.
+ */
+ void setStoneSpeed(float speed)
+ { this->stoneSpeed_ = speed; }
+ /**
+ @brief Get the speed of the stones.
+ @return Returns the speed a moving stone has.
+ */
+ float getStoneSpeed(void)
+ { return this->stoneSpeed_; }
+
+ private:
+ void checkGametype(); //!< Checks whether the gametype is Tetris and if it is, sets its centerpoint.
+
+ unsigned int width_;
+ unsigned int height_;
+ float stoneSize_;
+ std::string stoneTemplate_;
+ float stoneSpeed_;
+
+ };
+}
+
+#endif /* _TetrisCenterpoint_H__ */
Added: code/branches/tetris/src/modules/tetris/TetrisPrereqs.h
===================================================================
--- code/branches/tetris/src/modules/tetris/TetrisPrereqs.h (rev 0)
+++ code/branches/tetris/src/modules/tetris/TetrisPrereqs.h 2011-04-18 10:50:01 UTC (rev 8249)
@@ -0,0 +1,72 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * Reto Grieder
+ * Co-authors:
+ * ...
+ *
+ */
+
+/**
+ at file
+ at brief
+ Shared library macros, enums, constants and forward declarations for the tetris module
+*/
+
+#ifndef _TetrisPrereqs_H__
+#define _TetrisPrereqs_H__
+
+#include "OrxonoxConfig.h"
+#include "OrxonoxPrereqs.h"
+
+//-----------------------------------------------------------------------
+// Shared library settings
+//-----------------------------------------------------------------------
+
+#if defined(ORXONOX_PLATFORM_WINDOWS) && !defined(TETRIS_STATIC_BUILD)
+# ifdef TETRIS_SHARED_BUILD
+# define _TetrisExport __declspec(dllexport)
+# else
+# if defined( __MINGW32__ )
+# define _TetrisExport
+# else
+# define _TetrisExport __declspec(dllimport)
+# endif
+# endif
+#elif defined ( ORXONOX_GCC_VISIBILITY )
+# define _TetrisExport __attribute__ ((visibility("default")))
+#else
+# define _TetrisExport
+#endif
+
+//-----------------------------------------------------------------------
+// Forward declarations
+//-----------------------------------------------------------------------
+
+namespace orxonox
+{
+ class Tetris;
+ class TetrisCenterpoint;
+ class TetrisStone;
+}
+
+#endif /* _TetrisPrereqs_H__ */
Added: code/branches/tetris/src/modules/tetris/TetrisStone.cc
===================================================================
--- code/branches/tetris/src/modules/tetris/TetrisStone.cc (rev 0)
+++ code/branches/tetris/src/modules/tetris/TetrisStone.cc 2011-04-18 10:50:01 UTC (rev 8249)
@@ -0,0 +1,92 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * ...
+ * Co-authors:
+ * ...
+ *
+ */
+
+/**
+ @file TetrisStone.cc
+ @brief Implementation of the TetrisStone class.
+*/
+
+#include "TetrisStone.h"
+
+#include "core/CoreIncludes.h"
+#include "core/XMLPort.h"
+
+namespace orxonox
+{
+ CreateFactory(TetrisStone);
+
+ /**
+ @brief
+ Constructor. Registers and initializes the object.
+ */
+ TetrisStone::TetrisStone(BaseObject* creator) : ControllableEntity(creator)
+ {
+ RegisterObject(TetrisStone);
+
+ this->size_ = 10.0f;
+ this->delay_ = false;
+ this->delayTimer_.setTimer(0.2f, false, createExecutor(createFunctor(&TetrisStone::enableMovement, this)));
+ }
+
+ /**
+ @brief
+ Overloaded the function to rotate the stone.
+ @param value
+ A vector whose first component is the angle by which to rotate.
+ */
+ void TetrisStone::moveFrontBack(const Vector2& value)
+ {
+
+ }
+
+ /**
+ @brief
+ Overloaded the function to steer the stone right and left
+ @param value
+ A vector whose first component is the direction in which we want to steer the stone.
+ */
+ void TetrisStone::moveRightLeft(const Vector2& value)
+ {
+ if(!this->delay_)
+ {
+ const Vector3& position = this->getPosition();
+ this->setPosition(position.x+value.x/abs(value.x)*this->size_, position.y, position.z);
+ this->delay_ = true;
+ this->delayTimer_.startTimer();
+ }
+ }
+
+ /**
+ @brief
+ Is called when the player changed.
+ */
+ void TetrisStone::changedPlayer()
+ {
+ this->setVelocity(0, 0, 0);
+ }
+}
Added: code/branches/tetris/src/modules/tetris/TetrisStone.h
===================================================================
--- code/branches/tetris/src/modules/tetris/TetrisStone.h (rev 0)
+++ code/branches/tetris/src/modules/tetris/TetrisStone.h 2011-04-18 10:50:01 UTC (rev 8249)
@@ -0,0 +1,87 @@
+/*
+ * ORXONOX - the hottest 3D action shooter ever to exist
+ * > www.orxonox.net <
+ *
+ *
+ * License notice:
+ *
+ * This program is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU General Public License
+ * as published by the Free Software Foundation; either version 2
+ * of the License, or (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
+ *
+ * Author:
+ * ...
+ * Co-authors:
+ * ...
+ *
+ */
+
+/**
+ @file TetrisStone.h
+ @brief Declaration of the TetrisStone class.
+ @ingroup Tetris
+*/
+
+#ifndef _TetrisStone_H__
+#define _TetrisStone_H__
+
+#include "tetris/TetrisPrereqs.h"
+
+#include "worldentities/ControllableEntity.h"
+#include "tools/Timer.h"
+
+namespace orxonox
+{
+
+ /**
+ @brief
+
+ @author
+
+ @ingroup Tetris
+ */
+ class _TetrisExport TetrisStone : public ControllableEntity
+ {
+ public:
+ TetrisStone(BaseObject* creator); //!< Constructor. Registers and initializes the object.
+ virtual ~TetrisStone() {}
+
+ virtual void moveFrontBack(const Vector2& value); //!< Overloaded the function to steer the bat up and down.
+ virtual void moveRightLeft(const Vector2& value); //!< Overloaded the function to steer the bat up and down.
+
+ virtual void changedPlayer(); //!< Is called when the player changed.
+
+ /**
+ @brief Set the size of the stone.
+ @param size The dimensions a stone has in the game world. (A stone is a cube)
+ */
+ void setSize(float size)
+ { this->size_ = size; }
+ /**
+ @brief Get the size of the stone.
+ @return Returns the dimensions a stone has in the game world. (A stone is a cube)
+ */
+ float getSize(void) const
+ { return this->size_; }
+
+ private:
+ void enableMovement(void)
+ { this->delay_ = false; }
+
+ float size_; //!< The dimensions a stone has in the game world.
+ bool delay_;
+ Timer delayTimer_;
+ };
+}
+
+#endif /* _TetrisStone_H__ */
More information about the Orxonox-commit
mailing list