//	OverrideBehaviour.h - Base class for pickup behaviours.
//  ----------------------------------------------------------------------------
//	This file is part of 'GameTemplate', template code for a game.
//	Copyright (C) 2011  Niall Moody
//	
//	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, see <http://www.gnu.org/licenses/>.
//	----------------------------------------------------------------------------

#ifndef OVERRIDEBEHAVIOUR_H_
#define OVERRIDEBEHAVIOUR_H_

#include "c0xHeaders.h"

#include <vector>
#include <string>
#include <stdint.h>

class Tone;
class Drawer;
typedef shared_ptr<Tone> TonePtr;
typedef shared_ptr<Drawer> DrawerPtr;

///	Base class for pickup behaviours.
class OverrideBehaviour
{
  public:
	///	Constructor.
	OverrideBehaviour(const std::wstring& icon) {};
	///	Destructor.
	virtual ~OverrideBehaviour() {};

	///	Moves the associated Tone.
	/*!
		\param tone The tone to move.
		\param allTones All the tones currently in play. This is for
		behaviours which need to know where other tones are, or add new tones
		etc.
		\param globalSpeed The current global speed.
		\param delta The frame delta (1 == 1 frame at 60fps).

		\return True if this behaviour should be deleted on return.
	 */
	virtual bool moveTone(Tone& tone,
						  std::vector<TonePtr>& allTones,
						  float globalSpeed) = 0;
	///	Draws any extra information on top of the tone image.
	virtual void drawExtraInformation(DrawerPtr& d,
									  float timestepInterp,
									  const Tone& tone) = 0;
};

#endif
