ALMaSS Vole ODDox  1.1
The vole model description following ODdox protocol
SpringBarleyStriglingCulm.cpp
Go to the documentation of this file.
1 //
2 // SpringBarley.cpp
3 //
4 /*
5 *******************************************************************************************************
6 Copyright (c) 2011, Christopher John Topping, Aarhus University
7 All rights reserved.
8 
9 Redistribution and use in source and binary forms, with or without modification, are permitted provided
10 that the following conditions are met:
11 
12 Redistributions of source code must retain the above copyright notice, this list of conditions and the
13 following disclaimer.
14 Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
15 the following disclaimer in the documentation and/or other materials provided with the distribution.
16 
17 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
18 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
19 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
20 BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
21 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
22 BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
23 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 ********************************************************************************************************
26 */
27 #include "../../Landscape/ls.h"
28 #include "../../Landscape/cropprogs/SpringBarleyStriglingCulm.h"
29 #include "math.h"
30 
31 
32 CfgInt cfg_CulmLastStriglingTime( "STR_CULMLASTSTRIGLINGTIME", CFG_CUSTOM, 1 );
33 
34 extern CfgFloat cfg_ins_app_prop1;
35 extern CfgFloat cfg_herbi_app_prop;
36 extern CfgFloat cfg_fungi_app_prop1;
37 extern CfgFloat cfg_greg_app_prop;
38 extern CfgFloat cfg_strigling_prop;
39 
40 bool SpringBarleyStriglingCulm::Do( Farm * a_farm, LE * a_field, FarmEvent * a_ev ) {
41  m_farm = a_farm;
42  m_field = a_field;
43  m_ev = a_ev;
44 
45  bool done = false;
46 
47  switch ( m_ev->m_todo ) {
48  case sbstc_start: {
49  // Set up the date management stuff
50  // Could save the start day in case it is needed later
51  // m_field->m_startday = m_ev->m_startday;
52  m_last_date = g_date->DayInYear( 30, 8 );
53  // Start and stop dates for all events after harvest
54  int noDates = 2;
55  m_field->SetMDates( 0, 0, g_date->DayInYear( 20, 8 ) );
56  // Determined by harvest date - used to see if at all possible
57  m_field->SetMDates( 1, 0, g_date->DayInYear( 10, 8 ) );
58  m_field->SetMDates( 0, 1, g_date->DayInYear( 10, 8 ) );
59  m_field->SetMDates( 1, 1, g_date->DayInYear( 30, 8 ) );
60  // Check the next crop for early start, unless it is a spring crop
61  // in which case we ASSUME that no checking is necessary!!!!
62  // So DO NOT implement a crop that runs over the year boundary
63  if ( m_ev->m_startday > g_date->DayInYear( 1, 7 ) ) {
64  if ( m_field->GetMDates( 0, 0 ) >= m_ev->m_startday ) {
65  g_msg->Warn( WARN_BUG, "SpringBarley::Do(): ""Harvest too late for the next crop to start!!!", "" );
66  exit( 1 );
67  }
68  // Now fix any late finishing problems
69  for ( int i = 0; i < noDates; i++ ) {
70  if ( m_field->GetMDates( 0, i ) >= m_ev->m_startday )
71  m_field->SetMDates( 0, i, m_ev->m_startday - 1 );
72  if ( m_field->GetMDates( 1, i ) >= m_ev->m_startday )
73  m_field->SetMDates( 1, i, m_ev->m_startday - 1 );
74  }
75  }
76  // Now no operations can be timed after the start of the next crop.
77 
78  int d1;
79  if ( !m_ev->m_first_year ) {
80  int today = g_date->Date();
81  // Are we before July 1st?
82  d1 = g_date->OldDays() + g_date->DayInYear( 1, 7 );
83  if ( today < d1 ) {
84  // Yes, too early. We assumme this is because the last crop was late
85  g_msg->Warn( WARN_BUG, "SpringBarley::Do(): ""Crop start attempt between 1st Jan & 1st July", "" );
86  exit( 1 );
87  } else {
88  d1 = g_date->OldDays() + m_first_date; // Add 365 for spring crop
89  if ( today > d1 ) {
90  // Yes too late - should not happen - raise an error
91  g_msg->Warn( WARN_BUG, "SpringBarley::Do(): ""Crop start attempt after last possible start date", "" );
92  exit( 1 );
93  }
94  }
95  } else {
96  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 4 ), sbstc_spring_plough, false );
97  break;
98  }
99  // End single block date checking code. Please see next line
100  // comment as well.
101  // Reinit d1 to first possible starting date.
102  d1 = g_date->OldDays() + g_date->DayInYear( 1, 11 );
103  if ( g_date->Date() > d1 ) {
104  d1 = g_date->Date();
105  }
106 
107  // OK, let's go.
108  SimpleEvent( d1, sbstc_autumn_plough, false );
109  SBSTC_SLURRY_DONE = false;
110  SBSTC_MANURE_DONE = false;
111  SBSTC_SLURRY_EXEC = false;
112  SBSTC_MANURE_EXEC = false;
113  SBSTC_DID_AUTUMN_PLOUGH = false;
114  }
115  break;
116 
117  case sbstc_autumn_plough:
118  if ( m_ev->m_lock || m_farm->DoIt( 70 ) ) {
119  if ( !m_farm->AutumnPlough( m_field, 0.0, g_date->DayInYear( 30, 11 ) - g_date->DayInYear() ) ) {
120  SimpleEvent( g_date->Date() + 1, sbstc_autumn_plough, true );
121  break;
122  }
124  }
125  // +365 for next year
126  if ( m_farm->IsStockFarmer() ) // StockFarmer
127  {
128  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 3 ) + 365, sbstc_fertslurry_stock, false );
129  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 3 ) + 365, sbstc_fertmanure_stock_one, false );
130  } else { // PlantFarmer
131  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 20, 3 ) + 365, sbstc_spring_plough, false );
132  }
133  break;
134 
135  //*** The stock farmers thread
137  if ( m_ev->m_lock || m_farm->DoIt( 90 ) ) {
138  if ( !m_farm->FA_Slurry( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
139  SimpleEvent( g_date->Date() + 1, sbstc_fertslurry_stock, true );
140  break;
141  }
142  SBSTC_SLURRY_EXEC = true;
143  }
144  SBSTC_SLURRY_DONE = true;
145  if ( SBSTC_MANURE_DONE ) {
146  // We are the last thread, so queue up spring plough.
147  SimpleEvent( g_date->Date(), sbstc_spring_plough, false );
148  }
149  break;
150 
152  if ( m_ev->m_lock || m_farm->DoIt( 67 ) ) {
153  if ( !m_farm->FA_Manure( m_field, 0.0, g_date->DayInYear( 15, 4 ) - g_date->DayInYear() ) ) {
154  SimpleEvent( g_date->Date() + 1, sbstc_fertmanure_stock_one, true );
155  break;
156  }
157  SBSTC_MANURE_EXEC = true;
158  }
159  SBSTC_MANURE_DONE = true;
160  if ( SBSTC_SLURRY_DONE ) {
161  SimpleEvent( g_date->Date(), sbstc_spring_plough, false );
162  }
163  break;
164 
165  case sbstc_spring_plough:
166  if ( !SBSTC_DID_AUTUMN_PLOUGH ) {
167  if ( !m_farm->SpringPlough( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
168  SimpleEvent( g_date->Date() + 1, sbstc_spring_plough, true );
169  break;
170  }
171  }
172  {
173  int d1 = g_date->Date();
174  if ( d1 < g_date->OldDays() + g_date->DayInYear( 20, 3 ) ) {
175  d1 = g_date->OldDays() + g_date->DayInYear( 20, 3 );
176  }
177  SimpleEvent( d1, sbstc_spring_harrow, false );
178  }
179  break;
180 
181  case sbstc_spring_harrow:
182  if ( !m_farm->SpringHarrow( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
183  SimpleEvent( g_date->Date() + 1, sbstc_spring_harrow, true );
184  break;
185  }
186  if ( m_farm->IsStockFarmer() ) {
187  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5, 4 ), sbstc_fertmanure_stock_two, false );
188  } else {
189  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 5, 4 ), sbstc_fertmanure_plant, false );
190  }
191  break;
192 
194  if ( m_ev->m_lock || m_farm->DoIt( 65 ) || ( !SBSTC_SLURRY_EXEC && !SBSTC_MANURE_EXEC ) ) {
195  if ( !m_farm->FA_NPK( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
196  SimpleEvent( g_date->Date() + 1, sbstc_fertmanure_stock_two, true );
197  break;
198  }
199  }
200  {
201  int d1 = g_date->Date();
202  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25, 3 ) ) {
203  d1 = g_date->OldDays() + g_date->DayInYear( 25, 3 );
204  }
205  SimpleEvent( d1, sbstc_spring_sow, false );
206  }
207  break;
208 
210  if ( m_ev->m_lock || m_farm->DoIt( 75 ) ) {
211  if ( !m_farm->FP_NPK( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
212  SimpleEvent( g_date->Date() + 1, sbstc_fertmanure_plant, true );
213  break;
214  }
215  // Did FP_NPK so go directly to spring sow.
216  {
217  int d1 = g_date->Date();
218  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25, 3 ) ) {
219  d1 = g_date->OldDays() + g_date->DayInYear( 25, 3 );
220  }
221  SimpleEvent( d1, sbstc_spring_sow, false );
222  }
223  break;
224  }
225  SimpleEvent( g_date->Date(), sbstc_fertlnh3_plant, false );
226  break;
227 
229  if ( !m_farm->FP_LiquidNH3( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
230  SimpleEvent( g_date->Date() + 1, sbstc_fertlnh3_plant, true );
231  break;
232  }
233  SimpleEvent( g_date->Date(), sbstc_fertpk_plant, false );
234  break;
235 
236  case sbstc_fertpk_plant:
237  if ( !m_farm->FP_PK( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
238  SimpleEvent( g_date->Date() + 1, sbstc_fertpk_plant, true );
239  break;
240  }
241  {
242  int d1 = g_date->Date();
243  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25, 3 ) ) {
244  d1 = g_date->OldDays() + g_date->DayInYear( 25, 3 );
245  }
246  SimpleEvent( d1, sbstc_spring_sow, false );
247  }
248  break;
249 
250  case sbstc_spring_sow:
251  if ( !m_farm->SpringSow( m_field, 0.0, g_date->DayInYear( 10, 4 ) - g_date->DayInYear() ) ) {
252  SimpleEvent( g_date->Date() + 1, sbstc_spring_sow, true );
253  break;
254  }
255  {
256  int d1 = g_date->Date();
257  if ( d1 < g_date->OldDays() + g_date->DayInYear( 5, 4 ) ) {
258  d1 = g_date->OldDays() + g_date->DayInYear( 5, 4 );
259  }
260  SimpleEvent( d1, sbstc_spring_roll, false );
261  }
262  break;
263 
264  case sbstc_spring_roll:
265  if ( m_ev->m_lock || m_farm->DoIt( 30 ) ) {
266  if ( !m_farm->SpringRoll( m_field, 0.0, g_date->DayInYear( 20, 4 ) - g_date->DayInYear() ) ) {
267  SimpleEvent( g_date->Date() + 1, sbstc_spring_roll, true );
268  break;
269  }
270  }
271  SBSTC_HERBI_DATE = 0;
272  SBSTC_GR_DATE = 0;
273  SBSTC_FUNGI_DATE = 0;
274  SBSTC_WATER_DATE = 0;
275  SBSTC_INSECT_DATE = 0;
276  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 4 ), sbstc_strigling_one, true );
277  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 5 ), sbstc_fungicide_one, false ); // Main.
278  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 5 ), sbstc_GR, false );
279  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 15, 5 ), sbstc_water_one, false );
280  break;
281 
282 
283  case sbstc_strigling_one:
284  if ( !m_farm->Strigling( m_field, 0.0, 0 ) ) {
285  SimpleEvent( g_date->Date() + 1, sbstc_strigling_one, true );
286  break;
287  } else {
288  if ( cfg_CulmLastStriglingTime.value() > 1 )
289  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 20, 4 ), sbstc_strigling_two, true );
290  }
291  break;
292  // end the thread
293 
294  case sbstc_strigling_two:
295  if ( !m_farm->Strigling( m_field, 0.0, 0 ) ) {
296  SimpleEvent( g_date->Date() + 1, sbstc_strigling_two, true );
297  break;
298  } else {
299  if ( cfg_CulmLastStriglingTime.value() > 2 )
300  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 30, 4 ), sbstc_strigling_three, true );
301  }
302  break;
303  // end the thread
304 
306  if ( !m_farm->Strigling( m_field, 0.0, 0 ) ) {
307  SimpleEvent( g_date->Date() + 1, sbstc_strigling_three, true );
308  break;
309  } else {
310  if ( cfg_CulmLastStriglingTime.value() > 3 )
311  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 10, 5 ), sbstc_strigling_four, true );
312  }
313  break;
314  // end the thread
315 
317  if ( !m_farm->Strigling( m_field, 0.0, 0 ) ) {
318  SimpleEvent( g_date->Date() + 1, sbstc_strigling_four, true );
319  break;
320  }
321  break;
322  // end the thread
323 
324  // GReg thread
325  case sbstc_GR:
326  if ( g_date->Date() < SBSTC_HERBI_DATE + 1 || g_date->Date() < SBSTC_FUNGI_DATE + 1 ) {
327  SimpleEvent( g_date->Date() + 1, sbstc_GR, m_ev->m_lock );
328  break;
329  }
330  if ( m_ev->m_lock || m_farm->DoIt( ( int )floor( 0.5 + 5 * cfg_greg_app_prop.value() ) ) ) {
331  if ( !m_farm->GrowthRegulator( m_field, 0.0, g_date->DayInYear( 25, 5 ) - g_date->DayInYear() ) ) {
332  SimpleEvent( g_date->Date() + 1, sbstc_GR, true );
333  break;
334  }
335  SBSTC_GR_DATE = g_date->Date();
336  }
337  break;
338 
339  // Fungicide thread & MAIN THREAD
340  case sbstc_fungicide_one:
341  if ( g_date->Date() < SBSTC_HERBI_DATE + 1 || g_date->Date() < SBSTC_GR_DATE + 1 ) {
342  SimpleEvent( g_date->Date() + 1, sbstc_fungicide_one, m_ev->m_lock );
343  break;
344  }
345  if ( m_ev->m_lock || m_farm->DoIt( ( int )floor( 0.5 + 30 * cfg_fungi_app_prop1.value() ) ) ) {
346  if ( !m_farm->FungicideTreat( m_field, 0.0, g_date->DayInYear( 25, 5 ) - g_date->DayInYear() ) ) {
347  SimpleEvent( g_date->Date() + 1, sbstc_fungicide_one, true );
348  break;
349  }
350  SBSTC_FUNGI_DATE = g_date->Date();
351  {
352  int d1 = g_date->Date() + 10;
353  if ( d1 < g_date->OldDays() + g_date->DayInYear( 25, 5 ) ) {
354  d1 = g_date->OldDays() + g_date->DayInYear( 25, 5 );
355  }
356  SimpleEvent( d1, sbstc_fungicide_two, false );
357  }
358  }
359  {
360  int d1 = g_date->Date();
361  if ( d1 < g_date->OldDays() + g_date->DayInYear( 15, 5 ) ) {
362  d1 = g_date->OldDays() + g_date->DayInYear( 15, 5 );
363  }
364  SimpleEvent( d1, sbstc_insecticide, false );
365  }
366  break;
367 
368  case sbstc_fungicide_two:
369  if ( g_date->Date() < SBSTC_HERBI_DATE + 1 || g_date->Date() < SBSTC_GR_DATE + 1 ) {
370  SimpleEvent( g_date->Date() + 1, sbstc_fungicide_two, m_ev->m_lock );
371  break;
372  }
373  if ( m_ev->m_lock || m_farm->DoIt( ( int )floor( 0.5 + 33 * cfg_fungi_app_prop1.value() ) ) ) {
374  if ( !m_farm->FungicideTreat( m_field, 0.0, g_date->DayInYear( 10, 6 ) - g_date->DayInYear() ) ) {
375  SimpleEvent( g_date->Date() + 1, sbstc_fungicide_two, true );
376  break;
377  }
378  SBSTC_FUNGI_DATE = g_date->Date();
379  }
380  break;
381 
382  // Water thread
383  case sbstc_water_one:
384  if ( g_date->Date() < SBSTC_HERBI_DATE + 1 || g_date->Date() < SBSTC_FUNGI_DATE + 1 ) {
385  SimpleEvent( g_date->Date() + 1, sbstc_water_one, m_ev->m_lock );
386  break;
387  }
388  if ( m_ev->m_lock || m_farm->DoIt( 20 ) ) {
389  if ( !m_farm->Water( m_field, 0.0, g_date->DayInYear( 30, 5 ) - g_date->DayInYear() ) ) {
390  SimpleEvent( g_date->Date() + 1, sbstc_water_one, true );
391  break;
392  }
393  SBSTC_WATER_DATE = g_date->Date();
394  }
395  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 6 ), sbstc_water_two, false );
396  break;
397 
398  case sbstc_water_two:
399  if ( g_date->Date() < SBSTC_INSECT_DATE + 1 ) {
400  SimpleEvent( g_date->Date() + 1, sbstc_water_two, m_ev->m_lock );
401  break;
402  }
403  if ( m_ev->m_lock || m_farm->DoIt( 10 ) ) {
404  if ( !m_farm->Water( m_field, 0.0, g_date->DayInYear( 1, 7 ) - g_date->DayInYear() ) ) {
405  SimpleEvent( g_date->Date() + 1, sbstc_water_two, true );
406  break;
407  }
408  SBSTC_WATER_DATE = g_date->Date();
409  }
410  break;
411 
412  // Insecticide thread & MAIN THREAD
413  case sbstc_insecticide:
414  if ( g_date->Date() < SBSTC_WATER_DATE + 1 ) {
415  SimpleEvent( g_date->Date() + 1, sbstc_insecticide, m_ev->m_lock );
416  break;
417  }
418  if ( m_ev->m_lock || m_farm->DoIt( ( int )floor( 0.5 + 35 * cfg_ins_app_prop1.value() ) ) ) {
419  if ( !m_farm->InsecticideTreat( m_field, 0.0, g_date->DayInYear( 10, 6 ) - g_date->DayInYear() ) ) {
420  SimpleEvent( g_date->Date() + 1, sbstc_insecticide, true );
421  break;
422  }
423  SBSTC_INSECT_DATE = g_date->Date();
424  }
425  SimpleEvent( g_date->OldDays() + g_date->DayInYear( 1, 8 ), sbstc_harvest, false );
426  break;
427 
428  case sbstc_harvest:
429  if ( !m_farm->Harvest( m_field, 0.0, g_date->DayInYear( 20, 8 ) - g_date->DayInYear() ) ) {
430  SimpleEvent( g_date->Date() + 1, sbstc_harvest, true );
431  break;
432  }
433  SimpleEvent( g_date->Date(), sbstc_straw_chopping, false );
434  break;
435 
437  if ( m_ev->m_lock || m_farm->DoIt( 50 ) ) {
438  // Force straw chopping to happen on the same day as harvest.
439  if ( !m_farm->StrawChopping( m_field, 0.0, 0 ) ) {
440  // Shouldn't happen.
441  SimpleEvent( g_date->Date(), sbstc_straw_chopping, true );
442  break;
443  }
444  // Did chop, so go directly to stubble harrowing.
445  SimpleEvent( g_date->OldDays() + m_field->GetMDates( 0, 1 ), sbstc_stubble_harrow, false );
446  break;
447  }
448  // Do hay baling first.
449  SimpleEvent( g_date->Date(), sbstc_hay_baling, false );
450  break;
451 
452  case sbstc_hay_baling:
453  if ( !m_farm->HayBailing( m_field, 0.0, m_field->GetMDates( 1, 0 ) - g_date->DayInYear() ) ) {
454  SimpleEvent( g_date->Date() + 1, sbstc_hay_baling, true );
455  break;
456  }
457  SimpleEvent( g_date->OldDays() + m_field->GetMDates( 0, 1 ), sbstc_stubble_harrow, false );
458  break;
459 
461  if ( m_ev->m_lock || m_farm->DoIt( 60 ) ) {
462  if ( !m_farm->StubbleHarrowing( m_field, 0.0, m_field->GetMDates( 1, 1 ) - g_date->DayInYear() ) ) {
463  SimpleEvent( g_date->Date() + 1, sbstc_stubble_harrow, true );
464  break;
465  }
466  }
467  // END MAIN THREAD
468  done = true;
469  break;
470 
471  default:
472  g_msg->Warn( WARN_BUG, "SpringBarley::Do(): ""Unknown event type! ", "" );
473  exit( 1 );
474  }
475  return done;
476 }
477 
478 
Farm::SpringRoll
virtual bool SpringRoll(LE *a_field, double a_user, int a_days)
Carry out a roll event in the spring on a_field.
Definition: farmfuncs.cpp:525
sbstc_spring_roll
Definition: SpringBarleyStriglingCulm.h:57
Farm::FA_Slurry
virtual bool FA_Slurry(LE *a_field, double a_user, int a_days)
Spready slurry on a_field owned by an stock farmer.
Definition: farmfuncs.cpp:965
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
Farm::Strigling
virtual bool Strigling(LE *a_field, double a_user, int a_days)
Carry out a mechanical weeding on a_field.
Definition: farmfuncs.cpp:1545
sbstc_spring_plough
Definition: SpringBarleyStriglingCulm.h:49
Farm::Harvest
virtual bool Harvest(LE *a_field, double a_user, int a_days)
Carry out a harvest on a_field.
Definition: farmfuncs.cpp:1769
FarmEvent::m_lock
bool m_lock
Definition: farm.h:465
cfg_CulmLastStriglingTime
CfgInt cfg_CulmLastStriglingTime("STR_CULMLASTSTRIGLINGTIME", CFG_CUSTOM, 1)
sbstc_fertmanure_stock_one
Definition: SpringBarleyStriglingCulm.h:48
FarmEvent
A struct to hold the information required to trigger a farm event.
Definition: farm.h:463
sbstc_fertslurry_stock
Definition: SpringBarleyStriglingCulm.h:47
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
Farm::DoIt
bool DoIt(double a_probability)
Return chance out of 0 to 100.
Definition: farm.cpp:800
sbstc_water_two
Definition: SpringBarleyStriglingCulm.h:67
FarmEvent::m_first_year
bool m_first_year
Definition: farm.h:467
Farm::FA_Manure
virtual bool FA_Manure(LE *a_field, double a_user, int a_days)
Spread manure on a_field owned by an stock farmer.
Definition: farmfuncs.cpp:1036
cfg_strigling_prop
CfgFloat cfg_strigling_prop
SBSTC_MANURE_EXEC
#define SBSTC_MANURE_EXEC
Definition: SpringBarleyStriglingCulm.h:35
SBSTC_WATER_DATE
#define SBSTC_WATER_DATE
Definition: SpringBarleyStriglingCulm.h:41
SBSTC_FUNGI_DATE
#define SBSTC_FUNGI_DATE
Definition: SpringBarleyStriglingCulm.h:40
sbstc_fertmanure_plant
Definition: SpringBarleyStriglingCulm.h:51
sbstc_spring_sow
Definition: SpringBarleyStriglingCulm.h:56
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
sbstc_GR
Definition: SpringBarleyStriglingCulm.h:62
Farm::FungicideTreat
virtual bool FungicideTreat(LE *a_field, double a_user, int a_days)
Apply fungicide to a_field.
Definition: farmfuncs.cpp:1279
sbstc_fungicide_one
Definition: SpringBarleyStriglingCulm.h:63
Farm::FP_PK
virtual bool FP_PK(LE *a_field, double a_user, int a_days)
Apply PK fertilizer, on a_field owned by an arable farmer.
Definition: farmfuncs.cpp:653
Crop::SimpleEvent
void SimpleEvent(long a_date, int a_todo, bool a_lock)
Adds an event to this crop management.
Definition: farm.cpp:307
sbstc_hay_baling
Definition: SpringBarleyStriglingCulm.h:70
sbstc_fertlnh3_plant
Definition: SpringBarleyStriglingCulm.h:52
sbstc_strigling_two
Definition: SpringBarleyStriglingCulm.h:59
SBSTC_SLURRY_DONE
#define SBSTC_SLURRY_DONE
Definition: SpringBarleyStriglingCulm.h:32
Farm::HayBailing
virtual bool HayBailing(LE *a_field, double a_user, int a_days)
Carry out hay bailing on a_field.
Definition: farmfuncs.cpp:2184
Farm::StrawChopping
virtual bool StrawChopping(LE *a_field, double a_user, int a_days)
Carry out straw chopping on a_field.
Definition: farmfuncs.cpp:2132
sbstc_strigling_four
Definition: SpringBarleyStriglingCulm.h:61
sbstc_fungicide_two
Definition: SpringBarleyStriglingCulm.h:65
SpringBarleyStriglingCulm::Do
bool Do(Farm *a_farm, LE *a_field, FarmEvent *a_ev)
Definition: SpringBarleyStriglingCulm.cpp:40
cfg_greg_app_prop
CfgFloat cfg_greg_app_prop
SBSTC_INSECT_DATE
#define SBSTC_INSECT_DATE
Definition: SpringBarleyStriglingCulm.h:42
sbstc_insecticide
Definition: SpringBarleyStriglingCulm.h:64
cfg_fungi_app_prop1
CfgFloat cfg_fungi_app_prop1
sbstc_fertpk_plant
Definition: SpringBarleyStriglingCulm.h:53
Crop::m_farm
Farm * m_farm
Definition: farm.h:537
Crop::m_field
LE * m_field
Definition: farm.h:538
SBSTC_HERBI_DATE
#define SBSTC_HERBI_DATE
Definition: SpringBarleyStriglingCulm.h:38
sbstc_start
Definition: SpringBarleyStriglingCulm.h:45
FarmEvent::m_todo
int m_todo
Definition: farm.h:469
Farm::InsecticideTreat
virtual bool InsecticideTreat(LE *a_field, double a_user, int a_days)
Apply insecticide to a_field.
Definition: farmfuncs.cpp:1348
SBSTC_SLURRY_EXEC
#define SBSTC_SLURRY_EXEC
Definition: SpringBarleyStriglingCulm.h:34
Farm::Water
virtual bool Water(LE *a_field, double a_user, int a_days)
Carry out a watering on a_field.
Definition: farmfuncs.cpp:1717
Crop::m_last_date
int m_last_date
Definition: farm.h:542
cfg_herbi_app_prop
CfgFloat cfg_herbi_app_prop
Farm::AutumnPlough
virtual bool AutumnPlough(LE *a_field, double a_user, int a_days)
Carry out a ploughing event in the autumn on a_field.
Definition: farmfuncs.cpp:132
Farm::SpringSow
virtual bool SpringSow(LE *a_field, double a_user, int a_days)
Carry out a sowing event in the spring on a_field.
Definition: farmfuncs.cpp:546
sbstc_harvest
Definition: SpringBarleyStriglingCulm.h:68
sbstc_fertmanure_stock_two
Definition: SpringBarleyStriglingCulm.h:54
Farm::FP_LiquidNH3
virtual bool FP_LiquidNH3(LE *a_field, double a_user, int a_days)
Apply liquid ammonia fertilizer to a_field owned by an arable farmer.
Definition: farmfuncs.cpp:677
Farm
The base class for all farm types.
Definition: farm.h:767
Farm::GrowthRegulator
virtual bool GrowthRegulator(LE *a_field, double a_user, int a_days)
Apply growth regulator to a_field.
Definition: farmfuncs.cpp:1250
sbstc_water_one
Definition: SpringBarleyStriglingCulm.h:66
SBSTC_GR_DATE
#define SBSTC_GR_DATE
Definition: SpringBarleyStriglingCulm.h:39
SBSTC_DID_AUTUMN_PLOUGH
#define SBSTC_DID_AUTUMN_PLOUGH
Definition: SpringBarleyStriglingCulm.h:36
sbstc_stubble_harrow
Definition: SpringBarleyStriglingCulm.h:71
SBSTC_MANURE_DONE
#define SBSTC_MANURE_DONE
Definition: SpringBarleyStriglingCulm.h:33
sbstc_autumn_plough
Definition: SpringBarleyStriglingCulm.h:46
Crop::m_ev
FarmEvent * m_ev
Definition: farm.h:539
sbstc_straw_chopping
Definition: SpringBarleyStriglingCulm.h:69
sbstc_spring_harrow
Definition: SpringBarleyStriglingCulm.h:50
cfg_ins_app_prop1
CfgFloat cfg_ins_app_prop1
sbstc_strigling_three
Definition: SpringBarleyStriglingCulm.h:60
sbstc_strigling_one
Definition: SpringBarleyStriglingCulm.h:58
Farm::StubbleHarrowing
virtual bool StubbleHarrowing(LE *a_field, double a_user, int a_days)
Carry out stubble harrowing on a_field.
Definition: farmfuncs.cpp:2209
Farm::SpringHarrow
virtual bool SpringHarrow(LE *a_field, double a_user, int a_days)
Carry out a harrow event in the spring on a_field.
Definition: farmfuncs.cpp:471