ROOT logo
// $Id: Glass_SKEL.cxx 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/.

#include "GrowingPanicle.h"
#include "GrowingPanicle.c7"

// GrowingPanicle

//______________________________________________________________________________
//
//

ClassImp(GrowingPanicle);

//==============================================================================

void GrowingPanicle::_init()
{
  
  mStart.x('I', 20).x('F', 1).x('A', 0, 0);
}

GrowingPanicle::GrowingPanicle(const Text_t* n, const Text_t* t) :
GrowingPlant(n, t),
mLateralAngle(90),
mSColor(1, 1, 1),
mSSize(0.15),
mTColor(0, 0, 1),
mTSize(0.3),
mUColor(0, 1, 1),
mUSize(0.2)
{
  _init();
}

GrowingPanicle::~GrowingPanicle()
{}

//==============================================================================

void GrowingPanicle::SegmentStepTime(GrowingPlant::Segments_i ref, Segments_t& in, Segments_t& out)
{
  
  int delay = 2;
  //int sideLen = 1;
  //int mainLen = 3;
  
  out.s('/', 180);
  out.s('+', mLateralAngle);  
  out.s('A', 2, 0);
  out.s('O', 1, 1);
  
  Segment& seg   = *ref;

  //printf("step time %c \n", seg.mType);
  switch (seg.mType)
  {
    case'A': 
    {
      //  printf("case A \n");
      Segments_i back  = NeighbourBack(in, ref);
      if (back != in.end() && (*back).mType == 'S')
      { 
       // printf("A(%d, %d) create T \n", seg.mParam1, seg.mParam2);
        //if (1 seg.mParam2 ==0)
         out.x('T', 0).x("O");
        //else 
        //  out.x('A', seg.mParam1, seg.mParam2);
      }
      else if (seg.mParam1 > 0)
      {
        out.x('A', seg.mParam1 - 1, seg.mParam2);
      }
      else if (seg.mParam1 == 0)
      {
        out.x("[+G]").x('F', 1, seg.mParam2).x("/").x('A', delay, seg.mParam2);
      }
      break;
    }
      ///////////////////////////////////////////////////////////////////////////
     
    case 'F':
    {
      Segments_i back  = NeighbourBack(in, ref);
      if (back != in.end() && (*back).mType == 'S')
      { 
       //if (seg.mParam2 == 0)  printf("case F move signal S forward\n");
        out.x(seg.mType, seg.mParam1, seg.mParam2).x('S', 1, 1);
        break;
      }
      
      Segments_i front = NeighbourFront(in, ref, 0, false);
      if (front != in.end() && (*front).mType == 'T') 
      { 
        //if (1 || seg.mParam2 == 0) printf("T in front F(%d, %d) -> creaincrement growth potential\n", seg.mParam1, seg.mParam2);
        out.x('T', (*front).mParam1 + 1).x('F', 1, seg.mParam2).x('U',  (*front).mParam1 -1);
        break;
      } 
      
      // default
      out.x(seg.mType, seg.mParam1, seg.mParam2);
      break;
    }
      
      
      ///////////////////////////////////////////////////////////////////////////

    case 'G':
    {
      // printf("case G\n");
    
      Segments_i back  = NeighbourBack(in, ref, -1);
      if (back != in.end() && (*back).mType == 'U')
      { 
        // printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! side branch transform G -> FA\n");
         out.x('I', (*back).mParam1).x('F', 1, 1).x('A', delay, 1);
        // out.x('I', (*back).mParam1).x("FA");
        break;
      }
      
      out.x(seg.mType, seg.mParam1, seg.mParam2);
      break;
    }
      
      ///////////////////////////////////////////////////////////////////////////

    case 'I':
    {
     // printf("case I\n");
      if (seg.mParam1 == 0)
      {
      // printf("emit signal S \n");
        out.x('S', 0);
      }
      else
      {
        out.x('I', seg.mParam1 -1);
       // printf("I timeout\n");
      }
      break;
    }
    
      ///////////////////////////////////////////////////////////////////////////

    case 'S':
    case 'T':
    {
      break;
    }

    case 'O':
    {
      // change color and size of a bud
      out.x(seg.mType, seg.mParam1+1, seg.mParam2+1);
      break; 
    }
    default:
    {
      //printf("copy default %c\n", seg.mType);
      out.x(seg.mType, seg.mParam1, seg.mParam2);
    }
  }
 GrowingPanicle.cxx:1
 GrowingPanicle.cxx:2
 GrowingPanicle.cxx:3
 GrowingPanicle.cxx:4
 GrowingPanicle.cxx:5
 GrowingPanicle.cxx:6
 GrowingPanicle.cxx:7
 GrowingPanicle.cxx:8
 GrowingPanicle.cxx:9
 GrowingPanicle.cxx:10
 GrowingPanicle.cxx:11
 GrowingPanicle.cxx:12
 GrowingPanicle.cxx:13
 GrowingPanicle.cxx:14
 GrowingPanicle.cxx:15
 GrowingPanicle.cxx:16
 GrowingPanicle.cxx:17
 GrowingPanicle.cxx:18
 GrowingPanicle.cxx:19
 GrowingPanicle.cxx:20
 GrowingPanicle.cxx:21
 GrowingPanicle.cxx:22
 GrowingPanicle.cxx:23
 GrowingPanicle.cxx:24
 GrowingPanicle.cxx:25
 GrowingPanicle.cxx:26
 GrowingPanicle.cxx:27
 GrowingPanicle.cxx:28
 GrowingPanicle.cxx:29
 GrowingPanicle.cxx:30
 GrowingPanicle.cxx:31
 GrowingPanicle.cxx:32
 GrowingPanicle.cxx:33
 GrowingPanicle.cxx:34
 GrowingPanicle.cxx:35
 GrowingPanicle.cxx:36
 GrowingPanicle.cxx:37
 GrowingPanicle.cxx:38
 GrowingPanicle.cxx:39
 GrowingPanicle.cxx:40
 GrowingPanicle.cxx:41
 GrowingPanicle.cxx:42
 GrowingPanicle.cxx:43
 GrowingPanicle.cxx:44
 GrowingPanicle.cxx:45
 GrowingPanicle.cxx:46
 GrowingPanicle.cxx:47
 GrowingPanicle.cxx:48
 GrowingPanicle.cxx:49
 GrowingPanicle.cxx:50
 GrowingPanicle.cxx:51
 GrowingPanicle.cxx:52
 GrowingPanicle.cxx:53
 GrowingPanicle.cxx:54
 GrowingPanicle.cxx:55
 GrowingPanicle.cxx:56
 GrowingPanicle.cxx:57
 GrowingPanicle.cxx:58
 GrowingPanicle.cxx:59
 GrowingPanicle.cxx:60
 GrowingPanicle.cxx:61
 GrowingPanicle.cxx:62
 GrowingPanicle.cxx:63
 GrowingPanicle.cxx:64
 GrowingPanicle.cxx:65
 GrowingPanicle.cxx:66
 GrowingPanicle.cxx:67
 GrowingPanicle.cxx:68
 GrowingPanicle.cxx:69
 GrowingPanicle.cxx:70
 GrowingPanicle.cxx:71
 GrowingPanicle.cxx:72
 GrowingPanicle.cxx:73
 GrowingPanicle.cxx:74
 GrowingPanicle.cxx:75
 GrowingPanicle.cxx:76
 GrowingPanicle.cxx:77
 GrowingPanicle.cxx:78
 GrowingPanicle.cxx:79
 GrowingPanicle.cxx:80
 GrowingPanicle.cxx:81
 GrowingPanicle.cxx:82
 GrowingPanicle.cxx:83
 GrowingPanicle.cxx:84
 GrowingPanicle.cxx:85
 GrowingPanicle.cxx:86
 GrowingPanicle.cxx:87
 GrowingPanicle.cxx:88
 GrowingPanicle.cxx:89
 GrowingPanicle.cxx:90
 GrowingPanicle.cxx:91
 GrowingPanicle.cxx:92
 GrowingPanicle.cxx:93
 GrowingPanicle.cxx:94
 GrowingPanicle.cxx:95
 GrowingPanicle.cxx:96
 GrowingPanicle.cxx:97
 GrowingPanicle.cxx:98
 GrowingPanicle.cxx:99
 GrowingPanicle.cxx:100
 GrowingPanicle.cxx:101
 GrowingPanicle.cxx:102
 GrowingPanicle.cxx:103
 GrowingPanicle.cxx:104
 GrowingPanicle.cxx:105
 GrowingPanicle.cxx:106
 GrowingPanicle.cxx:107
 GrowingPanicle.cxx:108
 GrowingPanicle.cxx:109
 GrowingPanicle.cxx:110
 GrowingPanicle.cxx:111
 GrowingPanicle.cxx:112
 GrowingPanicle.cxx:113
 GrowingPanicle.cxx:114
 GrowingPanicle.cxx:115
 GrowingPanicle.cxx:116
 GrowingPanicle.cxx:117
 GrowingPanicle.cxx:118
 GrowingPanicle.cxx:119
 GrowingPanicle.cxx:120
 GrowingPanicle.cxx:121
 GrowingPanicle.cxx:122
 GrowingPanicle.cxx:123
 GrowingPanicle.cxx:124
 GrowingPanicle.cxx:125
 GrowingPanicle.cxx:126
 GrowingPanicle.cxx:127
 GrowingPanicle.cxx:128
 GrowingPanicle.cxx:129
 GrowingPanicle.cxx:130
 GrowingPanicle.cxx:131
 GrowingPanicle.cxx:132
 GrowingPanicle.cxx:133
 GrowingPanicle.cxx:134
 GrowingPanicle.cxx:135
 GrowingPanicle.cxx:136
 GrowingPanicle.cxx:137
 GrowingPanicle.cxx:138
 GrowingPanicle.cxx:139
 GrowingPanicle.cxx:140
 GrowingPanicle.cxx:141
 GrowingPanicle.cxx:142
 GrowingPanicle.cxx:143
 GrowingPanicle.cxx:144
 GrowingPanicle.cxx:145
 GrowingPanicle.cxx:146
 GrowingPanicle.cxx:147
 GrowingPanicle.cxx:148
 GrowingPanicle.cxx:149
 GrowingPanicle.cxx:150
 GrowingPanicle.cxx:151
 GrowingPanicle.cxx:152
 GrowingPanicle.cxx:153
 GrowingPanicle.cxx:154
 GrowingPanicle.cxx:155
 GrowingPanicle.cxx:156
 GrowingPanicle.cxx:157
 GrowingPanicle.cxx:158
 GrowingPanicle.cxx:159
 GrowingPanicle.cxx:160
 GrowingPanicle.cxx:161
 GrowingPanicle.cxx:162
 GrowingPanicle.cxx:163
 GrowingPanicle.cxx:164
 GrowingPanicle.cxx:165