Improved Monolith Jitter #130

Merged
SenseiKiwi merged 4 commits from master into master 2014-01-21 08:14:41 +00:00
2 changed files with 78 additions and 62 deletions
Showing only changes of commit ced9543f11 - Show all commits

View File

@@ -41,7 +41,7 @@ public class MobMonolith extends EntityFlying implements IMob
this.setSize(3F, 9.0F); this.setSize(3F, 9.0F);
this.noClip=true; this.noClip=true;
this.scaleFactor = (float) ((rand.nextDouble()/2)+1); this.scaleFactor = (float) ((rand.nextDouble()/2)+1);
this.aggroMax =rand.nextInt(245)+200; this.aggroMax = rand.nextInt(245)+200;
if (properties == null) if (properties == null)
properties = DDProperties.instance(); properties = DDProperties.instance();
@@ -241,13 +241,13 @@ public class MobMonolith extends EntityFlying implements IMob
public boolean attackEntityFrom(DamageSource par1DamageSource, int par2) public boolean attackEntityFrom(DamageSource par1DamageSource, int par2)
{ {
if(!(par1DamageSource == DamageSource.inWall)) if (par1DamageSource == DamageSource.inWall)
{ {
this.aggro=400; this.posY = posY + 1;
} }
else else
{ {
this.posY=posY+1; this.aggro = this.aggroMax;
} }
return false; return false;
} }

View File

