#include <fstream>
#include <cmath>
#include <iomanip>
#include <map>
#include <string>
using namespace std;
// Base class for Emergency Units
class Unit {
protected:
string unitID;
string status;
int x, y;
double speed; // Speed of the unit (units per time)
public:
Unit(string id, int x, int y, double spd) : unitID(id), x(x), y(y), speed(spd), status("Available") {}
virtual void respondToEmergency() = 0;
double getDistance(int ex, int ey) {
return sqrt(pow(x - ex, 2) + pow(y - ey, 2));
}
bool isAvailable() { return status == "Available"; }
void markBusy() { status = "Busy"; }
void markAvailable() { status = "Available"; }
string getID() const { return unitID; }
, virtual void displayInfo() const = 0;
virtual string getUnitType() const = 0;
double estimatedTime(int ex, int ey) {
return getDistance(ex, ey) / speed; // Time = Distance / Speed
}
friend ostream& operator<<(ostream& os, const Unit& u);
};
ostream& operator<<(ostream& os, const Unit& u) {
os << "Unit ID: " << u.unitID << ", Status: " << u.status;
return os;
}
class Police : public Unit {
public:
Police(string id, int x, int y, double spd) : Unit(id, x, y, spd) {}
void respondToEmergency() override {
cout << "\033[1;34mPolice Unit " << unitID << " dispatched.\033[0m\n";
markBusy();
}
void displayInfo() const override {
cout << "\033[1;34mPolice - " << *this << "\033[0m" << endl;
}
string getUnitType() const override {
return "Police";
}