ALMaSS Skylark ODDox  1.1
The skylark model description following ODdox protocol
NLCabbageSpring Class Reference

NLCabbageSpring class
. More...

#include <NLCabbageSpring.h>

Public Member Functions

virtual bool Do (Farm *a_farm, LE *a_field, FarmEvent *a_ev)
 The one and only method for a crop management plan. All farm actions go through here. More...
 
 NLCabbageSpring ()
 
- Public Member Functions inherited from Crop
virtual ~Crop ()
 
 Crop ()
 
int GetFirstDate (void)
 
void ChooseNextCrop (int a_no_dates)
 Chooses the next crop to grow in a field. More...
 
int GetCropClassification ()
 
void SetCropClassification (int a_classification)
 

Additional Inherited Members

- Protected Member Functions inherited from Crop
void SimpleEvent (long a_date, int a_todo, bool a_lock)
 Adds an event to this crop management. More...
 
void SimpleEvent_ (long a_date, int a_todo, bool a_lock, Farm *a_farm, LE *a_field)
 Adds an event to this crop management without relying on member variables. More...
 
- Protected Attributes inherited from Crop
Farmm_farm
 
LE * m_field
 
FarmEventm_ev
 
int m_first_date
 
int m_count
 
int m_last_date
 
int m_ddegstoharvest
 
int m_CropClassification
 

Detailed Description

NLCabbageSpring class
.

See NLCabbageSpring.h::NLCabbageSpringToDo for a complete list of all possible events triggered codes by the cabbage management plan. When triggered these events are handled by Farm and are available as information for other objects such as animal and bird models.

Constructor & Destructor Documentation

◆ NLCabbageSpring()

NLCabbageSpring::NLCabbageSpring ( )
inline
76  {
77  // When we start it off, the first possible date for a farm operation is 20th October
78  // This information is used by other crops when they decide how much post processing of
79  // the management is allowed after harvest before the next crop starts.
80  m_first_date=g_date->DayInYear( 15,4 );
81  }

References Crop::m_first_date.

Member Function Documentation

◆ Do()

bool NLCabbageSpring::Do ( Farm a_farm,
LE *  a_field,
FarmEvent a_ev 
)
virtual

The one and only method for a crop management plan. All farm actions go through here.

Called every time something is done to the crop by the farmer in the first instance it is always called with a_ev->todo set to start, but susequently will be called whenever the farmer wants to carry out a new operation.
This method details all the management and relationships between operations necessary to grow and ALMaSS crop - in this case conventional cabbage.

Reimplemented from Crop.