@@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL12;
import StevenDimDoors.mod_pocketDim.mod_pocketDim; import StevenDimDoors.mod_pocketDim.mod_pocketDim;
import StevenDimDoors.mod_pocketDim.ticking.MobMonolith; import StevenDimDoors.mod_pocketDim.ticking.MobMonolith;
import net.minecraft.client.Minecraft;
import net.minecraft.client.renderer.OpenGlHelper; import net.minecraft.client.renderer.OpenGlHelper;
import net.minecraft.client.renderer.Tessellator; import net.minecraft.client.renderer.Tessellator;
import net.minecraft.client.renderer.entity.RenderLiving; import net.minecraft.client.renderer.entity.RenderLiving;
@@ -32,78 +33,93 @@ public class RenderMobObelisk extends RenderLiving
public void doRenderLiving(EntityLiving entity, double x, double y, double z, float par8, float par9) public void doRenderLiving(EntityLiving entity, double x, double y, double z, float par8, float par9)
{ {
int noiseFactor = (int) (50-Math.log(MobMonolith.class.cast(entity).aggro)); final float minScaling = 0;
this.render(entity, x+entity.worldObj.rand.nextGaussian()/noiseFactor, y+entity.worldObj.rand.nextGaussian()/noiseFactor, z+entity.worldObj.rand.nextGaussian()/noiseFactor, par8, par9); final float maxScaling = 0.1f;
final int maxAggroLevel = 500;
MobMonolith monolith = ((MobMonolith) entity);
// Use linear interpolation to scale how much jitter we want for our given aggro level
float aggroScaling = minScaling + monolith.aggro * (maxScaling - minScaling) / maxAggroLevel;
// Calculate jitter - include entity ID to give Monoliths individual jitters
float time = ((Minecraft.getSystemTime() + 0xF1234568 * monolith.entityId) % 200000) / 50.0F;
// We use random constants here on purpose just to get different wave forms
double xJitter = aggroScaling * Math.sin(1.1f * time) * Math.sin(0.8f * time);
double yJitter = aggroScaling * Math.sin(1.2f * time) * Math.sin(0.9f * time);
double zJitter = aggroScaling * Math.sin(1.3f * time) * Math.sin(0.7f * time);
// Render with jitter
this.render(entity, x + xJitter, y + yJitter, z + zJitter, par8, par9);
this.func_110827_b(entity, x, y, z, par8, par9); this.func_110827_b(entity, x, y, z, par8, par9);
} }
public void render(EntityLiving par1EntityLivingBase, double x, double y, double z, float par8, float par9) public void render(EntityLiving par1EntityLivingBase, double x, double y, double z, float par8, float par9)
{ {
if (MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Pre(par1EntityLivingBase, this))) return; if (MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Pre(par1EntityLivingBase, this))) return;
GL11.glPushMatrix(); GL11.glPushMatrix();
GL11.glDisable(GL11.GL_CULL_FACE); GL11.glDisable(GL11.GL_CULL_FACE);
GL11.glDisable(GL11.GL_LIGHTING); GL11.glDisable(GL11.GL_LIGHTING);
GL11.glEnable(GL11.GL_BLEND); GL11.glEnable(GL11.GL_BLEND);
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
this.mainModel.onGround = this.renderSwingProgress(par1EntityLivingBase, par9); this.mainModel.onGround = this.renderSwingProgress(par1EntityLivingBase, par9);
try try
{ {
float interpolatedYaw = this.interpolateRotation(par1EntityLivingBase.prevRenderYawOffset, par1EntityLivingBase.renderYawOffset, par9); float interpolatedYaw = this.interpolateRotation(par1EntityLivingBase.prevRenderYawOffset, par1EntityLivingBase.renderYawOffset, par9);
float interpolatedYawHead = this.interpolateRotation(par1EntityLivingBase.prevRotationYawHead, par1EntityLivingBase.rotationYawHead, par9); float interpolatedYawHead = this.interpolateRotation(par1EntityLivingBase.prevRotationYawHead, par1EntityLivingBase.rotationYawHead, par9);
float rotation; float rotation;
float pitch = par1EntityLivingBase.prevRotationPitch + (par1EntityLivingBase.rotationPitch - par1EntityLivingBase.prevRotationPitch) * par9; float pitch = par1EntityLivingBase.prevRotationPitch + (par1EntityLivingBase.rotationPitch - par1EntityLivingBase.prevRotationPitch) * par9;
this.renderLivingAt(par1EntityLivingBase, x, y, z); this.renderLivingAt(par1EntityLivingBase, x, y, z);
rotation = this.handleRotationFloat(par1EntityLivingBase, par9); rotation = this.handleRotationFloat(par1EntityLivingBase, par9);
this.rotateCorpse(par1EntityLivingBase, rotation, interpolatedYaw, par9); this.rotateCorpse(par1EntityLivingBase, rotation, interpolatedYaw, par9);
float f6 = 0.0625F; float f6 = 0.0625F;
GL11.glEnable(GL12.GL_RESCALE_NORMAL); GL11.glEnable(GL12.GL_RESCALE_NORMAL);
GL11.glScalef(-1.0F, -1.0F, 1.0F); GL11.glScalef(-1.0F, -1.0F, 1.0F);
this.preRenderCallback(par1EntityLivingBase, par9); this.preRenderCallback(par1EntityLivingBase, par9);
GL11.glTranslatef(0.0F, -24.0F * f6 - 0.0078125F, 0.0F); GL11.glTranslatef(0.0F, -24.0F * f6 - 0.0078125F, 0.0F);
this.renderModel(par1EntityLivingBase, 0, 0, rotation, interpolatedYawHead - interpolatedYaw, pitch, f6); this.renderModel(par1EntityLivingBase, 0, 0, rotation, interpolatedYawHead - interpolatedYaw, pitch, f6);
OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
GL11.glDisable(GL11.GL_TEXTURE_2D); GL11.glDisable(GL11.GL_TEXTURE_2D);
OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
GL11.glDisable(GL12.GL_RESCALE_NORMAL); GL11.glDisable(GL12.GL_RESCALE_NORMAL);
} }
catch (Exception exception) catch (Exception exception)
{ {
exception.printStackTrace(); exception.printStackTrace();
} }
OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit); OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
GL11.glEnable(GL11.GL_TEXTURE_2D); GL11.glEnable(GL11.GL_TEXTURE_2D);
OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit); OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
GL11.glEnable(GL11.GL_CULL_FACE); GL11.glEnable(GL11.GL_CULL_FACE);
GL11.glEnable(GL11.GL_LIGHTING); GL11.glEnable(GL11.GL_LIGHTING);
GL11.glDisable(GL11.GL_BLEND); GL11.glDisable(GL11.GL_BLEND);
GL11.glPopMatrix(); GL11.glPopMatrix();
MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Post(par1EntityLivingBase, this)); MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Post(par1EntityLivingBase, this));
} }
private float interpolateRotation(float par1, float par2, float par3) private float interpolateRotation(float par1, float par2, float par3)
{ {
float f3; float f3;
for (f3 = par2 - par1; f3 < -180.0F; f3 += 360.0F) for (f3 = par2 - par1; f3 < -180.0F; f3 += 360.0F)
{ {
; ;
} }
while (f3 >= 180.0F) while (f3 >= 180.0F)
{ {
f3 -= 360.0F; f3 -= 360.0F;
} }
return par1 + par3 * f3; return par1 + par3 * f3;
} }
@Override @Override
protected ResourceLocation getEntityTexture(Entity entity) protected ResourceLocation getEntityTexture(Entity entity)
{ {