diff options
-rw-r--r-- | js/garden.js | 57 |
1 files changed, 38 insertions, 19 deletions
diff --git a/js/garden.js b/js/garden.js index cb8a0ac..3e0ba35 100644 --- a/js/garden.js +++ b/js/garden.js @@ -428,6 +428,19 @@ function makeCropSchedule(crop, season) { function isSuccession(offset) { const start = offset <= crop.pause ? crop.springPlant : crop.resume; return crop.interval > 0 && + offset != crop.springPlant && + offset >= crop.springPlant && + offset <= fallPlant && + (offset <= crop.pause || offset >= resume) && + (offset - start) % crop.interval == 0; + } + + function isSuccessionStart(offset) { + offset += crop.headStart; + const start = offset <= crop.pause ? crop.springPlant : crop.resume; + return crop.interval > 0 && + crop.transplant && + offset != crop.springPlant && offset >= crop.springPlant && offset <= fallPlant && (offset <= crop.pause || offset >= resume) && @@ -440,31 +453,37 @@ function makeCropSchedule(crop, season) { const resume = season.length - crop.resume; return season.weeks.map(week => { - function action(type) { - const date = weeksLater(season.lastFrostDate, week.offset); - return { - date: date, - actions: type ? [type] : [] - }; - } + const actions = []; if(crop.transplant && week.offset == springStart) { - return action("start"); + actions.push("start"); } else if(crop.transplant && week.offset == crop.springPlant) { - return action("transplant"); + actions.push("transplant"); } else if(week.offset == crop.springPlant) { - return action("sow"); - } else if(isSuccession(week.offset)) { - return action("sow"); - } else if(crop.fallCrop && crop.transplant && week.offset == fallStart) { - return action("start"); - } else if(crop.fallCrop && crop.transplant && week.offset == fallPlant) { - return action("transplant"); - } else if(crop.fallCrop && week.offset == fallPlant) { - return action("sow"); + actions.push("sow"); } - return action(null); + if(isSuccession(week.offset)) { + actions.push(crop.transplant ? "transplant" : "sow"); + } + if(isSuccessionStart(week.offset)) { + actions.push("start"); + } + + if(crop.fallCrop) { + if(crop.transplant && week.offset == fallStart) { + actions.push("start"); + } else if(crop.transplant && week.offset == fallPlant) { + actions.push("transplant"); + } else if(week.offset == fallPlant) { + actions.push("sow"); + } + } + + return { + date: weeksLater(season.lastFrostDate, week.offset), + actions: actions + }; }); } |