65 {
66  bool done = false; // The boolean value done indicates when we are totally finished with this plan (i.e. it is set to true).
67  int d1 = 0;
68  // Depending what event has occured jump to the correct bit of code
69  switch (a_ev->m_todo)
70  {
71  case nl_cabs_start:
72  {
73  // nl_cabs_start just sets up all the starting conditions and reference dates that are needed to start a nl_ca
74  NL_CABS_WINTER_PLOUGH = false;
75 
76 
77  // Set up the date management stuff
78  // The next bit of code just allows for altering dates after harvest if it is necessary
79  // to allow for a crop which starts its management early.
80 
81  // 2 start and stop dates for all 'movable' events for this crop
82  int noDates = 1;
83  a_field->SetMDates(0, 0, g_date->DayInYear(30, 10)); // last possible day of harvest
84  a_field->SetMDates(1, 0, g_date->DayInYear(30, 10));
85 
86  a_field->SetMConstants(0, 1);
87 
88  // Check the next crop for early start, unless it is a spring crop
89  // in which case we ASSUME that no checking is necessary!!!!
90  // So DO NOT implement a crop that runs over the year boundary (i.e. from spring to spring!), at least not without fixing this.
91 
92  //new if: do the check only for non-optimising farms and if year>0. (030713 - m_rotation used only in the hidden year, so I modified the condition from >7 to >0)
93  //optimising farms not used for now so most of related code is removed (but not in 'start' case)
94  if (!(a_farm->GetType() == tof_OptimisingFarm && g_date->GetYearNumber() > 0)) {
95 
96  if (a_ev->m_startday > g_date->DayInYear(1, 7)) {
97  if (a_field->GetMDates(0, 0) >= a_ev->m_startday)
98  {
99  g_msg->Warn(WARN_BUG, "NLCabbageSpring::Do(): ", "Harvest too late for the next crop to start!!!");
100  int almassnum = g_landscape_p->BackTranslateVegTypes(a_ev->m_next_tov);
101  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
102  }
103  // Now fix any late finishing problems
104  for (int i = 0; i < noDates; i++) {
105  if (a_field->GetMDates(0, i) >= a_ev->m_startday) {
106  a_field->SetMDates(0, i, a_ev->m_startday - 1); //move the starting date
107  }
108  if (a_field->GetMDates(1, i) >= a_ev->m_startday) {
109  a_field->SetMConstants(i, 0); //change the default value of the MConst (=1) to 0 (necessary to correctly execute farm events in case the finishing date (MDate) was moved)
110  a_field->SetMDates(1, i, a_ev->m_startday - 1); //move the finishing date
111  }
112  }
113  }
114  // Now no operations can be timed after the start of the next crop.
115 
116  if (!a_ev->m_first_year) {
117  d1 = g_date->OldDays() + 365 + m_first_date; // Add 365 for spring crop
118  if (g_date->Date() > d1) {
119  // Yes too late - should not happen - raise an error
120  g_msg->Warn(WARN_BUG, "NLCabbageSpring::Do(): ", "Crop start attempt after last possible start date");
121  int prev = g_landscape_p->BackTranslateVegTypes(a_field->GetOwner()->GetPreviousCrop(a_field->GetRotIndex()));
122  g_msg->Warn(WARN_BUG, "Previous Crop ", prev);
123  int almassnum = g_landscape_p->BackTranslateVegTypes(a_ev->m_next_tov);
124  g_msg->Warn("Next Crop ", (double)almassnum); // this causes exit
125  exit(1);
126  }
127  }
128  else {
129  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(25, 4), nl_cabs_spring_planting, false, a_farm, a_field);
130  break;
131  }
132  }//if
133 
134  // End single block date checking code. Please see next line comment as well.
135  // Reinit d1 to first possible starting date.
136  d1 = g_date->OldDays() + g_date->DayInYear(15, 3);
137  if (g_date->Date() >= d1) d1 += 365;
138  // OK, let's go.
139  // Here we queue up the first event - this differs depending on whether we have field on snady or clay soils
140  if (a_field->GetSoilType() == 2 || a_field->GetSoilType() == 6) { // on sandy soils (NL ZAND & LOSS)
141  SimpleEvent_(d1, nl_cabs_spring_plough_sandy, false, a_farm, a_field);
142  }
143  else
144  {
145  d1 = g_date->OldDays() + g_date->DayInYear(10, 4);
146  if (g_date->Date() >= d1) d1 += 365;
147  if (a_farm->IsStockFarmer()) //Stock Farmer
148  {
149  SimpleEvent_(d1, nl_cabs_ferti_s1, false, a_farm, a_field);
150  }
151  else SimpleEvent_(d1, nl_cabs_ferti_p1, false, a_farm, a_field);
152  }
153  }
154  break;
155 
156  // This is the first real farm operation
157 
159  if (a_ev->m_lock || a_farm->DoIt_prob(0.80))
160  {
161  if (!a_farm->SpringPlough(a_field, 0.0, g_date->DayInYear(15, 4) - g_date->DayInYear())) {
162  SimpleEvent_(g_date->Date() + 1, nl_cabs_spring_plough_sandy, true, a_farm, a_field);
163  break;
164  }
165  }
166  d1 = g_date->Date() + 7;
167  if (d1 < g_date->OldDays() + g_date->DayInYear(10, 4)) {
168  d1 = g_date->OldDays() + g_date->DayInYear(10, 4);
169  }
170  if (a_farm->IsStockFarmer()) //Stock Farmer
171  {
172  SimpleEvent_(d1, nl_cabs_ferti_s1, false, a_farm, a_field);
173  }
174  else SimpleEvent_(d1, nl_cabs_ferti_p1, false, a_farm, a_field);
175  break;
176  case nl_cabs_ferti_s1:
177  if (a_ev->m_lock || a_farm->DoIt_prob(0.80))
178  {
179  if (!a_farm->FA_NPK(a_field, 0.0, g_date->DayInYear(30, 4) - g_date->DayInYear())) {
180  SimpleEvent_(g_date->Date() + 1, nl_cabs_ferti_s1, true, a_farm, a_field);
181  break;
182  }
183  }
184  d1 = g_date->Date() + 1;
185  if (d1 < g_date->OldDays() + g_date->DayInYear(25, 4)) {
186  d1 = g_date->OldDays() + g_date->DayInYear(25, 4);
187  }
188  SimpleEvent_(d1, nl_cabs_preseeding_cultivator, false, a_farm, a_field);
189  break;
190  case nl_cabs_ferti_p1:
191  if (a_ev->m_lock || a_farm->DoIt_prob(0.80))
192  {
193  if (!a_farm->FP_NPK(a_field, 0.0, g_date->DayInYear(30, 4) - g_date->DayInYear())) {
194  SimpleEvent_(g_date->Date() + 1, nl_cabs_ferti_p1, true, a_farm, a_field);
195  break;
196  }
197  }
198  d1 = g_date->Date() + 1;
199  if (d1 < g_date->OldDays() + g_date->DayInYear(25, 4)) {
200  d1 = g_date->OldDays() + g_date->DayInYear(25, 4);
201  }
202  SimpleEvent_(d1, nl_cabs_preseeding_cultivator, false, a_farm, a_field);
203  break;
205  if (!a_farm->PreseedingCultivator(a_field, 0.0, g_date->DayInYear(14, 5) - g_date->DayInYear())) {
206  SimpleEvent_(g_date->Date() + 3, nl_cabs_preseeding_cultivator, true, a_farm, a_field);
207  break;
208  }
209  SimpleEvent_(g_date->Date() + 1, nl_cabs_spring_planting, false, a_farm, a_field);
210  break;
211 
213  if (!a_farm->SpringSow(a_field, 0.0, g_date->DayInYear(15, 5) - g_date->DayInYear())) {
214  SimpleEvent_(g_date->Date() + 1, nl_cabs_spring_planting, true, a_farm, a_field);
215  break;
216  }
217  // Here is a fork leading to four parallel events
218  SimpleEvent_(g_date->Date() + 5, nl_cabs_weeding1, false, a_farm, a_field); // Weeding + Herbicide thread
219  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(5, 7), nl_cabs_fungicide1, false, a_farm, a_field); // Fungicide thread
220  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(1, 7), nl_cabs_insecticide1, false, a_farm, a_field); // Insecticide thread = MAIN THREAD
221  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(1, 7), nl_cabs_watering, false, a_farm, a_field); // Watering thread
222  if (a_farm->IsStockFarmer()) //Stock Farmer
223  {
224  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(5, 5), nl_cabs_ferti_s2, false, a_farm, a_field); // N thread
225  }
226  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(5, 5), nl_cabs_ferti_p2, false, a_farm, a_field);
227  if (a_farm->IsStockFarmer()) //Stock Farmer
228  {
229  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(5, 5), nl_cabs_ferti_s4, false, a_farm, a_field); // microelements thread
230  }
231  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(5, 5), nl_cabs_ferti_p4, false, a_farm, a_field);
232  break;
233  case nl_cabs_ferti_s2:
234  if (!a_farm->FA_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(25, 5) - g_date->DayInYear())) {
235  SimpleEvent_(g_date->Date() + 1, nl_cabs_ferti_s2, true, a_farm, a_field);
236  break;
237  }
238  if (a_farm->IsStockFarmer()) //Stock Farmer
239  {
240  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(15, 6), nl_cabs_ferti_s3, false, a_farm, a_field);
241  }
242  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(15, 6), nl_cabs_ferti_p3, false, a_farm, a_field);
243  break;
244  case nl_cabs_ferti_p2:
245  if (!a_farm->FP_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(25, 5) - g_date->DayInYear())) {
246  SimpleEvent_(g_date->Date() + 1, nl_cabs_ferti_p2, true, a_farm, a_field);
247  break;
248  }
249  if (a_farm->IsStockFarmer()) //Stock Farmer
250  {
251  SimpleEvent_(g_date->OldDays() + g_date->DayInYear(15, 6), nl_cabs_ferti_s3, false, a_farm, a_field);
252  }
253  else SimpleEvent_(g_date->OldDays() + g_date->DayInYear(15, 6), nl_cabs_ferti_p3, false, a_farm, a_field);
254  break;
255  case nl_cabs_ferti_s3:
256  if (a_ev->m_lock || a_farm->DoIt_prob(0.60))
257  {
258  if (!a_farm->FA_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(30, 6) - g_date->DayInYear())) {
259  SimpleEvent_(g_date->Date() + 1, nl_cabs_ferti_s3, true, a_farm, a_field);
260  break;
261  }
262  }
263  // End of thread
264  break;
265  case nl_cabs_ferti_p3:
266  if (a_ev->m_lock || a_farm->DoIt_prob(0.60))
267  {
268  if (!a_farm->FP_AmmoniumSulphate(a_field, 0.0, g_date->DayInYear(30, 6) - g_date->DayInYear())) {
269  SimpleEvent_(g_date->Date() + 1, nl_cabs_ferti_p3, true, a_farm, a_field);
270  break;
271  }
272  }
273  // End of thread
274  break;
275  case nl_cabs_ferti_s4:
276  if (a_ev->m_lock || a_farm->DoIt_prob(0.50))
277  {
278  if (!a_farm->FA_ManganeseSulphate(a_field, 0.0, g_date->DayInYear(30, 6) - g_date->DayInYear())) {
279  SimpleEvent_(g_date->Date() + 1, nl_cabs_ferti_s4, true, a_farm, a_field);
280  break;
281  }
282  }
283  // End of thread
284  break;
285  case nl_cabs_ferti_p4:
286  if (a_ev->m_lock || a_farm->DoIt_prob(0.50))
287  {
288  if (!a_farm->FP_ManganeseSulphate(a_field, 0.0, g_date->DayInYear(30, 6) - g_date->DayInYear())) {
289  SimpleEvent_(g_date->Date() + 1, nl_cabs_ferti_p4, true, a_farm, a_field);
290  break;
291  }
292  }
293  // End of thread
294  break;
295  case nl_cabs_watering:
296  if (a_ev->m_lock || a_farm->DoIt_prob(0.50))
297  {
298  if (!a_farm->Water(a_field, 0.0, g_date->DayInYear(15, 8) - g_date->DayInYear())) {
299  SimpleEvent_(g_date->Date() + 1, nl_cabs_watering, true, a_farm, a_field);
300  break;
301  }
302  }
303  // End of thread
304  break;
305  case nl_cabs_weeding1:
306  if (a_field->GetGreenBiomass() <= 0) {
307  SimpleEvent_(g_date->Date() + 1, nl_cabs_weeding1, false, a_farm, a_field);
308  }
309  else
310  {
311  if (a_ev->m_lock || a_farm->DoIt_prob(0.20))
312  {
313  if (!a_farm->ShallowHarrow(a_field, 0.0, g_date->DayInYear(15, 6) - g_date->DayInYear())) {
314  SimpleEvent_(g_date->Date() + 1, nl_cabs_weeding1, true, a_farm, a_field);
315  break;
316  }
317  // end of thread
318  break;
319  }
320  SimpleEvent_(g_date->Date() + 1, nl_cabs_herbicide1, false, a_farm, a_field);
321  break;
322  }
323  break;
324  case nl_cabs_herbicide1:
325  if (a_field->GetGreenBiomass() <= 0) {
326  SimpleEvent_(g_date->Date() + 1, nl_cabs_herbicide1, false, a_farm, a_field);
327  }
328  else
329  {
330  if (!a_farm->HerbicideTreat(a_field, 0.0, g_date->DayInYear(25, 5) - g_date->DayInYear())) {
331  SimpleEvent_(g_date->Date() + 1, nl_cabs_herbicide1, true, a_farm, a_field);
332  break;
333  }
334  SimpleEvent_(g_date->Date() + 14, nl_cabs_weeding2, false, a_farm, a_field);
335  break;
336  }
337  break;
338  case nl_cabs_weeding2:
339  if (!a_farm->ShallowHarrow(a_field, 0.0, g_date->DayInYear(15, 6) - g_date->DayInYear())) {
340  SimpleEvent_(g_date->Date() + 1, nl_cabs_weeding2, true, a_farm, a_field);
341  break;
342  }
343  // end of thread
344  break;
345  case nl_cabs_fungicide1:
346  // Here comes the fungicide thread
347  if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(25, 7) - g_date->DayInYear())) {
348  SimpleEvent_(g_date->Date() + 1, nl_cabs_fungicide1, true, a_farm, a_field);
349  break;
350  }
351  SimpleEvent_(g_date->Date() + 14, nl_cabs_fungicide2, false, a_farm, a_field);
352  break;
353  case nl_cabs_fungicide2:
354  if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(20, 8) - g_date->DayInYear())) {
355  SimpleEvent_(g_date->Date() + 1, nl_cabs_fungicide2, true, a_farm, a_field);
356  break;
357  }
358  SimpleEvent_(g_date->Date() + 14, nl_cabs_fungicide3, false, a_farm, a_field);
359  break;
360  case nl_cabs_fungicide3:
361  if (a_ev->m_lock || a_farm->DoIt_prob(0.80))
362  {
363  if (!a_farm->FungicideTreat(a_field, 0.0, g_date->DayInYear(5, 9) - g_date->DayInYear())) {
364  SimpleEvent_(g_date->Date() + 1, nl_cabs_fungicide3, true, a_farm, a_field);
365  break;
366  }
367  }
368  // End of thread
369  break;
371  // Here comes the insecticide thread
372  // here we check wheter we are using ERA pesticide or not
373  if (!cfg_pest_cabbage_on.value() ||
374  !g_landscape_p->SupplyShouldSpray()) // Not using pesticide spray
375  {
376  if (!a_farm->InsecticideTreat(a_field, 0.0, g_date->DayInYear(10, 9) - g_date->DayInYear())) {
377  SimpleEvent_(g_date->Date() + 1, nl_cabs_insecticide1, true, a_farm, a_field);
378  break;
379  }
380  }
381  else {
382  a_farm->ProductApplication(a_field, 0.0, 0, cfg_pest_product_1_amount.value(), ppp_1);
383  }
384  SimpleEvent_(g_date->Date() + 14, nl_cabs_insecticide2, false, a_farm, a_field);
385  break;
387  // here we check wheter we are using ERA pesticide or not
388  if (!cfg_pest_cabbage_on.value() ||
389  !g_landscape_p->SupplyShouldSpray()) // Not using pesticide spray
390  {
391  if (!a_farm->InsecticideTreat(a_field, 0.0, g_date->DayInYear(25, 9) - g_date->DayInYear())) {
392  SimpleEvent_(g_date->Date() + 1, nl_cabs_insecticide2, true, a_farm, a_field);
393  break;
394  }
395  }
396  else {
397  a_farm->ProductApplication(a_field, 0.0, 0, cfg_pest_product_1_amount.value(), ppp_1);
398  }
399  SimpleEvent_(g_date->Date() + 14, nl_cabs_insecticide3, false, a_farm, a_field);
400  break;
402  // here we check wheter we are using ERA pesticide or not
403  if (!cfg_pest_cabbage_on.value() ||
404  !g_landscape_p->SupplyShouldSpray()) // Not using pesticide spray
405  {
406  if (!a_farm->InsecticideTreat(a_field, 0.0, g_date->DayInYear(5, 10) - g_date->DayInYear())) {
407  SimpleEvent_(g_date->Date() + 1, nl_cabs_insecticide3, true, a_farm, a_field);
408  break;
409  }
410  }
411  else {
412  a_farm->ProductApplication(a_field, 0.0, 0, cfg_pest_product_1_amount.value(), ppp_1);
413  }
414  SimpleEvent_(g_date->Date() + 10, nl_cabs_harvest, false, a_farm, a_field);
415  break;
416  case nl_cabs_harvest:
417  // Here the MAIN thread continues
418  // We don't move harvest days
419  if (!a_farm->Harvest(a_field, 0.0, a_field->GetMDates(0, 0) - g_date->DayInYear())) {
420  SimpleEvent_(g_date->Date() + 1, nl_cabs_harvest, true, a_farm, a_field);
421  break;
422  }
423  done = true;
424  // So we are done, and somwhere else the farmer will queue up the start event of the next crop
425  // END of MAIN THREAD
426  break;
427  default:
428  g_msg->Warn(WARN_BUG, "NLCabbageSpring::Do(): "
429  "Unknown event type! ", "");
430  exit(1);
431  }
432  return done;
433 }

