Ejemplo n.º 1
0
        protected override FishingActionRequest ClientTryCreateRequest(ICharacter character)
        {
            if (ComponentFishingVisualizer.TryGetFor(character, out _) ||
                PlayerCharacter.GetPrivateState(character).CurrentActionState is FishingActionState)
            {
                // already fishing
                return(null);
            }

            var itemFishingRod        = character.SharedGetPlayerSelectedHotbarItem();
            var fishingRodPublicState = itemFishingRod.GetPublicState <ItemFishingRodPublicState>();

            if (fishingRodPublicState.CurrentProtoBait is null ||
                SharedFindBaitItem(character, fishingRodPublicState.CurrentProtoBait) is null)
            {
                // no bait selected - try switch it
                FishingBaitReloadingSystem.ClientTrySwitchBaitType();
                if (fishingRodPublicState.CurrentProtoBait is null ||
                    SharedFindBaitItem(character, fishingRodPublicState.CurrentProtoBait) is null)
                {
                    // no bait selected after a switch attempt
                    return(null);
                }
            }

            var fishingTargetPosition = ClientInputManager.MouseWorldPosition;

            // clamp max distance from player
            fishingTargetPosition = character.Position
                                    + ((fishingTargetPosition - character.Position)
                                       .ClampMagnitude(MaxFishingDistance * 0.95));

            // validation will be done in SharedValidateRequest automatically
            return(new FishingActionRequest(character, itemFishingRod, fishingTargetPosition));
        }
        public static void OnFishCaughtOrFishingCancelled(
            ICharacter character,
            [CanBeNull] IProtoItem protoItemFishCaught,
            Vector2D fishingTargetPosition,
            float caughtFishSizeValue)
        {
            ClientTimersSystem.AddAction(
                FishingCompletedAnimationDelay,
                () =>
            {
                ComponentFishingVisualizer.TryGetFor(character, out var fishingVisualizer);
                if (fishingVisualizer is null)
                {
                    return;
                }

                if (fishingVisualizer.FishingCompletedVisualizer is null)
                {
                    Api.Client.Scene.CreateSceneObject(nameof(ComponentFishingCompletedVisualizer))
                    .AddComponent <ComponentFishingCompletedVisualizer>()
                    .Setup(fishingTargetPosition,
                           character,
                           protoItemFishCaught,
                           caughtFishSizeValue);
                }
                else if (protoItemFishCaught is not null)
                {
                    fishingVisualizer.FishingCompletedVisualizer
                    .SetupFish(protoItemFishCaught, caughtFishSizeValue);
                }
            });
        }