using System; using SS14.Shared.GameObjects; using SS14.Shared.GameObjects.Serialization; using Content.Server.GameObjects.EntitySystems; using SS14.Shared.Interfaces.GameObjects; using SS14.Shared.Map; using SS14.Shared.IoC; using SS14.Server.GameObjects; using SS14.Shared.Maths; using SS14.Server.Interfaces.GameObjects; using SS14.Shared.Interfaces.Timing; using SS14.Shared.GameObjects.EntitySystemMessages; namespace Content.Server.GameObjects.Components.Weapon.Melee { public class MeleeWeaponComponent : Component, IAfterAttack { public override string Name => "MeleeWeapon"; public int Damage = 1; public float Range = 1; public float ArcWidth = 90; public override void ExposeData(EntitySerializer serializer) { base.ExposeData(serializer); serializer.DataField(ref Damage, "damage", 5); serializer.DataField(ref Range, "damage", 1); serializer.DataField(ref ArcWidth, "damage", 90); } void IAfterAttack.Afterattack(IEntity user, GridLocalCoordinates clicklocation, IEntity attacked) { var location = user.GetComponent().LocalPosition; var angle = new Angle(clicklocation.ToWorld().Position - location.ToWorld().Position); var entities = IoCManager.Resolve().GetEntitiesInArc(user.GetComponent().LocalPosition, Range, angle, ArcWidth); foreach (var entity in entities) { if (!entity.GetComponent().IsMapTransform || entity == user) continue; if (entity.TryGetComponent(out DamageableComponent damagecomponent)) { damagecomponent.TakeDamage(DamageType.Brute, Damage); } } } } }