|
- 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<string, object> 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<string, object> ToStorage()
- {
- IDictionary<string, object> dictionary = new Dictionary<string, object>();
- 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;
- }
|