mirror of
https://github.com/Sollace/Unicopia.git
synced 2025-02-25 22:24:31 +01:00
Added a wing spreading animation
This commit is contained in:
parent
188c3a5523
commit
ea38a6f1ff
4 changed files with 41 additions and 10 deletions
|
@ -6,7 +6,9 @@ import com.minelittlepony.api.model.fabric.PonyModelPrepareCallback;
|
||||||
import com.minelittlepony.api.model.gear.IGear;
|
import com.minelittlepony.api.model.gear.IGear;
|
||||||
import com.minelittlepony.unicopia.Owned;
|
import com.minelittlepony.unicopia.Owned;
|
||||||
import com.minelittlepony.unicopia.Unicopia;
|
import com.minelittlepony.unicopia.Unicopia;
|
||||||
|
import com.minelittlepony.unicopia.client.render.PlayerPoser.Animation;
|
||||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||||
|
import com.minelittlepony.unicopia.util.AnimationUtil;
|
||||||
|
|
||||||
import net.fabricmc.api.ClientModInitializer;
|
import net.fabricmc.api.ClientModInitializer;
|
||||||
import net.minecraft.entity.Entity;
|
import net.minecraft.entity.Entity;
|
||||||
|
@ -39,6 +41,11 @@ public class Main implements ClientModInitializer {
|
||||||
model.getAttributes().isHorizontal = true;
|
model.getAttributes().isHorizontal = true;
|
||||||
}
|
}
|
||||||
model.getAttributes().isGoingFast |= pony.getMotion().isRainbooming();
|
model.getAttributes().isGoingFast |= pony.getMotion().isRainbooming();
|
||||||
|
|
||||||
|
if (pony.getAnimation() == Animation.SPREAD_WINGS) {
|
||||||
|
model.getAttributes().wingAngle = -AnimationUtil.seeSitSaw(pony.getAnimationProgress(1), 1.5F) * (float)Math.PI / 1.2F;
|
||||||
|
model.getAttributes().isFlying = true;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
Unicopia.LOGGER.error("Exception occured in MineLP hook:onPonyModelPrepared", t);
|
Unicopia.LOGGER.error("Exception occured in MineLP hook:onPonyModelPrepared", t);
|
||||||
|
|
|
@ -5,6 +5,7 @@ import java.util.Optional;
|
||||||
import com.minelittlepony.unicopia.USounds;
|
import com.minelittlepony.unicopia.USounds;
|
||||||
import com.minelittlepony.unicopia.client.minelittlepony.MineLPConnector;
|
import com.minelittlepony.unicopia.client.minelittlepony.MineLPConnector;
|
||||||
import com.minelittlepony.unicopia.entity.player.Pony;
|
import com.minelittlepony.unicopia.entity.player.Pony;
|
||||||
|
import com.minelittlepony.unicopia.util.AnimationUtil;
|
||||||
|
|
||||||
import net.minecraft.client.MinecraftClient;
|
import net.minecraft.client.MinecraftClient;
|
||||||
import net.minecraft.client.render.entity.model.BipedEntityModel;
|
import net.minecraft.client.render.entity.model.BipedEntityModel;
|
||||||
|
@ -73,7 +74,7 @@ public class PlayerPoser {
|
||||||
}
|
}
|
||||||
case WAVE_ONE:
|
case WAVE_ONE:
|
||||||
case WAVE_TWO: {
|
case WAVE_TWO: {
|
||||||
progress = seesaw(progress);
|
progress = AnimationUtil.seesaw(progress);
|
||||||
|
|
||||||
if (animation == Animation.WAVE_TWO && isPony) {
|
if (animation == Animation.WAVE_TWO && isPony) {
|
||||||
rearUp(matrices, model, progress);
|
rearUp(matrices, model, progress);
|
||||||
|
@ -124,7 +125,7 @@ public class PlayerPoser {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case STOMP: {
|
case STOMP: {
|
||||||
progress = seesaw(progress);
|
progress = AnimationUtil.seesaw(progress);
|
||||||
|
|
||||||
if (!isPony) {
|
if (!isPony) {
|
||||||
if (player.getMainArm() == Arm.LEFT) {
|
if (player.getMainArm() == Arm.LEFT) {
|
||||||
|
@ -145,10 +146,10 @@ public class PlayerPoser {
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
progress = seesaw(progress) * MathHelper.sin(player.age / 4F);
|
progress = AnimationUtil.seesaw(progress) * MathHelper.sin(player.age) / 7F;
|
||||||
|
|
||||||
model.getHead().getChild("mare").pivotY += progress;
|
model.getHead().getChild("mare").pivotY = progress;
|
||||||
model.getHead().getChild("stallion").pivotY += progress;
|
model.getHead().getChild("stallion").pivotY = progress;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
|
@ -169,10 +170,6 @@ public class PlayerPoser {
|
||||||
model.leftLeg.yaw = roll / 7F;
|
model.leftLeg.yaw = roll / 7F;
|
||||||
}
|
}
|
||||||
|
|
||||||
static float seesaw(float progress) {
|
|
||||||
return Math.max(0, MathHelper.cos((progress - 0.5F) * (float)Math.PI));
|
|
||||||
}
|
|
||||||
|
|
||||||
public enum Animation {
|
public enum Animation {
|
||||||
NONE(0),
|
NONE(0),
|
||||||
WOLOLO(USounds.ENTITY_PLAYER_WOLOLO, 40),
|
WOLOLO(USounds.ENTITY_PLAYER_WOLOLO, 40),
|
||||||
|
@ -182,7 +179,8 @@ public class PlayerPoser {
|
||||||
WAVE_TWO(USounds.ENTITY_PLAYER_WHISTLE, 20),
|
WAVE_TWO(USounds.ENTITY_PLAYER_WHISTLE, 20),
|
||||||
KICK(USounds.ENTITY_PLAYER_KICK, 5),
|
KICK(USounds.ENTITY_PLAYER_KICK, 5),
|
||||||
STOMP(5),
|
STOMP(5),
|
||||||
WIGGLE_NOSE(6);
|
WIGGLE_NOSE(6),
|
||||||
|
SPREAD_WINGS(6);
|
||||||
|
|
||||||
private final int duration;
|
private final int duration;
|
||||||
private final Optional<SoundEvent> sound;
|
private final Optional<SoundEvent> sound;
|
||||||
|
|
|
@ -7,6 +7,7 @@ import com.minelittlepony.unicopia.USounds;
|
||||||
import com.minelittlepony.unicopia.ability.magic.SpellPredicate;
|
import com.minelittlepony.unicopia.ability.magic.SpellPredicate;
|
||||||
import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType;
|
import com.minelittlepony.unicopia.ability.magic.spell.effect.SpellType;
|
||||||
import com.minelittlepony.unicopia.advancement.UCriteria;
|
import com.minelittlepony.unicopia.advancement.UCriteria;
|
||||||
|
import com.minelittlepony.unicopia.client.render.PlayerPoser.Animation;
|
||||||
import com.minelittlepony.unicopia.entity.Creature;
|
import com.minelittlepony.unicopia.entity.Creature;
|
||||||
import com.minelittlepony.unicopia.entity.EntityPhysics;
|
import com.minelittlepony.unicopia.entity.EntityPhysics;
|
||||||
import com.minelittlepony.unicopia.entity.Jumper;
|
import com.minelittlepony.unicopia.entity.Jumper;
|
||||||
|
@ -18,6 +19,7 @@ import com.minelittlepony.unicopia.item.enchantment.UEnchantments;
|
||||||
import com.minelittlepony.unicopia.projectile.ProjectileUtil;
|
import com.minelittlepony.unicopia.projectile.ProjectileUtil;
|
||||||
import com.minelittlepony.unicopia.util.NbtSerialisable;
|
import com.minelittlepony.unicopia.util.NbtSerialisable;
|
||||||
import com.minelittlepony.unicopia.util.Tickable;
|
import com.minelittlepony.unicopia.util.Tickable;
|
||||||
|
import com.minelittlepony.unicopia.util.AnimationUtil;
|
||||||
import com.minelittlepony.unicopia.util.MutableVector;
|
import com.minelittlepony.unicopia.util.MutableVector;
|
||||||
|
|
||||||
import net.minecraft.block.Block;
|
import net.minecraft.block.Block;
|
||||||
|
@ -99,6 +101,11 @@ public class PlayerPhysics extends EntityPhysics<PlayerEntity> implements Tickab
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public float getWingAngle() {
|
public float getWingAngle() {
|
||||||
|
|
||||||
|
if (pony.getAnimation() == Animation.SPREAD_WINGS) {
|
||||||
|
return AnimationUtil.seeSitSaw(pony.getAnimationProgress(1), 1.5F);
|
||||||
|
}
|
||||||
|
|
||||||
float spreadAmount = -0.5F;
|
float spreadAmount = -0.5F;
|
||||||
|
|
||||||
if (isFlying()) {
|
if (isFlying()) {
|
||||||
|
|
|
@ -0,0 +1,19 @@
|
||||||
|
package com.minelittlepony.unicopia.util;
|
||||||
|
|
||||||
|
import net.minecraft.util.math.MathHelper;
|
||||||
|
|
||||||
|
public interface AnimationUtil {
|
||||||
|
/**
|
||||||
|
* Converts a smooth 0-1 transition to a smooth 0-1-0 transition
|
||||||
|
*/
|
||||||
|
static float seesaw(float progress) {
|
||||||
|
return Math.max(0, MathHelper.cos((progress - 0.5F) * (float)Math.PI));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Converts a smooth 0-1 transition to a stretched 0-1-1-1-1-0 transition
|
||||||
|
*/
|
||||||
|
static float seeSitSaw(float progress, float clipRatio) {
|
||||||
|
return Math.min(1, seesaw(progress) * clipRatio);
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in a new issue