add siOffset and siHeight
[L-seed.git] / src / Lseed / StipeInfo.hs
index 3d657ff..0e5d21b 100644 (file)
@@ -1,19 +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 0
-  where go a d (Stipe light len ps) = Stipe (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 . extractOutmost . snd) ps')
+               , siSubLength = len + sum (map (siSubLength . pData) ps')
                , siLight     = light
-               , siSubLight  = light + sum (map (siSubLight . extractOutmost . snd) ps')
-               , siAngle     = a
-               , siDirection = normAngle d
-               }) len ps'
-         where ps' = map (\(a',p) -> (a', go a' (d+a') p)) ps
+               , 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' 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