예제 #1
0
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        /// <param name="player">The player to track.</param>
        public PlayerTracker(Farmer player)
        {
            // init player data
            this.Player            = player;
            this.PreviousInventory = this.GetInventory();

            // init trackers
            this.LocationWatcher        = WatcherFactory.ForReference(this.GetCurrentLocation);
            this.LocationObjectsWatcher = WatcherFactory.ForNetDictionary(this.GetCurrentLocation().netObjects);
            this.MineLevelWatcher       = WatcherFactory.ForEquatable(() => this.LastValidLocation is MineShaft mine ? mine.mineLevel : 0);
            this.SkillWatchers          = new Dictionary <EventArgsLevelUp.LevelType, IValueWatcher <int> >
            {
                [EventArgsLevelUp.LevelType.Combat]   = WatcherFactory.ForEquatable(() => player.combatLevel),
                [EventArgsLevelUp.LevelType.Farming]  = WatcherFactory.ForEquatable(() => player.farmingLevel),
                [EventArgsLevelUp.LevelType.Fishing]  = WatcherFactory.ForEquatable(() => player.fishingLevel),
                [EventArgsLevelUp.LevelType.Foraging] = WatcherFactory.ForEquatable(() => player.foragingLevel),
                [EventArgsLevelUp.LevelType.Luck]     = WatcherFactory.ForEquatable(() => player.luckLevel),
                [EventArgsLevelUp.LevelType.Mining]   = WatcherFactory.ForEquatable(() => player.miningLevel)
            };

            // track watchers for convenience
            this.Watchers.AddRange(new IWatcher[]
            {
                this.LocationWatcher,
                this.LocationObjectsWatcher,
                this.MineLevelWatcher
            });
            this.Watchers.AddRange(this.SkillWatchers.Values);
        }
예제 #2
0
        /*********
        ** Public methods
        *********/
        /// <summary>Construct an instance.</summary>
        /// <param name="player">The player to track.</param>
        public PlayerTracker(Farmer player)
        {
            // init player data
            this.Player            = player;
            this.PreviousInventory = this.GetInventory();

            // init trackers
            this.LocationWatcher = WatcherFactory.ForReference(this.GetCurrentLocation);
            this.SkillWatchers   = new Dictionary <SkillType, IValueWatcher <int> >
            {
                [SkillType.Combat]   = WatcherFactory.ForNetValue(player.combatLevel),
                [SkillType.Farming]  = WatcherFactory.ForNetValue(player.farmingLevel),
                [SkillType.Fishing]  = WatcherFactory.ForNetValue(player.fishingLevel),
                [SkillType.Foraging] = WatcherFactory.ForNetValue(player.foragingLevel),
                [SkillType.Luck]     = WatcherFactory.ForNetValue(player.luckLevel),
                [SkillType.Mining]   = WatcherFactory.ForNetValue(player.miningLevel)
            };

            // track watchers for convenience
            this.Watchers.Add(this.LocationWatcher);
            this.Watchers.AddRange(this.SkillWatchers.Values);
        }
예제 #3
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
     });
 }