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 /ConditionalSprite.cpp | |
| 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 'ConditionalSprite.cpp')
| -rw-r--r-- | ConditionalSprite.cpp | 130 |
1 files changed, 121 insertions, 9 deletions
diff --git a/ConditionalSprite.cpp b/ConditionalSprite.cpp index 64e033e..4262545 100644 --- a/ConditionalSprite.cpp +++ b/ConditionalSprite.cpp @@ -4,18 +4,130 @@ #include "GameBuildings.h"
-ConditionalSprite::ConditionalSprite(void)
+/* RootBlock */
+
+RootBlock::RootBlock()
+ : SpriteNode()
+{
+ //cout << "RootBlock +" << endl;
+}
+
+RootBlock::~RootBlock(void)
+{
+ //cout << "RootBlock -" << endl;
+ uint32_t max = children.size();
+ for(uint32_t i=0; i<max; i++)
+ {
+ delete(children[i]);
+ }
+}
+
+bool RootBlock::BlockMatches(Block* b)
{
- memset(this, 0, sizeof(ConditionalSprite));
+ bool haveMatch = false;
+ uint32_t max = children.size();
+
+ for(uint32_t i=0; i<max; i++)
+ {
+ if (children[i]->BlockMatches(b))
+ {
+ haveMatch = true;
+ }
+ }
+ return haveMatch;
}
+void RootBlock::addChild(SpriteNode* child){
+ children.push_back(child);
+}
-bool ConditionalSprite::BlockMatches(Block* b){
- bool okSoFar = true;
+/* SpriteBlock */
- for(uint32_t i=0; i<conditions.size(); i++){
- okSoFar &= conditions[i].Matches( b );
- }
+SpriteBlock::SpriteBlock()
+ : ConditionalNode(), SpriteNode()
+{
+ //cout << "SpriteBlock +" << endl;
+ conditions = NULL;
+ elsenode = NULL;
+}
- return okSoFar;
-}
\ No newline at end of file +SpriteBlock::~SpriteBlock(void)
+{
+ //cout << "SpriteBlock -" << endl;
+ delete(elsenode);
+ delete(conditions);
+ uint32_t max = children.size();
+ for(uint32_t i=0; i<max; i++)
+ {
+ delete(children[i]);
+ }
+};
+
+bool SpriteBlock::BlockMatches(Block* b)
+{
+ bool condMatch = false;
+ if (conditions == NULL)
+ {
+ condMatch = true;
+ }
+ else
+ {
+ condMatch = conditions->Matches( b );
+ }
+
+ bool haveMatch=false;
+ if (condMatch)
+ {
+ uint32_t max = children.size();
+ for(uint32_t i=0; i<max; i++)
+ {
+ if (children[i]->BlockMatches(b))
+ {
+ haveMatch = true;
+ }
+ }
+ }
+ else if (elsenode != NULL)
+ {
+ haveMatch = elsenode->BlockMatches(b);
+ }
+ return haveMatch;
+}
+
+bool SpriteBlock::addCondition(BlockCondition* cond){
+ if (conditions != NULL)
+ {
+ WriteErr("Too many condition elements for SpriteBlock\n");
+ return false;
+ }
+ conditions = cond;
+ return true;
+}
+
+void SpriteBlock::addChild(SpriteNode* child){
+ children.push_back(child);
+}
+
+void SpriteBlock::addElse(SpriteNode* child){
+ elsenode = child;
+}
+
+/* SpriteElement */
+
+SpriteElement::SpriteElement()
+ : SpriteNode()
+{
+ //cout << "SpriteElement +" << endl;
+ sprite.sheetIndex = -1;
+ sprite.x = 0;
+ sprite.y = 0;
+}
+
+bool SpriteElement::BlockMatches(Block* b)
+{
+ if (sprite.sheetIndex > -1)
+ {
+ b->building.sprites.push_back(sprite);
+ }
+ return true;
+}
|
