<<<<<<< HEAD <<<<<<< refs/remotes/origin/master <<<<<<< refs/remotes/origin/master using System.Collections.Generic; using Content.Server.Atmos.Components; ======= #nullable enable using System.Collections.Generic; >>>>>>> Merge fixes ======= using System.Collections.Generic; >>>>>>> Refactor damageablecomponent update (#4406) ======= using System.Collections.Generic; >>>>>>> refactor-damageablecomponent using System.Linq; using Content.Server.Atmos.Components; using Content.Shared.Damage; using Content.Shared.Damage.Components; using Content.Shared.GameTicking; using JetBrains.Annotations; using Robust.Shared.GameObjects; namespace Content.Server.Damage { [UsedImplicitly] public class GodmodeSystem : EntitySystem { private readonly Dictionary _entities = new(); public override void Initialize() { base.Initialize(); SubscribeLocalEvent(Reset); } public void Reset(RoundRestartCleanupEvent ev) { _entities.Clear(); } public bool EnableGodmode(IEntity entity) { if (_entities.ContainsKey(entity)) { return false; } _entities[entity] = new OldEntityInformation(entity); if (entity.TryGetComponent(out MovedByPressureComponent? moved)) { moved.Enabled = false; } if (entity.TryGetComponent(out IDamageableComponent? damageable)) { damageable.SupportedDamageTypes.Clear(); damageable.FullySupportedDamageGroups.Clear(); damageable.ApplicableDamageGroups.Clear(); } return true; } public bool HasGodmode(IEntity entity) { return _entities.ContainsKey(entity); } public bool DisableGodmode(IEntity entity) { if (!_entities.Remove(entity, out var old)) { return false; } if (entity.TryGetComponent(out MovedByPressureComponent? moved)) { moved.Enabled = old.MovedByPressure; } if (entity.TryGetComponent(out IDamageableComponent? damageable)) { if (old.SupportedDamageTypes != null) <<<<<<< HEAD { damageable.SupportedDamageTypes.UnionWith(old.SupportedDamageTypes); } if (old.SupportedDamageGroups != null) { damageable.FullySupportedDamageGroups.UnionWith(old.SupportedDamageGroups); } if (old.ApplicableDamageGroups != null) { ======= { damageable.SupportedDamageTypes.UnionWith(old.SupportedDamageTypes); } if (old.SupportedDamageGroups != null) { damageable.FullySupportedDamageGroups.UnionWith(old.SupportedDamageGroups); } if (old.ApplicableDamageGroups != null) { >>>>>>> refactor-damageablecomponent damageable.ApplicableDamageGroups.UnionWith(old.ApplicableDamageGroups); } } return true; } /// /// Toggles godmode for a given entity. /// /// The entity to toggle godmode for. /// true if enabled, false if disabled. public bool ToggleGodmode(IEntity entity) { if (HasGodmode(entity)) { DisableGodmode(entity); return false; } else { EnableGodmode(entity); return true; } } public class OldEntityInformation { public OldEntityInformation(IEntity entity) { Entity = entity; MovedByPressure = entity.IsMovedByPressure(); if (entity.TryGetComponent(out IDamageableComponent? damageable)) { SupportedDamageTypes = damageable.SupportedDamageTypes.ToHashSet(); SupportedDamageGroups = damageable.FullySupportedDamageGroups.ToHashSet(); ApplicableDamageGroups = damageable.ApplicableDamageGroups.ToHashSet(); } } public IEntity Entity { get; } public bool MovedByPressure { get; } public HashSet? SupportedDamageTypes { get; } public HashSet? SupportedDamageGroups { get; } public HashSet? ApplicableDamageGroups { get; } } } }