Esempio 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);
                }
            });
        }
Esempio n. 3
0
        protected override void ClientOnStart()
        {
            this.clientFishingVisualizer = this.Character.ClientSceneObject
                                           .AddComponent <ComponentFishingVisualizer>();

            this.clientFishingVisualizer.Setup(this.Character, this.FishingTargetPosition);

            if (this.CurrentFishingSession is not null)
            {
                this.clientFishingVisualizer.OnFishingSessionReceived(this.CurrentFishingSession);
            }

            var skeletonRenderer = PlayerCharacter.GetClientState(this.Character).SkeletonRenderer;

            skeletonRenderer.RemoveAnimationTrackNextEntries(AnimationTrackIndexes.Extra);
            skeletonRenderer.AddAnimation(AnimationTrackIndexes.Extra,
                                          FishingInAnimationName,
                                          isLooped: false);

            ClientFishingSoundsHelper.PlaySoundStart(this.Character);
        }
Esempio n. 4
0
        protected override void ClientOnCompleted()
        {
            ComponentFishingCompletedVisualizer.OnFishCaughtOrFishingCancelled(
                this.Character,
                protoItemFishCaught: null,
                this.FishingTargetPosition,
                caughtFishSizeValue: 0);

            if (!this.clientFishingVisualizer.IsDestroyed)
            {
                this.clientFishingVisualizer.Destroy(delay: ComponentFishingVisualizer.DelayFishingOut);
            }

            this.clientFishingVisualizer = null;

            var skeletonRenderer = PlayerCharacter.GetClientState(this.Character).SkeletonRenderer;

            skeletonRenderer.RemoveAnimationTrackNextEntries(AnimationTrackIndexes.Extra);
            skeletonRenderer.AddAnimation(AnimationTrackIndexes.Extra,
                                          FishingOutAnimationName,
                                          isLooped: false);

            ClientFishingSoundsHelper.PlaySoundCancel(this.Character);
        }