Add SharedPopupSystem.PopupPredicted (#25811)
* Added SharedPopupSystem.PopupPredicted * Documentation improvement
This commit is contained in:
@@ -150,7 +150,7 @@ namespace Content.Client.Popups
|
|||||||
PopupEntity(message, uid, type);
|
PopupEntity(message, uid, type);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PopupEntity(string? message, EntityUid uid, Filter filter, bool recordReplay, PopupType type=PopupType.Small)
|
public override void PopupEntity(string? message, EntityUid uid, Filter filter, bool recordReplay, PopupType type = PopupType.Small)
|
||||||
{
|
{
|
||||||
if (!filter.Recipients.Contains(_playerManager.LocalSession))
|
if (!filter.Recipients.Contains(_playerManager.LocalSession))
|
||||||
return;
|
return;
|
||||||
@@ -170,6 +170,12 @@ namespace Content.Client.Popups
|
|||||||
PopupMessage(message, type, transform.Coordinates, uid, true);
|
PopupMessage(message, type, transform.Coordinates, uid, true);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void PopupPredicted(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small)
|
||||||
|
{
|
||||||
|
if (recipient != null && _timing.IsFirstTimePredicted)
|
||||||
|
PopupEntity(message, uid, recipient.Value, type);
|
||||||
|
}
|
||||||
|
|
||||||
#endregion
|
#endregion
|
||||||
|
|
||||||
#region Network Event Handlers
|
#region Network Event Handlers
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ namespace Content.Server.Popups
|
|||||||
// No local user.
|
// No local user.
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PopupCursor(string? message, ICommonSession recipient, PopupType type=PopupType.Small)
|
public override void PopupCursor(string? message, ICommonSession recipient, PopupType type = PopupType.Small)
|
||||||
{
|
{
|
||||||
if (message == null)
|
if (message == null)
|
||||||
return;
|
return;
|
||||||
@@ -75,11 +75,11 @@ namespace Content.Server.Popups
|
|||||||
if (message == null)
|
if (message == null)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
var filter = Filter.Empty().AddPlayersByPvs(uid, entityManager:EntityManager, playerMan: _player, cfgMan: _cfg);
|
var filter = Filter.Empty().AddPlayersByPvs(uid, entityManager: EntityManager, playerMan: _player, cfgMan: _cfg);
|
||||||
RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), filter);
|
RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
public override void PopupEntity(string? message, EntityUid uid, EntityUid recipient, PopupType type=PopupType.Small)
|
public override void PopupEntity(string? message, EntityUid uid, EntityUid recipient, PopupType type = PopupType.Small)
|
||||||
{
|
{
|
||||||
if (message == null)
|
if (message == null)
|
||||||
return;
|
return;
|
||||||
@@ -108,5 +108,23 @@ namespace Content.Server.Popups
|
|||||||
|
|
||||||
RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), filter, recordReplay);
|
RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), filter, recordReplay);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public override void PopupPredicted(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small)
|
||||||
|
{
|
||||||
|
if (message == null)
|
||||||
|
return;
|
||||||
|
|
||||||
|
if (recipient != null)
|
||||||
|
{
|
||||||
|
// Don't send to recipient, since they predicted it locally
|
||||||
|
var filter = Filter.PvsExcept(recipient.Value, entityManager: EntityManager);
|
||||||
|
RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)), filter);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// With no recipient, send to everyone (in PVS range)
|
||||||
|
RaiseNetworkEvent(new PopupEntityEvent(message, type, GetNetEntity(uid)));
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -83,10 +83,17 @@ namespace Content.Shared.Popups
|
|||||||
public abstract void PopupEntity(string? message, EntityUid uid, Filter filter, bool recordReplay, PopupType type = PopupType.Small);
|
public abstract void PopupEntity(string? message, EntityUid uid, Filter filter, bool recordReplay, PopupType type = PopupType.Small);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Variant of <see cref="PopupEnity(string, EntityUid, EntityUid, PopupType)"/> that only runs on the client, outside of prediction.
|
/// Variant of <see cref="PopupEntity(string, EntityUid, EntityUid, PopupType)"/> that only runs on the client, outside of prediction.
|
||||||
/// Useful for shared code that is always ran by both sides to avoid duplicate popups.
|
/// Useful for shared code that is always ran by both sides to avoid duplicate popups.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract void PopupClient(string? message, EntityUid uid, EntityUid recipient, PopupType type = PopupType.Small);
|
public abstract void PopupClient(string? message, EntityUid uid, EntityUid recipient, PopupType type = PopupType.Small);
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Variant of <see cref="PopupEntity(string, EntityUid, EntityUid, PopupType)"/> for use with prediction. The local client will show
|
||||||
|
/// the popup to the recipient, and the server will show it to every other player in PVS range. If recipient is null, the local client
|
||||||
|
/// will do nothing and the server will show the message to every player in PVS range.
|
||||||
|
/// </summary>
|
||||||
|
public abstract void PopupPredicted(string? message, EntityUid uid, EntityUid? recipient, PopupType type = PopupType.Small);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|||||||
Reference in New Issue
Block a user