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

#ifndef CANADIANEXPERIENCE_MACHINELIB_MACHINE_H
#define CANADIANEXPERIENCE_MACHINELIB_MACHINE_H

class Drawable;
class Component;

/**
 * machine
 */
class Machine
{
private:
	///time
	double mTime;

	/// The machine number
	int  mNumber;

	/// The root drawable
	std::shared_ptr<Drawable> mRoot;

	/// The components of the machine
	std::vector<std::shared_ptr<Component>> mComponents;

public:

	///destructor
	virtual ~Machine() {}

	/// Constructor
	Machine(const int num);

	/** Default constructor disabled */
	Machine() = delete;

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

	/// Assignment operator/disabled
	void operator=(const Machine&) = delete;

	/**
	* Draw the machine at the currently specified location
	* @param graphics Graphics object to render to
	 * @param x
	 * @param y
	*/
	void Draw(std::shared_ptr<wxGraphicsContext> graphics, double x, double y);

	/**
	 * add component to component list
	 * @param component
	 */
	void AddComponent(std::shared_ptr<Component> component);

	/**
	 * updates the components
	 */
	void Update();

	/**
	 * setter for time
	 * @param time
	 */
	void SetTime(double time);

	/**
	 * clears list of components
	 */
	void ClearMachine();
};

#endif //CANADIANEXPERIENCE_MACHINELIB_MACHINE_H