#pragma once
#include "ShapeLocation.h"

class CoordinatesLocation : public ShapeLocation // Not really a shape, lulz
{
public:
  CoordinatesLocation(BWAPI::Position coordinates)
    : m_coordinates(coordinates)
  {
    assert(m_coordinates.isValid());
  }

  virtual BWAPI::Position getCurrentCenter() const;

  virtual bool isInLocation(BWAPI::Position position) const;
  virtual bool isInLocation(BWAPI::TilePosition tile) const;

  virtual std::pair<BWAPI::TilePosition, int> getOldestVisibleTile() const;
  virtual BWAPI::TilePosition getRandomTile() const;

protected:
  virtual void _output(std::ostream& out) const
  {
    out << "Coordinates" << m_coordinates;
  }

  const BWAPI::Position m_coordinates;

private:
  // const member prevent the use of assignment operator
  CoordinatesLocation& operator=(const CoordinatesLocation& rhs);
};