// // Game.cs // // Copyright (c) František Boháček. All rights reserved. // Licensed under the MIT license. See LICENSE file in the project root for full license information. using Microsoft.Extensions.Options; using Microsoft.Extensions.Primitives; using NosSmooth.Game.Data.Chat; using NosSmooth.Game.Data.Inventory; using NosSmooth.Game.Data.Raids; using NosSmooth.Game.Entities; using NosSmooth.Game.Maps; namespace NosSmooth.Game; /// /// Represents base nostale game class with the character, current map, friends and current raid. /// public class Game { private Map? _currentMap; private readonly GameOptions _options; /// /// Initializes a new instance of the class. /// /// The options for the game. public Game(IOptions options) { _options = options.Value; } /// /// Gets the playing character of the client. /// public Character? Character { get; internal set; } /// /// Gets the current map of the client. /// /// /// Will be null until current map packet is received. /// public Map? CurrentMap { get => _currentMap; internal set { _currentMap = value; MapChanged?.CancelAfter(TimeSpan.FromSeconds(_options.EntityCacheDuration)); } } /// /// Gets the friends list of the current client. /// public IReadOnlyList? Friends { get; internal set; } /// /// Gets the active raid the client is currently on. /// /// /// May be null if there is no raid in progress. /// public Raid? CurrentRaid { get; internal set; } /// /// Gets the inventory of the client character. /// public Inventory Inventory { get; internal set; } /// /// Cancellation token for changing the map to use in memory cache. /// internal CancellationTokenSource? MapChanged { get; private set; } }