//////////////// 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++; } }
public static void UpdateFrameEffects(SpiritWalkingPlayer myplayer, bool isSpiritWalking) { if (isSpiritWalking) { SpiritWalkFxLogic.UpdateFrameEffectsForSpiritWalk(myplayer); } }
//////////////// public static void UpdateDrawLayers(SpiritWalkingPlayer myplayer, List <PlayerLayer> layers, bool isSpiritWalking) { if (isSpiritWalking) { SpiritWalkFxLogic.UpdateDrawLayersForSpiritWalk(myplayer, layers); } }
//////////////// 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); }
//////////////// 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); } } }
//////////////// 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 ); }
//////////////// 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); } } }
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); }