/* Sie lernen in diesem Beispiel:

wie Sie die Verzweigungsordnung als Parameter mitfuehren und in einer
Bedingung abfragen.

(Vergleichen Sie das Wachstumsverhalten mit dem vorherigen Beispiel.)

*/

module Shoot(float len) extends F(len);
module Bud(int order, float strength) extends Sphere(0.2)  // order als Param.
   {{setShader(RED); setTransform(0,0,0.3);}};

const float APIKAL_REDUKTIONSFAKTOR = 0.95;
const float MAX_ORDER_ALLOWED = 2;

//----------------------------------------------------/

// Startblock mit dem Startwort
protected void init()
[ Axiom ==> Bud(0, 5); ]


// oeffentlicher Regelblock
public void wachse()
[
   b:Bud(o, x), (b[order] <= MAX_ORDER_ALLOWED) ==> Shoot(x) 
      [ RU(50) Bud(o+1, 0.7*x) ] [ RU(-50) Bud(o+1, 0.7*x) ] 
      Bud(o, APIKAL_REDUKTIONSFAKTOR * x);
]
