using System; using System.Collections.Generic; using SUISS.Storage; public class TimeBoostReward : IOngoingReward, IStorable { public TimeBoostReward() { } public TimeBoostReward(double boostMultiplier, DateTime startTime, TimeSpan duration) { this.BoostMultiplier = boostMultiplier; this.StartTime = startTime; this.Duration = duration; this.IsActive = true; } public double BoostMultiplier { get; private set; } public DateTime StartTime { get; private set; } public TimeSpan Duration { get; private set; } public bool IsActive { get { return this._isActive && DateTime.UtcNow - this.StartTime <= this.Duration; } private set { this._isActive = value; } } public void FromStorage(IDictionary dict) { this.BoostMultiplier = (double)dict["BoostMultiplier"]; this.StartTime = new DateTime((long)dict["StartTime"], DateTimeKind.Utc); this.Duration = new TimeSpan((long)dict["Duration"]); this.IsActive = (bool)dict["IsActive"]; } public void Run() { CityIsland current = CityIsland.Current; if (current != null) { current.TimeBoost(this.BoostMultiplier, this.Duration - (DateTime.UtcNow - this.StartTime)); } } public IDictionary ToStorage() { IDictionary dictionary = new Dictionary(); dictionary["BoostMultiplier"] = this.BoostMultiplier; dictionary["StartTime"] = this.StartTime.Ticks; dictionary["Duration"] = this.Duration.Ticks; dictionary["IsActive"] = this.IsActive; return dictionary; } public override string ToString() { return string.Format("[Multiplier] {0}\n[StartTime] {1}\n[Duration] {2}/{3}", new object[] { this.BoostMultiplier, this.StartTime, DateTime.UtcNow - this.StartTime, this.Duration }); } public bool Add(IOngoingReward reward) { TimeBoostReward timeBoostReward = reward as TimeBoostReward; if (timeBoostReward != null) { this.BoostMultiplier = Math.Max(this.BoostMultiplier, timeBoostReward.BoostMultiplier); this.Duration += timeBoostReward.Duration; timeBoostReward.Run(); return true; } return false; } public const string BoostMultiplierKey = "BoostMultiplier"; public const string StartTimeKey = "StartTime"; public const string DurationKey = "Duration"; public const string IsActiveKey = "IsActive"; private bool _isActive; }