mirror of
https://github.com/MineLittlePony/MineLittlePony.git
synced 2024-11-22 04:27:59 +01:00
Separate wing angle and whether a model is horizontal into separate model attributes
This commit is contained in:
parent
120965fb8b
commit
c7ea57c2b6
6 changed files with 36 additions and 21 deletions
|
@ -13,7 +13,7 @@ org.gradle.daemon=false
|
|||
displayname=Mine Little Pony
|
||||
authors=Verdana, Rene_Z, Mumfrey, Killjoy1221, Sollace
|
||||
description=Mine Little Pony turns players and mobs into ponies. Press F9 ingame to access settings.
|
||||
version=4.2.1
|
||||
version=4.2.2
|
||||
release=SNAPSHOT
|
||||
|
||||
# Dependencies
|
||||
|
|
|
@ -68,7 +68,7 @@ public abstract class AbstractPonyModel<T extends LivingEntity> extends ClientPo
|
|||
*/
|
||||
@Override
|
||||
public void setAngles(T entity, float move, float swing, float ticks, float headYaw, float headPitch) {
|
||||
attributes.checkRainboom(entity, swing, canFly());
|
||||
attributes.checkRainboom(entity, swing, canFly(), ticks);
|
||||
PonyModelPrepareCallback.EVENT.invoker().onPonyModelPrepared(entity, this, EquineRenderManager.Mode.OTHER);
|
||||
|
||||
super.setAngles(entity, move, swing, ticks, headYaw, headPitch);
|
||||
|
|
|
@ -114,15 +114,15 @@ public class EquineRenderManager<T extends LivingEntity, M extends EntityModel<T
|
|||
}
|
||||
|
||||
if (entity.isAlive() && entity.isSleeping()) {
|
||||
return PonyPosture.DEFAULT;
|
||||
return PonyPosture.STANDING;
|
||||
}
|
||||
|
||||
if (getModel().getAttributes().isSwimming) {
|
||||
if (getModel().getAttributes().isHorizontal) {
|
||||
return PonyPosture.SWIMMING;
|
||||
}
|
||||
|
||||
if (getModel().getAttributes().isGoingFast) {
|
||||
return PonyPosture.FLIGHT;
|
||||
return PonyPosture.FLYING;
|
||||
}
|
||||
|
||||
return PonyPosture.FALLING;
|
||||
|
|
|
@ -8,9 +8,9 @@ import com.minelittlepony.model.IModel;
|
|||
|
||||
public interface PonyPosture<T extends LivingEntity> {
|
||||
|
||||
PonyPosture<LivingEntity> DEFAULT = new PostureStanding();;
|
||||
PonyPosture<LivingEntity> STANDING = new PostureStanding();;
|
||||
PonyPosture<LivingEntity> ELYTRA = new PostureElytra();
|
||||
PonyPosture<PlayerEntity> FLIGHT = new PostureFlight();
|
||||
PonyPosture<PlayerEntity> FLYING = new PostureFlight();
|
||||
PonyPosture<PlayerEntity> SWIMMING = new PostureSwimming();
|
||||
PonyPosture<LivingEntity> FALLING = new PostureFalling();
|
||||
|
||||
|
|
|
@ -1,10 +1,5 @@
|
|||
package com.minelittlepony.model;
|
||||
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
|
||||
import static com.minelittlepony.model.PonyModelConstants.ROTATE_270;
|
||||
import static com.minelittlepony.model.PonyModelConstants.WING_ROT_Z_SNEAK;
|
||||
|
||||
public interface IPegasus extends IModel {
|
||||
|
||||
/**
|
||||
|
@ -25,13 +20,7 @@ public interface IPegasus extends IModel {
|
|||
* @param ticks Partial render ticks
|
||||
*/
|
||||
default float getWingRotationFactor(float ticks) {
|
||||
if (getAttributes().isSwimming) {
|
||||
return (MathHelper.sin(ticks * 0.136f) / 2) + ROTATE_270;
|
||||
}
|
||||
if (isFlying()) {
|
||||
return MathHelper.sin(ticks * 0.536f) + ROTATE_270 + 0.4f;
|
||||
}
|
||||
return WING_ROT_Z_SNEAK;
|
||||
return getAttributes().wingAngle;
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -8,10 +8,14 @@ import com.minelittlepony.util.MathUtil;
|
|||
import net.minecraft.entity.LivingEntity;
|
||||
import net.minecraft.entity.player.PlayerEntity;
|
||||
import net.minecraft.util.Arm;
|
||||
import net.minecraft.util.math.MathHelper;
|
||||
import net.minecraft.util.math.Vec3d;
|
||||
|
||||
import java.util.UUID;
|
||||
|
||||
import static com.minelittlepony.model.PonyModelConstants.ROTATE_270;
|
||||
import static com.minelittlepony.model.PonyModelConstants.WING_ROT_Z_SNEAK;
|
||||
|
||||
public class ModelAttributes<T extends LivingEntity> {
|
||||
|
||||
/**
|
||||
|
@ -27,6 +31,10 @@ public class ModelAttributes<T extends LivingEntity> {
|
|||
* from regular flying in that there are actual "wings" involved.
|
||||
*/
|
||||
public boolean isGliding;
|
||||
/**
|
||||
* True if the model is rotated 90degs (players)
|
||||
*/
|
||||
public boolean isHorizontal;
|
||||
/**
|
||||
* True if the model is swimming under water.
|
||||
*/
|
||||
|
@ -79,10 +87,15 @@ public class ModelAttributes<T extends LivingEntity> {
|
|||
*/
|
||||
public float visualHeight = 2F;
|
||||
|
||||
/**
|
||||
* The angle used to animate wing flaps whilst flying/swimming.
|
||||
*/
|
||||
public float wingAngle;
|
||||
|
||||
/**
|
||||
* Checks flying and speed conditions and sets rainboom to true if we're a species with wings and is going faaast.
|
||||
*/
|
||||
public void checkRainboom(T entity, float swing, boolean hasWings) {
|
||||
public void checkRainboom(T entity, float swing, boolean hasWings, float ticks) {
|
||||
Vec3d motion = entity.getVelocity();
|
||||
double zMotion = Math.sqrt(motion.x * motion.x + motion.z * motion.z);
|
||||
|
||||
|
@ -90,6 +103,18 @@ public class ModelAttributes<T extends LivingEntity> {
|
|||
isGoingFast &= zMotion > 0.4F;
|
||||
|
||||
motionLerp = MathUtil.clampLimit(zMotion * 30, 1);
|
||||
|
||||
wingAngle = calcWingRotationFactor(ticks);
|
||||
}
|
||||
|
||||
private float calcWingRotationFactor(float ticks) {
|
||||
if (isSwimming) {
|
||||
return (MathHelper.sin(ticks * 0.136f) / 2) + ROTATE_270;
|
||||
}
|
||||
if (isFlying) {
|
||||
return MathHelper.sin(ticks * 0.536f) + ROTATE_270 + 0.4f;
|
||||
}
|
||||
return WING_ROT_Z_SNEAK;
|
||||
}
|
||||
|
||||
public void updateLivingState(T entity, IPony pony, EquineRenderManager.Mode mode) {
|
||||
|
@ -99,7 +124,8 @@ public class ModelAttributes<T extends LivingEntity> {
|
|||
isFlying = mode == Mode.THIRD_PERSON && pony.isFlying(entity);
|
||||
isGliding = entity.isFallFlying();
|
||||
isSwimming = mode == Mode.THIRD_PERSON && pony.isSwimming(entity);
|
||||
isSwimmingRotated = mode == Mode.THIRD_PERSON && isSwimming && (entity instanceof PlayerEntity || entity instanceof IRotatedSwimmer);
|
||||
isSwimmingRotated = isSwimming && (entity instanceof PlayerEntity || entity instanceof IRotatedSwimmer);
|
||||
isHorizontal = isSwimming;
|
||||
isRidingInteractive = pony.isRidingInteractive(entity);
|
||||
interpolatorId = entity.getUuid();
|
||||
isLeftHanded = entity.getMainArm() == Arm.LEFT;
|
||||
|
|
Loading…
Reference in a new issue