#ifndef SIMULATOR_H
#define SIMULATOR_H
#include <algorithm>
#include "track.h"
#include "raster.h"
#include "tool.h"
class Simulator {
public:
virtual ~Simulator() { }
virtual void simulate(const Track &track, const Tool &tool) = 0;
virtual void scroll_to(int index) = 0;
virtual void draw() const = 0;
};
class SimulatorXYZ: public Simulator {
private:
TouchPointList points;
int simu_index;
public:
FlatRaster raster;
explicit SimulatorXYZ(int xpixels = 0, int ypixels = 0):
simu_index(), raster(xpixels, ypixels, 0, 0, 0, 0, 0, 0) { }
const TouchPointList& get_points() const { return points; }
int get_simu_index() const { return simu_index; }
int get_index() const { return simu_index <= 0 ? -1 : points[simu_index-1].index; }
void simulate(const Track &track, const Tool &tool) override;
void scroll_to(int index) override;
void draw() const override
{ raster.draw(); }
};
class SimulatorXYZA: public Simulator {
private:
TouchPointList points;
int simu_index;
public:
PolarRaster raster;
explicit SimulatorXYZA(int xpixels = 0, int ypixels = 0):
simu_index(), raster(xpixels, ypixels, 0, 0, 0, 0) { }
const TouchPointList& get_points() const { return points; }
int get_simu_index() const { return simu_index; }
int get_index() const { return simu_index <= 0 ? -1 : points[simu_index-1].index; }
void simulate(const Track &track, const Tool &tool) override;
void scroll_to(int index) override;
void draw() const override
{ raster.draw(); }
};
#endif