mirror of
https://github.com/xivdev/Penumbra.git
synced 2025-12-12 18:27:24 +01:00
Add option to get watched players and their current equip from IPlayerWatcher.
This commit is contained in:
parent
adb1aaeb93
commit
65778bb1b4
3 changed files with 26 additions and 13 deletions
|
|
@ -1,4 +1,5 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
using Dalamud.Game.ClientState.Actors.Types;
|
using Dalamud.Game.ClientState.Actors.Types;
|
||||||
using Penumbra.GameData.Structs;
|
using Penumbra.GameData.Structs;
|
||||||
|
|
||||||
|
|
@ -21,8 +22,10 @@ namespace Penumbra.PlayerWatch
|
||||||
public void Disable();
|
public void Disable();
|
||||||
public void SetStatus( bool enabled );
|
public void SetStatus( bool enabled );
|
||||||
|
|
||||||
public void AddPlayerToWatch( string name );
|
public void AddPlayerToWatch( string playerName );
|
||||||
public void RemovePlayerFromWatch( string playerName );
|
public void RemovePlayerFromWatch( string playerName );
|
||||||
public ActorEquipment UpdateActorWithoutEvent( Actor actor );
|
public ActorEquipment UpdateActorWithoutEvent( Actor actor );
|
||||||
|
|
||||||
|
public IEnumerable< (string, ActorEquipment) > WatchedPlayers();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -16,7 +16,7 @@ namespace Penumbra.PlayerWatch
|
||||||
|
|
||||||
private readonly DalamudPluginInterface _pi;
|
private readonly DalamudPluginInterface _pi;
|
||||||
internal readonly HashSet< PlayerWatcher > RegisteredWatchers = new();
|
internal readonly HashSet< PlayerWatcher > RegisteredWatchers = new();
|
||||||
private readonly Dictionary< string, (ActorEquipment, HashSet< PlayerWatcher >) > _equip = new();
|
internal readonly Dictionary< string, (ActorEquipment, HashSet< PlayerWatcher >) > Equip = new();
|
||||||
private int _frameTicker;
|
private int _frameTicker;
|
||||||
private bool _inGPose = false;
|
private bool _inGPose = false;
|
||||||
private bool _enabled = false;
|
private bool _enabled = false;
|
||||||
|
|
@ -38,7 +38,7 @@ namespace Penumbra.PlayerWatch
|
||||||
{
|
{
|
||||||
if( RegisteredWatchers.Remove( watcher ) )
|
if( RegisteredWatchers.Remove( watcher ) )
|
||||||
{
|
{
|
||||||
foreach( var items in _equip.Values )
|
foreach( var items in Equip.Values )
|
||||||
{
|
{
|
||||||
items.Item2.Remove( watcher );
|
items.Item2.Remove( watcher );
|
||||||
}
|
}
|
||||||
|
|
@ -62,9 +62,9 @@ namespace Penumbra.PlayerWatch
|
||||||
internal ActorEquipment UpdateActorWithoutEvent( Actor actor )
|
internal ActorEquipment UpdateActorWithoutEvent( Actor actor )
|
||||||
{
|
{
|
||||||
var equipment = new ActorEquipment( actor );
|
var equipment = new ActorEquipment( actor );
|
||||||
if( _equip.ContainsKey( actor.Name ) )
|
if( Equip.ContainsKey( actor.Name ) )
|
||||||
{
|
{
|
||||||
_equip[ actor.Name ] = ( equipment, _equip[ actor.Name ].Item2 );
|
Equip[ actor.Name ] = ( equipment, Equip[ actor.Name ].Item2 );
|
||||||
}
|
}
|
||||||
|
|
||||||
return equipment;
|
return equipment;
|
||||||
|
|
@ -72,24 +72,24 @@ namespace Penumbra.PlayerWatch
|
||||||
|
|
||||||
internal void AddPlayerToWatch( string playerName, PlayerWatcher watcher )
|
internal void AddPlayerToWatch( string playerName, PlayerWatcher watcher )
|
||||||
{
|
{
|
||||||
if( _equip.TryGetValue( playerName, out var items ) )
|
if( Equip.TryGetValue( playerName, out var items ) )
|
||||||
{
|
{
|
||||||
items.Item2.Add( watcher );
|
items.Item2.Add( watcher );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
_equip[ playerName ] = ( new ActorEquipment(), new HashSet< PlayerWatcher > { watcher } );
|
Equip[ playerName ] = ( new ActorEquipment(), new HashSet< PlayerWatcher > { watcher } );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public void RemovePlayerFromWatch( string playerName, PlayerWatcher watcher )
|
public void RemovePlayerFromWatch( string playerName, PlayerWatcher watcher )
|
||||||
{
|
{
|
||||||
if( _equip.TryGetValue( playerName, out var items ) )
|
if( Equip.TryGetValue( playerName, out var items ) )
|
||||||
{
|
{
|
||||||
items.Item2.Remove( watcher );
|
items.Item2.Remove( watcher );
|
||||||
if( items.Item2.Count == 0 )
|
if( items.Item2.Count == 0 )
|
||||||
{
|
{
|
||||||
_equip.Remove( playerName );
|
Equip.Remove( playerName );
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -129,7 +129,7 @@ namespace Penumbra.PlayerWatch
|
||||||
{
|
{
|
||||||
PluginLog.Debug( "Clearing PlayerWatcher Store." );
|
PluginLog.Debug( "Clearing PlayerWatcher Store." );
|
||||||
_cancel = true;
|
_cancel = true;
|
||||||
foreach( var kvp in _equip )
|
foreach( var kvp in Equip )
|
||||||
{
|
{
|
||||||
kvp.Value.Item1.Clear();
|
kvp.Value.Item1.Clear();
|
||||||
}
|
}
|
||||||
|
|
@ -156,7 +156,7 @@ namespace Penumbra.PlayerWatch
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( _equip.TryGetValue( actor.Name, out var watcher ) )
|
if( Equip.TryGetValue( actor.Name, out var watcher ) )
|
||||||
{
|
{
|
||||||
TriggerEvents( watcher.Item2, actor );
|
TriggerEvents( watcher.Item2, actor );
|
||||||
}
|
}
|
||||||
|
|
@ -228,7 +228,7 @@ namespace Penumbra.PlayerWatch
|
||||||
|| actor.ObjectKind != ObjectKind.Player
|
|| actor.ObjectKind != ObjectKind.Player
|
||||||
|| actor.Name == null
|
|| actor.Name == null
|
||||||
|| actor.Name.Length == 0
|
|| actor.Name.Length == 0
|
||||||
|| !_equip.TryGetValue( actor.Name, out var equip ) )
|
|| !Equip.TryGetValue( actor.Name, out var equip ) )
|
||||||
{
|
{
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,6 @@
|
||||||
using System;
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
using Dalamud.Game.ClientState.Actors.Types;
|
using Dalamud.Game.ClientState.Actors.Types;
|
||||||
using Dalamud.Plugin;
|
using Dalamud.Plugin;
|
||||||
using Penumbra.GameData.Structs;
|
using Penumbra.GameData.Structs;
|
||||||
|
|
@ -81,6 +83,14 @@ namespace Penumbra.PlayerWatch
|
||||||
CheckValidity();
|
CheckValidity();
|
||||||
return _playerWatch!.UpdateActorWithoutEvent( actor );
|
return _playerWatch!.UpdateActorWithoutEvent( actor );
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IEnumerable< (string, ActorEquipment) > WatchedPlayers()
|
||||||
|
{
|
||||||
|
CheckValidity();
|
||||||
|
return _playerWatch!.Equip
|
||||||
|
.Where( kvp => kvp.Value.Item2.Contains( this ) )
|
||||||
|
.Select( kvp => ( kvp.Key, kvp.Value.Item1 ) );
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class PlayerWatchFactory
|
public static class PlayerWatchFactory
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue