Пример #1
0
        ////////////////

        private static void RunFinalDashIf(SpiritWalkingPlayer myplayer)
        {
            if (myplayer.FinalDashElapsed <= 0)
            {
                return;
            }

            int chargeTime = 90;

            SpiritWalkFxLogic.EmitSpiritTrailParticles(
                position: myplayer.player.MountedCenter,
                direction: Vector2.One.RotatedByRandom(Math.PI) * 5f
                //particles: 1
                //wide: true
                //offsetY: 0
                );

            if (myplayer.FinalDashElapsed >= chargeTime)
            {
                myplayer.FinalDashElapsed = 0;

                SpiritWalkLogic.AttemptFinalDash(myplayer, true);

                SpiritWalkLogic.DeactivateIf(myplayer.player, true);
            }
            else
            {
                myplayer.FinalDashElapsed++;
            }
        }
Пример #2
0
 public static void UpdateFrameEffects(SpiritWalkingPlayer myplayer, bool isSpiritWalking)
 {
     if (isSpiritWalking)
     {
         SpiritWalkFxLogic.UpdateFrameEffectsForSpiritWalk(myplayer);
     }
 }
Пример #3
0
        ////////////////

        public static void UpdateDrawLayers(SpiritWalkingPlayer myplayer, List <PlayerLayer> layers, bool isSpiritWalking)
        {
            if (isSpiritWalking)
            {
                SpiritWalkFxLogic.UpdateDrawLayersForSpiritWalk(myplayer, layers);
            }
        }
Пример #4
0
        ////////////////

        public static void PickupPelletIf(int tileX, int tileY, bool isBad)
        {
            var myplayer = Main.LocalPlayer.GetModPlayer <SpiritWalkingPlayer>();

            if (myplayer.NoPelletPickupDuration > 0)
            {
                return;
            }

            int coord     = tileX + (tileY << 16);
            var pelletPos = new Vector2((tileX * 16) + 8, (tileY * 16) + 8);

            if (isBad)
            {
                SpiritWalkPelletsLogic.ApplyBadPellet();
                SpiritWalkFxLogic.EmitBadPelletParticles(pelletPos);
            }
            else
            {
                SpiritWalkPelletsLogic.ApplyGoodPellet();
                SpiritWalkFxLogic.EmitGoodPelletParticles(pelletPos);
            }

            myplayer.EatenPelletCoords.Add(coord);

            //

            SpiritWalkPelletsLogic.CachedRevealedPellets.Remove((ulong)coord);
        }
Пример #5
0
        ////////////////

        public static void ActivateIf(Player player, bool syncIfClient)
        {
            var config   = SpiritWalkingConfig.Instance;
            var myplayer = player.GetModPlayer <SpiritWalkingPlayer>();

            if (myplayer.IsSpiritWalking)
            {
                return;
            }

            if (SpiritWalkLogic.IsUponOpenAir(player))
            {
                if (!config.Get <bool>(nameof(config.OpenAirAllowsEngagingSpiritWalk)))
                {
                    Main.NewText("Cannot enage spirit walking upon open air.", Color.Yellow);

                    return;
                }
            }

            if (!SpiritWalkLogic.ApplyActivateCostIf(player))
            {
                return;
            }

            //

            SpiritWalkFlightLogic.ActivateFlightBehavior(myplayer);

            SpiritWalkLogic.ActivatePlayerForm(player);

            SpiritWalkFxLogic.ActivationFx(myplayer);

            SpiritWalkPelletsLogic.ActivationPreparations(myplayer);

            //

            myplayer.IsSpiritWalking = true;

            SpiritWalkingAPI.RunSpiritWalkActivationHooks(player, true);

            //

            if (syncIfClient)
            {
                if (Main.netMode == NetmodeID.MultiplayerClient)
                {
                    SpiritWalkStateProtocol.Broadcast(myplayer);
                }
            }
        }
Пример #6
0
        ////////////////

        public static void UpdateBiomeVisuals(SpiritWalkingPlayer myplayer, bool isSpiritWalking)
        {
            if (isSpiritWalking)
            {
                SpiritWalkFxLogic.UpdateBiomeVisualsForSpiritWalk(myplayer);
            }
            else
            {
                if (Filters.Scene["Vortex"].IsActive())
                {
                    Filters.Scene["Vortex"].Deactivate(new object[0]);
                }
            }
        }
        public static void ActivationFx(SpiritWalkingPlayer myplayer)
        {
            if (SpiritWalkFxLogic.FlightSoundLoop == null)
            {
                SpiritWalkFxLogic.FlightSoundLoop = OverlaySound.Create(
                    sourceMod: SpiritWalkingMod.Instance,
                    soundPath: "Sounds/rocket",
                    fadeTicks: 0,
                    customCondition: SpiritWalkFxLogic.FlightSoundLoopCondition
                    );
            }
            SpiritWalkFxLogic.FlightSoundLoop.Play();

            SpiritWalkFxLogic.EmitSpiritParticles(
                position: myplayer.FlightProjectile.Center,
                direction: new Vector2(0f, 8f),
                particles: 96,
                radius: 28
                );
        }
        public static void ApplyFlightSpeedBoostIf(SpiritWalkingPlayer myplayer)
        {
            if (myplayer.FlightBurstCooldown > 0)
            {
                return;
            }

            var   config = SpiritWalkingConfig.Instance;
            float boost  = config.Get <float>(nameof(config.SpiritWalkBoostSpeedMultiplier));

            SpiritWalkFlightLogic.ApplyFlightSpeedScaleChange(myplayer, boost);

            Main.PlaySound(SoundID.Grass);

            SpiritWalkFxLogic.EmitSpiritParticles(
                position: myplayer.FlightProjectile.Center,
                direction: myplayer.FlightProjectile.velocity * -2f,
                particles: 20
                );
        }
Пример #9
0
        ////////////////

        public static void Update(SpiritWalkingPlayer myplayer, bool isSpiritWalking)
        {
//DebugLibraries.Print( "walk?", ""+isSpiritWalking+", "+myplayer.player.width+", "+myplayer.player.height );
            if (!isSpiritWalking)
            {
                return;
            }

            bool canSW = SpiritWalkLogic.CanSpiritWalk(myplayer.player);

            if (canSW)
            {
                SpiritWalkLogic.UpdateForSpiritWalk(myplayer);
            }
            else
            {
                SpiritWalkLogic.DeactivateIf(myplayer.player, true);
            }

            SpiritWalkFxLogic.Update(myplayer, canSW);
        }
        public static void DeactivateIf(Player player, bool syncIfClient)
        {
            var myplayer = player.GetModPlayer <SpiritWalkingPlayer>();

            if (!myplayer.IsSpiritWalking)
            {
                return;
            }

            //

            SpiritWalkLogic.DeactivatePlayerForm(player);

            SpiritWalkFlightLogic.DeactivateFlightBehavior(player);

            SpiritWalkFxLogic.DeactivationFx(player);

            //

            SpiritWalkPelletsLogic.FlushCache();

            //

            myplayer.IsSpiritWalking = false;

            SpiritWalkingAPI.RunSpiritWalkActivationHooks(player, false);

            //

            if (syncIfClient)
            {
                if (Main.netMode == NetmodeID.MultiplayerClient)
                {
                    SpiritWalkStateProtocol.Broadcast(myplayer);
                }
            }
        }
Пример #11
0
        private static void UpdateForSpiritWalk(SpiritWalkingPlayer myplayer)
        {
            if (SpiritWalkLogic.IsUponOpenAir(myplayer.player))
            {
                SpiritWalkFlightLogic.ApplySpiritWalkOpenAirFriction(myplayer.player);
                SpiritWalkFxLogic.ApplySpiritWalkOpenAirFriction(myplayer.player);
            }

            //

            SpiritWalkLogic.UpdateSpiritWalkCost(myplayer.player);

            SpiritWalkLogic.RunFinalDashIf(myplayer);

            //

            myplayer.player.gravity = 0f;

            //

            SpiritWalkFlightLogic.UpdateWalk(myplayer);

            SpiritWalkPelletsLogic.UpdateWalk(myplayer);
        }