mirror of
https://github.com/Sollace/Unicopia.git
synced 2024-11-27 15:17:59 +01:00
Smooth motion due to airflow and wind. Should fix any bumps and sudden changes in direction/altitude when flying and overall make controlling whilst flying more manageable
This commit is contained in:
parent
2754d41ee9
commit
92fd22668e
1 changed files with 26 additions and 10 deletions
|
@ -88,6 +88,9 @@ public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickab
|
||||||
|
|
||||||
private final Pony pony;
|
private final Pony pony;
|
||||||
|
|
||||||
|
private Lerp updraft = new Lerp(0);
|
||||||
|
private Lerp windStrength = new Lerp(0);
|
||||||
|
|
||||||
public PlayerPhysics(Pony pony) {
|
public PlayerPhysics(Pony pony) {
|
||||||
super(pony.asEntity(), Creature.GRAVITY);
|
super(pony.asEntity(), Creature.GRAVITY);
|
||||||
this.pony = pony;
|
this.pony = pony;
|
||||||
|
@ -364,6 +367,8 @@ public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickab
|
||||||
soundPlaying = false;
|
soundPlaying = false;
|
||||||
descentRate = 0;
|
descentRate = 0;
|
||||||
ticksDiving = 0;
|
ticksDiving = 0;
|
||||||
|
updraft.update(0, 100);
|
||||||
|
windStrength.update(0, 100);
|
||||||
|
|
||||||
if (Abilities.RAINBOOM.canUse(pony.getCompositeRace()) && entity.isOnGround()) {
|
if (Abilities.RAINBOOM.canUse(pony.getCompositeRace()) && entity.isOnGround()) {
|
||||||
pony.getMagicalReserves().getCharge().set(0);
|
pony.getMagicalReserves().getCharge().set(0);
|
||||||
|
@ -376,6 +381,8 @@ public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickab
|
||||||
} else {
|
} else {
|
||||||
descentRate = 0;
|
descentRate = 0;
|
||||||
soundPlaying = false;
|
soundPlaying = false;
|
||||||
|
updraft.update(0, 100);
|
||||||
|
windStrength.update(0, 100);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!entity.isOnGround()) {
|
if (!entity.isOnGround()) {
|
||||||
|
@ -623,12 +630,13 @@ public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickab
|
||||||
velocity.x += - forward * MathHelper.sin(entity.getYaw() * 0.017453292F);
|
velocity.x += - forward * MathHelper.sin(entity.getYaw() * 0.017453292F);
|
||||||
velocity.z += forward * MathHelper.cos(entity.getYaw() * 0.017453292F);
|
velocity.z += forward * MathHelper.cos(entity.getYaw() * 0.017453292F);
|
||||||
|
|
||||||
|
|
||||||
if (entity.getWorld().hasRain(entity.getBlockPos())) {
|
if (entity.getWorld().hasRain(entity.getBlockPos())) {
|
||||||
applyTurbulance(velocity);
|
applyTurbulance(velocity);
|
||||||
} else {
|
} else {
|
||||||
double updraft = WeatherConditions.getUpdraft(new BlockPos.Mutable().set(entity.getBlockPos()), entity.getWorld()) / 3F;
|
float targetUpdraft = (float)WeatherConditions.getUpdraft(new BlockPos.Mutable().set(entity.getBlockPos()), entity.getWorld()) / 3F;
|
||||||
updraft *= 1 + motion;
|
targetUpdraft *= 1 + motion;
|
||||||
|
this.updraft.update(targetUpdraft, targetUpdraft > this.updraft.getTarget() ? 30_000 : 3000);
|
||||||
|
double updraft = this.updraft.getValue();
|
||||||
velocity.y += updraft;
|
velocity.y += updraft;
|
||||||
descentRate -= updraft;
|
descentRate -= updraft;
|
||||||
}
|
}
|
||||||
|
@ -702,19 +710,25 @@ public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickab
|
||||||
.multiply(globalEffectStrength / 100D)
|
.multiply(globalEffectStrength / 100D)
|
||||||
.multiply(1 / (1 + Math.floor(pony.getLevel().get() / 10F)));
|
.multiply(1 / (1 + Math.floor(pony.getLevel().get() / 10F)));
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if (effectStrength * gust.getX() >= 1) {
|
if (effectStrength * gust.getX() >= 1) {
|
||||||
SoundEmitter.playSoundAt(entity, USounds.AMBIENT_WIND_GUST, SoundCategory.AMBIENT, 3, 1);
|
SoundEmitter.playSoundAt(entity, USounds.AMBIENT_WIND_GUST, SoundCategory.AMBIENT, 3, 1);
|
||||||
}
|
}
|
||||||
|
|
||||||
float weight = 1 + (EnchantmentHelper.getEquipmentLevel(UEnchantments.HEAVY, entity) * 0.8F) + (pony.getCompositeRace().canUseEarth() ? 1 : 0);
|
float weight = 1 + (EnchantmentHelper.getEquipmentLevel(UEnchantments.HEAVY, entity) * 0.8F) + (pony.getCompositeRace().canUseEarth() ? 1 : 0);
|
||||||
|
|
||||||
velocity.add(WeatherConditions.getAirflow(entity.getBlockPos(), entity.getWorld()), 0.04F * effectStrength);
|
Vec3d airflow = WeatherConditions.getAirflow(entity.getBlockPos(), entity.getWorld())
|
||||||
velocity.add(Vec3d.fromPolar(
|
.multiply(0.04F * effectStrength)
|
||||||
(entity.getPitch() + (float)gust.getY()) * MathHelper.RADIANS_PER_DEGREE,
|
.add(Vec3d.fromPolar(
|
||||||
(entity.getYaw() + (float)gust.getZ()) * MathHelper.RADIANS_PER_DEGREE
|
(entity.getPitch() + (float)gust.getY()) * MathHelper.RADIANS_PER_DEGREE,
|
||||||
),
|
(entity.getYaw() + (float)gust.getZ()) * MathHelper.RADIANS_PER_DEGREE
|
||||||
effectStrength * (float)gust.getX() / weight
|
).multiply(effectStrength * (float)gust.getX() / weight));
|
||||||
);
|
|
||||||
|
windStrength.update((float)airflow.length(), airflow.length() > windStrength.getValue() ? 1000 : 500);
|
||||||
|
velocity.add(airflow.normalize(), windStrength.getValue());
|
||||||
|
|
||||||
if (!entity.getWorld().isClient && effectStrength > 0.9F && entity.getWorld().isThundering() && entity.getWorld().random.nextInt(9000) == 0) {
|
if (!entity.getWorld().isClient && effectStrength > 0.9F && entity.getWorld().isThundering() && entity.getWorld().random.nextInt(9000) == 0) {
|
||||||
LightningEntity lightning = EntityType.LIGHTNING_BOLT.create(entity.getWorld());
|
LightningEntity lightning = EntityType.LIGHTNING_BOLT.create(entity.getWorld());
|
||||||
|
@ -794,6 +808,7 @@ public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickab
|
||||||
compound.putBoolean("isFlyingEither", isFlyingEither);
|
compound.putBoolean("isFlyingEither", isFlyingEither);
|
||||||
compound.putInt("ticksInAir", ticksInAir);
|
compound.putInt("ticksInAir", ticksInAir);
|
||||||
compound.putFloat("descentRate", descentRate);
|
compound.putFloat("descentRate", descentRate);
|
||||||
|
compound.putFloat("updraft", updraft.getValue());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -804,6 +819,7 @@ public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickab
|
||||||
isFlyingEither = compound.getBoolean("isFlyingEither");
|
isFlyingEither = compound.getBoolean("isFlyingEither");
|
||||||
ticksInAir = compound.getInt("ticksInAir");
|
ticksInAir = compound.getInt("ticksInAir");
|
||||||
descentRate = compound.getFloat("descentRate");
|
descentRate = compound.getFloat("descentRate");
|
||||||
|
updraft.update(compound.getFloat("updraft"), 0);
|
||||||
|
|
||||||
entity.calculateDimensions();
|
entity.calculateDimensions();
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue