Fix magboot mispredict (#7385)

This commit is contained in:
Leon Friedrich
2022-04-02 16:08:39 +13:00
committed by GitHub
parent 37ccf590d6
commit 971eb5b87e
3 changed files with 27 additions and 30 deletions

View File

@@ -1,13 +1,8 @@
using Content.Server.Alert;
using Content.Server.Atmos.Components; using Content.Server.Atmos.Components;
using Content.Server.Clothing.Components; using Content.Server.Clothing.Components;
using Content.Shared.Actions;
using Content.Shared.Alert; using Content.Shared.Alert;
using Content.Shared.Clothing; using Content.Shared.Clothing;
using Content.Shared.Inventory.Events; using Content.Shared.Inventory.Events;
using Content.Shared.Movement.EntitySystems;
using Content.Shared.Slippery;
using Content.Shared.Verbs;
namespace Content.Server.Clothing namespace Content.Server.Clothing
{ {
@@ -19,8 +14,6 @@ namespace Content.Server.Clothing
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<MagbootsComponent, GetVerbsEvent<ActivationVerb>>(AddToggleVerb);
SubscribeLocalEvent<MagbootsComponent, SlipAttemptEvent>(OnSlipAttempt);
SubscribeLocalEvent<MagbootsComponent, GotEquippedEvent>(OnGotEquipped); SubscribeLocalEvent<MagbootsComponent, GotEquippedEvent>(OnGotEquipped);
SubscribeLocalEvent<MagbootsComponent, GotUnequippedEvent>(OnGotUnequipped); SubscribeLocalEvent<MagbootsComponent, GotUnequippedEvent>(OnGotUnequipped);
} }
@@ -61,25 +54,5 @@ namespace Content.Server.Clothing
UpdateMagbootEffects(args.Equipee, uid, true, component); UpdateMagbootEffects(args.Equipee, uid, true, component);
} }
} }
private void AddToggleVerb(EntityUid uid, MagbootsComponent component, GetVerbsEvent<ActivationVerb> args)
{
if (!args.CanAccess || !args.CanInteract)
return;
ActivationVerb verb = new();
verb.Text = Loc.GetString("toggle-magboots-verb-get-data-text");
verb.Act = () => component.On = !component.On;
// TODO VERB ICON add toggle icon? maybe a computer on/off symbol?
args.Verbs.Add(verb);
}
private void OnSlipAttempt(EntityUid uid, MagbootsComponent component, SlipAttemptEvent args)
{
if (component.On)
{
args.Cancel();
}
}
} }
} }

View File

@@ -1,5 +1,7 @@
using Content.Shared.Actions; using Content.Shared.Actions;
using Content.Shared.Slippery;
using Content.Shared.Toggleable; using Content.Shared.Toggleable;
using Content.Shared.Verbs;
namespace Content.Shared.Clothing; namespace Content.Shared.Clothing;
@@ -9,10 +11,30 @@ public abstract class SharedMagbootsSystem : EntitySystem
{ {
base.Initialize(); base.Initialize();
SubscribeLocalEvent<SharedMagbootsComponent, GetVerbsEvent<ActivationVerb>>(AddToggleVerb);
SubscribeLocalEvent<SharedMagbootsComponent, SlipAttemptEvent>(OnSlipAttempt);
SubscribeLocalEvent<SharedMagbootsComponent, GetActionsEvent>(OnGetActions); SubscribeLocalEvent<SharedMagbootsComponent, GetActionsEvent>(OnGetActions);
SubscribeLocalEvent<SharedMagbootsComponent, ToggleActionEvent>(OnToggleAction); SubscribeLocalEvent<SharedMagbootsComponent, ToggleActionEvent>(OnToggleAction);
} }
private void AddToggleVerb(EntityUid uid, SharedMagbootsComponent component, GetVerbsEvent<ActivationVerb> args)
{
if (!args.CanAccess || !args.CanInteract)
return;
ActivationVerb verb = new();
verb.Text = Loc.GetString("toggle-magboots-verb-get-data-text");
verb.Act = () => component.On = !component.On;
// TODO VERB ICON add toggle icon? maybe a computer on/off symbol?
args.Verbs.Add(verb);
}
private void OnSlipAttempt(EntityUid uid, SharedMagbootsComponent component, SlipAttemptEvent args)
{
if (component.On)
args.Cancel();
}
private void OnGetActions(EntityUid uid, SharedMagbootsComponent component, GetActionsEvent args) private void OnGetActions(EntityUid uid, SharedMagbootsComponent component, GetActionsEvent args)
{ {
args.Actions.Add(component.ToggleAction); args.Actions.Add(component.ToggleAction);

View File

@@ -48,7 +48,9 @@ namespace Content.Shared.StatusEffect
private void OnGetState(EntityUid uid, StatusEffectsComponent component, ref ComponentGetState args) private void OnGetState(EntityUid uid, StatusEffectsComponent component, ref ComponentGetState args)
{ {
args.State = new StatusEffectsComponentState(component.ActiveEffects, component.AllowedEffects); // Using new(...) To avoid mispredictions due to MergeImplicitData. This will mean the server-side code is
// slightly slower, and really this function should just be overridden by the client...
args.State = new StatusEffectsComponentState(new(component.ActiveEffects), new(component.AllowedEffects));
} }
private void OnHandleState(EntityUid uid, StatusEffectsComponent component, ref ComponentHandleState args) private void OnHandleState(EntityUid uid, StatusEffectsComponent component, ref ComponentHandleState args)
@@ -77,8 +79,8 @@ namespace Content.Shared.StatusEffect
} }
var time = effect.Value.Cooldown.Item2 - effect.Value.Cooldown.Item1; var time = effect.Value.Cooldown.Item2 - effect.Value.Cooldown.Item1;
//TODO: Not sure how to handle refresh here.
TryAddStatusEffect(uid, effect.Key, time, true); TryAddStatusEffect(uid, effect.Key, time, true, component);
} }
} }