public static void SteerFlight(SpiritWalkingPlayer myplayer, bool down, bool up, bool left, bool right) { bool isFinalDash = myplayer.FinalDashElapsed > 0; if (!isFinalDash) { if (down) { SpiritWalkFlightLogic.ApplyFlightSpeedBrakeIf(myplayer); } else if (up) { SpiritWalkFlightLogic.ApplyFlightSpeedBoostIf(myplayer); } } var config = SpiritWalkingConfig.Instance; float rotStep = config.Get <float>(nameof(config.SpiritWalkSteering)); //0.03f; if (left) { myplayer.IntendedFlightVelocity = myplayer.IntendedFlightVelocity.RotatedBy(-rotStep); } else if (right) { myplayer.IntendedFlightVelocity = myplayer.IntendedFlightVelocity.RotatedBy(rotStep); } }
public static void ActivateFlightBehavior(SpiritWalkingPlayer myplayer) { myplayer.IntendedFlightVelocity = SpiritWalkFlightLogic.DefaultFlightHeading; int projWho = SpiritWalkFlightLogic.CreateSpiritBall(myplayer); myplayer.FlightProjectile = Main.projectile[projWho]; }
public static void ApplySpiritWalkOpenAirFriction(Player player) { var config = SpiritWalkingConfig.Instance; if (SpiritWalkingConfig.SpiritWalkUsesAnima) { SpiritWalkFlightLogic.ApplySpiritWalkOpenAirFriction_Anima(player); } else { SpiritWalkFlightLogic.ApplySpiritWalkOpenAirFriction_Mana(player); } }
//////////////// 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); } } }
//// private static void UpdateSpeedChanges(SpiritWalkingPlayer myplayer) { if (myplayer.FlightBurstCooldown > 0) { myplayer.FlightBurstCooldown--; } if (myplayer.FlightBurstDuration > 1) { myplayer.FlightBurstDuration--; } else if (myplayer.FlightBurstDuration == 1) { myplayer.FlightBurstDuration = 0; SpiritWalkFlightLogic.RevertFlightSpeedScale(myplayer); } }
//////////////// public static void UpdateWalk(SpiritWalkingPlayer myplayer) { SpiritWalkFlightLogic.UpdateSpeedChanges(myplayer); if (myplayer.FlightProjectile?.active != true) { int projWho = SpiritWalkFlightLogic.CreateSpiritBall(myplayer); myplayer.FlightProjectile = Main.projectile[projWho]; } if (myplayer.FlightProjectile?.active == true) { myplayer.player.Center = myplayer.FlightProjectile.Center; myplayer.player.velocity = default; } //float accel = 0.1f; //myplayer.player.velocity = Vector2.Lerp( myplayer.player.velocity, myplayer.FlightDirection, accel ); }
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 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); }