hikerstk 8247f73604 Replaced tabs with spaces.
git-svn-id: svn+ssh://svn.code.sf.net/p/supertuxkart/code/main/trunk@14448 178a84e3-b1eb-0310-8ba1-8eac791a3b58
2013-11-15 12:52:39 +00:00

109 lines
4.5 KiB
C++

//
// SuperTuxKart - a fun racing game with go-kart
// Copyright (C) 2010-2013 Joerg Henrichs
//
// 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 3
// 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
#ifndef HEADER_CONTROLLER_HPP
#define HEADER_CONTROLLER_HPP
#include <irrString.h>
using namespace irr;
/**
* \defgroup controller Karts/controller
* Contains kart controllers, which are either human players or AIs
* (this module thus contains the AIs)
*/
#include "input/input.hpp"
#include "states_screens/state_manager.hpp"
class AbstractKart;
class Item;
class KartControl;
class Material;
/** This is the base class for kart controller - that can be a player
* or a a robot.
* \ingroup controller
*/
class Controller
{
protected:
/** Pointer to the kart that is controlled by this controller. */
AbstractKart *m_kart;
/** A pointer to the main controller, from which the kart takes
* it commands. */
KartControl *m_controls;
/** If this belongs to a player, it stores the active player data
* structure. Otherwise it is 0. */
StateManager::ActivePlayer *m_player;
/** The name of the controller, mainly used for debugging purposes. */
std::string m_controller_name;
public:
Controller (AbstractKart *kart,
StateManager::ActivePlayer *player=NULL);
virtual ~Controller () {};
virtual void reset () = 0;
virtual void update (float dt) = 0;
virtual void handleZipper (bool play_sound) = 0;
virtual void collectedItem (const Item &item, int add_info=-1,
float previous_energy=0) = 0;
virtual void crashed (const AbstractKart *k) = 0;
virtual void crashed (const Material *m) = 0;
virtual void setPosition (int p) = 0;
virtual bool isPlayerController () const = 0;
virtual bool isNetworkController() const = 0;
virtual bool disableSlipstreamBonus() const = 0;
// ---------------------------------------------------------------------------
/** Sets the controller name for this controller. */
virtual void setControllerName(const std::string &name)
{ m_controller_name = name; }
// ---------------------------------------------------------------------------
/** Returns the name of this controller. */
const std::string &getControllerName() const { return m_controller_name; }
// ---------------------------------------------------------------------------
/** Returns the active player for this controller (NULL
* if this controller does not belong to a player. */
StateManager::ActivePlayer *getPlayer () {return m_player;}
// ---------------------------------------------------------------------------
/** Returns the player object (or NULL if it's a computer controller). */
const StateManager::ActivePlayer *getPlayer () const { return m_player; }
// ------------------------------------------------------------------------
/** Default: ignore actions. Only PlayerController get them. */
virtual void action(PlayerAction action, int value) = 0;
// ------------------------------------------------------------------------
/** Callback whenever a new lap is triggered. Used by the AI
* to trigger a recomputation of the way to use. */
virtual void newLap(int lap) = 0;
// ------------------------------------------------------------------------
virtual void skidBonusTriggered() = 0;
// ------------------------------------------------------------------------
/** Called whan this controller's kart finishes the last lap. */
virtual void finishedRace(float time) = 0;
// ------------------------------------------------------------------------
}; // Controller
#endif
/* EOF */