protected virtual void TurretTick() { if (!turrets.NullOrEmpty()) { for (int i = 0; i < turrets.Count; i++) { CompCannons.TurretData turretData = turrets[i]; VehicleTurret turret = turretData.turret; if (!turret.HasAmmo && !DebugSettings.godMode) { turrets.Remove(turretData); shotsFired = turrets.NullOrEmpty(); continue; } if (turret.OnCooldown) { turret.SetTarget(LocalTargetInfo.Invalid); turrets.Remove(turretData); shotsFired = turrets.NullOrEmpty(); continue; } turrets[i].turret.AlignToTargetRestricted(); if (turrets[i].ticksTillShot <= 0) { FireTurret(turret); int shotsIncrement = shotsFromTurret[turret] + 1; shotsFromTurret[turret] = shotsIncrement; turret.CurrentTurretFiring++; turretData.shots--; turretData.ticksTillShot = turret.TicksPerShot; if (turret.OnCooldown || turretData.shots == 0 || (turret.turretDef.ammunition != null && turret.shellCount <= 0)) { turret.SetTarget(LocalTargetInfo.Invalid); turrets.RemoveAll(t => t.turret == turret); shotsFired = turrets.NullOrEmpty(); continue; } } else { turretData.ticksTillShot--; } turrets[i] = turretData; } } }
public void BeginTargeting(TargetingParameters targetParams, Action <LocalTargetInfo> action, VehicleTurret cannon, Action actionWhenFinished = null, Texture2D mouseAttachment = null) { this.action = action; this.targetParams = targetParams; vehicle = cannon.vehicle; Cannon = cannon; Cannon.SetTarget(LocalTargetInfo.Invalid); this.actionWhenFinished = actionWhenFinished; this.mouseAttachment = mouseAttachment; map = cannon.vehicle.Map; }
public override void ProcessInput(Event ev) { if (turrets.All(t => t.reloadTicks <= 0)) { base.ProcessInput(ev); SoundDefOf.Tick_Tiny.PlayOneShotOnCamera(null); CannonTargeter.Instance.BeginTargeting(targetingParams, delegate(LocalTargetInfo target) { turret.SetTarget(target); turret.ResetPrefireTimer(); }, turret, null, null); } }