using Content.Shared._Goobstation.Blob.Components; using Content.Shared.Verbs; namespace Content.Shared._Goobstation.Blob; public abstract class SharedBlobTileSystem : EntitySystem { protected EntityQuery ObserverQuery; protected EntityQuery CoreQuery; protected EntityQuery TransformQuery; protected EntityQuery TileQuery; public override void Initialize() { base.Initialize(); SubscribeLocalEvent>(AddUpgradeVerb); ObserverQuery = GetEntityQuery(); CoreQuery = GetEntityQuery(); TransformQuery = GetEntityQuery(); TileQuery = GetEntityQuery(); } protected abstract void TryUpgrade(Entity target, Entity core, EntityUid observer); private void AddUpgradeVerb(EntityUid uid, BlobUpgradeableTileComponent comp, GetVerbsEvent args) { if (!ObserverQuery.TryGetComponent(args.User, out var ghostBlobComponent) || !TileQuery.TryGetComponent(uid, out var component) || TransformQuery.TryGetComponent(uid, out var transformComponent) && !transformComponent.Anchored || ghostBlobComponent.Core == null || component.Core == null || !CoreQuery.HasComponent(ghostBlobComponent.Core.Value)) return; var verbName = Loc.GetString(comp.Locale); AlternativeVerb verb = new() { Act = () => TryUpgrade((uid, component, comp), ghostBlobComponent.Core.Value, args.User), Text = verbName, }; args.Verbs.Add(verb); } }