using Content.Shared._CP14.MagicEnergy.Components; using Content.Shared._CP14.Religion.Components; using Content.Shared._CP14.Religion.Systems; using Content.Shared.FixedPoint; using Content.Shared.Follower; using Robust.Server.GameObjects; namespace Content.Server._CP14.Religion; public sealed partial class CP14ReligionGodSystem { [Dependency] private readonly UserInterfaceSystem _userInterface = default!; [Dependency] private readonly FollowerSystem _follower = default!; private void InitializeUI() { SubscribeLocalEvent(OnOpenInterface); SubscribeLocalEvent(OnTeleportAttempt); } private void OnTeleportAttempt(Entity ent, ref CP14ReligionEntityTeleportAttempt args) { var target = GetEntity(args.Entity); var canTeleport = false; if (TryComp(target, out var altar)) { if (altar.Religion == ent.Comp.Religion) canTeleport = true; } else if (TryComp(target, out var follower)) { if (follower.Religion == ent.Comp.Religion) canTeleport = true; } if (!canTeleport) return; _follower.StartFollowingEntity(ent, target); } private void OnOpenInterface(Entity ent, ref OpenBoundInterfaceMessage args) { if (ent.Comp.Religion is null) return; var altars = new Dictionary(); var queryAltars = EntityQueryEnumerator(); while (queryAltars.MoveNext(out var uid, out var altar, out var meta)) { if (altar.Religion != ent.Comp.Religion) continue; altars.TryAdd(GetNetEntity(uid), meta.EntityName); } var followers = new Dictionary(); var queryFollowers = EntityQueryEnumerator(); while (queryFollowers.MoveNext(out var uid, out var follower, out var meta)) { if (follower.Religion != ent.Comp.Religion) continue; followers.TryAdd(GetNetEntity(uid), meta.EntityName); } var followerPercentage = GetFollowerPercentage(ent); ent.Comp.FollowerPercentage = followerPercentage; Dirty(ent); FixedPoint2 manaPercentage = 0f; if (TryComp(ent, out var manaContainerComponent)) { manaPercentage = manaContainerComponent.Energy / manaContainerComponent.MaxEnergy; } _userInterface.SetUiState(ent.Owner, CP14ReligionEntityUiKey.Key, new CP14ReligionEntityUiState(altars, followers, followerPercentage, manaPercentage)); } }