CanadianMachines / MachineLib / Instrument.h
Instrument.h
Raw
/**
 * @file Instrument.h
 * @author sriram
 *
 *
 */

#ifndef CANADIANEXPERIENCE_MACHINELIB_INSTRUMENT_H
#define CANADIANEXPERIENCE_MACHINELIB_INSTRUMENT_H

#include "Shape.h"
#include "AirSink.h"
#include <miniaudio.h>
struct ma_engine;

/**
 * base class for instruments
 */
class Instrument: public Shape
{
private:
	///is instrument hit
	bool mHit = false;

	///name
	std::wstring mName;

	///position
	wxPoint mPosition;

	/// The miniaudio engine
	ma_engine* mAudioEngine;

	/// The miniaudio sound
	ma_sound mSound;

public:

	Instrument(std::wstring resourcesDir, ma_engine* audioEngine,std::wstring sound);

	/// Default constructor
	Instrument()=delete;

	/// Copy constructor (disabled)
	Instrument(const Instrument &) = delete;

	/// Assignment operator
	void operator=(const Instrument &) = delete;

	/// destructor
	~Instrument();

	/**
	 * play sound
	 */
	void PlaySound();

	virtual void Draw(std::shared_ptr<wxGraphicsContext> graphics,double x, double y);

	/**
	 * setter for sink
	 * @param sink
	 */
	virtual void SetSink(AirSink sink){}
};

#endif //CANADIANEXPERIENCE_MACHINELIB_INSTRUMENT_H