public override void UpdateFromClock(Clock clock) { LastTimeClockStarted = DateTime.Now; if (clock.StonesLeft == 0) { _snapshot = new Canadian.CanadianTimeInformation(true, TimeSpan.FromSeconds(clock.Time), _snapshot.PeriodTimeLeft, 0); } else { _snapshot = new Canadian.CanadianTimeInformation(false, TimeSpan.Zero, TimeSpan.FromSeconds(clock.Time), clock.StonesLeft); } }
public CanadianTimeControl UpdateFrom(CanadianTimeInformation timeRemaining) { this.LastTimeClockStarted = DateTime.Now; if (this.Running) { timeRemaining = new CanadianTimeInformation( timeRemaining.StillInMainTime, timeRemaining.MainTimeLeft, timeRemaining.PeriodTimeLeft, timeRemaining.PeriodStonesLeft + 1); } this._snapshot = timeRemaining; return(this); }
private CanadianTimeInformation ImproveByPlacingAStone(CanadianTimeInformation snapshot) { if (snapshot.StillInMainTime) { return(snapshot); } if (snapshot.PeriodStonesLeft > 1) { return(new CanadianTimeInformation( snapshot.StillInMainTime, snapshot.MainTimeLeft, snapshot.PeriodTimeLeft, snapshot.PeriodStonesLeft - 1)); } return(new CanadianTimeInformation(snapshot.StillInMainTime, snapshot.MainTimeLeft, this._periodTime, this._stonesPerPeriod)); }
private CanadianTimeInformation ReduceBy(CanadianTimeInformation minued, TimeSpan subtrahend) { var maintime = minued.MainTimeLeft; bool stillInMainTime = minued.StillInMainTime; if (stillInMainTime) { if (maintime > subtrahend) { return(new CanadianTimeInformation(true, maintime - subtrahend, minued.PeriodTimeLeft, minued.PeriodStonesLeft)); } minued = new CanadianTimeInformation(false, TimeSpan.Zero, this._periodTime, this._stonesPerPeriod); subtrahend = subtrahend - maintime; } return(new CanadianTimeInformation(false, TimeSpan.Zero, minued.PeriodTimeLeft - subtrahend, minued.PeriodStonesLeft)); }
protected override void UpdateSnapshot(TimeSpan timeSpent) { this._snapshot = ReduceBy(this._snapshot, timeSpent); this._snapshot = ImproveByPlacingAStone(this._snapshot); }
public CanadianTimeControl(TimeSpan mainTime, int stonesPerPeriod, TimeSpan periodTime) { _snapshot = new CanadianTimeInformation(true, mainTime, TimeSpan.Zero, 0); _stonesPerPeriod = stonesPerPeriod; _periodTime = periodTime; }