Changed Monolith Jitter
Changed Monolith jittering to use trigonometric functions for a smoother rate of change, and also made the speed and movement easily adjustable. Made very minor changes to MobMonolith code - just reorganizing.
This commit is contained in:
parent
fba62d7ab5
commit
ced9543f11
2 changed files with 78 additions and 62 deletions
|
@ -41,7 +41,7 @@ public class MobMonolith extends EntityFlying implements IMob
|
|||
this.setSize(3F, 9.0F);
|
||||
this.noClip=true;
|
||||
this.scaleFactor = (float) ((rand.nextDouble()/2)+1);
|
||||
this.aggroMax =rand.nextInt(245)+200;
|
||||
this.aggroMax = rand.nextInt(245)+200;
|
||||
|
||||
if (properties == null)
|
||||
properties = DDProperties.instance();
|
||||
|
@ -241,13 +241,13 @@ public class MobMonolith extends EntityFlying implements IMob
|
|||
|
||||
public boolean attackEntityFrom(DamageSource par1DamageSource, int par2)
|
||||
{
|
||||
if(!(par1DamageSource == DamageSource.inWall))
|
||||
if (par1DamageSource == DamageSource.inWall)
|
||||
{
|
||||
this.aggro=400;
|
||||
this.posY = posY + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
this.posY=posY+1;
|
||||
this.aggro = this.aggroMax;
|
||||
}
|
||||
return false;
|
||||
}
|
||||
|
|
|
@ -5,6 +5,7 @@ import org.lwjgl.opengl.GL12;
|
|||
|
||||
import StevenDimDoors.mod_pocketDim.mod_pocketDim;
|
||||
import StevenDimDoors.mod_pocketDim.ticking.MobMonolith;
|
||||
import net.minecraft.client.Minecraft;
|
||||
import net.minecraft.client.renderer.OpenGlHelper;
|
||||
import net.minecraft.client.renderer.Tessellator;
|
||||
import net.minecraft.client.renderer.entity.RenderLiving;
|
||||
|
@ -29,81 +30,96 @@ public class RenderMobObelisk extends RenderLiving
|
|||
super(new ModelMobObelisk(), f);
|
||||
this.obeliskModel = (ModelMobObelisk)this.mainModel;
|
||||
}
|
||||
|
||||
|
||||
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));
|
||||
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 minScaling = 0;
|
||||
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);
|
||||
}
|
||||
|
||||
|
||||
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;
|
||||
GL11.glPushMatrix();
|
||||
GL11.glDisable(GL11.GL_CULL_FACE);
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
this.mainModel.onGround = this.renderSwingProgress(par1EntityLivingBase, par9);
|
||||
if (MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Pre(par1EntityLivingBase, this))) return;
|
||||
GL11.glPushMatrix();
|
||||
GL11.glDisable(GL11.GL_CULL_FACE);
|
||||
GL11.glDisable(GL11.GL_LIGHTING);
|
||||
GL11.glEnable(GL11.GL_BLEND);
|
||||
GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA);
|
||||
this.mainModel.onGround = this.renderSwingProgress(par1EntityLivingBase, par9);
|
||||
|
||||
try
|
||||
{
|
||||
float interpolatedYaw = this.interpolateRotation(par1EntityLivingBase.prevRenderYawOffset, par1EntityLivingBase.renderYawOffset, par9);
|
||||
float interpolatedYawHead = this.interpolateRotation(par1EntityLivingBase.prevRotationYawHead, par1EntityLivingBase.rotationYawHead, par9);
|
||||
float rotation;
|
||||
float pitch = par1EntityLivingBase.prevRotationPitch + (par1EntityLivingBase.rotationPitch - par1EntityLivingBase.prevRotationPitch) * par9;
|
||||
this.renderLivingAt(par1EntityLivingBase, x, y, z);
|
||||
try
|
||||
{
|
||||
float interpolatedYaw = this.interpolateRotation(par1EntityLivingBase.prevRenderYawOffset, par1EntityLivingBase.renderYawOffset, par9);
|
||||
float interpolatedYawHead = this.interpolateRotation(par1EntityLivingBase.prevRotationYawHead, par1EntityLivingBase.rotationYawHead, par9);
|
||||
float rotation;
|
||||
float pitch = par1EntityLivingBase.prevRotationPitch + (par1EntityLivingBase.rotationPitch - par1EntityLivingBase.prevRotationPitch) * par9;
|
||||
this.renderLivingAt(par1EntityLivingBase, x, y, z);
|
||||
|
||||
rotation = this.handleRotationFloat(par1EntityLivingBase, par9);
|
||||
this.rotateCorpse(par1EntityLivingBase, rotation, interpolatedYaw, par9);
|
||||
float f6 = 0.0625F;
|
||||
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||
GL11.glScalef(-1.0F, -1.0F, 1.0F);
|
||||
this.preRenderCallback(par1EntityLivingBase, par9);
|
||||
GL11.glTranslatef(0.0F, -24.0F * f6 - 0.0078125F, 0.0F);
|
||||
rotation = this.handleRotationFloat(par1EntityLivingBase, par9);
|
||||
this.rotateCorpse(par1EntityLivingBase, rotation, interpolatedYaw, par9);
|
||||
float f6 = 0.0625F;
|
||||
GL11.glEnable(GL12.GL_RESCALE_NORMAL);
|
||||
GL11.glScalef(-1.0F, -1.0F, 1.0F);
|
||||
this.preRenderCallback(par1EntityLivingBase, par9);
|
||||
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);
|
||||
GL11.glDisable(GL11.GL_TEXTURE_2D);
|
||||
OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
|
||||
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
exception.printStackTrace();
|
||||
}
|
||||
OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
|
||||
GL11.glDisable(GL11.GL_TEXTURE_2D);
|
||||
OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
|
||||
|
||||
OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
|
||||
GL11.glEnable(GL11.GL_TEXTURE_2D);
|
||||
OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
|
||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
GL11.glDisable(GL12.GL_RESCALE_NORMAL);
|
||||
}
|
||||
catch (Exception exception)
|
||||
{
|
||||
exception.printStackTrace();
|
||||
}
|
||||
|
||||
GL11.glPopMatrix();
|
||||
MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Post(par1EntityLivingBase, this));
|
||||
OpenGlHelper.setActiveTexture(OpenGlHelper.lightmapTexUnit);
|
||||
GL11.glEnable(GL11.GL_TEXTURE_2D);
|
||||
OpenGlHelper.setActiveTexture(OpenGlHelper.defaultTexUnit);
|
||||
GL11.glEnable(GL11.GL_CULL_FACE);
|
||||
GL11.glEnable(GL11.GL_LIGHTING);
|
||||
GL11.glDisable(GL11.GL_BLEND);
|
||||
|
||||
GL11.glPopMatrix();
|
||||
MinecraftForge.EVENT_BUS.post(new RenderLivingEvent.Post(par1EntityLivingBase, this));
|
||||
}
|
||||
|
||||
|
||||
private float interpolateRotation(float par1, float par2, float par3)
|
||||
{
|
||||
float f3;
|
||||
|
||||
for (f3 = par2 - par1; f3 < -180.0F; f3 += 360.0F)
|
||||
{
|
||||
;
|
||||
}
|
||||
private float interpolateRotation(float par1, float par2, float par3)
|
||||
{
|
||||
float f3;
|
||||
|
||||
while (f3 >= 180.0F)
|
||||
{
|
||||
f3 -= 360.0F;
|
||||
}
|
||||
for (f3 = par2 - par1; f3 < -180.0F; f3 += 360.0F)
|
||||
{
|
||||
;
|
||||
}
|
||||
|
||||
return par1 + par3 * f3;
|
||||
}
|
||||
while (f3 >= 180.0F)
|
||||
{
|
||||
f3 -= 360.0F;
|
||||
}
|
||||
|
||||
return par1 + par3 * f3;
|
||||
}
|
||||
@Override
|
||||
protected ResourceLocation getEntityTexture(Entity entity)
|
||||
{
|
||||
|
|
Loading…
Add table
Reference in a new issue