diff options
| author | Kris Parker | 2009-11-13 22:26:17 +0000 |
|---|---|---|
| committer | Kris Parker | 2009-11-13 22:26:17 +0000 |
| commit | 1cb48474b399549ca64dca40ab2ad20a80d3db30 (patch) | |
| tree | 74f3a8754eba20def409d7687997eab510d1709c /BlockCondition.h | |
| parent | a71d4adc7da44c0d5fa70eaba700afea6bb4f89d (diff) | |
| download | stonesense-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.h | 176 |
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);
+};
+
|
