ALMaSS Partridge ODdox  1.1
The partridge model description following ODdox protocol
Partridge_Covey.h
Go to the documentation of this file.
1 /*
2 *******************************************************************************************************
3 Copyright (c) 2011, Christopher John Topping, University of Aarhus
4 All rights reserved.
5 
6 Redistribution and use in source and binary forms, with or without modification, are permitted provided
7 that the following conditions are met:
8 
9 Redistributions of source code must retain the above copyright notice, this list of conditions and the
10 following disclaimer.
11 Redistributions in binary form must reproduce the above copyright notice, this list of conditions and
12 the following disclaimer in the documentation and/or other materials provided with the distribution.
13 
14 THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR
15 IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND
16 FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS
17 BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
18 BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
19 BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
20 LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
21 SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
22 ********************************************************************************************************
23 */
37 //---------------------------------------------------------------------------
38 #ifndef Partridge_CoveyH
39 #define Partridge_CoveyH
40 //---------------------------------------------------------------------------
41 
42 extern class CoveyManager * g_covey_manager;
43 class Partridge_Base;
44 class Partridge_Male;
45 class Partridge_Female;
46 
48 class ForIterator {
50  int * m_list;
52  int m_limit;
53 
54 public:
56  int * GetList( void ) {
57  return m_list;
58  }
59 
61  int GetLimit( void ) {
62  return m_limit;
63  }
64 
66  ForIterator( int a_min_incl, int a_max_excl, int a_step_size, int a_norm_min_incl, int a_norm_max_excl );
68  ~ForIterator( void );
69 };
70 
71 
90 class Partridge_Covey : public TAnimal {
91 protected:
92 // Attributes
98  double m_flyto_ts;
106  unsigned int m_id;
110  unsigned int m_members_size;
120  double m_terr_qual;
128  int m_width;
130  int m_height;
154  int m_nest_x;
156  int m_nest_y;
164  double m_dist_moved;
166  double m_food_today;
167 
168 // Methods
170  void CoveyUpdateMemberPositions( int a_x, int a_y );
172  bool NestGoodSpot( int a_x, int a_y );
174  bool NestFindFast( int a_min_x_incl, int a_max_x_excl, int a_min_y_incl, int a_max_y_excl );
176  int Norm( int a_coord, int a_size );
178  int NormInc( int a_coord, int a_size );
180  int NormDec( int a_coord, int a_size );
182  bool NestNearBadAreas( int a_x, int a__y );
184  bool NestBadArea( int a_x, int a__y );
186  bool NestNearNests( int a_x, int a_y, int a_min_dist_sq );
188  bool NestBadAreasScanSlow( int a_min_x, int a_min_y, int a_length, int a_x, int a_y );
190  bool NestBadAreasScanFast( int a_min_x, int a_min_y, int a_length, int a_x, int a_y );
192  bool FlyToFast( int a_distance );
194  bool FlyToSlow( int a_distance );
196  double Pressure( double a_distance );
198  bool PressureLimitExceeded( double a_pressure );
200  void DistanceUpdate( void );
202  void DistanceUpdate2( void );
204  double DistanceToCovey( Partridge_Covey * a_covey );
206  double HabitatEvaluate( int a_center_x, int a_center_y, int * a_size_used, bool a_rethink_size );
208  double HabitatEvaluateFaster( int a_center_x, int a_center_y );
210  double HabitatEvaluateFast( int a_min_x_incl, int a_max_x_excl, int a_min_y_incl, int a_max_y_excl );
212  double HabitatEvaluateSlow( int a_min_x_incl, int a_max_x_excl, int a_min_y_incl, int a_max_y_excl );
214  double HabitatEvalPoly( TTypesOfLandscapeElement a_cet, int a_poly );
216  int HabitatEvalPolyField( int a_field );
217 
237  bool MoveTryExclude( int a_dist_sq );
241  bool MoveTryExcludeHarder( int a_dist_sq );
242 
244  /*
245  Builds an array, m_move_allowed[8], from the current covey
246  location and the MoveTryExclude*() methods, mapping
247  from directions and into booleans. We calculate this array
248  *before* evaluating the actual moves, because it would be pointless
249  to make an expensive loop in MoveOptimalDirection*() below if
250  we already know we will never use said value calculated. \n
251  */
252  void MoveDirectionsAllowed( int a_x, int a_y );
253 
255  /*
256  Given the array of possible directions we might want to move in,
257  calculate a rough evaluation [0:3] of the possible directions
258  in the array m_move_list[8]. The actual food quality summed
259  up during this evaluation is collected in m_move_dir_qual[8].
260  The result of the values in m_move_list[] and m_move_dir_qual[]
261  are assigned the values 0 and 0.0 respectively for those
262  directions, which are blocked by the entries in m_move_allowed[]. \n
263  */
264  void MoveOptimalDirectionSlow( int a_x, int a_y );
267  void MoveOptimalDirectionFast( int a_x, int a_y );
268 
279  int MoveWeighDirection( int a_x, int a_y );
280 
281 
282 public:
288  bool NestFindSlow( int a_min_x_incl, int a_max_x_excl, int a_min_y_incl, int a_max_y_excl );
289 /* double TerrEvalaPoly( TTypesOfLandscapeElement a_cet, int a_poly ) {
290  return TerrEvalPoly( a_cet, a_poly );
291  }
292 */
293 
294 protected:
297 /*
298  // Optional reporting variables - look for m_move_get_enable in comments
299  bool m_move_get_enable;
300  vector < int > m_move_get_x;
301  vector < int > m_move_get_y;
302 */
310  int m_move_qual_hist[ 4 ] [ MOVE_QUAL_HIST_SIZE ];
312  void MoveQualMemory( int a_qual );
313 
321 
323  double MoveDoIt( int * a_x, int * a_y, int a_dir, int a_step_size );
326 
328  double MoveMagicVegToFood( int a_polygon );
330  int MoveEvalEdgesAndQual( int a_edges, double a_qual );
332  int MoveSelectFuzzy( void );
333 
344  bool MoveSelectLimit( int a_limit, int a_x, int a_y );
355  int MoveSelect( void );
366  void MoveVegConstInit( void );
367 
368  // Misc and tuning functions
370  void OntheDadDead();
372  void OntheMumDead();
374  void KillChicks( int percent );
375 
385  int SupplyChickAge( void );
398 
399 public:
401  bool CoveyEmigrate();
405  bool TooClose();
407  bool HaveWeChicks( void );
409  int GetUncleNumber(); // { return m_UncleNumber; }
412  return m_maxAllowedMove;
413  }
414 
417  return m_maxFoodNeedToday;
418  }
419 
421  void OnAddChick( Partridge_Female * a_pf );
423  void OnChickDeath();
425  void OnChickMature();
427  void ChickExtraMortality();
428 
430  void SetCoveyDissolveDate( int date ) {
431  m_CoveyDissolveDate = date;
432  }
433 
435  Partridge_Female * FindMeAMateInCovey( int a_family_counter );
443  Partridge_Base * GetMember(int a_member);
449  void OnDissolve( int date );
451  bool AllFlocking();
453  bool AllFlocking2();
455  bool ArePaired();
457  void SanityCheck();
459  void SanityCheck3();
461  void SanityCheck4();
463  void SanityCheck2( int no_chicks );
464 
467  m_ourChicks--;
468  }
469 
471  int GetOurChicks() {
472  return m_ourChicks;
473  }
474 
476  unsigned int GetCoveySize() {
477  return m_members_size;
478  }
479 
481  void SetChickAge( int age ) {
482  m_ChickAge = age;
483  }
484 
486  int GetChickAge() {
487  return m_ChickAge;
488  }
489 
491  bool CanWeMerge(int a_NoUncles);
493  bool ManagerCheckMerge( int a_noOfUncles );
495  void SetUncle();
497  void KillExcessChicks(int remaining);
502  void ActOnParentDeath();
503 
504 
505  // End CJT section.
506 
508  bool NestFindLocation( void );
509 
511  bool NestOnNest( void ) {
512  return m_nest_on_nest;
513  }
514 
516  void NestLeave( void ) {
517  m_nest_on_nest = false;
518  }
519 
521  int NestGetX( void ) {
522  return m_nest_x;
523  }
524 
526  int NestGetY( void ) {
527  return m_nest_y;
528  }
529 
531  double SupplyFoodToday( void );
533  double SupplyDistanceMoved( void );
534 
535 
536  // *********
537  // CJT note: Using references in parameters to return
538  // values is a *very bad* coding habit due to what is commonly
539  // known as 'side effects', a really nasty class of 'invisible'
540  // bugs. Using pointers to the same effect is OK, as
541  // you can see in the call that something might be happening
542  // to your parameter variable.
544  double AssessHabitatQuality( int & a_sz );
545 
546  // If we only care about elements or we have managed an update to the
547  // TerrQualMap in PartridgePopulationManager, then we can use this much
548  // faster method instead with a constant size of 50m (need to replace this
549  // with a config variable - ***CJT***
551  double AssessHabitatQualityFaster( );
552 
554  int AssessGetSize( void ) {
555  return m_assess_size;
556  }
557 
566  void FixHabitat( void );
568  double SupplyHabitatQuality();
569 
570 
572  void SetFixed( bool a_is_fixed ) {
573  m_peg_is_fixed = a_is_fixed;
574  }
575 
577  bool IsFixed( void ) {
578  return m_peg_is_fixed;
579  }
580 
583  return pob_Covey;
584  }
585 
586 
587  // Remember to set locations in members through SetX(),
588  // SetY() upon moving the covey, including FlyTo().
592  void MoveDistance( int a_max_distance, int a_step_size, double a_food_density_needed );
593 
600  int MoveCanMove( int a_x, int a_y );
601 
602  /*
603  // Optional methods used for inspecting the covey's daily movements
604  // due to MoveDistance(). Intended for demonstration/plotting/debugging
605  // purposes. Can be safely ignored if not needed.
606 
607  // Enable/disable the movement collection engine in MoveDistance().
608  void MoveGetEnable( bool a_state );
609 
610  // Report number of steps taken today.
611  int MoveGetSteps( void );
612 
613  // Prepare for daily loop of fetching movement data.
614  void MoveGetPrepare( void );
615 
616  // Fetch the data in tight loop.
617  bool MoveGet( int * a_x, int * a_y );
618 
619  // Calling MoveGetPrepare(), MoveGetSteps() or MoveGet() with the
620  // movement collecting engine disabled is an error and will result
621  // in a bug being reported, and the program execution will
622  // be terminated.
623 
624  // // Example usage:
625  //
626  // l_covey->MoveGetEnable( true );
627  //
628  // ...
629  //
630  // l_covey->MoveDistance( 200, 10, 1234.0 );
631  // printf( "Steps today: %d\n",
632  // l_covey->MoveGetSteps() );
633  //
634  // l_covey->MoveGetPrepare();
635  //
636  // int x, y;
637  // while ( l_covey->MoveGet( &x, &y )) {
638  // printf( "X: %4d Y: %4d\n", x, y );
639  // }
640 
641  */
642 
647  bool FlyTo( int a_distance );
648 
650  void MoveTo( int a_x, int a_y );
651 
652 
664 
669  Partridge_Female * FindMateInArea( int a_max_distance );
670 
672  void BeginStep( void );
674  void Step( void );
676  void EndStep( void );
677 
679  void AddMember( Partridge_Base * a_new_member );
681  bool IsMember( Partridge_Base * a_possible_member );
682 
688  int RemoveMember( Partridge_Base * a_former_member );
689 
691  unsigned int Memberships( void ) {
692  return m_members_size;
693  }
694 
695  // Methods associated with the territory functionality of a covey.
696 
698  bool LifeEssenceLow( void ) {
699  return m_essence_low;
700  }
701 
703 bool ForceLow( void ) {
704  return m_force_low;
705 }
706 
708  unsigned int X( void ) {
709  return m_covey_x;
710  }
711 
713  unsigned int Y( void ) {
714  return m_covey_y;
715  }
716 
718  unsigned int XCenter( void ) {
719  return m_center_x;
720  }
721 
723  unsigned int YCenter( void ) {
724  return m_center_y;
725  }
726 
728  double XCenterF( void ) {
729  return m_center_x_float;
730  }
731 
733  double YCenterF( void ) {
734  return m_center_y_float;
735  }
736 
738  unsigned int ID( void ) {
739  return m_id;
740  }
741 
742  // The following methods exists solely for the benefit of the manager
743  // class and its friends, eyes only. That includes the con/destructor
744  // pair.
746  void ManagerCheckMerge( void );
748  void ManagerRethinkPos( void );
750  void ManagerDriftPos( void );
752  void ManagerUpdatePos( void );
753 
758  void ManagerSetPermanent( void )
759  {
760  m_permanent_marker = true;
761  }
762 
767  bool ManagerIsPermanant( void ) {
768  return m_permanent_marker;
769  }
770 
772  Partridge_Covey( Partridge_Base * a_first_member, Partridge_Population_Manager * a_manager, unsigned int a_center_x,
773  unsigned int a_center_y, Landscape * a_map );
775  virtual ~Partridge_Covey( void );
776 
777 };
778 
779 
780 
781 // For the benefit of the Covey_Manager.
782 static vector < Partridge_Covey * > g_covey_list;
783 
784 
807 public:
809  void SanityCheck1();
810 
812  void AddCovey( Partridge_Covey * a_covey );
814  bool DelCovey( Partridge_Covey * a_covey );
816  int CoveyDensity(int x, int y, int radius);
818  double BroodGeoMean();
820  void Setpar_force_ignore_below(double ff);
824  }
826  void Tick( void );
827 
829  CoveyManager( unsigned int a_world_width, unsigned int a_world_height, Landscape * a_map );
831  ~CoveyManager( void );
832 };
833 #endif
834 
Partridge_Covey::m_covey_x
int m_covey_x
Covey x-coord.
Definition: Partridge_Covey.h:146
CoveyManager::m_world_width_div2
int m_world_width_div2
Half landscape width.
Definition: Partridge_Covey.h:800
Partridge_Covey::m_state
Partridge_State m_state
The current behavioural state.
Definition: Partridge_Covey.h:124
Partridge_Covey::m_ourChicks
int m_ourChicks
No chicks in covey.
Definition: Partridge_Covey.h:381
Partridge_Covey::m_essence_low
bool m_essence_low
flag for excess density - unused
Definition: Partridge_Covey.h:100
Partridge_Covey::NestBadAreasScanFast
bool NestBadAreasScanFast(int a_min_x, int a_min_y, int a_length, int a_x, int a_y)
Nest location evaluation function.
Definition: Partridge_Covey.cpp:1170
Partridge_Covey::m_force_low
bool m_force_low
unused
Definition: Partridge_Covey.h:122
Partridge_Covey::BeginStep
void BeginStep(void)
Covey BeginStep.
Definition: Partridge_Covey.cpp:1583
Partridge_Covey::m_assess_qual
double m_assess_qual
Habitat quality.
Definition: Partridge_Covey.h:160
Partridge_Covey::OntheMumDead
void OntheMumDead()
Behaviour when alpha female is killed.
Definition: Partridge_Covey.cpp:2494
Partridge_Covey::MoveSelectFuzzy
int MoveSelectFuzzy(void)
Fuzzdy movement selection.
Definition: Partridge_Covey.cpp:244
Partridge_Covey::ManagerIsPermanant
bool ManagerIsPermanant(void)
Unused
Definition: Partridge_Covey.h:767
Partridge_Covey::RemoveMember
int RemoveMember(Partridge_Base *a_former_member)
Remove a member from the covey.
Definition: Partridge_Covey.cpp:1664
Partridge_Covey::Pressure
double Pressure(double a_distance)
Get the pressure force.
Definition: Partridge_Covey.cpp:1724
Partridge_Covey::OnAddChick
void OnAddChick(Partridge_Female *a_pf)
Add a chick.
Definition: Partridge_Covey.cpp:2451
Partridge_Covey::MoveTo
void MoveTo(int a_x, int a_y)
unused
Definition: Partridge_Covey.cpp:570
ForIterator::m_list
int * m_list
List of points
Definition: Partridge_Covey.h:50
Partridge_Male
The partridge male class.
Definition: Partridge_All.h:657
Partridge_Covey::LifeEssenceLow
bool LifeEssenceLow(void)
Definition: Partridge_Covey.h:698
CoveyManager::Getpar_force_ignore_below
double Getpar_force_ignore_below()
Get the minimum interesting force.
Definition: Partridge_Covey.h:822
Partridge_Female
The partridge female class.
Definition: Partridge_All.h:770
Partridge_Covey::m_maxFoodNeedToday
double m_maxFoodNeedToday
Food needed today.
Definition: Partridge_Covey.h:395
Partridge_Covey::MoveDirectionsAllowed
void MoveDirectionsAllowed(int a_x, int a_y)
Test possible movement directions.
Definition: Partridge_Covey.cpp:397
Partridge_Covey::ManagerSetPermanent
void ManagerSetPermanent(void)
Unused
Definition: Partridge_Covey.h:758
Partridge_Covey::m_center_y
int m_center_y
Covey centre.
Definition: Partridge_Covey.h:144
Partridge_Covey::GetMaleInCovey
Partridge_Male * GetMaleInCovey()
Find a male in the covey.
Definition: Partridge_Covey.cpp:2323
Partridge_Covey::OnDissolve
void OnDissolve(int date)
Dissolve message handler.
Definition: Partridge_Covey.cpp:1624
Partridge_Covey::NormInc
int NormInc(int a_coord, int a_size)
Wrap-around utility function.
Definition: Partridge_Covey.cpp:895
Partridge_Covey::GetMember
Partridge_Base * GetMember(int a_member)
Returns pointer to a_member.
Definition: Partridge_Covey.cpp:1638
Partridge_Covey::NormDec
int NormDec(int a_coord, int a_size)
Wrap-around utility function.
Definition: Partridge_Covey.cpp:882
ForIterator::m_limit
int m_limit
How many points
Definition: Partridge_Covey.h:52
Partridge_Covey::MoveCanMove
int MoveCanMove(TTypesOfLandscapeElement a_ele)
Test if we can go there.
Definition: Partridge_Covey.cpp:3221
Partridge_Population_Manager
The population manager for partridge objects.
Definition: Partridge_Population_Manager.h:83
Partridge_Covey::ManagerUpdatePos
void ManagerUpdatePos(void)
Definition: Partridge_Covey.cpp:1948
Partridge_Covey::SupplyChickAge
int SupplyChickAge(void)
Returns the age of the chicks.
Definition: Partridge_Covey.cpp:2608
Partridge_Covey::NestGetX
int NestGetX(void)
Return nest x-coord.
Definition: Partridge_Covey.h:521
ForIterator
Iterator class for wrap around landscape
Definition: Partridge_Covey.h:48
Partridge_State
Partridge_State
Definition: Partridge_All.h:266
Partridge_Covey::m_move_get_index
int m_move_get_index
Internal variable.
Definition: Partridge_Covey.h:304
Partridge_Covey::GetAMember
Partridge_Base * GetAMember()
Returns a random member.
Definition: Partridge_Covey.cpp:1634
CoveyManager::CoveyManager
CoveyManager(unsigned int a_world_width, unsigned int a_world_height, Landscape *a_map)
Constructor.
Definition: Partridge_Covey.cpp:2072
Partridge_Covey::m_new_center_y_float
double m_new_center_y_float
Covey centre as float.
Definition: Partridge_Covey.h:140
Partridge_Covey::m_map
Landscape * m_map
A pointer to the landscape.
Definition: Partridge_Covey.h:126
Partridge_Covey::CoveyUpdateMemberPositions
void CoveyUpdateMemberPositions(int a_x, int a_y)
Update all covey members x,y coords.
Definition: Partridge_Covey.cpp:1093
Partridge_Covey::m_CoveyDissolveDate
int m_CoveyDissolveDate
Date for covey dissolve.
Definition: Partridge_Covey.h:383
Partridge_Covey::m_width
int m_width
Landscape width.
Definition: Partridge_Covey.h:128
Partridge_Covey::NestFindSlow
bool NestFindSlow(int a_min_x_incl, int a_max_x_excl, int a_min_y_incl, int a_max_y_excl)
Find nest location (wrap around)
Definition: Partridge_Covey.cpp:1236
Partridge_Covey::GetmaxFoodNeedToday
double GetmaxFoodNeedToday()
Return the maximum food need today.
Definition: Partridge_Covey.h:416
Partridge_Covey::AssessGetSize
int AssessGetSize(void)
Get the size ('radius') used during territory evaluation.
Definition: Partridge_Covey.h:554
Partridge_Covey::NestFindFast
bool NestFindFast(int a_min_x_incl, int a_max_x_excl, int a_min_y_incl, int a_max_y_excl)
Find nest location.
Definition: Partridge_Covey.cpp:1207
Partridge_Covey::PressureLimitExceeded
bool PressureLimitExceeded(double a_pressure)
Test for exceedence of pressure limit.
Definition: Partridge_Covey.cpp:1737
Partridge_Covey::SanityCheck3
void SanityCheck3()
Debug method.
Definition: Partridge_Covey.cpp:2430
Partridge_Covey::ManagerDriftPos
void ManagerDriftPos(void)
Definition: Partridge_Covey.cpp:1745
Partridge_Covey::RemoveExtraChick
void RemoveExtraChick()
Decrement the chick number.
Definition: Partridge_Covey.h:466
Partridge_Covey::OnChickDeath
void OnChickDeath()
Remove a dead chick.
Definition: Partridge_Covey.cpp:2477
Partridge_Covey::XCenterF
double XCenterF(void)
Definition: Partridge_Covey.h:728
Partridge_Covey::m_center_x_float
double m_center_x_float
Covey centre as float.
Definition: Partridge_Covey.h:134
Partridge_Covey::m_height
int m_height
Landscape height.
Definition: Partridge_Covey.h:130
Partridge_Covey::AssessHabitatQualityFaster
double AssessHabitatQualityFaster()
Assess habitat quality (efficient)
Definition: Partridge_Covey.cpp:1068
CoveyManager::m_world_height
int m_world_height
Landscape height.
Definition: Partridge_Covey.h:798
g_covey_list
static vector< Partridge_Covey * > g_covey_list
Definition: Partridge_Covey.h:782
Partridge_Covey::FindNeighbour
Partridge_Covey * FindNeighbour()
Finds the closest other covey.
Definition: Partridge_Covey.cpp:2290
Partridge_Covey::AllFlocking2
bool AllFlocking2()
Debug method.
Definition: Partridge_Covey.cpp:2373
Partridge_Covey::m_maxAllowedMove
int m_maxAllowedMove
Max move distance today.
Definition: Partridge_Covey.h:390
CoveyManager::m_world_width
int m_world_width
Landscape width.
Definition: Partridge_Covey.h:796
Partridge_Covey::MoveDistance
void MoveDistance(int a_max_distance, int a_step_size, double a_food_density_needed)
Entry point for movement.
Definition: Partridge_Covey.cpp:652
Partridge_Base
Base class for all partridge classes.
Definition: Partridge_All.h:401
Partridge_Covey::ActOnParentDeath
void ActOnParentDeath()
Determine the chick mortality on parent death.
Definition: Partridge_Covey.cpp:2516
Partridge_Covey::GetOurChicks
int GetOurChicks()
Return the number of chicks.
Definition: Partridge_Covey.h:471
Partridge_Covey::m_theMum
Partridge_Female * m_theMum
Pointer to the alpha male.
Definition: Partridge_Covey.h:377
Partridge_Covey::m_flyto_steps
int m_flyto_steps
costly intermediate variable
Definition: Partridge_Covey.h:94
Partridge_Covey::SupplyDistanceMoved
double SupplyDistanceMoved(void)
Return the distance moved today.
Definition: Partridge_Covey.cpp:914
Partridge_Covey::DistanceUpdate
void DistanceUpdate(void)
Updates distance to nearest covey.
Definition: Partridge_Covey.cpp:1301
Partridge_Covey::GetUncle
Partridge_Base * GetUncle()
Find uncle in covey.
Partridge_Covey::GetChickAge
int GetChickAge()
Return chick age.
Definition: Partridge_Covey.h:486
CoveyManager::m_id_counter
int m_id_counter
Counter to keep track of covey ids.
Definition: Partridge_Covey.h:794
Partridge_Covey::MoveMagicVegToFood
double MoveMagicVegToFood(int a_polygon)
Move optimising food intake.
Definition: Partridge_Covey.cpp:3147
Partridge_Covey::FindMeAMateInCovey
Partridge_Female * FindMeAMateInCovey(int a_family_counter)
Is their a suitable female mate in the covey?
Definition: Partridge_Covey.cpp:2334
ForIterator::ForIterator
ForIterator(int a_min_incl, int a_max_excl, int a_step_size, int a_norm_min_incl, int a_norm_max_excl)
Constructor
Definition: Partridge_Covey.cpp:2256
Partridge_Covey::MoveVegConstInit
void MoveVegConstInit(void)
Part of movement evaluation.
Definition: Partridge_Covey.cpp:3304
Partridge_Covey::MoveSelect
int MoveSelect(void)
Part of movement evaluation.
Definition: Partridge_Covey.cpp:330
Partridge_Covey::KillChicks
void KillChicks(int percent)
Kill a proportion of the chicks.
Definition: Partridge_Covey.cpp:2595
CoveyManager::CoveyDensity
int CoveyDensity(int x, int y, int radius)
Unused.
Definition: Partridge_Covey.cpp:2178
Partridge_Covey::MoveOptimalDirectionSlow
void MoveOptimalDirectionSlow(int a_x, int a_y)
Choose best foraging direction.
Definition: Partridge_Covey.cpp:3404
Partridge_Covey::NestGoodSpot
bool NestGoodSpot(int a_x, int a_y)
Evaluate x,y as a nest location.
Definition: Partridge_Covey.cpp:2876
Partridge_Covey::GetmaxAllowedMove
int GetmaxAllowedMove()
Return the max possible move distance today.
Definition: Partridge_Covey.h:411
Partridge_Covey::m_assess_done
bool m_assess_done
Have assessed habitat quality?
Definition: Partridge_Covey.h:158
CoveyManager::DelCovey
bool DelCovey(Partridge_Covey *a_covey)
Remove a covey.
Definition: Partridge_Covey.cpp:2230
Partridge_Covey::FindMateInArea
Partridge_Female * FindMateInArea(int a_max_distance)
Find mate in area.
Definition: Partridge_Covey.cpp:1561
Partridge_Covey::MoveOptimalDirectionFast
void MoveOptimalDirectionFast(int a_x, int a_y)
Choose best foraging direction (wrap around)
Definition: Partridge_Covey.cpp:3667
Partridge_Covey::m_theDad
Partridge_Male * m_theDad
Pointer to the alpha female.
Definition: Partridge_Covey.h:379
Partridge_Covey::YCenterF
double YCenterF(void)
Definition: Partridge_Covey.h:733
Partridge_Covey::NestNearBadAreas
bool NestNearBadAreas(int a_x, int a__y)
Test for proximity to unacceptable areas.
Definition: Partridge_Covey.cpp:1131
Landscape
The landscape class containing all environmental and topographical data.
Definition: landscape.h:112
Partridge_Covey::AllFlocking
bool AllFlocking()
Debug method.
Definition: Partridge_Covey.cpp:2362
Partridge_Covey::m_manager
Partridge_Population_Manager * m_manager
Covey's population manager.
Definition: Partridge_Covey.h:132
Partridge_Covey::ManagerRethinkPos
void ManagerRethinkPos(void)
Definition: Partridge_Covey.cpp:1855
Partridge_Covey::TooClose
bool TooClose()
Test for another covey too close.
Definition: Partridge_Covey.cpp:1271
CoveyManager::Tick
void Tick(void)
Do the covey management for the time-step.
Definition: Partridge_Covey.cpp:2144
CoveyManager::m_par_force_ignore_below
double m_par_force_ignore_below
Minimum interesting force.
Definition: Partridge_Covey.h:806
Partridge_Covey::NestBadArea
bool NestBadArea(int a_x, int a__y)
Nest location evaluation function.
Definition: Partridge_Covey.cpp:2947
Partridge_Covey::NestNearNests
bool NestNearNests(int a_x, int a_y, int a_min_dist_sq)
Nest location evaluation function.
Definition: Partridge_Covey.cpp:1188
Partridge_Covey::m_terr_qual
double m_terr_qual
Homerange evaluation score
Definition: Partridge_Covey.h:120
Partridge_Covey::m_move_get_size
int m_move_get_size
Internal variable.
Definition: Partridge_Covey.h:306
Partridge_Covey::m_move_step_size_inv
double m_move_step_size_inv
Internal variable.
Definition: Partridge_Covey.h:320
Partridge_Covey::XCenter
unsigned int XCenter(void)
Definition: Partridge_Covey.h:718
Partridge_Covey::GetCoveySize
unsigned int GetCoveySize()
Return the covey size.
Definition: Partridge_Covey.h:476
Partridge_Covey::m_neighbourlist_size
int m_neighbourlist_size
Number of coveys close to this covey.
Definition: Partridge_Covey.h:286
CoveyManager::Setpar_force_ignore_below
void Setpar_force_ignore_below(double ff)
Set the minimum interesting force.
Definition: Partridge_Covey.cpp:2113
ForIterator::~ForIterator
~ForIterator(void)
Destructor
Definition: Partridge_Covey.cpp:2284
Partridge_Covey::MoveTryExcludeHarder
bool MoveTryExcludeHarder(int a_dist_sq)
Uses the peg force to exclude possible movement directions.
Definition: Partridge_Covey.cpp:2750
CoveyManager::~CoveyManager
~CoveyManager(void)
Destructor.
Definition: Partridge_Covey.cpp:2099
Partridge_Covey::ID
unsigned int ID(void)
Definition: Partridge_Covey.h:738
Partridge_Covey::DistanceUpdate2
void DistanceUpdate2(void)
Updates distance to fixed nearest covey.
Definition: Partridge_Covey.cpp:1281
Partridge_Object
Partridge_Object
Partridge object types.
Definition: Partridge_All.h:296
pob_Covey
Definition: Partridge_All.h:297
Partridge_Covey::HabitatEvaluateSlow
double HabitatEvaluateSlow(int a_min_x_incl, int a_max_x_excl, int a_min_y_incl, int a_max_y_excl)
Definition: Partridge_Covey.cpp:952
Partridge_Covey::SupplyHabitatQuality
double SupplyHabitatQuality()
Return habitat quality at our location.
Definition: Partridge_Covey.cpp:1050
TAnimal
The base class for all ALMaSS animal classes.
Definition: populationmanager.h:205
Partridge_Covey
The collective for a family of partridges
Definition: Partridge_Covey.h:90
Partridge_Covey::m_nearest_covey_dist
double m_nearest_covey_dist
Closest covey distance
Definition: Partridge_Covey.h:116
Partridge_Covey::Step
void Step(void)
Covey Step.
Definition: Partridge_Covey.cpp:1607
Partridge_Covey::m_members_size
unsigned int m_members_size
Size of covey
Definition: Partridge_Covey.h:110
Partridge_Covey::FindMeAWife
Partridge_Female * FindMeAWife(Partridge_Male *a_male)
Find mate in covey.
Definition: Partridge_Covey.cpp:1518
Partridge_Covey::MoveWeighDirection
int MoveWeighDirection(int a_x, int a_y)
Weighted foraging walk.
Definition: Partridge_Covey.cpp:344
Partridge_Covey::SetFixed
void SetFixed(bool a_is_fixed)
Prevent/enable peg drift.
Definition: Partridge_Covey.h:572
Partridge_Covey::m_center_x
int m_center_x
Covey centre.
Definition: Partridge_Covey.h:142
Partridge_Covey::m_flyto_ts
double m_flyto_ts
costly intermediate variable
Definition: Partridge_Covey.h:98
Partridge_Covey::m_move_qual_hist
int m_move_qual_hist[4][MOVE_QUAL_HIST_SIZE]
Internal variable.
Definition: Partridge_Covey.h:310
Partridge_Covey::ForceLow
bool ForceLow(void)
Definition: Partridge_Covey.h:703
Partridge_Covey::NestBadAreasScanSlow
bool NestBadAreasScanSlow(int a_min_x, int a_min_y, int a_length, int a_x, int a_y)
Nest location evaluation function.
Definition: Partridge_Covey.cpp:1150
Partridge_Covey::m_assess_size
int m_assess_size
Current homerange assessment radius.
Definition: Partridge_Covey.h:296
Partridge_Covey::YCenter
unsigned int YCenter(void)
Definition: Partridge_Covey.h:723
Partridge_Covey::m_id
unsigned int m_id
Unique ID no-
Definition: Partridge_Covey.h:106
Partridge_Covey::CoveyIndividualEmigrate
void CoveyIndividualEmigrate()
Test for individuals from covey emigrating.
Definition: Partridge_Covey.cpp:2655
Partridge_Covey::GetObjectType
Partridge_Object GetObjectType(void)
Return object type.
Definition: Partridge_Covey.h:582
Partridge_Covey::SetCoveyDissolveDate
void SetCoveyDissolveDate(int date)
Set the dissolve date.
Definition: Partridge_Covey.h:430
Partridge_Covey::ChickExtraMortality
void ChickExtraMortality()
Apply extra chick mortality.
Definition: Partridge_Covey.cpp:2671
Partridge_Covey::FlyTo
bool FlyTo(int a_distance)
Fly to
Definition: Partridge_Covey.cpp:1484
Partridge_Covey::m_food_today
double m_food_today
Food collected.
Definition: Partridge_Covey.h:166
Partridge_Covey::m_covey_y
int m_covey_y
Covey y-coord.
Definition: Partridge_Covey.h:148
Partridge_Covey::MoveQualMemory
void MoveQualMemory(int a_qual)
Make a move based on memory of quality.
Definition: Partridge_Covey.cpp:538
Partridge_Covey::FlyToFast
bool FlyToFast(int a_distance)
Move a_distance from current covey position.
Definition: Partridge_Covey.cpp:1349
Partridge_Covey::GetUnpairedFemale
Partridge_Female * GetUnpairedFemale()
Finds the first unpaired female in the covey.
Definition: Partridge_Covey.cpp:2304
Partridge_Covey::m_move_done
bool m_move_done
Have moved?
Definition: Partridge_Covey.h:162
CoveyManager::BroodGeoMean
double BroodGeoMean()
Calculate the geometric mean of no of chicks.
Definition: Partridge_Covey.cpp:2117
Partridge_Covey::m_move_step_size
int m_move_step_size
Internal variable.
Definition: Partridge_Covey.h:318
Partridge_Covey::SetChickAge
void SetChickAge(int age)
Set chick age.
Definition: Partridge_Covey.h:481
Partridge_Covey::SanityCheck
void SanityCheck()
Debug method.
Definition: Partridge_Covey.cpp:2403
Partridge_Covey::NestOnNest
bool NestOnNest(void)
Are we nesting?
Definition: Partridge_Covey.h:511
Partridge_Covey::m_ChickAge
int m_ChickAge
Age of chicks.
Definition: Partridge_Covey.h:397
Partridge_Covey::NestFindLocation
bool NestFindLocation(void)
Try to locate a suitable nesting location.
Definition: Partridge_Covey.cpp:1107
Partridge_Covey::SanityCheck2
void SanityCheck2(int no_chicks)
Debug method.
Definition: Partridge_Covey.cpp:2416
Partridge_Covey::AssessHabitatQuality
double AssessHabitatQuality(int &a_sz)
Assess habitat quality (with checks)
Definition: Partridge_Covey.cpp:1059
Partridge_Covey::Partridge_Covey
Partridge_Covey(Partridge_Base *a_first_member, Partridge_Population_Manager *a_manager, unsigned int a_center_x, unsigned int a_center_y, Landscape *a_map)
Constructor.
Definition: Partridge_Covey.cpp:1977
Partridge_Covey::HabitatEvalPoly
double HabitatEvalPoly(TTypesOfLandscapeElement a_cet, int a_poly)
Definition: Partridge_Covey.cpp:2769
Partridge_Covey::IsMember
bool IsMember(Partridge_Base *a_possible_member)
Definition: Partridge_Covey.cpp:1709
Partridge_Covey::FixHabitat
void FixHabitat(void)
Accept this breeding location.
Definition: Partridge_Covey.cpp:1074
Partridge_Covey::FlyToSlow
bool FlyToSlow(int a_distance)
Move a_distance from current covey position (wraparound)
Definition: Partridge_Covey.cpp:1422
Partridge_Covey::m_nest_on_nest
bool m_nest_on_nest
Nesting flag.
Definition: Partridge_Covey.h:152
Partridge_Covey::DistanceToCovey
double DistanceToCovey(Partridge_Covey *a_covey)
Get distance too covey.
Definition: Partridge_Covey.cpp:1319
Partridge_Covey::m_dist_moved
double m_dist_moved
Distance moved.
Definition: Partridge_Covey.h:164
Partridge_Covey::ManagerCheckMerge
void ManagerCheckMerge(void)
Definition: Partridge_Covey.cpp:1794
CoveyManager::m_world_height_div2
int m_world_height_div2
Half landscape height.
Definition: Partridge_Covey.h:802
Partridge_Covey::m_terr_size
int m_terr_size
Homerange width.
Definition: Partridge_Covey.h:150
Partridge_Covey::SetUncle
void SetUncle()
Swap uncle to alhpha.
Definition: Partridge_Covey.cpp:2540
Partridge_Covey::MoveTryExclude
bool MoveTryExclude(int a_dist_sq)
Uses the peg force to exclude possible movement directions.
Definition: Partridge_Covey.cpp:2735
Partridge_Covey::X
unsigned int X(void)
Definition: Partridge_Covey.h:708
Partridge_Covey::m_move_qual_memory
int m_move_qual_memory[4]
Steps remembered.
Definition: Partridge_Covey.h:308
Partridge_Covey::NestGetY
int NestGetY(void)
Return nest y-coord.
Definition: Partridge_Covey.h:526
TTypesOfLandscapeElement
TTypesOfLandscapeElement
Definition: tole_declaration.h:36
Partridge_Covey::m_new_center_x_float
double m_new_center_x_float
Covey centre as float.
Definition: Partridge_Covey.h:138
Partridge_Covey::m_nest_y
int m_nest_y
Nest coord-y.
Definition: Partridge_Covey.h:156
Partridge_Covey::GetUncleNumber
int GetUncleNumber()
Returns the number of uncles.
Definition: Partridge_Covey.cpp:2560
Partridge_Covey::SanityCheck4
void SanityCheck4()
Debug method.
Definition: Partridge_Covey.cpp:2439
Partridge_Covey::AddMember
void AddMember(Partridge_Base *a_new_member)
Definition: Partridge_Covey.cpp:1644
ForIterator::GetLimit
int GetLimit(void)
Get how many points
Definition: Partridge_Covey.h:61
Partridge_Covey::CoveyEmigrate
bool CoveyEmigrate()
Test for covey emigration.
Definition: Partridge_Covey.cpp:2642
Partridge_Covey::m_peg_is_fixed
bool m_peg_is_fixed
flag for fixed homerange
Definition: Partridge_Covey.h:102
Partridge_Covey::HabitatEvaluateFaster
double HabitatEvaluateFaster(int a_center_x, int a_center_y)
Evaluate habitat fast.
Definition: Partridge_Covey.cpp:1027
Partridge_Covey::m_move_whence_we_came
int m_move_whence_we_came
Internal variable.
Definition: Partridge_Covey.h:316
Partridge_Covey::OntheDadDead
void OntheDadDead()
Behaviour when alpha male is killed.
Definition: Partridge_Covey.cpp:2502
Partridge_Covey::m_members
Partridge_Base * m_members[100]
List of covey members
Definition: Partridge_Covey.h:108
Partridge_Covey::SupplyFoodToday
double SupplyFoodToday(void)
Return the food obtained today.
Definition: Partridge_Covey.cpp:905
Partridge_Covey::HaveWeChicks
bool HaveWeChicks(void)
Check if covey contains chicks.
Definition: Partridge_Covey.cpp:2626
Partridge_Covey::m_flyto_dist
int m_flyto_dist
costly intermediate variable
Definition: Partridge_Covey.h:96
Partridge_Covey::ArePaired
bool ArePaired()
Debug method.
Definition: Partridge_Covey.cpp:2384
CoveyManager::m_map
Landscape * m_map
Pointer to the landscape.
Definition: Partridge_Covey.h:804
Partridge_Covey::IsFixed
bool IsFixed(void)
Wonder whether the peg is fixed?
Definition: Partridge_Covey.h:577
Partridge_Covey::GetUnpairedFemale_virgin
Partridge_Female * GetUnpairedFemale_virgin()
Finds the first never paired female in the covey.
Definition: Partridge_Covey.cpp:2350
Partridge_Covey::HabitatEvaluate
double HabitatEvaluate(int a_center_x, int a_center_y, int *a_size_used, bool a_rethink_size)
Entry point for habitat evaluation.
Definition: Partridge_Covey.cpp:991
Partridge_Covey::MoveDoIt
double MoveDoIt(int *a_x, int *a_y, int a_dir, int a_step_size)
We know where we want to go. Now do it!
Definition: Partridge_Covey.cpp:811
Partridge_Covey::KillExcessChicks
void KillExcessChicks(int remaining)
Kill extra chicks.
Definition: Partridge_Covey.cpp:2573
CoveyManager::AddCovey
void AddCovey(Partridge_Covey *a_covey)
Add a new covey.
Definition: Partridge_Covey.cpp:2222
CoveyManager::SanityCheck1
void SanityCheck1()
A debug function.
Definition: Partridge_Covey.cpp:2104
Partridge_Covey::CanWeMerge
bool CanWeMerge(int a_NoUncles)
Merging test.
Definition: Partridge_Covey.cpp:1833
Partridge_Covey::HabitatEvalPolyField
int HabitatEvalPolyField(int a_field)
Evaluate a field's habitat quality.
Definition: Partridge_Covey.cpp:3028
Partridge_Covey::Y
unsigned int Y(void)
Definition: Partridge_Covey.h:713
Partridge_Covey::m_neighbourlist
Partridge_Covey * m_neighbourlist[50]
List of coveys close to this covey.
Definition: Partridge_Covey.h:284
Partridge_Covey::MoveSelectLimit
bool MoveSelectLimit(int a_limit, int a_x, int a_y)
Part of movement evaluation.
Definition: Partridge_Covey.cpp:261
Partridge_Covey::EndStep
void EndStep(void)
Covey EndStep.
Definition: Partridge_Covey.cpp:1616
Partridge_Covey::MoveEvalEdgesAndQual
int MoveEvalEdgesAndQual(int a_edges, double a_qual)
Move evaluation taking edges into account.
Definition: Partridge_Covey.cpp:2684
Partridge_Covey::Memberships
unsigned int Memberships(void)
Get covey size.
Definition: Partridge_Covey.h:691
Partridge_Covey::~Partridge_Covey
virtual ~Partridge_Covey(void)
Destructor.
Definition: Partridge_Covey.cpp:1971
Partridge_Covey::OnChickMature
void OnChickMature()
Remove a matured chick.
Definition: Partridge_Covey.cpp:2460
Partridge_Covey::m_dist_done
bool m_dist_done
Signals distance updating is done for today
Definition: Partridge_Covey.h:114
Partridge_Covey::m_nest_x
int m_nest_x
Nest coord-x.
Definition: Partridge_Covey.h:154
Partridge_Covey::m_terr_done
bool m_terr_done
Signals homerange evaluation done
Definition: Partridge_Covey.h:118
Partridge_Covey::FindMeAHusband
Partridge_Male * FindMeAHusband(Partridge_Female *a_female)
Find mate in covey.
Definition: Partridge_Covey.cpp:1534
Partridge_Covey::Norm
int Norm(int a_coord, int a_size)
Wrap-around utility function.
Definition: Partridge_Covey.cpp:866
Partridge_Covey::m_step_done
bool m_step_done
Signals Step is done for today
Definition: Partridge_Covey.h:112
Partridge_Covey::NestLeave
void NestLeave(void)
Leave the nest
Definition: Partridge_Covey.h:516
g_covey_manager
class CoveyManager * g_covey_manager
Definition: Partridge_Covey.cpp:2070
Partridge_Covey::HabitatEvaluateFast
double HabitatEvaluateFast(int a_min_x_incl, int a_max_x_excl, int a_min_y_incl, int a_max_y_excl)
Evaluate habitat (wrap around)
Definition: Partridge_Covey.cpp:926
Partridge_Covey::m_permanent_marker
bool m_permanent_marker
Unused
Definition: Partridge_Covey.h:104
Partridge_Covey::m_center_y_float
double m_center_y_float
Covey centre as float.
Definition: Partridge_Covey.h:136
CoveyManager
The covey manager class.
Definition: Partridge_Covey.h:792
ForIterator::GetList
int * GetList(void)
Get pointer to list of points
Definition: Partridge_Covey.h:56