use of am2.particles.ParticleArcToEntity in project ArsMagica2 by Mithion.
the class ManaDrain method spawnParticles.
@Override
public void spawnParticles(World world, double x, double y, double z, EntityLivingBase caster, Entity target, Random rand, int colorModifier) {
for (int i = 0; i < 15; ++i) {
AMParticle particle = (AMParticle) AMCore.proxy.particleManager.spawn(world, "sparkle2", x, y, z);
if (particle != null) {
particle.addRandomOffset(1, 1, 1);
particle.setIgnoreMaxAge(true);
particle.AddParticleController(new ParticleArcToEntity(particle, 1, caster, false).SetSpeed(0.03f).generateControlPoints());
particle.setRGBColorF(0, 0.4f, 1);
if (colorModifier > -1) {
particle.setRGBColorF(((colorModifier >> 16) & 0xFF) / 255.0f, ((colorModifier >> 8) & 0xFF) / 255.0f, (colorModifier & 0xFF) / 255.0f);
}
}
}
}
use of am2.particles.ParticleArcToEntity in project ArsMagica2 by Mithion.
the class EntityManaVortex method onUpdate.
@Override
public void onUpdate() {
this.ticksExisted++;
this.rotation += 5;
if (!this.worldObj.isRemote && (this.isDead || this.ticksExisted >= getTicksToExist())) {
this.setDead();
return;
}
if (this.getTicksToExist() - this.ticksExisted <= 20) {
this.scale -= 1f / 20f;
} else if (this.scale < 0.99f) {
this.scale = (float) (Math.sin((float) this.ticksExisted / 50));
}
if (getTicksToExist() - this.ticksExisted <= 5 && !hasGoneBoom) {
hasGoneBoom = true;
if (!worldObj.isRemote) {
List players = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.boundingBox.expand(3 + Math.floor(this.ticksExisted / 50), 2, 3 + Math.floor(this.ticksExisted / 50)));
float damage = this.dataWatcher.getWatchableObjectFloat(DW_MANA_STOLEN) * 0.005f;
if (damage > 100)
damage = 100;
Object[] playerArray = players.toArray();
for (Object o : playerArray) {
EntityLivingBase e = (EntityLivingBase) o;
MovingObjectPosition mop = this.worldObj.rayTraceBlocks(Vec3.createVectorHelper(this.posX, this.posY, this.posZ), Vec3.createVectorHelper(e.posX, e.posY + e.getEyeHeight(), e.posZ), false);
if (mop == null)
e.attackEntityFrom(DamageSources.causeEntityPhysicalDamage(this), damage);
}
} else {
for (int i = 0; i < 360; i += AMCore.config.FullGFX() ? 5 : AMCore.config.LowGFX() ? 10 : 20) {
AMParticle effect = (AMParticle) AMCore.instance.proxy.particleManager.spawn(worldObj, "ember", this.posX, this.posY, this.posZ);
if (effect != null) {
effect.setIgnoreMaxAge(true);
effect.AddParticleController(new ParticleMoveOnHeading(effect, i, 0, 0.7f, 1, false));
effect.setRGBColorF(0.24f, 0.24f, 0.8f);
effect.noClip = false;
effect.AddParticleController(new ParticleFadeOut(effect, 1, false).setFadeSpeed(0.05f).setKillParticleOnFinish(true));
effect.AddParticleController(new ParticleLeaveParticleTrail(effect, "ember", false, 5, 1, false).addControllerToParticleList(new ParticleMoveOnHeading(effect, i, 0, 0.1f, 1, false)).addControllerToParticleList(new ParticleFadeOut(effect, 1, false).setFadeSpeed(0.1f).setKillParticleOnFinish(true)).setParticleRGB_F(0.24f, 0.24f, 0.8f).addRandomOffset(0.2f, 0.2f, 0.2f));
}
}
}
}
if (getTicksToExist() - this.ticksExisted > 30) {
// get all players within 5 blocks
List<EntityLivingBase> players = worldObj.getEntitiesWithinAABB(EntityLivingBase.class, this.boundingBox.expand(3 + Math.floor(this.ticksExisted / 50), 2, 3 + Math.floor(this.ticksExisted / 50)));
Object[] playerArray = players.toArray();
Vec3 thisPos = Vec3.createVectorHelper(this.posX, this.posY, this.posZ);
for (Object o : playerArray) {
EntityLivingBase e = (EntityLivingBase) o;
MovingObjectPosition mop = this.worldObj.rayTraceBlocks(Vec3.createVectorHelper(this.posX, this.posY, this.posZ), Vec3.createVectorHelper(e.posX, e.posY + e.getEyeHeight(), e.posZ), false);
if (mop != null)
continue;
Vec3 playerPos = Vec3.createVectorHelper(e.posX, e.posY + e.getEyeHeight(), e.posZ);
if (worldObj.isRemote) {
if (AMCore.config.NoGFX()) {
break;
}
if (AMCore.config.LowGFX() && (this.ticksExisted % 4) != 0) {
break;
}
AMParticle effect = (AMParticle) AMCore.instance.proxy.particleManager.spawn(worldObj, "ember", e.posX, e.posY + (e.getEyeHeight() / 2), e.posZ);
if (effect != null) {
effect.AddParticleController(new ParticleArcToEntity(effect, 1, this, false).generateControlPoints().setKillParticleOnFinish(true));
effect.setRGBColorF(0.24f, 0.24f, 0.8f);
effect.setIgnoreMaxAge(true);
}
}
float manaStolen = ExtendedProperties.For(e).getMaxMana() * 0.01f;
float curMana = ExtendedProperties.For(e).getCurrentMana();
if (manaStolen > curMana)
manaStolen = curMana;
this.dataWatcher.updateObject(DW_MANA_STOLEN, this.dataWatcher.getWatchableObjectFloat(DW_MANA_STOLEN) + manaStolen);
ExtendedProperties.For(e).setCurrentMana(ExtendedProperties.For(e).getCurrentMana() - manaStolen);
AMVector3 movement = MathUtilities.GetMovementVectorBetweenEntities(e, this);
float speed = -0.075f;
e.addVelocity(movement.x * speed, movement.y * speed, movement.z * speed);
}
}
}
use of am2.particles.ParticleArcToEntity in project ArsMagica2 by Mithion.
the class LifeDrain method spawnParticles.
@Override
public void spawnParticles(World world, double x, double y, double z, EntityLivingBase caster, Entity target, Random rand, int colorModifier) {
for (int i = 0; i < 15; ++i) {
AMParticle particle = (AMParticle) AMCore.proxy.particleManager.spawn(world, "ember", x, y, z);
if (particle != null) {
particle.addRandomOffset(1, 1, 1);
particle.setIgnoreMaxAge(true);
particle.AddParticleController(new ParticleArcToEntity(particle, 1, caster, false).SetSpeed(0.03f).generateControlPoints());
particle.setRGBColorF(1, 0.2f, 0.2f);
particle.SetParticleAlpha(0.5f);
if (colorModifier > -1) {
particle.setRGBColorF(((colorModifier >> 16) & 0xFF) / 255.0f, ((colorModifier >> 8) & 0xFF) / 255.0f, (colorModifier & 0xFF) / 255.0f);
}
}
}
}
use of am2.particles.ParticleArcToEntity in project ArsMagica2 by Mithion.
the class ItemFrameWatcher method spawnCompendiumProgressParticles.
@SideOnly(Side.CLIENT)
public void spawnCompendiumProgressParticles(EntityItemFrame frame, int x, int y, int z) {
AMParticle particle = (AMParticle) AMCore.proxy.particleManager.spawn(frame.worldObj, "symbols", x + 0.5, y + 0.5, z + 0.5);
if (particle != null) {
particle.setIgnoreMaxAge(true);
// particle.AddParticleController(new ParticleApproachEntity(particle, frame, 0.02f, 0.04f, 1, false).setKillParticleOnFinish(true));
particle.AddParticleController(new ParticleArcToEntity(particle, 1, frame, false).SetSpeed(0.02f).setKillParticleOnFinish(true));
particle.setRandomScale(0.05f, 0.12f);
}
}
use of am2.particles.ParticleArcToEntity in project ArsMagica2 by Mithion.
the class ParticleManagerClient method spawnAuraParticles.
@Override
public void spawnAuraParticles(EntityLivingBase ent) {
if (!ent.worldObj.isRemote)
return;
int particleIndex = 15;
int particleBehaviour = 0;
float particleScale = 0;
float particleAlpha = 0;
boolean particleDefaultColor = true;
boolean particleRandomColor = true;
int particleColor = 0xFFFFFF;
int particleQuantity = 2;
float particleSpeed = 0.02f;
if (Minecraft.getMinecraft().thePlayer == ent) {
particleIndex = AMCore.config.getAuraIndex();
particleBehaviour = AMCore.config.getAuraBehaviour();
particleScale = AMCore.config.getAuraScale() / 10;
particleAlpha = AMCore.config.getAuraAlpha();
particleDefaultColor = AMCore.config.getAuraColorDefault();
particleRandomColor = AMCore.config.getAuraColorRandom();
particleColor = AMCore.config.getAuraColor();
particleQuantity = AMCore.config.getAuraQuantity();
particleSpeed = AMCore.config.getAuraSpeed() / 10;
} else {
ExtendedProperties entProperties = ExtendedProperties.For(ent);
particleIndex = entProperties.getAuraIndex();
particleBehaviour = entProperties.getAuraBehaviour();
particleScale = entProperties.getAuraScale() / 10;
particleAlpha = entProperties.getAuraAlpha();
particleDefaultColor = entProperties.getAuraColorDefault();
particleRandomColor = entProperties.getAuraColorRandomize();
particleColor = entProperties.getAuraColor();
particleQuantity = entProperties.getAuraQuantity();
particleSpeed = entProperties.getAuraSpeed() / 10;
}
if (// fix radiant particle's scaling issues...
particleIndex == 31)
particleScale /= 10;
if (ent.worldObj.isRemote && ent instanceof EntityPlayer && AMCore.proxy.playerTracker.hasAA((EntityPlayer) ent)) {
if (Minecraft.getMinecraft().thePlayer != ent || Minecraft.getMinecraft().gameSettings.thirdPersonView > 0) {
if (AMParticle.particleTypes[particleIndex].startsWith("lightning_bolts")) {
int type = Integer.parseInt(new String(new char[] { AMParticle.particleTypes[particleIndex].charAt(AMParticle.particleTypes[particleIndex].length() - 1) }));
if (ent.worldObj.rand.nextInt(100) < 90) {
BoltFromPointToPoint(ent.worldObj, ent.posX + (ent.worldObj.rand.nextFloat() - 0.5f), ent.posY + ent.getEyeHeight() - ent.height + (ent.worldObj.rand.nextFloat() * ent.height), ent.posZ + (ent.worldObj.rand.nextFloat() - 0.5f), ent.posX + (ent.worldObj.rand.nextFloat() - 0.5f), ent.posY + ent.getEyeHeight() - ent.height + (ent.worldObj.rand.nextFloat() * ent.height), ent.posZ + (ent.worldObj.rand.nextFloat() - 0.5f), type, -1);
} else {
BoltFromPointToPoint(ent.worldObj, ent.posX, ent.posY + ent.getEyeHeight() - 0.4, ent.posZ, ent.posX + (ent.worldObj.rand.nextFloat() * 10 - 5), ent.posY + (ent.worldObj.rand.nextFloat() * 10 - 5), ent.posZ + (ent.worldObj.rand.nextFloat() * 10 - 5), type, -1);
}
} else {
int offset = 0;
for (int i = 0; i < particleQuantity; ++i) {
AMParticle effect = spawn(ent.worldObj, AMParticle.particleTypes[particleIndex], ent.posX + (ent.worldObj.rand.nextFloat() - 0.5f), ent.posY + ent.getEyeHeight() - 0.5f + offset - (ent.worldObj.rand.nextFloat() * 0.5), ent.posZ + (ent.worldObj.rand.nextFloat() - 0.5f));
if (effect != null) {
effect.setIgnoreMaxAge(false);
effect.setMaxAge(40);
effect.setParticleScale(particleScale);
effect.SetParticleAlpha(particleAlpha);
effect.noClip = false;
if (!particleDefaultColor) {
if (particleRandomColor) {
effect.setRGBColorF(ent.worldObj.rand.nextFloat(), ent.worldObj.rand.nextFloat(), ent.worldObj.rand.nextFloat());
} else {
effect.setRGBColorI(particleColor);
}
}
switch(particleBehaviour) {
case // fade
0:
effect.AddParticleController(new ParticleFadeOut(effect, 1, false).setFadeSpeed(particleSpeed));
break;
case // float
1:
effect.AddParticleController(new ParticleFloatUpward(effect, 0.2f, particleSpeed, 1, false));
break;
case // sink
2:
effect.AddParticleController(new ParticleFloatUpward(effect, 0.2f, -particleSpeed, 1, false));
break;
case // orbit
3:
effect.AddParticleController(new ParticleOrbitEntity(effect, ent, particleSpeed, 1, false));
break;
case // arc
4:
effect.AddParticleController(new ParticleArcToEntity(effect, 1, ent, false).generateControlPoints().SetSpeed(particleSpeed));
break;
case // flee
5:
effect.AddParticleController(new ParticleFleeEntity(effect, ent, particleSpeed, 2D, 1, false));
break;
case // forward
6:
effect.AddParticleController(new ParticleMoveOnHeading(effect, ent.rotationYaw + 90, ent.rotationPitch, particleSpeed, 1, false));
break;
case // pendulum
7:
effect.AddParticleController(new ParticlePendulum(effect, 0.2f, particleSpeed, 1, false));
break;
case // grow
8:
effect.AddParticleController(new ParticleGrow(effect, particleSpeed, 1, false));
break;
}
}
}
}
}
}
}
Aggregations