Skip to content

Commit

Permalink
Fix morphs showing extra models during acquisition/morphing.
Browse files Browse the repository at this point in the history
  • Loading branch information
iChun committed Nov 23, 2013
1 parent c730844 commit 57f0ccf
Show file tree
Hide file tree
Showing 3 changed files with 108 additions and 18 deletions.
98 changes: 91 additions & 7 deletions morph/client/model/ModelHelper.java
Original file line number Diff line number Diff line change
Expand Up @@ -18,24 +18,66 @@
import net.minecraft.client.model.ModelSquid;
import net.minecraft.client.model.ModelWolf;
import net.minecraft.client.renderer.entity.Render;
import net.minecraft.entity.EntityLivingBase;
import cpw.mods.fml.common.ObfuscationReflectionHelper;
import cpw.mods.fml.relauncher.ReflectionHelper.UnableToAccessFieldException;

public class ModelHelper
{
public static Random rand = new Random();

public static ArrayList<ModelRenderer> getModelCubesCopy(ModelInfo info, ModelBase base)
public static ArrayList<ModelRenderer> getModelCubesCopy(ModelInfo info, ModelBase base, EntityLivingBase ent)
{
ArrayList<ModelRenderer> list = new ArrayList<ModelRenderer>();

for(int i = 0; i < info.modelList.size(); i++)
if(ent != null)
{
ModelRenderer cube = (ModelRenderer)info.modelList.get(i);
list.add(buildCopy(cube, base, 0, true));
for(int i = 0; i < info.modelList.size(); i++)
{
ModelRenderer cube = info.modelList.get(i);
try
{
ObfuscationReflectionHelper.setPrivateValue(ModelRenderer.class, cube, false, ObfHelper.compiled);
}
catch(Exception e)
{
ObfHelper.obfWarning();
e.printStackTrace();
}
}
info.forceRender(ent, 0.0D, -500D, 0.0D, 0.0F, 1.0F);

ArrayList<ModelRenderer> list = new ArrayList<ModelRenderer>();

for(int i = 0; i < info.modelList.size(); i++)
{
ModelRenderer cube = info.modelList.get(i);
try
{
if((Boolean)ObfuscationReflectionHelper.getPrivateValue(ModelRenderer.class, cube, ObfHelper.compiled))
{
list.add(buildCopy(cube, base, 0, true));
}
}
catch(Exception e)
{
ObfHelper.obfWarning();
e.printStackTrace();
}
}
return list;
}
else
{

ArrayList<ModelRenderer> list = new ArrayList<ModelRenderer>();

for(int i = 0; i < info.modelList.size(); i++)
{
ModelRenderer cube = (ModelRenderer)info.modelList.get(i);
list.add(buildCopy(cube, base, 0, true));
}

return list;
return list;
}
}

public static ModelRenderer getPotentialArm(ModelBase parent)
Expand Down Expand Up @@ -479,4 +521,46 @@ public static ModelRenderer createMorphArm(ModelBase morph, ModelRenderer prevAr

return cube;
}

public static ArrayList<ModelRenderer> compileRenderableModels(ModelInfo modelInfo, EntityLivingBase ent)
{
if(ent != null)
{
for(int i = 0; i < modelInfo.modelList.size(); i++)
{
ModelRenderer cube = modelInfo.modelList.get(i);
try
{
ObfuscationReflectionHelper.setPrivateValue(ModelRenderer.class, cube, false, ObfHelper.compiled);
}
catch(Exception e)
{
ObfHelper.obfWarning();
e.printStackTrace();
}
}
modelInfo.forceRender(ent, 0.0D, -500D, 0.0D, 0.0F, 1.0F);

ArrayList<ModelRenderer> list = new ArrayList<ModelRenderer>();

for(int i = 0; i < modelInfo.modelList.size(); i++)
{
ModelRenderer cube = modelInfo.modelList.get(i);
try
{
if((Boolean)ObfuscationReflectionHelper.getPrivateValue(ModelRenderer.class, cube, ObfHelper.compiled))
{
list.add(cube);
}
}
catch(Exception e)
{
ObfHelper.obfWarning();
e.printStackTrace();
}
}
return list;
}
return modelInfo.modelList;
}
}
24 changes: 15 additions & 9 deletions morph/client/model/ModelMorph.java
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,9 @@ public class ModelMorph extends ModelBase

