2005-05-23 04:52:37 +02:00
|
|
|
#include "stdafx.h"
|
|
|
|
#include "simpleconstraints.h"
|
|
|
|
|
2005-06-06 09:46:28 +02:00
|
|
|
using namespace std;
|
|
|
|
|
2005-09-03 23:53:07 +02:00
|
|
|
// NullConstraint /////////////////////////////////////////////////////////////////////////
|
2005-06-06 09:46:28 +02:00
|
|
|
|
2005-05-23 04:52:37 +02:00
|
|
|
bool NullConstraint::allows(Map* m, int x, int y)
|
|
|
|
{
|
|
|
|
return true;
|
|
|
|
}
|
2005-06-06 09:46:28 +02:00
|
|
|
|
2005-09-03 23:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
// AndConstraint /////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
AndConstraint::AndConstraint(const vector<Constraint*>& constraints) {
|
|
|
|
this->constraints = constraints;
|
|
|
|
}
|
|
|
|
|
|
|
|
AndConstraint::~AndConstraint() {
|
|
|
|
for(int i=0; i<constraints.size(); i++) {
|
|
|
|
delete constraints[i];
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
bool AndConstraint::allows(Map* m, int x, int y)
|
|
|
|
{
|
|
|
|
for(int i=0; i<constraints.size(); i++) {
|
|
|
|
if(!constraints[i]->allows(m, x, y)) {
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
return true;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// AvoidAreaConstraint //////////////////////////////////////////////////////////////////
|
2005-06-06 09:46:28 +02:00
|
|
|
|
|
|
|
AvoidAreaConstraint::AvoidAreaConstraint(Area* area) {
|
|
|
|
this->area = area;
|
|
|
|
}
|
|
|
|
|
|
|
|
bool AvoidAreaConstraint::allows(Map* m, int x, int y)
|
|
|
|
{
|
|
|
|
return m->area[x][y] != area;
|
|
|
|
}
|
|
|
|
|
2005-09-03 23:53:07 +02:00
|
|
|
|
|
|
|
|
|
|
|
// AvoidTextureConstraint ///////////////////////////////////////////////////////////////
|
2005-06-06 09:46:28 +02:00
|
|
|
|
2005-06-20 00:43:07 +02:00
|
|
|
AvoidTextureConstraint::AvoidTextureConstraint(int textureId) {
|
2005-06-06 09:46:28 +02:00
|
|
|
this->textureId = textureId;
|
|
|
|
}
|
|
|
|
|
2005-06-20 00:43:07 +02:00
|
|
|
bool AvoidTextureConstraint::allows(Map* m, int x, int y)
|
2005-06-06 09:46:28 +02:00
|
|
|
{
|
|
|
|
return m->texture[x][y] != textureId;
|
|
|
|
}
|
|
|
|
|
|
|
|
|
2005-06-20 05:18:51 +02:00
|
|
|
|
2005-09-03 23:53:07 +02:00
|
|
|
// AvoidTileClassConstraint /////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
AvoidTileClassConstraint::AvoidTileClassConstraint(TileClass* tileClass, float distance) {
|
|
|
|
this->tileClass = tileClass;
|
|
|
|
this->distance = distance;
|
2005-06-06 09:46:28 +02:00
|
|
|
}
|
|
|
|
|
2005-09-03 23:53:07 +02:00
|
|
|
bool AvoidTileClassConstraint::allows(Map* m, int x, int y)
|
2005-06-06 09:46:28 +02:00
|
|
|
{
|
2005-09-03 23:53:07 +02:00
|
|
|
return !tileClass->hasTilesInRadius(x, y, distance);
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|