summaryrefslogtreecommitdiff
path: root/BlockCondition.h
diff options
context:
space:
mode:
authorKris Parker2009-11-13 22:26:17 +0000
committerKris Parker2009-11-13 22:26:17 +0000
commit1cb48474b399549ca64dca40ab2ad20a80d3db30 (patch)
tree74f3a8754eba20def409d7687997eab510d1709c /BlockCondition.h
parenta71d4adc7da44c0d5fa70eaba700afea6bb4f89d (diff)
downloadstonesense-1cb48474b399549ca64dca40ab2ad20a80d3db30.tar.gz
stonesense-1cb48474b399549ca64dca40ab2ad20a80d3db30.tar.bz2
stonesense-1cb48474b399549ca64dca40ab2ad20a80d3db30.tar.xz
First pass at merging new building config
Diffstat (limited to 'BlockCondition.h')
-rw-r--r--BlockCondition.h176
1 files changed, 173 insertions, 3 deletions
diff --git a/BlockCondition.h b/BlockCondition.h
index a08fc3b..ffcb155 100644
--- a/BlockCondition.h
+++ b/BlockCondition.h
@@ -14,14 +14,184 @@ enum BlockConditionTypes{
};
+// abstract base class
class BlockCondition
{
public:
- BlockConditionTypes type;
+ BlockCondition(){};
+ virtual ~BlockCondition(void){};
+
+ virtual bool Matches(Block* b) = 0;
+};
+
+class ConditionalNode
+{
+ public:
+ ConditionalNode(){};
+ virtual ~ConditionalNode(void){};
+
+ //false on failure
+ virtual bool addCondition(BlockCondition* cond) = 0;
+};
+
+//TODO: sort these (alpha order?)
+
+class NeighbourWallCondition : public BlockCondition
+{
+ public:
+ NeighbourWallCondition(const char* strValue);
+ ~NeighbourWallCondition(void){};
+
+ int value;
+ bool Matches(Block* b);
+};
+
+
+class PositionIndexCondition : public BlockCondition
+{
+ public:
+ PositionIndexCondition(const char* strValue);
+ ~PositionIndexCondition(void){};
+
+ int value;
+ bool Matches(Block* b);
+};
+
+
+class MaterialTypeCondition : public BlockCondition
+{
+ public:
+ MaterialTypeCondition(const char* strValue);
+ ~MaterialTypeCondition(void){};
+
+ int value;
+ bool Matches(Block* b);
+};
+
+class AnimationFrameCondition : public BlockCondition
+{
+ public:
+ AnimationFrameCondition(const char* strValue);
+ ~AnimationFrameCondition(void){};
+
int value;
+ bool Matches(Block* b);
+};
- BlockCondition(BlockConditionTypes type);
- ~BlockCondition(void){}
+class BuildingOccupancyCondition : public BlockCondition
+{
+ public:
+ BuildingOccupancyCondition(const char* strValue);
+ ~BuildingOccupancyCondition(void){};
+
+ int value;
bool Matches(Block* b);
};
+
+
+class NeighbourSameBuildingCondition : public BlockCondition
+{
+ public:
+ NeighbourSameBuildingCondition(const char* strValue);
+ ~NeighbourSameBuildingCondition(void){};
+
+ int value;
+ bool Matches(Block* b);
+};
+
+
+class NeighbourIdenticalCondition : public BlockCondition
+{
+ public:
+ NeighbourIdenticalCondition(const char* strValue);
+ ~NeighbourIdenticalCondition(void){};
+
+ int value;
+ bool Matches(Block* b);
+};
+
+
+class NeighbourOfTypeCondition : public BlockCondition
+{
+ public:
+ NeighbourOfTypeCondition(const char* strDir, const char* strValue);
+ ~NeighbourOfTypeCondition(void){};
+
+ int value;
+ int direction;
+ bool Matches(Block* b);
+};
+
+class NeighbourSameTypeCondition : public BlockCondition
+{
+ public:
+ NeighbourSameTypeCondition(const char* strDir);
+ ~NeighbourSameTypeCondition(void){};
+
+ int direction;
+ bool Matches(Block* b);
+};
+
+class AndConditionalNode : public BlockCondition, public ConditionalNode
+{
+ public:
+ AndConditionalNode(){};
+ ~AndConditionalNode(void);
+
+ vector<BlockCondition*> children;
+
+ bool Matches(Block* b);
+ bool addCondition(BlockCondition* cond);
+};
+
+class OrConditionalNode : public BlockCondition, public ConditionalNode
+{
+ public:
+ OrConditionalNode(){};
+ ~OrConditionalNode(void);
+
+ vector<BlockCondition*> children;
+
+ bool Matches(Block* b);
+ bool addCondition(BlockCondition* cond);
+};
+
+class AlwaysCondition : public BlockCondition
+{
+ public:
+ AlwaysCondition(){};
+ ~AlwaysCondition(void){};
+
+ bool Matches(Block* b);
+};
+
+class NeverCondition : public BlockCondition
+{
+ public:
+ NeverCondition(){};
+ ~NeverCondition(void){};
+
+ bool Matches(Block* b);
+};
+
+class NotConditionalNode : public BlockCondition, public ConditionalNode
+{
+ public:
+ NotConditionalNode();
+ ~NotConditionalNode(void);
+ BlockCondition* childcond;
+
+ bool Matches(Block* b);
+ bool addCondition(BlockCondition* cond);
+};
+
+class HaveFloorCondition : public BlockCondition
+{
+ public:
+ HaveFloorCondition(){};
+ ~HaveFloorCondition(void){};
+
+ bool Matches(Block* b);
+};
+