public override bool CanUse()
        {
            var world    = Curio.GetWorld();
            var delta    = world.PlayerCurio.GetVisualTarget() - Curio.GetVisualTarget();
            var distance = delta.Length();

            return(distance < 24f);
        }
        public override bool CanUse()
        {
            var world = Curio.GetWorld();
            var tile  = Curio.GetMainTile();
            var map   = tile.Map;
            var mace  = Curio.GetBehavior <BehaviorMace>();

            return(mace != null && mace.IsInArea(world.PlayerCurio) && map.CanSee(Curio.GetVisualTarget(), world.PlayerCurio.GetVisualTarget()));
        }
        public override void Perform()
        {
            var world        = Curio.GetWorld();
            var delta        = world.PlayerCurio.GetVisualTarget() - Curio.GetVisualTarget();
            var orientable   = Curio.GetBehavior <BehaviorOrientable>();
            var angleCurrent = orientable.Angle;
            var angleTarget  = Enumerable.Range(0, 8).Select(x => MathHelper.PiOver4 * x).GetClosestAngle(Util.VectorToAngle(delta));
            var angleDelta   = MathHelper.WrapAngle(angleTarget - angleCurrent);
            var attack       = new List <ActionWrapper>()
            {
                new ActionMaceGoreAttack(Curio, world.PlayerCurio, UpSwingTime, UpSwingSlashTime, DownSwingTime).InSlot(ActionSlot.Active),
                new ActionTurn(Curio, angleDelta, TurnTime).InSlot(ActionSlot.Active),
            };

            attack.Apply(Curio);
        }