Skip to content

Commit b05474a

Browse files
RuzihmwixoaGit
andauthored
shows results of removing client/mob verbs on client (OpenDreamProject#2484)
Co-authored-by: wixoa <wixoag@gmail.com>
1 parent f44e841 commit b05474a

File tree

5 files changed

+58
-7
lines changed

5 files changed

+58
-7
lines changed

Content.Tests/DMProject/Tests/Stdlib/List/remove.dm

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,7 @@
88
L = list(1,2,3,2,1)
99
L.Remove(list(2))
1010
ASSERT(L ~= list(1,2,3,1))
11+
12+
L = list(1,2,3,2,1)
13+
L.Remove(L)
14+
ASSERT(L ~= list())

OpenDreamClient/ClientVerbSystem.cs

Lines changed: 2 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -30,8 +30,6 @@ public override void Initialize() {
3030
_spriteQuery = _entityManager.GetEntityQuery<DMISpriteComponent>();
3131
_sightQuery = _entityManager.GetEntityQuery<DreamMobSightComponent>();
3232

33-
_playerManager.LocalPlayerAttached += OnLocalPlayerAttached;
34-
3533
SubscribeNetworkEvent<AllVerbsEvent>(OnAllVerbsEvent);
3634
SubscribeNetworkEvent<RegisterVerbEvent>(OnRegisterVerbEvent);
3735
SubscribeNetworkEvent<UpdateClientVerbsEvent>(OnUpdateClientVerbsEvent);
@@ -242,10 +240,7 @@ private void OnUpdateClientVerbsEvent(UpdateClientVerbsEvent e) {
242240
_interfaceManager.DefaultInfo?.RefreshVerbs(this);
243241
}
244242

245-
private void OnLocalPlayerAttached(EntityUid obj) {
246-
// Our mob changed, update our verb panels
247-
// A little hacky, but also wait half a second for verb information about our mob to arrive
248-
// TODO: Remove this timer
249-
_timerManager.AddTimer(new Timer(500, false, () => _interfaceManager.DefaultInfo?.RefreshVerbs(this)));
243+
public void RefreshVerbs() {
244+
_interfaceManager.DefaultInfo?.RefreshVerbs(this);
250245
}
251246
}

OpenDreamClient/Rendering/ClientAppearanceSystem.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,7 @@ public int GetAnimationFrame(IGameTiming gameTiming) {
6868
[Dependency] private readonly IMapManager _mapManager = default!;
6969
[Dependency] private readonly MapSystem _mapSystem = default!;
7070
[Dependency] private readonly IPrototypeManager _protoManager = default!;
71+
[Dependency] private readonly ClientVerbSystem _verbSystem = default!;
7172

7273
public override void Initialize() {
7374
UpdatesOutsidePrediction = true;
@@ -99,6 +100,8 @@ public override void Update(float frameTime) {
99100
if (flick.GetAnimationFrame(_gameTiming) == -1)
100101
_movableFlicks.Remove(flickKey);
101102
}
103+
104+
_verbSystem.RefreshVerbs();
102105
}
103106

104107
public void SetAllAppearances(Dictionary<uint, ImmutableAppearance> appearances) {

OpenDreamRuntime/Objects/Types/DreamList.cs

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -658,6 +658,13 @@ public override IEnumerable<DreamValue> EnumerateValues() {
658658
yield return new(verb);
659659
}
660660

661+
public override bool ContainsValue(DreamValue value) {
662+
if (!value.TryGetValueAsProc(out var verb))
663+
return false;
664+
665+
return Verbs.Contains(verb);
666+
}
667+
661668
public override void SetValue(DreamValue key, DreamValue value, bool allowGrowth = false) {
662669
throw new Exception("Cannot set the values of a verbs list");
663670
}
@@ -673,6 +680,18 @@ public override void AddValue(DreamValue value) {
673680
_verbSystem?.UpdateClientVerbs(_client);
674681
}
675682

683+
public override void RemoveValue(DreamValue value) {
684+
if (!value.TryGetValueAsProc(out var verb))
685+
return;
686+
687+
var valueIndex = Verbs.LastIndexOf(verb);
688+
689+
if (valueIndex != -1) {
690+
Verbs.RemoveAt(valueIndex);
691+
_verbSystem?.UpdateClientVerbs(_client);
692+
}
693+
}
694+
676695
public override void Cut(int start = 1, int end = 0) {
677696
int verbCount = Verbs.Count + 1;
678697
if (end == 0 || end > verbCount) end = verbCount;
@@ -722,6 +741,15 @@ public override IEnumerable<DreamValue> EnumerateValues() {
722741
}
723742
}
724743

744+
public override bool ContainsValue(DreamValue value) {
745+
if (!value.TryGetValueAsProc(out var verb))
746+
return false;
747+
if (verb.VerbId == null)
748+
return false;
749+
750+
return GetVerbs().Contains(verb.VerbId.Value);
751+
}
752+
725753
public override void SetValue(DreamValue key, DreamValue value, bool allowGrowth = false) {
726754
throw new Exception("Cannot set the values of a verbs list");
727755
}
@@ -740,6 +768,21 @@ public override void AddValue(DreamValue value) {
740768
});
741769
}
742770

771+
public override void RemoveValue(DreamValue value) {
772+
if (!value.TryGetValueAsProc(out var verb))
773+
return;
774+
if (verb.VerbId == null) {
775+
return;
776+
}
777+
778+
atomManager.UpdateAppearance(atom, appearance => {
779+
var valueIndex = appearance.Verbs.LastIndexOf(verb.VerbId.Value);
780+
781+
if (valueIndex != -1)
782+
appearance.Verbs.RemoveAt(valueIndex);
783+
});
784+
}
785+
743786
public override void Cut(int start = 1, int end = 0) {
744787
atomManager.UpdateAppearance(atom, appearance => {
745788
int count = appearance.Verbs.Count + 1;

OpenDreamRuntime/Procs/Native/DreamProcNativeList.cs

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,12 @@ private static int ListRemove(IDreamList list, ReadOnlySpan<DreamValue> args) {
150150
var itemRemoved = 0;
151151
foreach (var argument in args) {
152152
if (argument.TryGetValueAsDreamList(out var argumentList)) {
153+
if (argumentList == list) {
154+
itemRemoved += list.GetLength();
155+
list.Cut();
156+
break;
157+
}
158+
153159
foreach (DreamValue value in argumentList.EnumerateValues()) {
154160
if (list.ContainsValue(value)) {
155161
list.RemoveValue(value);

0 commit comments

Comments
 (0)