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

#ifndef CANADIANEXPERIENCE_MACHINELIB_CARDREADER_H
#define CANADIANEXPERIENCE_MACHINELIB_CARDREADER_H

#include "Shape.h"
#include "Polygon.h"
#include "AirSource.h"
#include <cmath>

/**
 * card reader that reads card
 */
class CardReader: public Shape
{
private:
	///front polygon
	cse335::Polygon mFront;

	///back polygon
	cse335::Polygon mBack;

	///roattion factor
	double mRotateFactor;

	///card
	cse335::Polygon mCard;

	///beats per minute
	int mBeatsPerMinute = 180;

	/// The air sources to drive things
	std::vector<std::shared_ptr<AirSource>> mSources;

	///time
	double mTime=-1.0;

	///current column
	int mColumn=0;

public:

	CardReader(std::wstring resourcesDir);
	
	/// Default constructor (disabled)
	CardReader() = delete;

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

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

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

	void SetTime(double time) override;

	void SetPosition(double x, double y) override;

	bool IsPunched(int column, int row);

	void SetCard(std::wstring imagePath);

	/**
	* Get an air source.
	* @param i Source index 0-9
	* @return Pointer to AirSource object.
   */
	std::shared_ptr<AirSource> GetSource(int i) { return mSources[i];}

	void SendPressure(double pressure);
};

#endif //CANADIANEXPERIENCE_MACHINELIB_CARDREADER_H