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:
SenseiKiwi
2014-01-21 04:03:30 -04:00
parent fba62d7ab5
commit ced9543f11
2 changed files with 78 additions and 62 deletions

View File

@@ -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;
}

View File

@@ -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;
@@ -32,8 +33,23 @@ public class RenderMobObelisk extends RenderLiving
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);
}