public ArrayList<ModelRenderer> modelList;

public ArrayList<ModelRenderer> prevModelList;
public ArrayList<ModelRenderer> nextModelList;

public Random rand;

public ModelMorph(){}
Expand All @@ -37,26 +40,29 @@ public ModelMorph(MorphInfoClient info)

if(info != null && info.morphProgress < 80 && info.prevModelInfo != null && info.nextModelInfo != null)
{
modelList = ModelHelper.getModelCubesCopy(info.prevModelInfo, this);
prevModelList = ModelHelper.compileRenderableModels(info.prevModelInfo, info.prevState.entInstance);
nextModelList = ModelHelper.compileRenderableModels(info.nextModelInfo, info.nextState.entInstance);

modelList = ModelHelper.getModelCubesCopy(info.prevModelInfo, this, info.prevState.entInstance);

for(int i = 0; i < morphInfo.nextModelInfo.modelList.size(); i++)
for(int i = 0; i < nextModelList.size(); i++)
{
if(i >= modelList.size())
{
break;
}

ModelRenderer cubeCopy = modelList.get(i);
ModelRenderer cubeNewParent = morphInfo.nextModelInfo.modelList.get(i);
ModelRenderer cubeNewParent = nextModelList.get(i);

ModelHelper.createEmptyContents(this, cubeNewParent, cubeCopy, 0);
}

if(modelList.size() < morphInfo.nextModelInfo.modelList.size())
if(modelList.size() < nextModelList.size())
{
for(int i = modelList.size(); i < morphInfo.nextModelInfo.modelList.size(); i++)
for(int i = modelList.size(); i < nextModelList.size(); i++)
{
ModelRenderer parentCube = morphInfo.nextModelInfo.modelList.get(i);
ModelRenderer parentCube = nextModelList.get(i);
try
{
int txOffsetX = (Integer)ObfuscationReflectionHelper.getPrivateValue(ModelRenderer.class, parentCube, ObfHelper.textureOffsetX);
Expand All @@ -79,7 +85,7 @@ public ModelMorph(MorphInfoClient info)
}
else
{
ModelRenderer randParentCube = morphInfo.nextModelInfo.modelList.get(rand.nextInt(morphInfo.nextModelInfo.modelList.size()));
ModelRenderer randParentCube = nextModelList.get(rand.nextInt(nextModelList.size()));
randBox = (ModelBox)randParentCube.cubeList.get(rand.nextInt(randParentCube.cubeList.size()));
}

Expand Down Expand Up @@ -115,8 +121,8 @@ public void render(Entity entity, float f, float f1, float f2, float f3, float f
{
GL11.glPushMatrix();

ArrayList<ModelRenderer> prevCubes = morphInfo.prevModelInfo.modelList;
ArrayList<ModelRenderer> nextCubes = morphInfo.nextModelInfo.modelList;
ArrayList<ModelRenderer> prevCubes = prevModelList;
ArrayList<ModelRenderer> nextCubes = nextModelList;

for(int i = 0; i < nextCubes.size(); i++)
{
Expand Down
4 changes: 2 additions & 2 deletions morph/client/model/ModelMorphAcquisition.java
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,8 @@ public ModelMorphAcquisition(EntityMorphAcquisition ent)
this.acquirer = ModelList.getModelInfo(ent.acquirer.getClass());
if(acquired != null)
{
this.modelList = ModelHelper.getModelCubesCopy(acquired, this);
this.modelListCopy = ModelHelper.getModelCubesCopy(acquired, this);
this.modelList = ModelHelper.getModelCubesCopy(acquired, this, ent.acquired);
this.modelListCopy = ModelHelper.getModelCubesCopy(acquired, this, ent.acquired);

for(ModelRenderer cube : modelList)
{
Expand Down

0 comments on commit 57f0ccf

Please sign in to comment.