private IEnumerator <bool> MissileSM(MissileManagement.MissileInfo missile, long targetId) { management.SendCommand(missile, "LaunchOut"); firedMissiles[missile.id] = missile; management.RemoveMissile(missile); yield return(true); for (int i = 0; i < 5; i++) //Wait 5 ticks to allow missile to get out of tube { yield return(true); } var predictedPos = targets[targetId].Position + targets[targetId].Velocity * 0.17f; string[] command = { "AttackLoc", predictedPos.ToString() }; management.SendCommand(missile, command); if ((missile.missileType & MissileManagement.MissileType.SRInterceptor) != 0) { management.SendCommand(missile, "UseTurretLockon"); } OnTargetFiredAt?.Invoke(missile, targets[targetId]); }
private void LaunchNewMissile(MissileManagement.MissileInfo missile, long targetId) { IEnumerator <bool> tempSM = MissileSM(missile, targetId); firedAt[targetId] = DateTime.Now; tempSM.MoveNext(); missileStaging.Add(tempSM); }
/*=========| Helper Functions |=========*/ bool ParseCommands(string command) { switch (command) { case "RefreshMissiles": missileManagement.RefreshMissileList(); return(true); case "TargetMissile": MissileManagement.MissileInfo missile = missileManagement.GetMissileCloseTo(Me.GetPosition(), MissileManagement.MissileType.SRInterceptor, false); missileManagement.SendCommand(missile, "Target"); return(true); case "FireMissile": MissileManagement.MissileInfo fire = missileManagement.GetMissileCloseTo(Me.GetPosition(), MissileManagement.MissileType.SRInterceptor, true); missileManagement.SendCommand(fire, "Attack"); return(true); case "ModeAutomatic": currentMode = CurrentSystemMode.Automatic; return(true); case "ModeManual": currentMode = CurrentSystemMode.Command; return(true); default: //More complex stuff goes here if (command.StartsWith("LaunchInDirectionTurr|")) { string[] commandArgs = command.Split('|'); try { Vector3D direction; if (Vector3D.TryParse(commandArgs[1], out direction)) { missileCoordination.FireMissileInDirection(direction, true); Echo("Launched missile"); } } catch (Exception e) { Echo("Failed to parse message"); } return(true); } break; } return(false); }
void OnMissileRemoved(MissileManagement.MissileInfo info) { Echo($"Missile with ID {info.id} removed."); Me.CustomData = missileManagement.TotalMissileCount.ToString(); }