ROOT logo
// $Id: Glass_SKEL.h 2089 2008-11-23 20:31:03Z matevz $

// Copyright (C) 1999-2008, Matevz Tadel. All rights reserved.
// This file is part of GLED, released under GNU General Public License version 2.
// For the licensing terms see $GLEDSYS/LICENSE or http://www.gnu.org/.

#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;      // X{GST} 7 Value(-range=>[1, 120, 1])
  SegmentList    mSegments;
  
  SegmentList    mStart;
  
  ZColor	       mLineColor;    // X{GSPT} 7 ColorButt()
  ZColor	       mFlowerColor;  // X{GSPT} 7 ColorButt()
  
  
  virtual void SegmentStepTime(Segments_i olfIdx,Segments_t& in, Segments_t& out) {}; // abstract
  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();    // X{ED}  7 MButt()
  void StepMinus();    // X{ED}  7 MButt()
  
  void DumpInfo();    // X{ED}  7 MButt()
  virtual void DumpList(Segments_t&);
  
  void Produce();
  
#include "GrowingPlant.h7"
  ClassDef(GrowingPlant, 1);
}; // endclass GrowingPlant

#endif
 GrowingPlant.h:1
 GrowingPlant.h:2
 GrowingPlant.h:3
 GrowingPlant.h:4
 GrowingPlant.h:5
 GrowingPlant.h:6
 GrowingPlant.h:7
 GrowingPlant.h:8
 GrowingPlant.h:9
 GrowingPlant.h:10
 GrowingPlant.h:11
 GrowingPlant.h:12
 GrowingPlant.h:13
 GrowingPlant.h:14
 GrowingPlant.h:15
 GrowingPlant.h:16
 GrowingPlant.h:17
 GrowingPlant.h:18
 GrowingPlant.h:19
 GrowingPlant.h:20
 GrowingPlant.h:21
 GrowingPlant.h:22
 GrowingPlant.h:23
 GrowingPlant.h:24
 GrowingPlant.h:25
 GrowingPlant.h:26
 GrowingPlant.h:27
 GrowingPlant.h:28
 GrowingPlant.h:29
 GrowingPlant.h:30
 GrowingPlant.h:31
 GrowingPlant.h:32
 GrowingPlant.h:33
 GrowingPlant.h:34
 GrowingPlant.h:35
 GrowingPlant.h:36
 GrowingPlant.h:37
 GrowingPlant.h:38
 GrowingPlant.h:39
 GrowingPlant.h:40
 GrowingPlant.h:41
 GrowingPlant.h:42
 GrowingPlant.h:43
 GrowingPlant.h:44
 GrowingPlant.h:45
 GrowingPlant.h:46
 GrowingPlant.h:47
 GrowingPlant.h:48
 GrowingPlant.h:49
 GrowingPlant.h:50
 GrowingPlant.h:51
 GrowingPlant.h:52
 GrowingPlant.h:53
 GrowingPlant.h:54
 GrowingPlant.h:55
 GrowingPlant.h:56
 GrowingPlant.h:57
 GrowingPlant.h:58
 GrowingPlant.h:59
 GrowingPlant.h:60
 GrowingPlant.h:61
 GrowingPlant.h:62
 GrowingPlant.h:63
 GrowingPlant.h:64
 GrowingPlant.h:65
 GrowingPlant.h:66
 GrowingPlant.h:67
 GrowingPlant.h:68
 GrowingPlant.h:69
 GrowingPlant.h:70
 GrowingPlant.h:71
 GrowingPlant.h:72
 GrowingPlant.h:73
 GrowingPlant.h:74
 GrowingPlant.h:75
 GrowingPlant.h:76
 GrowingPlant.h:77
 GrowingPlant.h:78
 GrowingPlant.h:79
 GrowingPlant.h:80
 GrowingPlant.h:81
 GrowingPlant.h:82
 GrowingPlant.h:83
 GrowingPlant.h:84