Changeset - r14459:28d2c5eeb292
[Not reviewed]
master
0 5 1
alberth - 15 years ago 2010-02-06 12:56:13
alberth@openttd.org
(svn r19038) -Codechange: Move TileArea methods to their own file.
6 files changed with 110 insertions and 83 deletions:
0 comments (0 inline, 0 general)
projects/openttd_vs80.vcproj
Show inline comments
 
@@ -720,6 +720,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\tilearea.cpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\townname.cpp"
 
				>
 
			</File>
projects/openttd_vs90.vcproj
Show inline comments
 
@@ -717,6 +717,10 @@
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\tilearea.cpp"
 
				>
 
			</File>
 
			<File
 
				RelativePath=".\..\src\townname.cpp"
 
				>
 
			</File>
source.list
Show inline comments
 
@@ -67,6 +67,7 @@ subsidy.cpp
 
texteff.cpp
 
tgp.cpp
 
tile_map.cpp
 
tilearea.cpp
 
townname.cpp
 
#if WIN32
 
#else
src/station.cpp
Show inline comments
 
@@ -498,72 +498,6 @@ StationRect& StationRect::operator = (Re
 
	return *this;
 
}
 

	
 
TileArea::TileArea(TileIndex start, TileIndex end)
 
{
 
	uint sx = TileX(start);
 
	uint sy = TileY(start);
 
	uint ex = TileX(end);
 
	uint ey = TileY(end);
 

	
 
	if (sx > ex) Swap(sx, ex);
 
	if (sy > ey) Swap(sy, ey);
 

	
 
	this->tile = TileXY(sx, sy);
 
	this->w    = ex - sx + 1;
 
	this->h    = ey - sy + 1;
 
}
 

	
 
void TileArea::Add(TileIndex to_add)
 
{
 
	if (this->tile == INVALID_TILE) {
 
		this->tile = to_add;
 
		this->w = 1;
 
		this->h = 1;
 
		return;
 
	}
 

	
 
	uint sx = TileX(this->tile);
 
	uint sy = TileY(this->tile);
 
	uint ex = sx + this->w - 1;
 
	uint ey = sy + this->h - 1;
 

	
 
	uint ax = TileX(to_add);
 
	uint ay = TileY(to_add);
 

	
 
	sx = min(ax, sx);
 
	sy = min(ay, sy);
 
	ex = max(ax, ex);
 
	ey = max(ay, ey);
 

	
 
	this->tile = TileXY(sx, sy);
 
	this->w    = ex - sx + 1;
 
	this->h    = ey - sy + 1;
 
}
 

	
 
bool TileArea::Intersects(const TileArea &ta) const
 
{
 
	if (ta.w == 0 || this->w == 0) return false;
 

	
 
	assert(ta.w != 0 && ta.h != 0 && this->w != 0 && this->h != 0);
 

	
 
	uint left1   = TileX(this->tile);
 
	uint top1    = TileY(this->tile);
 
	uint right1  = left1 + this->w - 1;
 
	uint bottom1 = top1  + this->h - 1;
 

	
 
	uint left2   = TileX(ta.tile);
 
	uint top2    = TileY(ta.tile);
 
	uint right2  = left2 + ta.w - 1;
 
	uint bottom2 = top2  + ta.h - 1;
 

	
 
	return !(
 
			left2   > right1  ||
 
			right2  < left1   ||
 
			top2    > bottom1 ||
 
			bottom2 < top1
 
		);
 
}
 

	
 

	
 
void InitializeStations()
 
{
src/tilearea.cpp
Show inline comments
 
new file 100644
 
/* $Id$ */
 

	
 
/*
 
 * This file is part of OpenTTD.
 
 * OpenTTD is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, version 2.
 
 * OpenTTD is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 
 * See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with OpenTTD. If not, see <http://www.gnu.org/licenses/>.
 
 */
 

	
 
/** @file tilearea.cpp Handling of tile areas. */
 

	
 
#include "stdafx.h"
 

	
 
#include "tile_map.h"
 
#include "core/math_func.hpp"
 
#include "tilearea_type.h"
 

	
 
/**
 
 * Construct this tile area based on two points.
 
 * @param start the start of the area
 
 * @param end   the end of the area
 
 */
 
TileArea::TileArea(TileIndex start, TileIndex end)
 
{
 
	uint sx = TileX(start);
 
	uint sy = TileY(start);
 
	uint ex = TileX(end);
 
	uint ey = TileY(end);
 

	
 
	if (sx > ex) Swap(sx, ex);
 
	if (sy > ey) Swap(sy, ey);
 

	
 
	this->tile = TileXY(sx, sy);
 
	this->w    = ex - sx + 1;
 
	this->h    = ey - sy + 1;
 
}
 

	
 
/**
 
 * Add a single tile to a tile area; enlarge if needed.
 
 * @param to_add The tile to add
 
 */
 
void TileArea::Add(TileIndex to_add)
 
{
 
	if (this->tile == INVALID_TILE) {
 
		this->tile = to_add;
 
		this->w = 1;
 
		this->h = 1;
 
		return;
 
	}
 

	
 
	uint sx = TileX(this->tile);
 
	uint sy = TileY(this->tile);
 
	uint ex = sx + this->w - 1;
 
	uint ey = sy + this->h - 1;
 

	
 
	uint ax = TileX(to_add);
 
	uint ay = TileY(to_add);
 

	
 
	sx = min(ax, sx);
 
	sy = min(ay, sy);
 
	ex = max(ax, ex);
 
	ey = max(ay, ey);
 

	
 
	this->tile = TileXY(sx, sy);
 
	this->w    = ex - sx + 1;
 
	this->h    = ey - sy + 1;
 
}
 

	
 
/**
 
 * Does this tile area intersect with another?
 
 * @param ta the other tile area to check against.
 
 * @return true if they intersect.
 
 */
 
bool TileArea::Intersects(const TileArea &ta) const
 
{
 
	if (ta.w == 0 || this->w == 0) return false;
 

	
 
	assert(ta.w != 0 && ta.h != 0 && this->w != 0 && this->h != 0);
 

	
 
	uint left1   = TileX(this->tile);
 
	uint top1    = TileY(this->tile);
 
	uint right1  = left1 + this->w - 1;
 
	uint bottom1 = top1  + this->h - 1;
 

	
 
	uint left2   = TileX(ta.tile);
 
	uint top2    = TileY(ta.tile);
 
	uint right2  = left2 + ta.w - 1;
 
	uint bottom2 = top2  + ta.h - 1;
 

	
 
	return !(
 
			left2   > right1  ||
 
			right2  < left1   ||
 
			top2    > bottom1 ||
 
			bottom2 < top1
 
		);
 
}
 

	
src/tilearea_type.h
Show inline comments
 
@@ -16,6 +16,10 @@
 

	
 
/** Represents the covered area of e.g. a rail station */
 
struct TileArea {
 
	TileIndex tile; ///< The base tile of the area
 
	uint8 w;        ///< The width of the area
 
	uint8 h;        ///< The height of the area
 

	
 
	/** Just construct this tile area */
 
	TileArea() {}
 

	
 
@@ -27,21 +31,9 @@ struct TileArea {
 
	 */
 
	TileArea(TileIndex tile, uint8 w, uint8 h) : tile(tile), w(w), h(h) {}
 

	
 
	/**
 
	 * Construct this tile area based on two points.
 
	 * @param start the start of the area
 
	 * @param end   the end of the area
 
	 */
 
	TileArea(TileIndex start, TileIndex end);
 

	
 
	TileIndex tile; ///< The base tile of the area
 
	uint8 w;        ///< The width of the area
 
	uint8 h;        ///< The height of the area
 

	
 
	/**
 
	 * Add a single tile to a tile area; enlarge if needed.
 
	 * @param to_add The tile to add
 
	 */
 
	void Add(TileIndex to_add);
 

	
 
	/**
 
@@ -54,11 +46,6 @@ struct TileArea {
 
		this->h    = 0;
 
	}
 

	
 
	/**
 
	 * Does this tile area intersect with another?
 
	 * @param ta the other tile area to check against.
 
	 * @return true if they intersect.
 
	 */
 
	bool Intersects(const TileArea &ta) const;
 
};
 

	
0 comments (0 inline, 0 general)