fix issue on not reloading player on zone switch, minor cleanup
This commit is contained in:
@@ -1,6 +1,5 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Threading.Tasks;
|
using System.Threading.Tasks;
|
||||||
using Dalamud.Game;
|
using Dalamud.Game;
|
||||||
@@ -155,12 +154,11 @@ public class CachedPlayersManager : IDisposable
|
|||||||
|
|
||||||
private void FrameworkOnUpdate(Framework framework)
|
private void FrameworkOnUpdate(Framework framework)
|
||||||
{
|
{
|
||||||
if (_clientState.LocalPlayer == null) return;
|
if (!_dalamudUtil.IsPlayerPresent || !_ipcManager.Initialized || !_apiController.IsConnected) return;
|
||||||
|
|
||||||
if (DateTime.Now < _lastPlayerObjectCheck.AddSeconds(0.25)) return;
|
if (DateTime.Now < _lastPlayerObjectCheck.AddSeconds(0.25)) return;
|
||||||
|
|
||||||
_localVisiblePlayers.Clear();
|
_localVisiblePlayers.Clear();
|
||||||
if (!_ipcManager.Initialized) return;
|
|
||||||
string ownName = _dalamudUtil.PlayerName;
|
string ownName = _dalamudUtil.PlayerName;
|
||||||
var playerCharacters = _objectTable.Where(obj =>
|
var playerCharacters = _objectTable.Where(obj =>
|
||||||
obj.ObjectKind == Dalamud.Game.ClientState.Objects.Enums.ObjectKind.Player &&
|
obj.ObjectKind == Dalamud.Game.ClientState.Objects.Enums.ObjectKind.Player &&
|
||||||
|
|||||||
@@ -1,5 +1,4 @@
|
|||||||
using Dalamud.Game.ClientState.Objects;
|
using Dalamud.Logging;
|
||||||
using Dalamud.Logging;
|
|
||||||
using MareSynchronos.Factories;
|
using MareSynchronos.Factories;
|
||||||
using MareSynchronos.Models;
|
using MareSynchronos.Models;
|
||||||
using MareSynchronos.Utils;
|
using MareSynchronos.Utils;
|
||||||
@@ -21,23 +20,31 @@ namespace MareSynchronos.Managers
|
|||||||
private readonly CharacterDataFactory _characterDataFactory;
|
private readonly CharacterDataFactory _characterDataFactory;
|
||||||
private readonly DalamudUtil _dalamudUtil;
|
private readonly DalamudUtil _dalamudUtil;
|
||||||
private readonly IpcManager _ipcManager;
|
private readonly IpcManager _ipcManager;
|
||||||
private readonly ObjectTable _objectTable;
|
|
||||||
private readonly IPlayerWatcher _watcher;
|
private readonly IPlayerWatcher _watcher;
|
||||||
private string _lastSentHash = string.Empty;
|
private string _lastSentHash = string.Empty;
|
||||||
private Task? _playerChangedTask;
|
private Task? _playerChangedTask;
|
||||||
|
|
||||||
public PlayerManager(ApiController apiController, ObjectTable objectTable, IpcManager ipcManager,
|
public PlayerManager(ApiController apiController, IpcManager ipcManager,
|
||||||
CharacterDataFactory characterDataFactory, CachedPlayersManager cachedPlayersManager, DalamudUtil dalamudUtil, IPlayerWatcher watcher)
|
CharacterDataFactory characterDataFactory, CachedPlayersManager cachedPlayersManager, DalamudUtil dalamudUtil, IPlayerWatcher watcher)
|
||||||
{
|
{
|
||||||
Logger.Debug("Creating " + nameof(PlayerManager));
|
Logger.Debug("Creating " + nameof(PlayerManager));
|
||||||
|
|
||||||
_apiController = apiController;
|
_apiController = apiController;
|
||||||
_objectTable = objectTable;
|
|
||||||
_ipcManager = ipcManager;
|
_ipcManager = ipcManager;
|
||||||
_characterDataFactory = characterDataFactory;
|
_characterDataFactory = characterDataFactory;
|
||||||
_cachedPlayersManager = cachedPlayersManager;
|
_cachedPlayersManager = cachedPlayersManager;
|
||||||
_dalamudUtil = dalamudUtil;
|
_dalamudUtil = dalamudUtil;
|
||||||
_watcher = watcher;
|
_watcher = watcher;
|
||||||
|
|
||||||
|
_watcher.AddPlayerToWatch(_dalamudUtil.PlayerName);
|
||||||
|
_apiController.Connected += ApiController_Connected;
|
||||||
|
_apiController.Disconnected += ApiController_Disconnected;
|
||||||
|
|
||||||
|
Logger.Debug("Watching Player, ApiController is Connected: " + _apiController.IsConnected);
|
||||||
|
if (_apiController.IsConnected)
|
||||||
|
{
|
||||||
|
ApiController_Connected(null, EventArgs.Empty);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void Dispose()
|
public void Dispose()
|
||||||
@@ -50,19 +57,6 @@ namespace MareSynchronos.Managers
|
|||||||
_watcher.PlayerChanged -= Watcher_PlayerChanged;
|
_watcher.PlayerChanged -= Watcher_PlayerChanged;
|
||||||
}
|
}
|
||||||
|
|
||||||
internal void StartWatchingPlayer()
|
|
||||||
{
|
|
||||||
_watcher.AddPlayerToWatch(_dalamudUtil.PlayerName);
|
|
||||||
_apiController.Connected += ApiController_Connected;
|
|
||||||
_apiController.Disconnected += ApiController_Disconnected;
|
|
||||||
|
|
||||||
Logger.Debug("Watching Player, ApiController is Connected: " + _apiController.IsConnected);
|
|
||||||
if (_apiController.IsConnected)
|
|
||||||
{
|
|
||||||
ApiController_Connected(null, EventArgs.Empty);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private void ApiController_Connected(object? sender, EventArgs args)
|
private void ApiController_Connected(object? sender, EventArgs args)
|
||||||
{
|
{
|
||||||
Logger.Debug("ApiController Connected");
|
Logger.Debug("ApiController Connected");
|
||||||
|
|||||||
@@ -155,7 +155,9 @@ public class CachedPlayer
|
|||||||
{
|
{
|
||||||
Logger.Debug("Restoring state for " + PlayerName);
|
Logger.Debug("Restoring state for " + PlayerName);
|
||||||
IsVisible = false;
|
IsVisible = false;
|
||||||
|
_downloadCancellationTokenSource?.Cancel();
|
||||||
_downloadCancellationTokenSource?.Dispose();
|
_downloadCancellationTokenSource?.Dispose();
|
||||||
|
_downloadCancellationTokenSource = null;
|
||||||
_watcher.RemovePlayerFromWatch(PlayerName);
|
_watcher.RemovePlayerFromWatch(PlayerName);
|
||||||
_ipcManager.PenumbraRemoveTemporaryCollection(PlayerName);
|
_ipcManager.PenumbraRemoveTemporaryCollection(PlayerName);
|
||||||
_ipcManager.GlamourerRevertCharacterCustomization(PlayerName);
|
_ipcManager.GlamourerRevertCharacterCustomization(PlayerName);
|
||||||
|
|||||||
@@ -31,7 +31,7 @@ namespace MareSynchronos
|
|||||||
public static DalamudPluginInterface PluginInterface { get; set; }
|
public static DalamudPluginInterface PluginInterface { get; set; }
|
||||||
private readonly PluginUi _pluginUi;
|
private readonly PluginUi _pluginUi;
|
||||||
private readonly WindowSystem _windowSystem;
|
private readonly WindowSystem _windowSystem;
|
||||||
private PlayerManager? _characterManager;
|
private PlayerManager? _playerManager;
|
||||||
private readonly DalamudUtil _dalamudUtil;
|
private readonly DalamudUtil _dalamudUtil;
|
||||||
private CachedPlayersManager? _characterCacheManager;
|
private CachedPlayersManager? _characterCacheManager;
|
||||||
private readonly IPlayerWatcher _playerWatcher;
|
private readonly IPlayerWatcher _playerWatcher;
|
||||||
@@ -90,7 +90,7 @@ namespace MareSynchronos
|
|||||||
_pluginUi.IsOpen = false;
|
_pluginUi.IsOpen = false;
|
||||||
_introUi.IsOpen = true;
|
_introUi.IsOpen = true;
|
||||||
_characterCacheManager?.Dispose();
|
_characterCacheManager?.Dispose();
|
||||||
_characterManager?.Dispose();
|
_playerManager?.Dispose();
|
||||||
}
|
}
|
||||||
|
|
||||||
public string Name => "Mare Synchronos";
|
public string Name => "Mare Synchronos";
|
||||||
@@ -110,7 +110,7 @@ namespace MareSynchronos
|
|||||||
|
|
||||||
_fileCacheManager?.Dispose();
|
_fileCacheManager?.Dispose();
|
||||||
_ipcManager?.Dispose();
|
_ipcManager?.Dispose();
|
||||||
_characterManager?.Dispose();
|
_playerManager?.Dispose();
|
||||||
_characterCacheManager?.Dispose();
|
_characterCacheManager?.Dispose();
|
||||||
_playerWatcher.Disable();
|
_playerWatcher.Disable();
|
||||||
_playerWatcher.Dispose();
|
_playerWatcher.Dispose();
|
||||||
@@ -141,7 +141,7 @@ namespace MareSynchronos
|
|||||||
{
|
{
|
||||||
Logger.Debug("Client logout");
|
Logger.Debug("Client logout");
|
||||||
_characterCacheManager?.Dispose();
|
_characterCacheManager?.Dispose();
|
||||||
_characterManager?.Dispose();
|
_playerManager?.Dispose();
|
||||||
PluginInterface.UiBuilder.Draw -= Draw;
|
PluginInterface.UiBuilder.Draw -= Draw;
|
||||||
PluginInterface.UiBuilder.OpenConfigUi -= OpenConfigUi;
|
PluginInterface.UiBuilder.OpenConfigUi -= OpenConfigUi;
|
||||||
_commandManager.RemoveHandler(CommandName);
|
_commandManager.RemoveHandler(CommandName);
|
||||||
@@ -149,7 +149,8 @@ namespace MareSynchronos
|
|||||||
|
|
||||||
public void ReLaunchCharacterManager()
|
public void ReLaunchCharacterManager()
|
||||||
{
|
{
|
||||||
_characterManager?.Dispose();
|
_playerManager?.Dispose();
|
||||||
|
_characterCacheManager?.Dispose();
|
||||||
|
|
||||||
Task.Run(async () =>
|
Task.Run(async () =>
|
||||||
{
|
{
|
||||||
@@ -164,9 +165,8 @@ namespace MareSynchronos
|
|||||||
new CharacterDataFactory(_dalamudUtil, _ipcManager);
|
new CharacterDataFactory(_dalamudUtil, _ipcManager);
|
||||||
_characterCacheManager = new CachedPlayersManager(_clientState, _framework, _objectTable,
|
_characterCacheManager = new CachedPlayersManager(_clientState, _framework, _objectTable,
|
||||||
_apiController, _dalamudUtil, _ipcManager, _playerWatcher);
|
_apiController, _dalamudUtil, _ipcManager, _playerWatcher);
|
||||||
_characterManager = new PlayerManager(_apiController, _objectTable, _ipcManager,
|
_playerManager = new PlayerManager(_apiController, _ipcManager,
|
||||||
characterCacheFactory, _characterCacheManager, _dalamudUtil, _playerWatcher);
|
characterCacheFactory, _characterCacheManager, _dalamudUtil, _playerWatcher);
|
||||||
_characterManager.StartWatchingPlayer();
|
|
||||||
}
|
}
|
||||||
catch (Exception ex)
|
catch (Exception ex)
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user