Make LRules based on explicit Actions
[L-seed.git] / DSL-Ideen.txt
1
2 Knopse "" -> Zweig Stamm
3 Stamm "" -> Stamm "", Abzweitung "1. Gabelung" (Zweig "Ast")
4
5
6 Stamm :: Zweig
7 Ast :: Zweig
8
9 Knopse -> Stamm
10 Stamm -> Stamm T Ast
11
12
13 Informationen:
14  * Teilbaum
15  * Lichtmenge
16  * Totale Lichtmenge
17  * Länge
18  * Totale Länge
19  * Richtung
20  * User-Tag
21
22 Ausgabe:
23  * Gewichtug
24  * Priorität
25  * Eine Änderung
26    - Zweig verlängern
27    - Abzweigung einfügen (Z l -> Z l1 / Abzw / Z l2, l = l1 + l2)
28  * Jeweils mit User-Tag
29
30 Semantik:
31  Alle anwendbaren Regeln von höchster Priorität werden genommen, pro Stelle per Gewichtung ausgelost.
32  Alle Regeln brauchen gleich lang (x), haben Kosten (C(Rule)), Gesamtanwendungsdauer: (Lichtmenge - y*Pflanzengröße)/Sum(C(Rule)) * x
33
34
35 Syntax:
36
37 Regel "Bei Licht Verlängern", Priorität 1, Gewicht 4:
38 Ast (Licht > 10, 6 < Länge < 8) => Länge := 12, Tag "Blubb"
39
40 Regel "Bei Licht Verlängern", Priorität 1, Gewicht 4:
41  Zweigung
42   Ast
43    Knospe
44   Ast 
45    Zweigung
46     Ast (Licht > 10, 6 < Länge < 8) => Länge := 12, Tag "Blubb"
47      x
48     Knospe
49
50 Regel "Langes Verzweigen", Priorität 2, Gewicht 4:
51  Zweigung (-90° < Winkel < 90°)
52   Ast
53    Knospe
54   Ast 
55    Zweigung (Tag == "Hier weitermachen")
56     Ast (Licht > 10, Länge == 12) => Verzweigen 50% 30° "Vorher" "Verzweigung" "Nacher"
57      x
58     Knospe
59
60 In Klammern: 
61  * Arithmetrik
62  * Vergleiche
63  * Boolsche Ausdrücke
64  * Variablen (Licht, Gesamtlicht, Länge, Gesamtlänge, Richtung (Radians 0..\pi), Winkel, Usertag)
65
66 Rechts:
67  * UserTag 
68  * Länge := Zahl
69    Länge += Zahl
70    Länge += Zahl%
71  * Verzweige Zahl% Winkel° [Tag1 Tag2 Tag3]