aboutsummaryrefslogtreecommitdiff
path: root/src/main/java/openmodularturrets/entity
diff options
context:
space:
mode:
Diffstat (limited to 'src/main/java/openmodularturrets/entity')
-rw-r--r--src/main/java/openmodularturrets/entity/projectiles/projectileEM.java123
-rw-r--r--src/main/java/openmodularturrets/entity/projectiles/projectileRenderEM.java74
2 files changed, 197 insertions, 0 deletions
diff --git a/src/main/java/openmodularturrets/entity/projectiles/projectileEM.java b/src/main/java/openmodularturrets/entity/projectiles/projectileEM.java
new file mode 100644
index 0000000000..1d118964ca
--- /dev/null
+++ b/src/main/java/openmodularturrets/entity/projectiles/projectileEM.java
@@ -0,0 +1,123 @@
+package openmodularturrets.entity.projectiles;
+
+import com.github.technus.tectech.TecTech;
+import com.github.technus.tectech.elementalMatter.classes.cElementalInstanceStack;
+import com.github.technus.tectech.elementalMatter.classes.cElementalInstanceStackMap;
+import com.github.technus.tectech.elementalMatter.definitions.dHadronDefinition;
+import com.github.technus.tectech.elementalMatter.definitions.eQuarkDefinition;
+import gregtech.api.GregTech_API;
+import gregtech.api.util.GT_Utility;
+import net.minecraft.block.Block;
+import net.minecraft.entity.player.EntityPlayer;
+import net.minecraft.util.MovingObjectPosition;
+import net.minecraft.world.World;
+import openmodularturrets.entity.projectiles.damagesources.NormalDamageSource;
+import openmodularturrets.handler.ConfigHandler;
+import openmodularturrets.tileentity.turretbase.TurretBase;
+
+
+/**
+ * Created by Bass on 27/07/2017.
+ */
+public class projectileEM extends TurretProjectile {
+ public float gravity=0;
+ private TurretBase turretBase;
+
+ private boolean exotic, antiMatter;
+
+ private float massFactor;
+
+ public projectileEM(World par1World) {
+ super(par1World);
+ }
+
+ public projectileEM(World par1World, TurretBase turretBase, cElementalInstanceStackMap avalableEM) {
+ super(par1World);
+ this.turretBase = turretBase;
+ boolean onlyQuarks=true;
+ if(avalableEM!=null && avalableEM.hasStacks()) {
+ for (cElementalInstanceStack stack : avalableEM.values()) {
+ if (!(stack.definition instanceof eQuarkDefinition)) {
+ onlyQuarks = false;
+ }
+ }
+ if (onlyQuarks) {
+ avalableEM.clear();
+ } else {
+ cElementalInstanceStack consumeFromThis=avalableEM.get(TecTech.Rnd.nextInt(avalableEM.size()));
+ massFactor =consumeFromThis.definition.getMass()/ dHadronDefinition.hadron_n_.getMass();
+
+ if(consumeFromThis.definition.getType()>1 || consumeFromThis.definition.getType()<-1) exotic = true;
+ if(consumeFromThis.definition.getType()<0) antiMatter = true;
+
+ if (consumeFromThis.definition.getCharge() == 0) this.gravity = massFactor/100f;
+ else this.gravity = Math.min(0.0025F/Math.abs(consumeFromThis.definition.getCharge()),massFactor/100f);
+
+ antiMatter=true;//todo remove
+
+ avalableEM.removeAmount(false,consumeFromThis.definition.getStackForm(1));
+ }
+ }
+ //todo add subspace pollution
+ }
+
+ protected void onImpact(MovingObjectPosition movingobjectposition) {
+ if(this.ticksExisted > 1) {
+ if(movingobjectposition.typeOfHit == MovingObjectPosition.MovingObjectType.BLOCK) {
+ Block hitBlock = this.worldObj.getBlock(movingobjectposition.blockX, movingobjectposition.blockY, movingobjectposition.blockZ);
+ if(hitBlock != null){
+ if (hitBlock.getMaterial().isSolid() && TecTech.ModConfig.ENABLE_TURRET_EXPLOSIONS && antiMatter) {
+ this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "openmodularturrets:laserHit", ConfigHandler.getTurretSoundVolume(), TecTech.Rnd.nextFloat() + 0.5F);
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(209), 1.0F, -1.0F,
+ movingobjectposition.blockX,
+ movingobjectposition.blockY,
+ movingobjectposition.blockZ);
+ worldObj.createExplosion(null,
+ movingobjectposition.blockX + 0.5D,
+ movingobjectposition.blockY + 0.5D,
+ movingobjectposition.blockZ + 0.5D, (exotic?10:1) * TecTech.ModConfig.TURRET_EXPLOSION_FACTOR * massFactor * (isAmped?(amp_level*.1f)+1:1) * (ticksExisted/250f), true);
+ } else {
+ return;
+ }
+ }
+ }
+
+ if(movingobjectposition.entityHit != null && !this.worldObj.isRemote) {
+ this.worldObj.playSoundEffect(this.posX, this.posY, this.posZ, "openmodularturrets:laserHit", ConfigHandler.getTurretSoundVolume(), TecTech.Rnd.nextFloat() + 0.5F);
+ if(movingobjectposition.entityHit != null && !this.worldObj.isRemote) {
+ float damage = (exotic?10:1) * TecTech.ModConfig.TURRET_DAMAGE_FACTOR * massFactor * (isAmped?(amp_level*.1f)+1:1);
+
+ if(movingobjectposition.entityHit instanceof EntityPlayer) {
+ if(this.canDamagePlayer((EntityPlayer)movingobjectposition.entityHit)) {
+ movingobjectposition.entityHit.setFire((exotic?10:1)*2);
+ movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("laser"), damage);
+ if(antiMatter) movingobjectposition.entityHit.hurtResistantTime = 0;
+ }
+ } else {
+ movingobjectposition.entityHit.setFire((exotic?10:1)*2);
+ movingobjectposition.entityHit.attackEntityFrom(new NormalDamageSource("laser"), damage);
+ if(antiMatter) movingobjectposition.entityHit.hurtResistantTime = 0;
+ }
+
+ if (TecTech.ModConfig.ENABLE_TURRET_EXPLOSIONS && antiMatter) {
+ GT_Utility.sendSoundToPlayers(worldObj, GregTech_API.sSoundList.get(209), 1.0F, -1.0F,
+ (int)movingobjectposition.entityHit.posX,
+ (int)movingobjectposition.entityHit.posY,
+ (int)movingobjectposition.entityHit.posZ);
+ worldObj.createExplosion(null,
+ movingobjectposition.entityHit.posX,
+ movingobjectposition.entityHit.posY,
+ movingobjectposition.entityHit.posZ, (exotic?10:1) * TecTech.ModConfig.TURRET_EXPLOSION_FACTOR * massFactor * (isAmped?(amp_level*.1f)+1:1) * (ticksExisted/250f), true);
+ }
+ }
+ }
+ this.setDead();
+ }
+ }
+
+ public void onEntityUpdate() {
+ if(this.ticksExisted >= 250) {
+ this.setDead();
+ }
+ }
+}
diff --git a/src/main/java/openmodularturrets/entity/projectiles/projectileRenderEM.java b/src/main/java/openmodularturrets/entity/projectiles/projectileRenderEM.java
new file mode 100644
index 0000000000..4ce942958b
--- /dev/null
+++ b/src/main/java/openmodularturrets/entity/projectiles/projectileRenderEM.java
@@ -0,0 +1,74 @@
+package openmodularturrets.entity.projectiles;
+
+import com.github.technus.tectech.auxiliary.Reference;
+import cpw.mods.fml.relauncher.Side;
+import cpw.mods.fml.relauncher.SideOnly;
+import net.minecraft.client.renderer.OpenGlHelper;
+import net.minecraft.client.renderer.Tessellator;
+import net.minecraft.client.renderer.entity.Render;
+import net.minecraft.entity.Entity;
+import net.minecraft.util.MathHelper;
+import net.minecraft.util.ResourceLocation;
+import org.lwjgl.opengl.GL11;
+
+/**
+ * Created by Tec on 29.07.2017.
+ */
+@SideOnly(Side.CLIENT)
+public class projectileRenderEM extends Render {
+ private static final ResourceLocation textures = new ResourceLocation(Reference.MODID + ":textures/entity/projectileEM.png");
+
+ public projectileRenderEM() {
+ }
+
+ private void render(projectileEM entity, double par2, double par4, double par6, float par9) {
+ this.bindEntityTexture(entity);
+ GL11.glPushMatrix();
+ GL11.glTranslatef((float)par2, (float)par4 + 0.3F, (float)par6);
+ GL11.glRotatef(entity.prevRotationYaw + (entity.rotationYaw - entity.prevRotationYaw) * par9 - 90.0F, 0.0F, 1.0F, 0.0F);
+ GL11.glRotatef(entity.prevRotationPitch + (entity.rotationPitch - entity.prevRotationPitch) * par9, 0.0F, 0.0F, 1.0F);
+ Tessellator var18 = Tessellator.instance;
+ byte b0 = 0;
+ float f2 = 0.0F;
+ float f3 = 0.5F;
+ float f4 = (float)(b0 * 10) / 32.0F;
+ float f5 = (float)(5 + b0 * 10) / 32.0F;
+ float f10 = 0.05625F;
+ GL11.glEnable('耺');
+ float f11 = - par9;
+ if(f11 > 0.0F) {
+ float i = -MathHelper.sin(f11 * 3.0F) * f11;
+ GL11.glRotatef(i, 0.0F, 0.0F, 1.0F);
+ }
+
+ GL11.glDisable(2896);
+ OpenGlHelper.setLightmapTextureCoords(OpenGlHelper.lightmapTexUnit, 240.0F, 240.0F);
+ GL11.glRotatef(45.0F, 1.0F, 0.0F, 0.0F);
+ GL11.glScalef(f10, f10, f10);
+ GL11.glTranslatef(0.0F, 0.0F, 0.0F);
+ GL11.glNormal3f(f10, 0.0F, 0.0F);
+
+ for(int var19 = 0; var19 < 4; ++var19) {
+ GL11.glRotatef(90.0F, 1.0F, 0.0F, 0.0F);
+ GL11.glNormal3f(0.0F, 0.0F, f10);
+ var18.startDrawingQuads();
+ var18.addVertexWithUV(-16.0D, -2.0D, 0.0D, (double)f2, (double)f4);
+ var18.addVertexWithUV(16.0D, -2.0D, 0.0D, (double)f3, (double)f4);
+ var18.addVertexWithUV(16.0D, 2.0D, 0.0D, (double)f3, (double)f5);
+ var18.addVertexWithUV(-16.0D, 2.0D, 0.0D, (double)f2, (double)f5);
+ var18.draw();
+ }
+
+ GL11.glEnable(2896);
+ GL11.glDisable('耺');
+ GL11.glPopMatrix();
+ }
+
+ protected ResourceLocation getEntityTexture(Entity par1Entity) {
+ return textures;
+ }
+
+ public void doRender(Entity par1Entity, double par2, double par4, double par6, float par8, float par9) {
+ render((projectileEM)par1Entity, par2, par4, par6, par9);
+ }
+}