protected virtual void TurretTargeterTick() { if (cannonTarget.IsValid && currentRotation == rotationTargeted && !TargetLocked) { TargetLocked = true; ResetPrefireTimer(); } if (cannonTarget.Cell.IsValid) { if (IsTargetable && !CannonTargeter.TargetMeetsRequirements(this, cannonTarget)) { SetTarget(LocalTargetInfo.Invalid); TargetLocked = false; return; } if (PrefireTickCount > 0) { if (cannonTarget.HasThing) { rotationTargeted = TurretLocation.AngleToPointRelative(cannonTarget.Thing.DrawPos); if (attachedTo != null) { rotationTargeted += attachedTo.TurretRotation; } } else { rotationTargeted = TurretLocation.ToIntVec3().AngleToCell(cannonTarget.Cell, vehicle.Map); if (attachedTo != null) { rotationTargeted += attachedTo.TurretRotation; } } if (turretDef.autoSnapTargeting) { currentRotation = rotationTargeted; } if (TargetLocked && ReadyToFire) { float facing = cannonTarget.Thing != null ? (cannonTarget.Thing.DrawPos - TurretLocation).AngleFlat() : (cannonTarget.Cell - TurretLocation.ToIntVec3()).AngleFlat; GenDraw.DrawAimPieRaw(TurretLocation + new Vector3(turretRenderOffset.x + aimPieOffset.x, 0.5f, turretRenderOffset.y + aimPieOffset.y).RotatedBy(TurretRotation), facing, (int)(PrefireTickCount * 0.5f)); PrefireTickCount--; } } else if (ReadyToFire) { if (IsTargetable && RotationIsValid && targetPersists && (cannonTarget.Pawn is null || !SetTargetConditionalOnThing(LocalTargetInfo.Invalid))) { GroupTurrets.ForEach(t => t.PushTurretToQueue()); } else if (FullAuto) { GroupTurrets.ForEach(t => t.PushTurretToQueue()); } } }
public override CompCannons.TurretData GenerateTurretData() { return(new CompCannons.TurretData() { shots = CurrentFireMode.shotsPerBurst, ticksTillShot = (CurrentFireMode.ticksBetweenShots / GroupTurrets.Count) * GroupTurrets.FindIndex(t => t == this), turret = this }); }