Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using System;
- using UnityEngine;
- public class FlightInformationGenerator
- {
- /// <summary>
- /// класс для генерации случайной информации о рейсе, например, случайного города или имени рейса.
- /// </summary>
- private string[] citiesList;
- public string citiesFileName; // имя файла с городами на английском языке.
- public string planesFileName;
- public FlightInformationGenerator(string citiesFileName)
- {
- /// <summary>
- /// загружает файл с городами на английском языке.
- /// </summary>
- /// <param name="fileName">имя файла</param>
- citiesList = Resources.Load<TextAsset>(citiesFileName).text.Split('\n'); // загрузка файла
- if (citiesList.Length == 0)
- {
- Debug.LogError($"File not found or empty: {citiesFileName}"); // логирование ошибки при отсутствии файла или текста в нем.
- throw new System.IO.FileNotFoundException($"File not found or empty: {citiesFileName}"); // создание системной ошибки при отсутствии файла или текста в нем.
- }
- }
- public string GenerateRandomCity()
- {
- /// <summary>
- /// выбирает случайный город из списка, полученного из файла.
- /// </summary>
- /// <returns>случайный город из списка, полученного из файла</returns>
- int randomIndex = UnityEngine.Random.Range(0, citiesList.Length); // получение случайного индекса для списка городов
- return citiesList[randomIndex];
- }
- public string GenerateRandomFlightName()
- {
- /// <summary>
- /// генерирует случайное имя рейса в формате "AB1234", где "AB" - два случайных символа, а "1234" - случайное четырехзначное число.
- /// </summary>
- /// <returns>случайное имя рейса в формате "AB1234", где "AB" - два случайных символа, а "1234" - случайное четырехзначное число.</returns>
- var firstChar = (char)UnityEngine.Random.Range('A', 'Z' + 1); // генерация первого символа имени рейса самолета
- var secondChar = (char)UnityEngine.Random.Range('A', 'Z' + 1); // генерация второго символа имени рейса самолета
- var number = UnityEngine.Random.Range(1000, 10000).ToString(); // генерация номера из имени рейса самолета
- return firstChar + secondChar + number;
- }
- }
- public class Plane : MonoBehaviour
- {
- /// <summary>
- /// основной класс самолета. содержит всю информацию о нем (генерируемую FlightInformationGenerator-ом).
- /// управляет его положением, скоростью, и т.д.
- /// </summary>
- public int speed; // скорость самолета в км/ч. отображается в окне инофрмации о самолете.
- public int altitude; // высота полета самолета в км. отображается в окне инофрмации о самолете.
- public string flightName; // уникальное имя рейса самолета, например "AB1234". отображается в окне инофрмации о самолете.
- public string destination; // пункт назначения на английском языке, например, "Saint Petersburg". отображается в окне инофрмации о самолете.
- public string startingPlace; // точка отправления на английском языке, например, "Moscow". отображается в окне инофрмации о самолете.
- public string direction; // состояние самолета на английском языке. например, "horizontal flight", "climbing", "falling", "landing" и т.д. отображается в окне инофрмации о самолете стрелками.
- public float moveSpeed; // скорость движения объекта самолета по экрану.
- private FlightInformationGenerator infoGenerator; // генератор информации о рейсе. используется для генерации всех вышеперечисленных переменных.
- public Vector2 screenDirection; // направление движения по экрану (Vector2.left / Vector2.right)
- public Rigidbody2D rb;
- public float deadPoint = 2.9f; // координата x, на которой самолет вылетает за пределы экрана.
- public string citiesTxtFileName; // имя файла с названиями городов на английском языке.
- public void MovePlane()
- {
- /// <summary>
- /// передвигает самолет по экрану используя rb.MovePosition. удаляет самолет при выходе за пределы экрана.
- /// </summary>
- rb.MovePosition(rb.position + screenDirection * moveSpeed * Time.fixedDeltaTime); // движение самолета через изменение rb.position
- if (Math.Abs(transform.position.x) > deadPoint) // проверка на выход за пределы экрана
- {
- Destroy(gameObject); // удаление объекта при выходе за пределы экрана
- }
- }
- void FixedUpdate()
- {
- MovePlane(); // передвижение самолета без зависимости от FPS
- }
- void Start()
- {
- rb = GetComponent<Rigidbody2D>();
- rb.interpolation = RigidbodyInterpolation2D.Interpolate; // установка интерполяции Rigidbody2D. необходима для плавного движения по экрану.
- GenerateFlightInfo();
- moveSpeed = 1.5f; // установка скорости движения по экрану. 1.5f - временное значение, в будущем будет вычисляться на основе speed.
- }
- private void GenerateFlightInfo()
- {
- infoGenerator = new FlightInformationGenerator(citiesTxtFileName);
- destination = infoGenerator.GenerateRandomCity();
- flightName = infoGenerator.GenerateRandomFlightName();
- do { startingPlace = infoGenerator.GenerateRandomCity(); } while (destination == startingPlace); // генерация точки отправления, отличной от пункта назначения
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement