0ad/binaries/data/mods/public/maps/random/rmgen/constraint.js
historic_bruno 0e0ed94926 Implements random map system, fixes #6.
Includes default library "rmgen" w/ API based on rmgen tool.
Modifies rmgen scripts Cantabrian Highlands, Neareastern Badlands, and
Latium.
Old map support dropped from MapReader.
Fixes a few bugs in existing game setup and initialization scripts.

This was SVN commit r9096.
2011-03-22 01:34:45 +00:00

100 lines
2.9 KiB
JavaScript

///////////////////////////////////////////////////////////////////////////
// NullConstraints: No constraint - always return true
///////////////////////////////////////////////////////////////////////////
function NullConstraint() {}
NullConstraint.prototype.allows = function(x, y)
{
return true;
};
///////////////////////////////////////////////////////////////////////////
// AndConstraints: Check multiple constraints
///////////////////////////////////////////////////////////////////////////
function AndConstraint(constraints)
{
this.constraints = constraints;
}
AndConstraint.prototype.allows = function(x, y)
{
for (var i=0; i < this.constraints.length; ++i)
{
if (!this.constraints[i].allows(x, y))
return false;
}
return true;
};
///////////////////////////////////////////////////////////////////////////
// AvoidAreaConstraint
///////////////////////////////////////////////////////////////////////////
function AvoidAreaConstraint(area)
{
this.area = area;
}
AvoidAreaConstraint.prototype.allows = function(x, y)
{
return g_Map.area[x][y] != this.area;
};
///////////////////////////////////////////////////////////////////////////
// AvoidTextureConstraint
///////////////////////////////////////////////////////////////////////////
function AvoidTextureConstraint(textureID)
{
this.textureID = textureID;
}
AvoidTextureConstraint.prototype.allows = function(x, y)
{
return g_Map.texture[x][y] != this.textureID;
};
///////////////////////////////////////////////////////////////////////////
// AvoidTileClassConstraint
///////////////////////////////////////////////////////////////////////////
function AvoidTileClassConstraint(tileClassID, distance)
{
this.tileClass = getTileClass(tileClassID);
this.distance = distance;
}
AvoidTileClassConstraint.prototype.allows = function(x, y)
{
return this.tileClass.countMembersInRadius(x, y, this.distance) == 0;
};
///////////////////////////////////////////////////////////////////////////
// StayInTileClassConstraint
///////////////////////////////////////////////////////////////////////////
function StayInTileClassConstraint(tileClassID, distance)
{
this.tileClass = getTileClass(tileClassID);
this.distance = distance;
}
StayInTileClassConstraint.prototype.allows = function(x, y)
{
return this.tileClass.countNonMembersInRadius(x, y, this.distance) == 0;
};
///////////////////////////////////////////////////////////////////////////
// BorderTileClassConstraint
///////////////////////////////////////////////////////////////////////////
function BorderTileClassConstraint(tileClassID, distanceInside, distanceOutside)
{
this.tileClass = getTileClass(tileClassID);
this.distanceInside = distanceInside;
this.distanceOutside = distanceOutside;
}
BorderTileClassConstraint.prototype.allows = function(x, y)
{
return (this.tileClass.countMembersInRadius(x, y, this.distanceOutside) > 0
&& this.tileClass.countNonMembersInRadius(x, y, this.distanceInside) > 0);
};