generated from tilera/1710mod
138 lines
4 KiB
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;
|
|
}
|
|
}
|