public override void CompTick() { // Automatically attack if there is a forced target if (targetedTile != GlobalTargetInfo.Invalid) { var turretTop = (TurretTop)NonPublicFields.Building_TurretGun_top.GetValue(Turret); NonPublicProperties.TurretTop_set_CurRotation(turretTop, CurAngle); NonPublicFields.TurretTop_ticksUntilIdleTurn.SetValue(turretTop, Rand.RangeInclusive(150, 350)); if (CanLaunch) { if (warmupTicksLeft == 0) { TryLaunch(targetedTile.Tile); ResetWarmupTicks(); } else { warmupTicksLeft--; } } } // Set warmup ticks if the turret is unmanned if (MannableComp != null && !MannableComp.MannedNow) { ResetWarmupTicks(); } }
public static bool BlockableByShield(this Projectile proj, Building_Shield shieldGen) { if (!proj.def.projectile.flyOverhead) { return(true); } return(!shieldGen.coveredCells.Contains(((Vector3)NonPublicFields.Projectile_origin.GetValue(proj)).ToIntVec3()) && (int)NonPublicFields.Projectile_ticksToImpact.GetValue(proj) / (float)NonPublicProperties.Projectile_get_StartingTicksToImpact(proj) <= 0.5f); }