// end of doTimeStep public PointClass GetEligibleStep(int stepNum) { IPoint p = new PointClass(); EligibleHomeSite ehs = MyVisitedSites.getSite(stepNum) as EligibleHomeSite; p.X = ehs.X; p.Y = ehs.Y; return(p as PointClass); }
public virtual void doTimeStep(HourlyModifier inHM, DailyModifier inDM, DateTime currTime, bool doTextOutput, ref string status) { double percentTimeStep = 0; double tempPercentTimeStep = 0; //added Sunday, May 04, 2008 double previousPercentTimeStep = 0; //added temp for holding the old locations for doing text output double tempX = 0; double tempY = 0; //TODO talk to Pat about stuck on the way home? int timesStuck = 0; bool timeToLookForHome = false; try { //this.timeStepPath++; #region mLog.Debug(""); mLog.Debug("inside Animal Do Time Step for " + myIdNum.ToString() + " the time is " + currTime.ToShortDateString() + " " + currTime.ToShortTimeString()); mLog.Debug("percent time step is " + percentTimeStep.ToString()); mLog.Debug("is dead = " + this.mIsDead.ToString()); mLog.Debug("do text output is " + doTextOutput.ToString()); #endregion // if(this.IdNum == 14 | this.IdNum == 15) System.Windows.Forms.MessageBox.Show("animal 14"); this.updateMyLocationValues(); upDateTemporalModifiers(inHM, inDM); this.upDateMyValues(); while (percentTimeStep < 1 && !this.mIsDead) { //if(this.Location.X == 0) System.Windows.Forms.MessageBox.Show("No Location"); this.timeStep++; //store off the original location tempX = this.myLocation.X; tempY = this.myLocation.Y; // fw.writeLine("tempX = " + tempX.ToString()); // fw.writeLine("tempY = " + tempY.ToString()); // fw.writeLine("calling update behavioral modifier"); move(ref percentTimeStep); mLog.Debug("move returned " + percentTimeStep.ToString()); mLog.Debug("previousPercentTimeStep is " + previousPercentTimeStep.ToString()); mLog.Debug("tempPercentTimeStep is " + tempPercentTimeStep.ToString()); //Saturday, March 15, 2008 added checking to see if his is dead from wandering off the map if (!this.IsDead) { //Saturday, September 22, 2007 10:03:58 AM Author: Bob Cummings //Added tempPercentTimeStep for accurate percentage on second and subsequent moves in same timestep //so temp should equal 1 - current percent - last times current percent to get this times current percent //Sunday, May 04, 2008 4:14:38 PM Author: Bob Cummings //For some reason I had tempPercentTimeStep = 1 - percentTimeStep - tempPercentTimeStep //But the percent time step is accumlative and the temp% is individual //so added a another temp variable to keep track of accumalting percentTimeSteps //Monday, June 09, 2008 tempPercentTimeStep = percentTimeStep - previousPercentTimeStep; previousPercentTimeStep += tempPercentTimeStep; mLog.Debug("previousPercentTimeStep is " + previousPercentTimeStep.ToString()); mLog.Debug("tempPercentTimeStep is " + tempPercentTimeStep.ToString()); mLog.Debug("total percent time step is " + percentTimeStep.ToString()); //Thursday, February 21, 2008 Moved after move to capture the percent of the step taken //Wednesday, March 05, 2008 moved after calculating the the temp percent to accurately capture the value. if (doTextOutput) { mTextFileWriter.addLine(this.createTextOutput(currTime, tempPercentTimeStep, tempX, tempY)); } // do these for every time time step full or partial loseEnergy(tempPercentTimeStep); eat(tempPercentTimeStep); die(tempPercentTimeStep); this.updateBehavioralModifiers(); // only do these if going to take another partial step if (percentTimeStep < 1) { this.updateMyLocationValues(); this.upDateMyValues(); } } } //Saturday, March 15, 2008 added checking to see if his is dead from wandering off the map if (!this.IsDead) { if (this.IsAsleep == false) { mLog.Debug("ok now see if it is time to look for a home yet"); //Author: Bob Cummings Friday, October 05, 2007 //moved this to inside if statement to stop looking for a home //while asleep. timeToLookForHome = this.mHomeRangeTrigger.timeToLookForHome(this); } if (timeToLookForHome && !this.goingHome && this.MyVisitedSites.SiteCount > 0) { mLog.Debug("yes it is time to look for a home calling find home"); if (findHome()) { this.mTextFileWriter.addLine("I have found a home and I am going to it"); mLog.Debug("back in doTimeStep and we found a home to set the mover to directed mover"); mLog.Debug("and set the boolean variable goingHome = true"); this.mMover = new DirectedMover(); this.goingHome = true; }//if we do not find a home we keep wandering around and check again. } if (this.goingHome) { double distToHome; mLog.Debug("ok we are headed home now check the distace between here and there"); distToHome = this.MapManager.getDistance(this.Location, this.HomeRangeCenter); mLog.Debug("we still have to go " + distToHome.ToString()); mLog.Debug("I can see " + this.mPerceptionDist.ToString()); if (distToHome < this.mPerceptionDist) { mLog.Debug("now building the home range"); // only change to resident if we were able to build the home range if (this.MapManager.BuildHomeRange(this)) { mLog.Debug("found a home"); mLog.Debug("ok we are home now setting the location = home range center"); mLog.Debug("the new X should = " + this.HomeRangeCenter.X.ToString()); mLog.Debug("the new Y should = " + this.HomeRangeCenter.Y.ToString()); this.Location = this.HomeRangeCenter as PointClass; mLog.Debug("the new X = " + this.Location.X.ToString()); mLog.Debug("the new Y = " + this.Location.Y.ToString()); this.foundHome = true; status = "resident"; if (doTextOutput) { this.mTextFileWriter.addLine("Found Home at " + this.myLocation.X.ToString() + " and " + this.myLocation.Y.ToString()); } // System.Windows.Forms.MessageBox.Show(this.IdNum.ToString() + " found a home kill the application and look at at the input social map "); } else { //evidently can not build a site here. goingHome = false; myMover = RandomWCMover.getRandomWCMover(); MyVisitedSites.RemoveSite(this.HomeRangeCenter); } } } //No sense doing if we are home. if (foundHome == false) { //Saturday, February 23, 2008 Move to before taking a step //Tuesday, July 15, 2008 move back to end of step if (this.IsAsleep == false) { this.mMyVisitedSites.addSite(new EligibleHomeSite(this.mCaptureFood, this.mPredationRisk, this.myLocation.X, this.myLocation.Y)); } if (this.goingHome && this.IsAsleep == false) { timesStuck++; if (timesStuck > 20) { this.IsDead = true; mTextFileWriter.addLine("Stuck on the way home for 20 times so died"); //get out of the loop percentTimeStep = 1.5; } } } } changeActiveState(currTime); } catch (System.Exception ex) { eLog.Debug(ex); } }