References Landscape::BackTranslateVegTypes(), cfg_pest_cabbage_on, cfg_pest_product_1_amount, Farm::DoIt_prob(), Farm::FA_NPK(), Farm::FP_NPK(), g_landscape_p, Farm::GetType(), Farm::IsStockFarmer(), Crop::m_first_date, FarmEvent::m_first_year, FarmEvent::m_lock, FarmEvent::m_next_tov, FarmEvent::m_startday, FarmEvent::m_todo, nl_cabs_ferti_p1, nl_cabs_ferti_p2, nl_cabs_ferti_p3, nl_cabs_ferti_p4, nl_cabs_ferti_s1, nl_cabs_ferti_s2, nl_cabs_ferti_s3, nl_cabs_ferti_s4, nl_cabs_fungicide1, nl_cabs_fungicide2, nl_cabs_fungicide3, nl_cabs_harvest, nl_cabs_herbicide1, nl_cabs_insecticide1, nl_cabs_insecticide2, nl_cabs_insecticide3, nl_cabs_preseeding_cultivator, nl_cabs_spring_planting, nl_cabs_spring_plough_sandy, nl_cabs_start, nl_cabs_watering, nl_cabs_weeding1, nl_cabs_weeding2, NL_CABS_WINTER_PLOUGH, ppp_1, Farm::PreseedingCultivator(), Crop::SimpleEvent_(), Farm::SpringPlough(), Landscape::SupplyShouldSpray(), and tof_OptimisingFarm.


