From 75bb59eeab9be0c4b402646b55ecaa1b41a058b9 Mon Sep 17 00:00:00 2001 From: Sollace Date: Sat, 25 Aug 2018 17:39:37 +0200 Subject: [PATCH] Bat wings for bat ponies. Kinda. --- .../model/components/BatWings.java | 41 ++++++++++ .../model/components/ModelBatWing.java | 70 ++++++++++++++++++ .../model/components/ModelWing.java | 14 ++-- .../model/components/PegasusWings.java | 18 ++--- .../model/player/ModelBatpony.java | 19 ++--- .../textures/entity/alex_pony.png | Bin 1320 -> 1484 bytes 6 files changed, 137 insertions(+), 25 deletions(-) create mode 100644 src/main/java/com/minelittlepony/model/components/BatWings.java create mode 100644 src/main/java/com/minelittlepony/model/components/ModelBatWing.java diff --git a/src/main/java/com/minelittlepony/model/components/BatWings.java b/src/main/java/com/minelittlepony/model/components/BatWings.java new file mode 100644 index 00000000..4c4fd260 --- /dev/null +++ b/src/main/java/com/minelittlepony/model/components/BatWings.java @@ -0,0 +1,41 @@ +package com.minelittlepony.model.components; + +import net.minecraft.client.renderer.GlStateManager; +import net.minecraft.client.renderer.GlStateManager.DestFactor; +import net.minecraft.client.renderer.GlStateManager.SourceFactor; + +import org.lwjgl.opengl.GL11; + +import com.minelittlepony.model.AbstractPonyModel; +import com.minelittlepony.model.capabilities.IModelPegasus; + +public class BatWings extends PegasusWings { + + public BatWings(T model, float yOffset, float stretch) { + super(model, yOffset, stretch); + } + + @Override + public void init(float yOffset, float stretch) { + int x = 57; + + leftWing = new ModelBatWing(pegasus, false, false, yOffset, stretch, x, 16); + rightWing = new ModelBatWing(pegasus, true, false, yOffset, stretch, x - 1, 16); + } + + @Override + public ModelWing getRight() { + return rightWing; + } + + @Override + public void renderPart(float scale) { + + GlStateManager.pushMatrix(); + GlStateManager.scale(1.3F, 1.3F, 1.3F); + + super.renderPart(scale); + + GlStateManager.popMatrix(); + } +} diff --git a/src/main/java/com/minelittlepony/model/components/ModelBatWing.java b/src/main/java/com/minelittlepony/model/components/ModelBatWing.java new file mode 100644 index 00000000..a804a38d --- /dev/null +++ b/src/main/java/com/minelittlepony/model/components/ModelBatWing.java @@ -0,0 +1,70 @@ +package com.minelittlepony.model.components; + +import com.minelittlepony.model.AbstractPonyModel; +import com.minelittlepony.model.capabilities.IModelPegasus; +import com.minelittlepony.render.plane.PlaneRenderer; + +import static com.minelittlepony.model.PonyModelConstants.EXT_WING_RP_X; +import static com.minelittlepony.model.PonyModelConstants.EXT_WING_RP_Y; +import static com.minelittlepony.model.PonyModelConstants.EXT_WING_RP_Z; +import static com.minelittlepony.model.PonyModelConstants.HEAD_RP_X; +import static com.minelittlepony.model.PonyModelConstants.ROTATE_90; +import static com.minelittlepony.model.PonyModelConstants.WING_FOLDED_RP_Y; +import static com.minelittlepony.model.PonyModelConstants.WING_FOLDED_RP_Z; + +public class ModelBatWing extends ModelWing { + + public ModelBatWing(T pegasus, boolean right, boolean legacy, float y, float scale, int texX, int texY) { + super(pegasus, right, legacy, y, scale, texX, texY); + } + + @Override + protected void addClosedWing(boolean right, float y, float scale) { + float x = right ? -4 : 3; + + folded.around(HEAD_RP_X, WING_FOLDED_RP_Y + y - 1, WING_FOLDED_RP_Z - 2) + .mirror(right) + .tex(60, 16).box(x, 5, 4, 1, 7, 1, scale) + .tex(56, 16).box(x, 5, 6, 1, 8, 1, scale) + .box(x, 5, 5, 1, 8, 1, scale) + .tex(60, 24).box(x, 5, 7, 1, 7, 1, scale) + .rotateAngleX = ROTATE_90; + } + + @Override + protected void addFeathers(boolean right, boolean l, float rotationPointY, float scale) { + float r = right ? -1 : 1; + + extended.around(r * (EXT_WING_RP_X - 1.5F), EXT_WING_RP_Y + rotationPointY - r/3, EXT_WING_RP_Z - 2) + .mirror(right) + .rotateAngleY = r * 3; + + extended.child().tex(56, 16) + .rotate(0.1F, 0, 0) + .box(0, -1, 0, 1, 8, 1, scale) + .child().tex(60, 16) + .rotate(-0.5F, 0, 0) + .around(0, -1, -2) + .box(0, 0, 2, 1, 7, 1, scale) + .child().tex(60, 24) + .rotate(-0.5F, 0, 0) + .around(0, -2, -1) + .box(0, 0, 3, 1, 7, 1, scale); + + PlaneRenderer skin = new PlaneRenderer(pegasus) + .tex(56, 32); + + extended.child(0).child(skin); + + if (right) { + skin .addWestPlane(0.5F, -1, -6, 8, 8, scale); + } else { + skin.flip().addWestPlane(0.5F, -1, -6, 8, 8, scale); + } + } + + @Override + public void rotateWalking(float swing) { + folded.rotateAngleY = swing * 0.05F; + } +} diff --git a/src/main/java/com/minelittlepony/model/components/ModelWing.java b/src/main/java/com/minelittlepony/model/components/ModelWing.java index 206c9e45..daed7944 100644 --- a/src/main/java/com/minelittlepony/model/components/ModelWing.java +++ b/src/main/java/com/minelittlepony/model/components/ModelWing.java @@ -8,14 +8,14 @@ import com.minelittlepony.pony.data.PonyWearable; import com.minelittlepony.render.PonyRenderer; import net.minecraft.client.renderer.GlStateManager; -public class ModelWing { +public class ModelWing { - private final IModelPegasus pegasus; + protected final T pegasus; - private final PonyRenderer extended; - private final PonyRenderer folded; + protected final PonyRenderer extended; + protected final PonyRenderer folded; - public ModelWing(T pegasus, boolean right, boolean legacy, float y, float scale, int texX, int texY) { + public ModelWing(T pegasus, boolean right, boolean legacy, float y, float scale, int texX, int texY) { this.pegasus = pegasus; folded = new PonyRenderer(pegasus, 56, texY).mirror(legacy); @@ -25,7 +25,7 @@ public class ModelWing { addFeathers(right, legacy, y, scale); } - private void addClosedWing(boolean right, float y, float scale) { + protected void addClosedWing(boolean right, float y, float scale) { float x = right ? -6 : 4; folded.around(HEAD_RP_X, WING_FOLDED_RP_Y + y, WING_FOLDED_RP_Z) @@ -35,7 +35,7 @@ public class ModelWing { .rotateAngleX = ROTATE_90; } - private void addFeathers(boolean right, boolean l, float rotationPointY, float scale) { + protected void addFeathers(boolean right, boolean l, float rotationPointY, float scale) { float r = right ? -1 : 1; extended.around(r * EXT_WING_RP_X, EXT_WING_RP_Y + rotationPointY, EXT_WING_RP_Z) diff --git a/src/main/java/com/minelittlepony/model/components/PegasusWings.java b/src/main/java/com/minelittlepony/model/components/PegasusWings.java index c4d27fbf..213c0f16 100644 --- a/src/main/java/com/minelittlepony/model/components/PegasusWings.java +++ b/src/main/java/com/minelittlepony/model/components/PegasusWings.java @@ -11,12 +11,12 @@ import com.minelittlepony.pony.data.PonyWearable; public class PegasusWings implements IModelPart { - private final T pegasus; + protected final T pegasus; - private ModelWing leftWing; - private ModelWing rightWing; + protected ModelWing leftWing; + protected ModelWing rightWing; - private ModelWing legacyWing; + protected ModelWing legacyWing; public PegasusWings(T model, float yOffset, float stretch) { pegasus = model; @@ -28,17 +28,17 @@ public class PegasusWings implement public void init(float yOffset, float stretch) { int x = 57; - leftWing = new ModelWing(pegasus, false, false, yOffset, stretch, x, 32); - rightWing = new ModelWing(pegasus, true, false, yOffset, stretch, x - 1, 16); + leftWing = new ModelWing<>(pegasus, false, false, yOffset, stretch, x, 32); + rightWing = new ModelWing<>(pegasus, true, false, yOffset, stretch, x - 1, 16); - legacyWing = new ModelWing(pegasus, true, true, yOffset, stretch, x, 32); + legacyWing = new ModelWing<>(pegasus, true, true, yOffset, stretch, x, 32); } - public ModelWing getLeft() { + public ModelWing getLeft() { return leftWing; } - public ModelWing getRight() { + public ModelWing getRight() { return pegasus.isWearing(PonyWearable.SADDLE_BAGS) ? legacyWing : rightWing; } diff --git a/src/main/java/com/minelittlepony/model/player/ModelBatpony.java b/src/main/java/com/minelittlepony/model/player/ModelBatpony.java index 4d473470..ad64b5af 100644 --- a/src/main/java/com/minelittlepony/model/player/ModelBatpony.java +++ b/src/main/java/com/minelittlepony/model/player/ModelBatpony.java @@ -1,8 +1,10 @@ package com.minelittlepony.model.player; +import com.minelittlepony.model.components.BatWings; import com.minelittlepony.model.components.PegasusWings; import com.minelittlepony.render.PonyRenderer; +import net.minecraft.client.renderer.GlStateManager; import net.minecraft.entity.Entity; import com.minelittlepony.model.capabilities.IModelPegasus; @@ -18,7 +20,7 @@ public class ModelBatpony extends ModelEarthPony implements IModelPegasus { @Override public void init(float yOffset, float stretch) { super.init(yOffset, stretch); - wings = new PegasusWings<>(this, yOffset, stretch); + wings = new BatWings<>(this, yOffset, stretch); } @Override @@ -31,6 +33,7 @@ public class ModelBatpony extends ModelEarthPony implements IModelPegasus { @Override protected void renderBody(Entity entity, float move, float swing, float ticks, float headYaw, float headPitch, float scale) { super.renderBody(entity, move, swing, ticks, headYaw, headPitch, scale); + wings.renderPart(scale); } @@ -38,15 +41,13 @@ public class ModelBatpony extends ModelEarthPony implements IModelPegasus { @Override protected void initEars(PonyRenderer head, float yOffset, float stretch) { head.child() - .rotate(0, 0, -0.1F) - .tex(14, 16).box(-4, -6, 1, 1, 2, 2, stretch) // right ear - .tex(0, 3).box(-4, -6, 2.5F, 1, 1, 1, stretch) - .tex(0, 5).box(-4, -6.7F, 2, 1, 1, 1, stretch); + .tex(14, 16).box(-4, -6, 0.5F, 1, 2, 2, stretch) // right ear + .tex(0, 3).box(-4, -6.49F, 2.49F, 1, 1, 1, stretch) + .tex(0, 5).box(-3, -5, 1.5F, 1, 1, 1, stretch); head.child().flip() - .rotate(0, 0, 0.1F) - .tex(14, 16).box( 3, -6, 1, 1, 2, 2, stretch) // left ear - .tex(0, 3).box( 3, -6, 2.5F, 1, 1, 1, stretch) - .tex(0, 5).box( 3, -6.7F, 2, 1, 1, 1, stretch); + .tex(14, 16).box( 3, -6, 0.5F, 1, 2, 2, stretch) // left ear + .tex(0, 3).box( 3, -6.49F, 2.49F, 1, 1, 1, stretch) + .tex(0, 5).box( 2, -5, 1.5F, 1, 1, 1, stretch); } } diff --git a/src/main/resources/assets/minelittlepony/textures/entity/alex_pony.png b/src/main/resources/assets/minelittlepony/textures/entity/alex_pony.png index c538c62e178110df1ced91b0fd42a1efe1d69c73..425ebc0db8507489867da23591c73b97a603870f 100644 GIT binary patch delta 1467 zcmV;s1w{I&3d{?TBYy>xNklXTbU?fst(eNENc9RR?HF9zH-ZQ}Dp_M)yn^+B($x#zBZy(^vF6Ah+i8XzQ+q6P?wB%PgGK&>Za z=}SffVZ7Hd1^{^YaQ;9#-BH~A;kKc-d=c~qrZZxwbjtH`FG%3U&Lwn?kqkPXlXBk}i>Tlg-%21+R|504+b zjZ#G0Lw|U!wa+xM{5Jq4;*d>0CAFRqRci-85&3{d{XaGN<%%5qo?0Lgys6XFVZ!Do2 z2MCEIo(b!D)seFYl=B)S)Y?bugI=8QR7%GCBl8Lyscp^ug{AmfUJ3I3wdTj=H&|I- zqyW%AaFqy&q@?WBqoQht$!e(i{e3hVnja$;0B%lRmk9gj6?io3So?<5#*B6abv?G#Z|tWp2D>Ua6a52MMcZ)d%sFBi16WMYG+-#^#bEUe z2CHW<6!W6i6O#Off!{EdL#?e)@Ug(k@*;IuDS7#R;)VW~xX}MnVjpJb7IHK}iGNT# zh-dEa)R}YQv%_eHrbqqRr?;m|u}(|cTErJRKczUpp`^l*NQW3XS@AM8@P{P3&mT*O z=iBU>pM#g4JV;rJui0+6Mgw6~RZZvAS5-}eKclc~eoi?DBasd<=HAJyVs`GpqVw^z zRp{!D=4nx`w|ag~`DTKA>xg$_e1AEcernl_&S==|h-Y4 z&&gLF#RrHjfzba2XCsreq#3}NaO@c{HCd<64VEfOngNgE1H@6v#FvZ)Fk+R;$371D z`S)098#$M+1ukC;D5Z+u$6f;{rEvS-E?qCch~M4%P4SzQ!V)NX8<21PQ-4a!8c;HU zkbLdmxpUSY8_?bv70>AS-6p-)UCj1Ba=C!nYqwTk+bt(U#b$un`vrF2PcXf%K&TN0PFnv!@o~^OieIvD{-o@Mzgz`9a*jSfsl4)XXpPnfByXWv(kS5=6??(^TU@|Ub&$Gz`5_T z##CP%$&nO#LNUCZ7=R4k8@_;v$9Vw2)!^54^~XBruw8u)0Eh%T>gq3lcEkKVKKUsC zU?y|hEGs-%&_w-TN#8U?^?|3aEttx;0-eX+G=I-lFF9({9}PPyYX^Pe#5O zhbfHsp`)7LbWqrSJh*0l1fpwn~YO8Tbpn}SY=;wBl@)+zY@g*WUi zfW}l`+;bsjtCx_8ZUF!$ODE0p>#w@&i#SV9Er2Z`-rq}1^~Led&@=#GWhGl1oskso zet$=)4{%Mu*k}@qOUnR&ok{_K+%ov%z5Dyi-7CG8Yk$(06BJ8jM`g`Gvs))sV>P$g zvc7n6M4(-~F}tqsR0@_43sF7$EOH$Qc9_$Ml<6X&ZcSffqbgy!SJ+Mq1M}T>tzW{*oMRGHU(NFp8xz*W8`P{p5M%S@aa3ujzYS zIl=t;1^^&_`jltpPF5Tqcq7e2FmkqON3Oe3o+wWLhQ}7b&TBgof|0XzbD#Gt)-jTL z#{|SrpHgB0v_O?Vx6SL&@rbMTbX%vfgfI@suYYggQGUyE?}1rz_t|746+3^?=#PeR zBJ`5wc~2_;pjax~<`-6Tn+->hZf_@_(|myL#6(4o$!mz#{e290DxdDQK_f;D+ingIDv5?rv@h5*D z_=TE(SX^4JvxL3fHOrYntCVkO0iqq66Z0pZvC$;A%x<*ply6o(Apx{`CK5wtob6?2 zJkW@+A@&)M8V}q2{+@^BJHPshKSJzx!c~{q*<%~j=d^*cuA~9sf+Hl7EUUls^SpNr3G6z3TT9qJdR=v@P+?Y+Xk^|YQzVh_hoU;qFB M07*qoM6N<$f^;W_dH?_b