#ifndef Tmp1_GrowingPlant_H
#define Tmp1_GrowingPlant_H
#include <Glasses/ZNode.h>
#include <Stones/ZColor.h>
class GrowingPlant : public ZNode
{
MAC_RNR_FRIENDS(GrowingPlant);
public:
struct Segment
{
public:
Segment(char type, int p1 = -1, int p2 = -1) : mType(type), mParam1(p1), mParam2(p2) {}
virtual ~Segment(){}
void Set(char t, int p1, int p2) { mType = t; mParam1 = p1; mParam2 = p2; }
char mType;
int mParam1;
int mParam2;
};
class SegmentList: public std::vector<Segment>
{
public:
SegmentList();
int mChunkSize;
std::vector<Segment> mDefaults;
SegmentList& s(char t, int p1, int p2 = -1);
SegmentList& x(char t, int p1, int p2 = -1);
SegmentList& x(const char*);
};
typedef SegmentList Segments_t;
typedef SegmentList::iterator Segments_i;
private:
void _init();
void SetupNameMap();
protected:
Int_t mLevel;
SegmentList mSegments;
SegmentList mStart;
ZColor mLineColor;
ZColor mFlowerColor;
virtual void SegmentStepTime(Segments_i olfIdx,Segments_t& in, Segments_t& out) {};
virtual void SegmentListStepTime(SegmentList& oldExp, SegmentList& newExp, int level);
Segments_i NeighbourFront(SegmentList& oldExp, Segments_i startIt, int depth = 0, bool debug = false);
Segments_i NeighbourBack(SegmentList& oldExp, Segments_i startIt, int depth = 0, bool debug = false);
public:
GrowingPlant(const Text_t* n="GrowingPlant", const Text_t* t=0);
virtual ~GrowingPlant();
void StepPlus();
void StepMinus();
void DumpInfo();
virtual void DumpList(Segments_t&);
void Produce();
#include "GrowingPlant.h7"
ClassDef(GrowingPlant, 1);
};
#endif