Advertisement
Guest User

Plane.cs

a guest
Mar 8th, 2025
56
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C# 7.10 KB | Source Code | 0 0
  1. using System;
  2. using UnityEngine;
  3.  
  4.  
  5. public class FlightInformationGenerator
  6. {
  7.     /// <summary>
  8.     /// класс для генерации случайной информации о рейсе, например, случайного города или имени рейса.
  9.     /// </summary>
  10.     private string[] citiesList;
  11.     public string citiesFileName;  // имя файла с городами на английском языке.
  12.     public string planesFileName;
  13.     public FlightInformationGenerator(string citiesFileName)
  14.     {
  15.         /// <summary>
  16.         /// загружает файл с городами на английском языке.
  17.         /// </summary>
  18.         /// <param name="fileName">имя файла</param>
  19.         citiesList = Resources.Load<TextAsset>(citiesFileName).text.Split('\n');  // загрузка файла
  20.         if (citiesList.Length == 0)
  21.         {
  22.             Debug.LogError($"File not found or empty: {citiesFileName}");  // логирование ошибки при отсутствии файла или текста в нем.
  23.             throw new System.IO.FileNotFoundException($"File not found or empty: {citiesFileName}");  // создание системной ошибки при отсутствии файла или текста в нем.
  24.         }
  25.     }
  26.  
  27.     public string GenerateRandomCity()
  28.     {
  29.         /// <summary>
  30.         /// выбирает случайный город из списка, полученного из файла.
  31.         /// </summary>
  32.         /// <returns>случайный город из списка, полученного из файла</returns>
  33.         int randomIndex = UnityEngine.Random.Range(0, citiesList.Length);  // получение случайного индекса для списка городов
  34.         return citiesList[randomIndex];
  35.     }
  36.  
  37.     public string GenerateRandomFlightName()
  38.     {
  39.         /// <summary>
  40.         /// генерирует случайное имя рейса в формате "AB1234", где "AB" - два случайных символа, а "1234" - случайное четырехзначное число.
  41.         /// </summary>
  42.         /// <returns>случайное имя рейса в формате "AB1234", где "AB" - два случайных символа, а "1234" - случайное четырехзначное число.</returns>
  43.         var firstChar = (char)UnityEngine.Random.Range('A', 'Z' + 1);  // генерация первого символа имени рейса самолета
  44.         var secondChar = (char)UnityEngine.Random.Range('A', 'Z' + 1);  // генерация второго символа имени рейса самолета
  45.         var number = UnityEngine.Random.Range(1000, 10000).ToString();  // генерация номера из имени рейса самолета
  46.         return firstChar + secondChar + number;
  47.     }
  48.  
  49. }
  50.  
  51. public class Plane : MonoBehaviour
  52. {
  53.     /// <summary>
  54.     /// основной класс самолета. содержит всю информацию о нем (генерируемую FlightInformationGenerator-ом).
  55.     /// управляет его положением, скоростью, и т.д.
  56.     /// </summary>
  57.     public int speed;  // скорость самолета в км/ч. отображается в окне инофрмации о самолете.
  58.     public int altitude;  // высота полета самолета в км. отображается в окне инофрмации о самолете.
  59.     public string flightName;  // уникальное имя рейса самолета, например "AB1234". отображается в окне инофрмации о самолете.
  60.     public string destination;  // пункт назначения на английском языке, например, "Saint Petersburg". отображается в окне инофрмации о самолете.
  61.     public string startingPlace;  // точка отправления на английском языке, например, "Moscow". отображается в окне инофрмации о самолете.
  62.     public string direction;  // состояние самолета на английском языке. например, "horizontal flight", "climbing", "falling", "landing" и т.д. отображается в окне инофрмации о самолете стрелками.
  63.     public float moveSpeed;  // скорость движения объекта самолета по экрану.
  64.     private FlightInformationGenerator infoGenerator;  // генератор информации о рейсе. используется для генерации всех вышеперечисленных переменных.
  65.  
  66.     public Vector2 screenDirection;  // направление движения по экрану (Vector2.left / Vector2.right)
  67.     public Rigidbody2D rb;
  68.     public float deadPoint = 2.9f;  // координата x, на которой самолет вылетает за пределы экрана.
  69.  
  70.     public string citiesTxtFileName;  // имя файла с названиями городов на английском языке.
  71.    
  72.     public void MovePlane()
  73.     {
  74.         /// <summary>
  75.         /// передвигает самолет по экрану используя rb.MovePosition. удаляет самолет при выходе за пределы экрана.
  76.         /// </summary>
  77.         rb.MovePosition(rb.position + screenDirection * moveSpeed * Time.fixedDeltaTime);  // движение самолета через изменение rb.position
  78.         if (Math.Abs(transform.position.x) > deadPoint)  // проверка на выход за пределы экрана
  79.         {
  80.             Destroy(gameObject);  // удаление объекта при выходе за пределы экрана
  81.         }
  82.     }
  83.  
  84.     void FixedUpdate()
  85.     {
  86.         MovePlane();  // передвижение самолета без зависимости от FPS
  87.     }
  88.  
  89.     void Start()
  90.     {
  91.         rb = GetComponent<Rigidbody2D>();
  92.         rb.interpolation = RigidbodyInterpolation2D.Interpolate;  // установка интерполяции Rigidbody2D. необходима для плавного движения по экрану.
  93.  
  94.         GenerateFlightInfo();
  95.         moveSpeed = 1.5f;  // установка скорости движения по экрану. 1.5f - временное значение, в будущем будет вычисляться на основе speed.
  96.     }
  97.  
  98.     private void GenerateFlightInfo()
  99.     {
  100.         infoGenerator = new FlightInformationGenerator(citiesTxtFileName);
  101.         destination = infoGenerator.GenerateRandomCity();
  102.         flightName = infoGenerator.GenerateRandomFlightName();
  103.         do { startingPlace = infoGenerator.GenerateRandomCity(); } while (destination == startingPlace);  // генерация точки отправления, отличной от пункта назначения
  104.     }
  105. }
  106.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement