src/ai/api/ai_tilelist.cpp
author truelight
Sat, 14 Jul 2007 21:15:49 +0000
branchnoai
changeset 9657 f2c6e332d8bc
parent 9599 949374e83b78
child 9723 eee46cb39750
permissions -rw-r--r--
(svn r10564) [NoAI] -Add: added a AITileList valuator that checks for a NxM buildable spot with the entry from the AITileList as top-left tile
/* $Id$ */

/** @file ai_tilelist.cpp handles all functions of the AITileList class */

#include "ai_tilelist.hpp"

#include "../../landscape.h"

void AITileList::FixRectangleSpan(TileIndex &t1, TileIndex &t2)
{
	uint x1 = ::TileX(t1);
	uint x2 = ::TileX(t2);

	uint y1 = ::TileY(t1);
	uint y2 = ::TileY(t2);

	if (x1 >= x2) ::Swap(x1, x2);
	if (y1 >= y2) ::Swap(y1, y2);

	t1 = ::TileXY(x1, y1);
	t2 = ::TileXY(x2, y2);
}

void AITileList::AddRectangle(TileIndex t1, TileIndex t2)
{
	if (!IsValidTile(t1) || !IsValidTile(t2)) return;

	this->FixRectangleSpan(t1, t2);

	uint w = TileX(t2) - TileX(t1) + 1;
	uint h = TileY(t2) - TileY(t1) + 1;

	BEGIN_TILE_LOOP(t, w, h, t1) {
		this->AddItem(t);
	} END_TILE_LOOP(t, w, h, t1)
}

void AITileList::AddTile(TileIndex tile)
{
	if (!IsValidTile(tile)) return;

	this->AddItem(tile);
}

void AITileList::RemoveRectangle(TileIndex t1, TileIndex t2)
{
	if (!IsValidTile(t1) || !IsValidTile(t2)) return;

	this->FixRectangleSpan(t1, t2);

	uint w = TileX(t2) - TileX(t1) + 1;
	uint h = TileY(t2) - TileY(t1) + 1;

	BEGIN_TILE_LOOP(t, w, h, t1) {
		this->RemoveItem(t);
	} END_TILE_LOOP(t, w, h, t1)
}

void AITileList::RemoveTile(TileIndex tile)
{
	if (!IsValidTile(tile)) return;

	this->RemoveItem(tile);
}