add siOffset and siHeight
[L-seed.git] / src / Lseed / StipeInfo.hs
index 229caed..0e5d21b 100644 (file)
@@ -1,20 +1,29 @@
 module Lseed.StipeInfo where
 
 import Lseed.Data
+import Lseed.Constants
 import Lseed.Data.Functions
 import Lseed.Geometry
 
-annotatePlant :: Plant Double -> AnnotatedPlant
-annotatePlant = go 0
-  where go d (Plant light len ang ut ps) = Plant (StipeInfo
+annotateGarden :: Angle -> GrowingGarden -> AnnotatedGarden
+annotateGarden angle  = map (mapPlanted annotatePlant) . lightenGarden angle
+
+annotatePlant :: Plant (GrowthState, Double) -> AnnotatedPlant
+annotatePlant = go 0 0 0
+  where go d o h (Plant (gs, light) len ang ut ps) = Plant (StipeInfo
                { siLength    = len
                , siSubLength = len + sum (map (siSubLength . pData) ps')
                , siLight     = light
                , siSubLight  = light + sum (map (siSubLight . pData) ps')
                , siAngle     = ang
                , siDirection = normAngle d'
+               , siGrowth    = gs
+               , siOffset    = o'
+               , siHeight    = h'
                }) len ang ut ps'
-         where ps' = map (go d') ps
+         where ps' = map (go d' o' h') ps
                d' = (d+ang)
+               o' = o - len * stipeLength * sin d'
+               h' = h + len * stipeLength * cos d'
 
 normAngle a = a - fromIntegral (truncate ((a+pi) / (2*pi))) * 2*pi