public void Turn(aircraft ac, float degree_turn) { float target = 0; if (left_turn == true) { turning = true; while (target < degree_turn) { System.Threading.Thread.Sleep(80); ac.rz += ac.turn_rate; target += ac.turn_rate; } left_turn = false; turning = false; } else if (right_turn == true) { turning = true; print(target); print(degree_turn); while (target < degree_turn) { System.Threading.Thread.Sleep(80); ac.rz -= ac.turn_rate; target += ac.turn_rate; } right_turn = false; turning = false; } }
public int get_degree_turn(aircraft blip, int heading, int turn_direction) { int current_heading = normalize_heading(blip); int degree_turn = 0; print("current " + current_heading); //1 is left turn, 2 is right turn if (turn_direction == 1 && heading < current_heading) { degree_turn = current_heading - heading; } else if (turn_direction == 1) { degree_turn = (360 - heading) + current_heading; } if (turn_direction == 2 && heading > current_heading) { degree_turn = heading - current_heading; } else if (turn_direction == 2) { degree_turn = (360 - current_heading) + heading; } return(degree_turn); }
void test_phrase() { //convert string to List for easier processing string[] words = current_phrase.Split(' '); List <string> phrase_words = new List <string>(words); string alt_key = parser.parse_altitude(phrase_words); string cs_key = parser.parse_callsign(phrase_words); string heading_key = parser.parse_heading(phrase_words); if (alt_key != "empty" && phonetic_ac_callsigns[cs_key] != null && parser.altitude[alt_key] > 0) { if (parser.elevation_action(phrase_words) == 1) { GameObject.Find(phonetic_ac_callsigns[cs_key]).GetComponent <flight_control>().descend(parser.altitude[alt_key]); } else if (parser.elevation_action(phrase_words) == 2) { GameObject.Find(phonetic_ac_callsigns[cs_key]).GetComponent <flight_control>().climb(parser.altitude[alt_key]); } } if (heading_key != "empty" && phonetic_ac_callsigns[cs_key] != null) { int turn = Int32.Parse(parser.heading[heading_key]); if (turn > 0) { if (parser.turn_direction == 1) //1 is left turn { update_aircraft = GameObject.Find("BIGFOOT25"); ac = update_aircraft.GetComponent <aircraft>(); print(ac.call_sign); GameObject.Find(phonetic_ac_callsigns[cs_key]).GetComponent <flight_control>().left_turn = true; GameObject.Find(phonetic_ac_callsigns[cs_key]).GetComponent <flight_control>().Turn_Controller(ac, control.get_degree_turn(ac, ac.new_heading, 1)); } else if (parser.turn_direction == 2) //2 is right turn { ac.new_heading = turn; GameObject.Find(phonetic_ac_callsigns[cs_key]).GetComponent <flight_control>().right_turn = true; GameObject.Find(phonetic_ac_callsigns[cs_key]).GetComponent <flight_control>().Turn_Controller(ac, control.get_degree_turn(ac, ac.new_heading, 2)); } } } //Pilot readback pilot.pilot_action = pilot.pilot_readback(current_phrase, cs_key); pilot.Speak(); //GameObject.Find(ac).GetComponent<flight_control>().right_turn_controller(270); }
// Функция запускается как только мы переключаемся на вкладку private void Table_of_air(object sender, RoutedEventArgs e) { // Запускаем таймеры для подачёта времени System.Windows.Threading.DispatcherTimer timer = new System.Windows.Threading.DispatcherTimer(); timer.Tick += new EventHandler(Timer_Tick); timer.Interval = new TimeSpan(0, 0, 1); timer.Start(); air_flight.Text = "Генерация данных.Генерация данных.Генерация данных.Генерация данных.Генерация данных.Генерация данных.Генерация данных.Генерация данных.Генерация данных.Генерация данных.Генерация данных."; Console.WriteLine("Начинаю читать фаилы"); aircraft air = new aircraft(); air.import_data(); Console.WriteLine("3-4 закончили упражнение"); }
public void update_datablock(aircraft ac) { string alt; //100 is fine, 90 will be made 090 if (ac.current_altitude.ToString().Length < 3) { alt = "0" + ac.current_altitude.ToString(); } else { alt = ac.current_altitude.ToString(); } string txt = ac.call_sign + "\n"; txt += ac.type + " " + alt + "\n"; txt += ac.ground_speed.ToString(); if (acft != null) { acft.GetComponent <Text> ().text = txt; } else { print("error: updating datablock"); } GameObject c = GameObject.Find(ac.call_sign + "/Canvas"); if (c != null) { //keeps data block vertical c.transform.eulerAngles = new Vector3(0, 0, 0); } else { print("Canvas was null"); } }
// Use this for initialization void Start() { //blip contains info on A/C characteristics blip = new aircraft(); blip.call_sign = this.name.ToString(); //give call sign for db look up during initialization rb = GetComponent <Rigidbody>(); Vector2 start = transform.position; //TESTING ac_database = new database(); headings = ac_database.get_headings(); //xy used for determining force applied when spawned xVal = start.x; yVal = start.y; degree_turn = 0; degree_count = .0f; acft = GameObject.Find(blip.call_sign + "/Canvas/datablock_text"); c = GameObject.Find(blip.call_sign + "/Canvas"); sector_tag = GameObject.Find(blip.call_sign + "/Sector_Canvas"); initialize_aircraft(blip, headings); blip_fade1 = GameObject.Find(blip.call_sign + "blip/blip_fade1"); blip_fade2 = GameObject.Find(blip.call_sign + "blip/blip_fade1/blip_fade2"); blip_fade3 = GameObject.Find(blip.call_sign + "blip/blip_fade1/blip_fade2/blip_fade3"); //initial_heading = -90; //remove after testing //blip.heading = initial_heading; //blip.rx = 0; //blip.ry = 0; //blip.rz = blip.heading; //turn_tester(); }
public int normalize_heading(aircraft blip) { print("norm blip heading " + blip.heading); int h = blip.heading; if (h > 360) { h = h % 360; } else if (h < 0) { h *= -1; if (h > 360) { h = h % 360; } } else if (h == 0 || h == 360) { h = 360; } return(h); }
public void descend_aircraft(aircraft ac) { float feet_per_second = ac.descent_rate / 60; float altitude = ac.current_altitude * 100; //90 changes to 9000 for math float target_altitude = ac.new_altitude; while ((altitude) != target_altitude) { //print (altitude); System.Threading.Thread.Sleep(1000); //altitude = ac.current_altitude * 100; if (altitude <= target_altitude) { altitude = target_altitude; ac.current_altitude = (int)altitude / 100; break; } else { altitude = (int)System.Math.Ceiling(altitude - feet_per_second); ac.current_altitude = (int)System.Math.Ceiling(altitude / 100); } } }
public void Turn_Controller(aircraft ac, float degree_turn) { System.Threading.Thread mThread = new System.Threading.Thread(() => Turn(ac, degree_turn)); mThread.Start(); }
public void initialize_aircraft(aircraft blip, Dictionary <string, List <float> > heading) { ac_database = new database(); ac_chars = new List <object>(); ac_chars = ac_database.get_ac_chars(blip.call_sign); if (xVal < -4.5 && yVal > 2.5) { //NW quadrant blip.current_altitude = (int)ac_chars[5] / 100; blip.descent_rate = (int)ac_chars[11]; blip.climb_rate = (int)ac_chars[10]; blip.ground_speed = (int)ac_chars[9]; blip.type = ac_chars[1].ToString(); blip.new_altitude = (int)ac_chars[6]; //blip.rotation = 60f; // (float)ac_chars[12]; //blip.xVelocity = (decimal)heading["120"][0] / 1000; // (float)ac_chars[3]; //blip.yVelocity = (decimal)heading["120"][1] / 1000; // (float)ac_chars[4]; //blip.turn_rate = 1; //blip.quadrant = 3; blip.heading = -120; blip.rz = blip.heading; blip.call_sign = gameObject.name; blip.blip1_rotation = blip.rotation; blip.blip2_rotation = blip.rotation; blip.blip3_rotation = blip.rotation; } else if (xVal < -6.0 && yVal < 0 && yVal > -1) { //direct from west print("Direct West"); blip.current_altitude = (int)ac_chars[5] / 100; blip.descent_rate = (int)ac_chars[11]; blip.climb_rate = (int)ac_chars[10]; blip.ground_speed = (int)ac_chars[9]; blip.type = ac_chars[1].ToString(); blip.new_altitude = (int)ac_chars[6]; blip.rotation = 90f; // (float)ac_chars[12]; blip.xVelocity = (decimal)heading["90"][0] / 1000; // (float)ac_chars[3]; blip.yVelocity = (decimal)heading["90"][1] / 1000; // (float)ac_chars[4]; blip.heading = 90; blip.turn_rate = 1; } else if (xVal < -3.5 && yVal < -4 && yVal > -4.5) { //from SW quadrant print("SW"); blip.current_altitude = (int)ac_chars[5] / 100; blip.descent_rate = (int)ac_chars[11]; blip.climb_rate = (int)ac_chars[10]; blip.ground_speed = (int)ac_chars[9]; blip.type = ac_chars[1].ToString(); blip.new_altitude = (int)ac_chars[6]; //blip.rotation = 130f; // (float)ac_chars[12]; // REMOVE after testing blip.xVelocity = (decimal)heading["50"][0] / 1000; // (float)ac_chars[3]; // REMOVE after testing blip.yVelocity = (decimal)heading["50"][1] / 1000; // (float)ac_chars[4]; blip.heading = -50; blip.rz = blip.heading; blip.call_sign = gameObject.name; //blip.turn_rate = 1; //blip.quadrant = 4; blip.blip1_rotation = blip.rotation; blip.blip2_rotation = blip.rotation; blip.blip3_rotation = blip.rotation; } else if (xVal > 6 && yVal < -4 && yVal > -4.5) { //from SE quadrant print("SE"); blip.current_altitude = (int)ac_chars[5] / 100; blip.descent_rate = (int)ac_chars[11]; blip.climb_rate = (int)ac_chars[10]; blip.ground_speed = (int)ac_chars[9]; blip.type = ac_chars[1].ToString(); blip.new_altitude = (int)ac_chars[6]; blip.heading = -300; blip.rz = blip.heading; blip.call_sign = gameObject.name; blip.blip1_rotation = blip.rotation; blip.blip2_rotation = blip.rotation; blip.blip3_rotation = blip.rotation; //blip.rotation = -120f; // (float)ac_chars[12]; //blip.xVelocity = heading["300"][0]; // (float)ac_chars[3]; //blip.yVelocity = heading["300"][1]; // (float)ac_chars[4]; //blip.heading = (int)ac_chars[2]; //blip.turn_rate = .017f; //GameObject text = GameObject.Find(blip.call_sign + "Canvas/datablock_text"); //float xt = text.transform.position.x; //float yt = text.transform.position.y; //text.transform.position = new Vector2(xt+.5f, yt-.5f); } else if (xVal > 3 && xVal < 4 && yVal > 3 && yVal < 4) { //from NE print("NE"); blip.current_altitude = (int)ac_chars[5] / 100; blip.descent_rate = (int)ac_chars[11]; blip.climb_rate = (int)ac_chars[10]; blip.ground_speed = (int)ac_chars[9]; blip.type = ac_chars[1].ToString(); blip.new_altitude = (int)ac_chars[6]; blip.heading = -210; blip.rz = blip.heading; blip.call_sign = gameObject.name; blip.blip1_rotation = blip.rotation; blip.blip2_rotation = blip.rotation; blip.blip3_rotation = blip.rotation; } /*else if (xVal > 6 && yVal < .45 && yVal > 0) * { //from East * print("East"); * blip.current_altitude = (int)ac_chars[5] / 100; * blip.descent_rate = (int)ac_chars[11]; * blip.climb_rate = (int)ac_chars[10]; * blip.ground_speed = (int)ac_chars[9]; * blip.type = ac_chars[1].ToString(); * blip.new_altitude = (int)ac_chars[6]; * blip.rotation = -80f; // (float)ac_chars[12]; * blip.xVelocity = heading["260"][0]; // (float)ac_chars[3]; * blip.yVelocity = heading["260"][1]; // (float)ac_chars[4]; * blip.heading = (int)ac_chars[2]; * blip.turn_rate = .017f; * GameObject text = GameObject.Find(blip.call_sign + "Canvas/datablock_text"); * float xt = text.transform.position.x; * float yt = text.transform.position.y; * //datablock * text.transform.position = new Vector2(xt + .5f, yt); * * } * else if (xVal > 3 && yVal < 3.95 && yVal > 3.75) * { //High Approach * print("High Approach"); * blip.current_altitude = (int)ac_chars[5] / 100; * blip.descent_rate = (int)ac_chars[11]; * blip.climb_rate = (int)ac_chars[10]; * blip.ground_speed = (int)ac_chars[9]; * blip.type = ac_chars[1].ToString(); * blip.new_altitude = (int)ac_chars[6]; * blip.rotation = -33f; // (float)ac_chars[12]; * blip.xVelocity = heading["210"][0]; // (float)ac_chars[3]; * blip.yVelocity = heading["210"][1]; // (float)ac_chars[4]; * blip.heading = (int)ac_chars[2]; * blip.turn_rate = .017f; * GameObject text = GameObject.Find(blip.call_sign + "Canvas/datablock_text"); * float xt = text.transform.position.x; * float yt = text.transform.position.y; * text.transform.position = new Vector2(xt + .5f, yt); * * } * else if (xVal > 0 && xVal < 1 && yVal < 0 && yVal > -1) * { //departure * print("Departure"); * blip.departure = true; * blip.current_altitude = 1000 / 100; * blip.descent_rate = (int)ac_chars[11]; * blip.climb_rate = (int)ac_chars[10]; * blip.ground_speed = (int)ac_chars[9]; * blip.type = ac_chars[1].ToString(); * blip.new_altitude = 9000; * blip.rotation = -33f; // (float)ac_chars[12]; * blip.xVelocity = heading["210"][0]; // (float)ac_chars[3]; * blip.yVelocity = heading["210"][1]; // (float)ac_chars[4]; * blip.heading = (int)ac_chars[2]; * blip.turn_rate = .017f; * GameObject text = GameObject.Find(blip.call_sign + "Canvas/datablock_text"); * float xt = text.transform.position.x; * float yt = text.transform.position.y; * text.transform.position = new Vector2(xt + .5f, yt); * climb(blip.new_altitude); * * } * else //Used for testing movement * { * print("Test Movement"); * blip.current_altitude = (int)ac_chars[5] / 100; * blip.descent_rate = (int)ac_chars[11]; * blip.climb_rate = (int)ac_chars[10]; * blip.ground_speed = (int)ac_chars[9]; * blip.type = ac_chars[1].ToString(); * blip.new_altitude = (int)ac_chars[6]; * blip.rotation = (float)ac_chars[12]; * blip.xVelocity = 10f; // (float)ac_chars[3]; * blip.yVelocity = 0f; // (float)ac_chars[4]; * * }*/ }