Exemplo n.º 1
0
        /*********
        ** Public methods
        *********/
        /// <summary>Update the tracked values.</summary>
        /// <param name="watcher">The watcher to snapshot.</param>
        public void Update(WorldLocationsTracker watcher)
        {
            // update location list
            this.LocationList.Update(watcher.IsLocationListChanged, watcher.Added, watcher.Removed);

            // remove missing locations
            foreach (var key in this.LocationsDict.Keys.Where(key => !watcher.HasLocationTracker(key)).ToArray())
            {
                this.LocationsDict.Remove(key);
            }

            // update locations
            foreach (LocationTracker locationWatcher in watcher.Locations)
            {
                if (!this.LocationsDict.TryGetValue(locationWatcher.Location, out LocationSnapshot snapshot))
                {
                    this.LocationsDict[locationWatcher.Location] = snapshot = new LocationSnapshot(locationWatcher.Location);
                }

                snapshot.Update(locationWatcher);
            }
        }
Exemplo n.º 2
0
 /*********
 ** Public methods
 *********/
 /// <summary>Construct an instance.</summary>
 /// <param name="inputState">Manages input visible to the game.</param>
 /// <param name="gameLocations">The observable list of game locations.</param>
 public WatcherCore(SInputState inputState, ObservableCollection <GameLocation> gameLocations)
 {
     // init watchers
     this.CursorWatcher           = WatcherFactory.ForEquatable(() => inputState.CursorPosition);
     this.MouseWheelScrollWatcher = WatcherFactory.ForEquatable(() => inputState.LastMouse.ScrollWheelValue);
     this.SaveIdWatcher           = WatcherFactory.ForEquatable(() => Game1.hasLoadedGame ? Game1.uniqueIDForThisGame : 0);
     this.WindowSizeWatcher       = WatcherFactory.ForEquatable(() => new Point(Game1.viewport.Width, Game1.viewport.Height));
     this.TimeWatcher             = WatcherFactory.ForEquatable(() => Game1.timeOfDay);
     this.ActiveMenuWatcher       = WatcherFactory.ForReference(() => Game1.activeClickableMenu);
     this.LocationsWatcher        = new WorldLocationsTracker(gameLocations, MineShaft.activeMines);
     this.LocaleWatcher           = WatcherFactory.ForGenericEquality(() => LocalizedContentManager.CurrentLanguageCode);
     this.Watchers.AddRange(new IWatcher[]
     {
         this.CursorWatcher,
         this.MouseWheelScrollWatcher,
         this.SaveIdWatcher,
         this.WindowSizeWatcher,
         this.TimeWatcher,
         this.ActiveMenuWatcher,
         this.LocationsWatcher,
         this.LocaleWatcher
     });
 }