icbm/src/main/java/icbm/gangshao/turret/sentries/TLaserTurret.java

138 lines
4 KiB
Java

package icbm.gangshao.turret.sentries;
import calclavia.lib.CalculationHelper;
import icbm.api.sentry.IAATarget;
import icbm.gangshao.ICBMSentry;
import icbm.gangshao.ProjectileType;
import icbm.gangshao.damage.TileDamageSource;
import icbm.gangshao.platform.TTurretPlatform;
import net.minecraft.entity.EntityLiving;
import net.minecraft.util.DamageSource;
import net.minecraft.util.MathHelper;
import universalelectricity.core.vector.Vector3;
public class TLaserTurret extends TAutomaticTurret {
public float barrelRotation;
public float barrelRotationVelocity;
public TLaserTurret() {
super.targetPlayers = true;
super.targetHostile = true;
super.baseTargetRange = 20;
super.maxTargetRange = 35;
super.rotationSpeed = 3.0f;
super.baseFiringDelay = 12;
super.minFiringDelay = 5;
super.projectileType = ProjectileType.UNKNOWN;
}
@Override
public void updateEntity() {
super.updateEntity();
if (this.worldObj.isRemote) {
this.barrelRotation = MathHelper.wrapAngleTo180_float(
this.barrelRotation + this.barrelRotationVelocity
);
this.barrelRotationVelocity
= Math.max(this.barrelRotationVelocity - 0.1f, 0.0f);
}
}
@Override
public double getFiringRequest() {
return 20000.0;
}
@Override
public double getVoltage() {
return 480.0;
}
@Override
public int getMaxHealth() {
return 130;
}
@Override
public void playFiringSound() {
this.worldObj.playSoundEffect(
(double) this.xCoord,
(double) this.yCoord,
(double) this.zCoord,
"icbm:lasershot",
5.0f,
1.0f - this.worldObj.rand.nextFloat() * 0.2f
);
}
@Override
public void renderShot(final Vector3 target) {
final Vector3 center = this.getCenter();
ICBMSentry.proxy.renderBeam(
this.worldObj,
Vector3.add(
center,
CalculationHelper
.getDeltaPositionFromRotation(
super.currentRotationYaw - 6.0f, super.currentRotationPitch * 1.4f
)
.multiply(1.2)
),
target,
1.0f,
0.4f,
0.4f,
5
);
ICBMSentry.proxy.renderBeam(
this.worldObj,
Vector3.add(
center,
CalculationHelper
.getDeltaPositionFromRotation(
super.currentRotationYaw + 6.0f, super.currentRotationPitch * 1.4f
)
.multiply(1.2)
),
target,
1.0f,
0.4f,
0.4f,
5
);
++this.barrelRotationVelocity;
}
@Override
protected boolean onFire() {
if (!this.worldObj.isRemote && this.getPlatform() != null) {
if (super.target instanceof EntityLiving) {
final TTurretPlatform platform = this.getPlatform();
platform.wattsReceived -= this.getFiringRequest();
super.target.attackEntityFrom(
(DamageSource) TileDamageSource.doLaserDamage(this), 2
);
super.target.setFire(3);
return true;
}
if (super.target instanceof IAATarget) {
if (this.worldObj.rand.nextFloat() > 0.2) {
final int damage = ((IAATarget) super.target).doDamage(10);
if (damage == -1 && this.worldObj.rand.nextFloat() > 0.7) {
((IAATarget) super.target).destroyCraft();
} else if (damage <= 0) {
((IAATarget) super.target).destroyCraft();
}
}
return true;
}
}
return false;
}
}