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))
return;
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
#region Network Event Handlers
// 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)
return;
if (message == null)
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);
}
- 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)
return;
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)));
+ }
+ }
}
}
public abstract void PopupEntity(string? message, EntityUid uid, Filter filter, bool recordReplay, PopupType type = PopupType.Small);
/// <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.
/// </summary>
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>