robots/src/Unit.cpp
2024-09-06 17:17:53 +02:00

60 lines
1.0 KiB
C++
Executable File

/**
* Copyright (C) David Wolfe, 1999. All rights reserved.
* Ported to Qt and adapted for TDDD86, 2015.
*/
#include "Unit.h"
#include "constants.h"
#include "utilities.h"
#include <cstdlib>
#include <cmath>
Unit::Unit() {
teleport();
}
Unit::Unit(const Point& p) {
x = p.x;
y = p.y;
}
Point Unit::asPoint() const {
return Point{x, y};
}
bool Unit::at(const Unit& u) const {
return (x == u.x && y == u.y);
}
void Unit::moveTowards(const Point& p) {
if (x > p.x) x--;
if (x < p.x) x++;
if (y > p.y) y--;
if (y < p.y) y++;
checkBounds();
}
void Unit::teleport() {
x = rand_int (MIN_X, MAX_X);
y = rand_int (MIN_Y, MAX_Y);
}
double Unit::distanceTo(const Unit& u) const {
double dx = u.x - x;
double dy = u.y - y;
return sqrt(dx * dx + dy * dy);
}
/*
* Put this unit inside playing field if outside
*/
void Unit::checkBounds() {
if (x < MIN_X) x = MIN_X;
if (x > MAX_X) x = MAX_X;
if (y < MIN_Y) y = MIN_Y;
if (y > MAX_Y) y = MAX_Y;
}