/// <summary> /// Gestion de la création et de la destruction de l'AI /// </summary> /// <param name="Flag"></param> private void Spawn_AI(bool Flag) { if (Flag && (m_ObjectID == 0) && (m_Spawned == 0)) { m_TrySimpleAI = false; #if DEBUG Log.LogMessage("Peer [" + m_CallSign + "] Requete locale de résolution Title = " + m_Data.Title + " , Model = " + m_Data.Model, Color.DarkBlue, 1); #endif m_AIResolution = m_AIMapping.SolveTitle(m_Data.Title, m_Data.Model, m_Data.Type); if (m_AIResolution.Titre != "Mooney Bravo") { #if DEBUG Log.LogMessage("Peer [" + m_CallSign + "] Requete locale a trouvé une résolution", Color.DarkBlue, 1); #endif } m_Spawned = 2; CreateAI(); } if ((!Flag) && (m_Spawned > 0)) { m_Spawned = 0; m_TimerCreateAI.Stop(); if (m_ObjectID != 0) { if (m_SC.Remove_AI(ref m_ObjectID)) { #if DEBUG Log.LogMessage("Peer [" + m_CallSign + "] Suppression de l'avion", Color.DarkBlue, 1); #endif } else { Log.LogMessage("Peer [" + m_CallSign + "] Erreur lors de la suppression de l'avion", Color.DarkViolet); } } } }
/// <summary> /// Résolution d'un AI avec la base de donnée /// </summary> /// <param name="Title"></param> /// <param name="Model"></param> /// <param name="Type"></param> /// <returns></returns> public AIResol SolveTitle(string Title, string Model, string Type) { //Avion de substitution AIResol Resol = new AIResol(); Resol.Titre = "Mooney Bravo"; Resol.CG_Height = 3.7; Resol.Pitch = 2.9; if (!m_Initialized) { return(Resol); } // On vérifie les règles locales string Rule = GetRule(Title); if (Rule != "") { #if DEBUG Log.LogMessage("AIMapping : Règle locale trouvée dans la DB : " + Title + " Remplacé par " + Rule, Color.DarkOliveGreen, 2); #endif Title = Rule; } // On commence par vérifier si le Title existe dans la DB SQLiteCommand cmd = m_DB.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT Titre,CGHeight,Pitch FROM " + m_Table + " WHERE Titre = @titre COLLATE NOCASE"; cmd.Parameters.Add(new SQLiteParameter("@titre", Title)); SQLiteDataReader r = cmd.ExecuteReader(); if (r.StepCount > 0) { while (r.Read()) { Resol.Titre = r.GetString(0); Resol.CG_Height = r.GetDouble(1); Resol.Pitch = r.GetDouble(2); #if DEBUG Log.LogMessage("AIMapping : Occurance directe trouvée dans la DB : " + Resol.Titre, Color.DarkOliveGreen, 2); #endif } } else { cmd = m_DB.CreateCommand(); cmd.CommandType = CommandType.Text; cmd.CommandText = "SELECT Titre,CGHeight,Pitch FROM " + m_Table + " WHERE Model like @model"; cmd.Parameters.Add(new SQLiteParameter("@model", Model)); r = cmd.ExecuteReader(); if (r.StepCount > 0) { while (r.Read()) { Resol.Titre = r.GetString(0); Resol.CG_Height = r.GetDouble(1); Resol.Pitch = r.GetDouble(2); #if DEBUG Log.LogMessage("AIMapping : Occurance ATC Model trouvée dans la DB : " + Resol.Titre, Color.DarkOliveGreen, 2); #endif } } } return(Resol); }