The documentation for this class was generated from the following files:
nl_cabs_spring_planting
Definition: NLCabbageSpring.h:42
nl_cabs_insecticide2
Definition: NLCabbageSpring.h:50
Farm::PreseedingCultivator
virtual bool PreseedingCultivator(LE *a_field, double a_user, int a_days)
Carry out preseeding cultivation on a_field (tilling set including cultivator and string roller to co...
Definition: farmfuncs.cpp:311
Farm::SpringPlough
virtual bool SpringPlough(LE *a_field, double a_user, int a_days)
Carry out a ploughing event in the spring on a_field.
Definition: farmfuncs.cpp:444
Farm::IsStockFarmer
bool IsStockFarmer(void)
Definition: farm.h:905
FarmEvent::m_lock
bool m_lock
Definition: farm.h:465
Landscape::SupplyShouldSpray
bool SupplyShouldSpray()
Definition: Landscape.h:357
Farm::FP_NPK
virtual bool FP_NPK(LE *a_field, double a_user, int a_days)
Apply NPK fertilizer, on a_field owned by an arable farmer.
Definition: farmfuncs.cpp:629
FarmEvent::m_first_year
bool m_first_year
Definition: farm.h:467
nl_cabs_ferti_s4
Definition: NLCabbageSpring.h:57
nl_cabs_fungicide3
Definition: NLCabbageSpring.h:48
tof_OptimisingFarm
Definition: farm.h:273
Farm::DoIt_prob
bool DoIt_prob(double a_probability)
Return chance out of 0 to 1.
Definition: farm.cpp:808
nl_cabs_weeding1
Definition: NLCabbageSpring.h:43
Landscape::BackTranslateVegTypes
int BackTranslateVegTypes(TTypesOfVegetation VegReference)
Definition: Landscape.h:1669
nl_cabs_fungicide1
Definition: NLCabbageSpring.h:46
Farm::GetType
TTypesOfFarm GetType(void)
Definition: farm.h:901
Crop::m_first_date
int m_first_date
Definition: farm.h:540
FarmEvent::m_startday
int m_startday
Definition: farm.h:466
Farm::FA_NPK
virtual bool FA_NPK(LE *a_field, double a_user, int a_days)
Apply NPK fertilizer to a_field owned by an stock farmer.
Definition: farmfuncs.cpp:917
nl_cabs_preseeding_cultivator
Definition: NLCabbageSpring.h:41
nl_cabs_ferti_p3
Definition: NLCabbageSpring.h:54
nl_cabs_weeding2
Definition: NLCabbageSpring.h:45
nl_cabs_watering
Definition: NLCabbageSpring.h:58
nl_cabs_harvest
Definition: NLCabbageSpring.h:59
cfg_pest_cabbage_on
CfgBool cfg_pest_cabbage_on
NL_CABS_WINTER_PLOUGH
#define NL_CABS_WINTER_PLOUGH
A flag used to indicate autumn ploughing status.
Definition: NLCabbageSpring.h:28
nl_cabs_spring_plough_sandy
Definition: NLCabbageSpring.h:38
nl_cabs_insecticide3
Definition: NLCabbageSpring.h:51
nl_cabs_herbicide1
Definition: NLCabbageSpring.h:44
FarmEvent::m_next_tov
TTypesOfVegetation m_next_tov
Definition: farm.h:471
FarmEvent::m_todo
int m_todo
Definition: farm.h:469
nl_cabs_ferti_s2
Definition: NLCabbageSpring.h:53
nl_cabs_start
Definition: NLCabbageSpring.h:36
ppp_1
Definition: farm.h:422
nl_cabs_fungicide2
Definition: NLCabbageSpring.h:47
nl_cabs_ferti_p4
Definition: NLCabbageSpring.h:56
nl_cabs_insecticide1
Definition: NLCabbageSpring.h:49
nl_cabs_ferti_s1
Definition: NLCabbageSpring.h:40
nl_cabs_ferti_p2
Definition: NLCabbageSpring.h:52
nl_cabs_ferti_s3
Definition: NLCabbageSpring.h:55
cfg_pest_product_1_amount
CfgFloat cfg_pest_product_1_amount
g_landscape_p
Landscape * g_landscape_p
Definition: Landscape.cpp:258
nl_cabs_ferti_p1
Definition: NLCabbageSpring.h:39
Crop::SimpleEvent_
void SimpleEvent_(long a_date, int a_todo, bool a_lock, Farm *a_farm, LE *a_field)
Adds an event to this crop management without relying on member variables.
Definition: farm.cpp:312