Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- using UnityEngine;
- using System.Collections;
- using System.Collections.Generic;
- using System;
- using System.Linq;
- //using DG.Tweening;
- using UnityEngine.UI;
- using SmartLocalization;
- #if !UNITY_EDITOR && UNITY_WSA
- using UnityBluetoothLibrary;
- #endif
- public class TractorController : MonoBehaviour
- {
- public GameObject Arrow;
- public List<GameObject> trailer;
- public Transform trackedPoint;
- public Transform trackedPointRotation;
- public GameObject loadingScreen;
- public float maxSteeringAngle;
- public ParticleSystem Particle;
- public GameObject NextPoint;
- public GameObject Sphere;
- public List<GameObject> Points;
- public Material NextPointMaterial;
- public Material PassedPointMaterial;
- public GameObject[] RotateFrontWheels;
- public GameObject[] FrontWheels;
- public GameObject[] RearWheels;
- private Vector3 _zeroPoint = Vector3.zero;
- public GameObject carLightTexture;
- private Vector2 firstPosition = Vector2.zero;
- private double lastTimestamp;
- private List<double> llastTimestamp;
- private GameObject parent;
- public bool isMoving = false;
- public bool moved = false;
- private bool enabledFilter = true;
- public Text speedText;
- public Text speedKMText;
- public Text movedDistanceText;
- public Text filledDistanceText;
- public Text altitudeText;
- public Text altitudeAdditionalText;
- //Sattelites
- public Text sattelitesCountText;
- public Text hdop2Text;
- public Text qualityText;
- public Text btText;
- public Text debugText;
- public GameObject light;
- public GameObject lightAir;
- public GameObject lights;
- public List<FilledArea> filledAreas;
- public List<HingeJoint> trailerJoint;
- AndroidJavaObject gpsActivityJavaClass;
- private Vector3 lastBackPoint = Vector3.zero;
- private float movedDistance = 0;
- private float filledDistance = 0;
- public float Gz = 0.1f;
- public float pointsDealey = 0.5f;
- public int sectorsDealey = 2;
- public float speedLimit = 1f;
- public float smDealey = 15;
- private float startingDistance = 0;
- private float startingFillingDistance = 0;
- public bool needToAddPosition = true;
- public bool needToAddSquare = true;
- public string forGoogleString;
- public string forKML;
- public string forKMLLeft;
- public string forKMLRight;
- public List<string> kmlRightList;
- public string gpxString;
- public string kmlSquare;
- public string kmlStartSquare;
- private bool isDemo = false;
- private bool IsConnected = false;
- public Camera ScreenshotCamera;
- public Transform tractorTrasform;
- public Transform arrowTransform;
- public static TractorController Instance;
- public string startingDate = "";
- public string currentDate = "";
- public GameObject mainCamera;
- private int movedCount = 0;
- public Transform airship;
- public Transform MainTransform;
- public Transform airPropeller;
- public Material GrounMaterial;
- public GameObject GroundGameObject;
- private List<float> speeds = new List<float>();
- private int minSpeed = 0;
- private int maxSpeed = 0;
- //Combine
- public Transform CombineTransform;
- public GameObject CombineLeftRear;
- public GameObject CombineRightRear;
- public GameObject CombineLeftFront;
- public GameObject CombineRightFront;
- public float altOffset = 0;
- public float overSquare = 0;
- public GameObject CalibrationWindow;
- private Vector3 offsetPos = Vector3.zero;
- public Vector3 lastPositionSave = Vector3.zero;
- public Collider lastArea;
- public bool isContinue = false;
- public bool IsOriginalDevice = false;
- #if !UNITY_EDITOR && UNITY_WSA_10_0
- private UnityBluetooth uBluetooth;
- #endif
- void Awake()
- {
- if (PlayerPrefs.HasKey("lang"))
- {
- LanguageManager.Instance.ChangeLanguage(PlayerPrefs.GetString("lang"));
- }
- else
- {
- SmartCultureInfo deviceCulture = LanguageManager.Instance.GetDeviceCultureIfSupported();
- if (deviceCulture != null)
- {
- LanguageManager.Instance.ChangeLanguage(deviceCulture);
- }
- else
- {
- LanguageManager.Instance.ChangeLanguage("ru");
- }
- }
- if (SaveController.Instance.data.startingPos != Vector2.zero)
- {
- isContinue = true;
- lastPositionSave = new Vector3(PlayerPrefs.GetFloat("posX" + SaveController.Instance.data.saveIndex), transform.position.y, PlayerPrefs.GetFloat("posZ" + SaveController.Instance.data.saveIndex));
- }
- Instance = this;
- }
- void Start()
- {
- if (SaveController.Instance.data.startingPos != Vector2.zero)
- {
- CalibrationWindow.SetActive(true);
- isContinue = true;
- }
- Invoke("AfterStart", 1);
- IsOriginalDevice = PlayerPrefs.GetInt("VelestorDevice") == 1;
- //LoadCoordinatesByName("10m", 10);
- mainCamera = GameObject.FindGameObjectWithTag("Camera");
- }
- private void AfterStart()
- {
- llastTimestamp = new List<double>();
- SaveController.Instance.TryToLoad();
- movedDistance = SaveController.Instance.data.distance;
- filledDistance = SaveController.Instance.data.filledDistance;
- startingDistance = movedDistance;
- startingFillingDistance = filledDistance;
- filledDistanceText.text = (Math.Round((startingFillingDistance), 2)).ToString();
- movedDistance = 0;
- filledDistance = 0;
- SetMovedText();
- parent = new GameObject("test");
- parent.gameObject.transform.SetParent(NextPoint.gameObject.transform.parent, false);
- SetDebugValues();
- if (PlayerPrefs.GetInt("VelestorDevice") == 0)
- {
- mainCamera = MouseOrbitImproved.Instance.twoDCamera;
- }
- if (SaveController.Instance.data.startingPos != Vector2.zero)
- {
- firstPosition = SaveController.Instance.data.startingPos;
- startingDate = PlayerPrefs.GetString("date" + SaveController.Instance.data.saveIndex);
- }
- if (CheckWorkType.Instance.typeId == 8)
- {
- StartCoroutine(TrackAirRotation());
- //loadingScreen.transform.localPosition = new Vector3(loadingScreen.transform.localPosition.x, 11,
- // loadingScreen.transform.localPosition.z);
- }
- else
- {
- //light.SetActive(true);
- lightAir.SetActive(false);
- }
- if (CheckWorkType.Instance.typeId == 5)
- {
- mainCamera = MouseOrbitImproved.Instance.twoDCamera;
- RotateFrontWheels[0] = CombineLeftFront;
- RotateFrontWheels[1] = CombineRightFront;
- FrontWheels[0] = CombineLeftFront;
- FrontWheels[1] = CombineRightFront;
- RearWheels[0] = CombineLeftRear;
- RearWheels[1] = CombineRightRear;
- float nowSize = (float) (MetricsWindow.Instance.metrics + ((float) MetricsWindow.Instance.sm / 100)) - 4;
- nowSize *= 10;
- MouseOrbitImproved.Instance.distance += nowSize;
- }
- ScreenshotCamera.gameObject.SetActive(false);
- forGoogleString = PlayerPrefs.GetString("map" + SaveController.Instance.data.saveIndex);
- forKML = PlayerPrefs.GetString("kml" + SaveController.Instance.data.saveIndex);
- string mac = PlayerPrefs.GetString("mac");
- string pin = PlayerPrefs.GetString("pin");
- string deviceName = PlayerPrefs.GetString("device");
- #if UNITY_ANDROID && !UNITY_EDITOR
- AndroidJNI.AttachCurrentThread();
- if (SaveController.Instance.gpsActivityJavaClass == null)
- {
- using (var javaUnityPlayer = new AndroidJavaClass("com.unity3d.player.UnityPlayer"))
- {
- using (var currentActivity = javaUnityPlayer.GetStatic<AndroidJavaObject>("currentActivity"))
- {
- gpsActivityJavaClass = new AndroidJavaObject("com.velestor.tractor.GPSTest", currentActivity);
- SaveController.Instance.gpsActivityJavaClass = gpsActivityJavaClass;
- }
- }
- }
- else
- {
- gpsActivityJavaClass = SaveController.Instance.gpsActivityJavaClass;
- }
- string test = gpsActivityJavaClass.CallStatic<string>("SetAdress", mac, pin, deviceName);
- #endif
- if (SaveController.Instance.data.debugFileName == "-")
- {
- loadingScreen.SetActive(true);
- StartCoroutine(GetPositions());
- StartCoroutine(GetPositionsFromBluetooth());
- }
- if (SaveController.Instance.data.debugFileName != "-")
- {
- isDemo = true;
- #if UNITY_EDITOR || UNITY_WSA
- StartCoroutine(GetPositions());
- #endif
- StartCoroutine(GetPositionsFromNMEA());
- }
- #if !UNITY_EDITOR && UNITY_WSA_10_0
- uBluetooth = new UnityBluetooth();
- uBluetooth.StartBT (mac, pin, deviceName);
- #endif
- //string test = gpsActivityJavaClass.CallStatic<string>("SetAdress", "55:7D:C3:6D:62:61", "0183","Smart watch");
- //btText.text = test;
- //transform.position = new Vector3(NextPoint.transform.position.x, gameObject.transform.position.y, NextPoint.transform.position.z);
- }
- private bool isCalibrated = false;
- public void Calibrate()
- {
- if (lastArea != null && isContinue && !isCalibrated)
- {
- if (movCor != null)
- {
- StopCoroutine(movCor);
- }
- List<Vector3> vert = ((MeshCollider) lastArea).sharedMesh.vertices.ToList();
- Vector3 start = (vert[0] + vert[1]) / 2;
- Vector3 end = (vert[vert.Count - 1] + vert[vert.Count - 2]) / 2;
- if (Vector3.Distance(start, transform.position) > Vector3.Distance(end, transform.position))
- {
- MoveTractor(new Vector3(end.x,transform.position.y,end.z));
- }
- else
- {
- MoveTractor(new Vector3(start.x, transform.position.y, start.z));
- }
- isCalibrated = true;
- }
- CalibrationWindow.SetActive(false);
- }
- private void MoveTractor(Vector3 to)
- {
- GameObject[] areas = GameObject.FindGameObjectsWithTag("Areas");
- MainTransform.SetParent(transform);
- //transform.position = to + transform.forward *((-MainTransform.localPosition.z) * 6.278354f);
- MainTransform.localEulerAngles = Vector3.zero;
- MainTransform.localPosition = new Vector3(0, MainTransform.localPosition.y, MainTransform.localPosition.z);
- foreach (var obj in areas)
- {
- obj.transform.position = obj.transform.position + ((transform.position - to) - transform.forward * ((-MainTransform.localPosition.z) * 6.278354f));
- if (obj.transform.parent != null)
- {
- obj.transform.localPosition = Vector3.zero;
- }
- }
- MainTransform.SetParent(null);
- Points.Clear();
- pointsCount = 0;
- selectedPoints.Clear();
- ponitCount = 0;
- }
- private void SetDebugValues()
- {
- SaveController.Instance.needToSave = true;
- if (CheckWorkType.Instance.typeId != 5)
- {
- SetZOffset(SaveController.Instance.data.zOffset + (float) SaveController.Instance.data.zSMOffset / 100);
- }
- else
- {
- SetZOffset(4);
- }
- if (SaveController.Instance.data.debugData.pointsDealey == 1 && SaveController.Instance.data.debugData.sectorDealey == 1)
- {
- SaveController.Instance.data.debugData.sectorDealey = 2;
- SaveController.Instance.data.debugData.pointsDealey = 0.5f;
- }
- pointsDealey = SaveController.Instance.data.debugData.pointsDealey * 10;
- sectorsDealey = SaveController.Instance.data.debugData.sectorDealey;
- speedLimit = SaveController.Instance.data.debugData.minSpeed;
- smDealey = SaveController.Instance.data.overlapM;
- minX = PlayerPrefs.GetFloat("minX" + SaveController.Instance.data.saveIndex);
- maxX = PlayerPrefs.GetFloat("maxX" + SaveController.Instance.data.saveIndex);
- minY = PlayerPrefs.GetFloat("minY" + SaveController.Instance.data.saveIndex);
- maxY = PlayerPrefs.GetFloat("maxY" + SaveController.Instance.data.saveIndex);
- if (SaveController.Instance.data.isNewSave)
- {
- SaveController.Instance.data.isNewSave = false;
- SaveController.Instance.InsertShortSave(SaveController.Instance.data);
- }
- QualitySettings.vSyncCount = 0; // VSync must be disabled
- Application.targetFrameRate = 30;
- }
- public void SetOverlapSM(int sm)
- {
- smDealey = sm;
- }
- private float normalOffset = 0;
- public void SetZOffset(float offset, float plus = 1)
- {
- if (plus == 1)
- {
- normalOffset = offset;
- foreach (HingeJoint joint in trailerJoint)
- joint.anchor = new Vector3(0, 0, -0.5f);
- }
- else if (plus == 0)
- {
- foreach (HingeJoint joint in trailerJoint)
- joint.anchor = new Vector3(0, 0, 0);
- }
- foreach (HingeJoint joint in trailerJoint)
- joint.connectedAnchor = new Vector3(0, 0, (offset + plus));
- }
- void OnDestroy()
- {
- SaveController.Instance.needToSave = false;
- #if !UNITY_EDITOR && UNITY_WSA_10_0
- uBluetooth.StopTimer();
- string Phone =uBluetooth.Phone;
- for (int i = kmlRightList.Count - 1; i >= 0; i--)
- {
- forKMLRight += kmlRightList[i];
- }
- PlayerPrefs.SetString("endDate" + SaveController.Instance.data.saveIndex, currentDate);
- PlayerPrefs.SetString("kml" + SaveController.Instance.data.saveIndex, forKMLLeft + forKMLRight);
- PlayerPrefs.SetString("phone" + SaveController.Instance.data.saveIndex, Phone);
- PlayerPrefs.SetString("phoneName" + SaveController.Instance.data.saveIndex, uBluetooth.friendlyName);
- if (!string.IsNullOrEmpty(forKMLLeft))
- {
- DownloadController.Instance.StartSendWork(SaveController.Instance.data.saveIndex, startingDate, currentDate, forKMLLeft + forKMLRight, SaveController.Instance.data.adress,
- SaveController.Instance.data.description, SaveController.Instance.data.user, SaveController.Instance.data.type,
- ((float)((float)SaveController.Instance.data.widthM + (float)SaveController.Instance.data.widthSM / 100)).ToString(), SaveController.Instance.data.distance.ToString(),
- SaveController.Instance.data.filledDistance.ToString(), SaveController.Instance.data.square.ToString(),
- "123", uBluetooth.friendlyName, SystemInfo.deviceUniqueIdentifier, Phone,false,SaveController.Instance.data);
- }
- if (!string.IsNullOrEmpty(kmlSquare))
- {
- PlayerPrefs.SetString("square" + SaveController.Instance.data.saveIndex, kmlSquare + kmlStartSquare);
- DownloadController.Instance.StartSendWork(SaveController.Instance.data.saveIndex, currentDate, kmlSquare + kmlStartSquare, SaveController.Instance.data.square.ToString(), SaveController.Instance.data.adress,
- SaveController.Instance.data.description, SaveController.Instance.data.user, SaveController.Instance.data.type,
- ((float)((float)SaveController.Instance.data.widthM + (float)SaveController.Instance.data.widthSM / 100)).ToString(), SaveController.Instance.data.distance.ToString(),
- SaveController.Instance.data.filledDistance.ToString(), SaveController.Instance.data.square.ToString(),
- "", SystemInfo.deviceModel, SystemInfo.deviceUniqueIdentifier, Phone, true,SaveController.Instance.data);
- }
- #else
- List<string> polygonsList = new List<string>();
- for (int i = kmlRightList.Count - 1; i >= 0; i--)
- {
- forKMLRight += kmlRightList[i];
- }
- PlayerPrefs.SetString("overlapSquare"+SaveController.Instance.data.saveIndex, overSquare.ToString());
- PlayerPrefs.SetString("endDate" + SaveController.Instance.data.saveIndex, currentDate);
- PlayerPrefs.SetString("kml" + SaveController.Instance.data.saveIndex, forKMLLeft + forKMLRight);
- PlayerPrefs.SetString("gpx" + SaveController.Instance.data.saveIndex, gpxString);
- PlayerPrefs.SetInt("minSpeed" + SaveController.Instance.data.saveIndex, minSpeed);
- PlayerPrefs.SetInt("maxSpeed" + SaveController.Instance.data.saveIndex, maxSpeed);
- string Phone = gpsActivityJavaClass.CallStatic<string>("GetPhone");
- PlayerPrefs.SetString("phone" + SaveController.Instance.data.saveIndex, Phone);
- if (!string.IsNullOrEmpty(forKMLLeft))
- {
- float averageSpeed = 0;
- for (int i = 0; i < speeds.Count; i++)
- {
- averageSpeed += speeds[i];
- }
- averageSpeed /= speeds.Count;
- PlayerPrefs.SetFloat("averageSpeed" + SaveController.Instance.data.saveIndex, averageSpeed);
- DownloadController.Instance.StartSendWork(SaveController.Instance.data.saveIndex, startingDate, currentDate, forKMLLeft + forKMLRight, SaveController.Instance.data.adress,
- SaveController.Instance.data.description, SaveController.Instance.data.user, SaveController.Instance.data.type,
- ((float)((float)SaveController.Instance.data.widthM + (float)SaveController.Instance.data.widthSM / 100)).ToString(), SaveController.Instance.data.distance.ToString(),
- SaveController.Instance.data.filledDistance.ToString(), SaveController.Instance.data.square.ToString(),
- Network.player.ipAddress, SystemInfo.deviceModel, SystemInfo.deviceUniqueIdentifier, Phone, false, SaveController.Instance.data,false,gpxString,minSpeed,maxSpeed,averageSpeed);
- }
- if (!string.IsNullOrEmpty(kmlSquare))
- {
- PlayerPrefs.SetString("square" + SaveController.Instance.data.saveIndex, kmlSquare + kmlStartSquare);
- DownloadController.Instance.StartSendWork(SaveController.Instance.data.saveIndex, currentDate, kmlSquare + kmlStartSquare, SaveController.Instance.data.square.ToString(), SaveController.Instance.data.adress,
- SaveController.Instance.data.description, SaveController.Instance.data.user, SaveController.Instance.data.type,
- ((float)((float)SaveController.Instance.data.widthM + (float)SaveController.Instance.data.widthSM / 100)).ToString(), SaveController.Instance.data.distance.ToString(),
- SaveController.Instance.data.filledDistance.ToString(), SaveController.Instance.data.square.ToString(),
- Network.player.ipAddress, SystemInfo.deviceModel, SystemInfo.deviceUniqueIdentifier, Phone, true, SaveController.Instance.data);
- }
- gpsActivityJavaClass.CallStatic<string>("UnpairBt");
- #endif
- }
- public void SavePositions()
- {
- foreach (var control in MainRightPanel.Instance.controllers)
- {
- control.EndDrawLine();
- }
- }
- private string ScreenShotName(int width, int height)
- {
- return string.Format("{0}/screenshots/screen_{1}x{2}_{3}.png",
- Application.dataPath,
- width, height,
- System.DateTime.Now.ToString("yyyy-MM-dd_HH-mm-ss"));
- }
- private void RenderNormalCamera()
- {
- if (MouseOrbitImproved.Instance.twoDCamera.activeSelf)
- {
- MouseOrbitImproved.Instance.twoDCamera.GetComponent<Camera>().Render();
- }
- else
- {
- MouseOrbitImproved.Instance.mCamera.GetComponent<Camera>().Render();
- }
- }
- public void GetScreenshot()
- {
- try
- {
- SquareController.Instance.CheckInFinish();
- //ScreenshotCamera.gameObject.SetActive(true);
- ScreenshotCamera.transform.position = GetScreenshotPosition();
- ScreenshotCamera.orthographicSize = GetOrthographicSize();
- if (ScreenshotCamera.orthographicSize == 0)
- ScreenshotCamera.orthographicSize = 100;
- if (ScreenshotCamera.orthographicSize <= 200)
- ScreenshotCamera.orthographicSize = 250;
- RenderTexture rt = new RenderTexture(Screen.width, Screen.height, 24);
- ScreenshotCamera.targetTexture = rt;
- Texture2D screenShot = new Texture2D(Screen.width, Screen.height, TextureFormat.ARGB32, false);
- ScreenshotCamera.Render();
- //RenderNormalCamera();
- RenderTexture.active = rt;
- screenShot.ReadPixels(new Rect(0, 0, Screen.width, Screen.height), 0, 0);
- ScreenshotCamera.targetTexture = null;
- RenderTexture.active = null; // JC: added to avoid errors
- byte[] bytes = screenShot.EncodeToPNG();
- string filename = Convert.ToBase64String(bytes);
- SaveController.Instance.InsertSmallScreenshot(SaveController.Instance.data.saveIndex.ToString(), filename);
- GetBigScreenshot();
- }
- catch (Exception ex)
- {
- PromptWindow.Instance._async.allowSceneActivation = true;
- }
- }
- private void GenerateSendData()
- {
- string toSend = "$VT,";
- if (IndicatorPanel.Instance.metersText.text != "0")
- {
- if (speed > speedLimit)
- {
- if (IndicatorPanel.Instance.arrow.localEulerAngles.z > 180)
- {
- toSend += "+" + IndicatorPanel.Instance.metersText.text;
- }
- else
- {
- toSend += "-" + IndicatorPanel.Instance.metersText.text;
- }
- }
- else
- {
- toSend += "0";
- }
- }
- else
- {
- toSend += IndicatorPanel.Instance.metersText.text;
- }
- if (!MainRightPanel.Instance.Paint || speed < speedLimit)
- {
- toSend += ",0,0,0,0,0,0,0,0,0";
- float width = (float)SaveController.Instance.data.widthM + (float)SaveController.Instance.data.widthSM / 100;
- float side = (float)SaveController.Instance.data.xOffset + (float)SaveController.Instance.data.xSMOffset / 100;
- float distanceAntena = (float)SaveController.Instance.data.zOffset + (float)SaveController.Instance.data.zSMOffset / 100;
- string additional = "," + (int)speed + "," + width + "," + distanceAntena + ",";
- if (side > 0)
- {
- additional += "+" + side;
- }
- else
- {
- additional += side;
- }
- toSend += additional;
- toSend += "*";
- }
- else
- {
- for (int i = 0; i < 9; i++)
- {
- if (i < TogglesPanel.Instance.toggleCount && TogglesPanel.Instance.toggleCount != 1)
- {
- toSend += ",";
- if (TogglesPanel.Instance.leftOutlines[i].IsWorking)
- {
- toSend += "1";
- }
- else
- {
- toSend += "0";
- }
- }
- else if (i < TogglesPanel.Instance.toggleCount && TogglesPanel.Instance.toggleCount == 1)
- {
- toSend += ",1";
- }
- else
- {
- toSend += ",0";
- }
- }
- float width = (float)SaveController.Instance.data.widthM + (float)SaveController.Instance.data.widthSM / 100;
- float side = (float)SaveController.Instance.data.xOffset + (float)SaveController.Instance.data.xSMOffset / 100;
- float distanceAntena = (float)SaveController.Instance.data.zOffset + (float)SaveController.Instance.data.zSMOffset / 100;
- string additional = "," + (int)speed + "," + width + "," + distanceAntena + ",";
- if (side > 0)
- {
- additional += "+" + side;
- }
- else
- {
- additional += side;
- }
- toSend += additional;
- toSend += "*";
- }
- toSend += getChecksum(toSend) + "\r\n";
- #if UNITY_EDITOR || !UNITY_WSA_10_0
- if (gpsActivityJavaClass != null && PlayerPrefs.GetInt("VelestorDevice") == 1 &&
- PlayerPrefs.GetInt("control") == 1)
- {
- gpsActivityJavaClass.CallStatic<string>("SendData", toSend);
- }
- #else
- if(PlayerPrefs.GetInt("VelestorDevice") == 1 && PlayerPrefs.GetInt("control") == 1)
- {
- uBluetooth.Send(toSend);
- }
- #endif
- }
- private static string getChecksum(string sentence)
- {
- int checksum = Convert.ToByte(sentence[sentence.IndexOf('$') + 1]);
- for (int i = sentence.IndexOf('$') + 2; i < sentence.IndexOf('*'); i++)
- {
- checksum ^= Convert.ToByte(sentence[i]);
- }
- return checksum.ToString("X2");
- }
- private void GetBigScreenshot()
- {
- try
- {
- ScreenshotCamera.transform.position = GetScreenshotPosition();
- ScreenshotCamera.orthographicSize = GetOrthographicSize(true);
- if (ScreenshotCamera.orthographicSize == 0)
- ScreenshotCamera.orthographicSize = 100;
- RenderTexture rt = new RenderTexture(640, 720, 24);
- ScreenshotCamera.targetTexture = rt;
- ScreenshotCamera.Render();
- //RenderNormalCamera();
- ScreenshotCamera.targetTexture = rt;
- Texture2D screenShot = new Texture2D(640, 720, TextureFormat.RGBA32, false);
- RenderTexture.active = rt;
- screenShot.ReadPixels(new Rect(0, 0, 640, 720), 0, 0);
- ScreenshotCamera.targetTexture = null;
- RenderTexture.active = null; // JC: added to avoid errors
- byte[] bytes = screenShot.EncodeToPNG();
- string filename = Convert.ToBase64String(bytes);
- SaveController.Instance.InsertBigScreenshot(SaveController.Instance.data.saveIndex, filename);
- PromptWindow.Instance._async.allowSceneActivation = true;
- }
- catch (Exception ex)
- {
- PromptWindow.Instance._async.allowSceneActivation = true;
- }
- }
- private Vector3 GetScreenshotPosition()
- {
- return new Vector3((minX + maxX) / 2, 100, (minY + maxY) / 2);
- }
- private float GetOrthographicSize(bool isBig = false)
- {
- ScreenshotCamera.transform.eulerAngles = new Vector3(ScreenshotCamera.transform.eulerAngles.x, 180, ScreenshotCamera.transform.eulerAngles.z);
- float x = (maxX - minX) / 5f;
- float y = (maxY - minY) / 5f;
- if (isBig)
- {
- x = x * 3;
- y = y * 3;
- }
- if (x < 0)
- x = x * -1;
- if (y < 0)
- y = y * -1;
- x *= 1.5f;
- y *= 1.5f;
- if (x > y)
- {
- if (isBig)
- ScreenshotCamera.transform.eulerAngles = new Vector3(ScreenshotCamera.transform.eulerAngles.x, -90, ScreenshotCamera.transform.eulerAngles.z);
- return x;
- }
- else
- {
- if (!isBig)
- ScreenshotCamera.transform.eulerAngles = new Vector3(ScreenshotCamera.transform.eulerAngles.x, -90, ScreenshotCamera.transform.eulerAngles.z);
- return y;
- }
- }
- bool firstPos = true;
- private List<Vector2> positionsForDelta = new List<Vector2>();
- private List<float> speedForDelta = new List<float>();
- private int tempPointIndex = 0;
- public List<GameObject> selectedPoints = new List<GameObject>();
- private bool SendLimit = false;
- private string checkDate = "";
- private int timeToDisconnect = 0;
- private IEnumerator GetPositions()
- {
- while (true)
- {
- #if UNITY_EDITOR || !UNITY_WSA_10_0
- if (gpsActivityJavaClass != null)
- {
- string debug = gpsActivityJavaClass.CallStatic<string>("GetText");
- debugText.text = debug;
- string speedMessage = gpsActivityJavaClass.CallStatic<string>("getSpeed");
- string getConnected = gpsActivityJavaClass.CallStatic<string>("getConnected");
- if (getConnected != "true")
- {
- yield return null;
- }
- if (speedMessage != "Success")
- {
- loadingScreen.SetActive(false);
- speed = float.Parse(speedMessage);
- speedText.text = Math.Round(speed, 0).ToString();
- loadingScreen.SetActive(false);
- if (IsConnected == false && PlayerPrefs.GetString("deviceId").Length != 10)
- {
- gpsActivityJavaClass.CallStatic<string>("SendData", PlayerPrefs.GetString("deviceSpeed") + "\r\n");
- }
- IsConnected = true;
- }
- else
- {
- SendLimit = false;
- IsConnected = false;
- loadingScreen.SetActive(true);
- //speedText.text = "Скорость не доступна. Соеденение";
- speedText.text = "0";
- sattelitesCountText.text = LanguageManager.Instance.GetTextValue("SattelitesLbl") + "-";
- //hdop2Text.text = "HDOP: " + "-";
- string mac = PlayerPrefs.GetString("mac");
- string pin = PlayerPrefs.GetString("pin");
- string deviceName = PlayerPrefs.GetString("device");
- string test = gpsActivityJavaClass.CallStatic<string>("SetAdress", mac, pin, deviceName);
- //SceneManager.LoadScene(1);
- yield return null;
- }
- if (IsConnected)
- {
- AndroidJavaObject bjObject = gpsActivityJavaClass.CallStatic<AndroidJavaObject>("getSattelites");
- if (bjObject != null)
- {
- int SattelitesCount = bjObject.Get<int>("SattelitesCount");
- if (IsConnected)
- sattelitesCountText.text = LanguageManager.Instance.GetTextValue("SattelitesLbl") + SattelitesCount.ToString();
- }
- }
- }
- else
- {
- AndroidJNI.AttachCurrentThread();
- gpsActivityJavaClass = new AndroidJavaClass("com.velestor.tractor.GPSTest");
- }
- #else
- try
- {
- if (!isDemo)
- {
- float speedMessage = uBluetooth.GetSpeed();
- if (uBluetooth.isConnected)
- {
- loadingScreen.SetActive(false);
- speed = speedMessage;
- speedText.text = Math.Round(speed, 0).ToString();
- loadingScreen.SetActive(false);
- IsConnected = true;
- }
- else
- {
- SendLimit = false;
- IsConnected = false;
- loadingScreen.SetActive(true);
- //speedText.text = "Скорость не доступна. Соеденение";
- speedText.text = "0";
- sattelitesCountText.text = LanguageManager.Instance.GetTextValue("SattelitesLbl") + "-";
- hdop2Text.text = "HDOP: " + "-";
- }
- if (IsConnected)
- {
- float SattelitesCount = uBluetooth.GetSattelites();
- if (IsConnected)
- sattelitesCountText.text = LanguageManager.Instance.GetTextValue("SattelitesLbl") + SattelitesCount.ToString();
- string toSend = PlayerPrefs.GetString("deviceSpeed") + "\r\n";
- uBluetooth.Send(toSend);
- }
- }
- else
- {
- if (uBluetooth.isConnected)
- {
- if (toSendTime >= 50)
- {
- string toSend = PlayerPrefs.GetString("deviceSpeed") + "\r\n";
- uBluetooth.Send(toSend);
- toSendTime = 0;
- }
- GenerateSendData();
- toSendTime++;
- }
- }
- }
- catch (Exception ex)
- {
- }
- #endif
- #if UNITY_EDITOR || !UNITY_WSA_10_0
- yield return new WaitForSeconds(1);
- #else
- yield return new WaitForSeconds(0.1f);
- #endif
- }
- }
- private int pointsCount = 0;
- private int pointsCountt = 0;
- private float time = 0;
- private int toSendTime = 0;
- private IEnumerator GetPositionsFromBluetooth()
- {
- while (true)
- {
- if (IsConnected)
- {
- #if UNITY_EDITOR || !UNITY_WSA_10_0
- if (gpsActivityJavaClass != null)
- {
- AndroidJavaObject ajObject = gpsActivityJavaClass.CallStatic<AndroidJavaObject>("getLocation");
- if (ajObject != null)
- {
- double lat = ajObject.Get<double>("Latitude");
- double lon = ajObject.Get<double>("Longitude");
- double ac = ajObject.Get<float>("Quality");
- double hdop = ajObject.Get<float>("HDOP");
- hdop2Text.text = "HDOP: " + Math.Round(hdop, 1).ToString();
- altitude = float.Parse(gpsActivityJavaClass.CallStatic<string>("GetAltitude"));
- Vector2 newPos = new Vector2(KMLController.lonToX((float)lon) * 50, KMLController.latToZ((float)lat) * 60f);
- if (lat != 0 && lon != 0)
- {
- if (!SendLimit)
- {
- if (gpsActivityJavaClass != null && PlayerPrefs.GetString("deviceId").Length != 10)
- {
- gpsActivityJavaClass.CallStatic<string>("SendData", PlayerPrefs.GetString("deviceSpeed") + "\r\n");
- SendLimit = true;
- }
- }
- if (firstPosition == Vector2.zero)
- {
- if (SaveController.Instance.data.startingPos != Vector2.zero)
- {
- firstPosition = SaveController.Instance.data.startingPos;
- }
- else
- {
- SaveController.Instance.data.startingPos = newPos;
- firstPosition = newPos;
- SaveController.Instance.InsertFristPosition(firstPosition);
- }
- }
- var point = Instantiate(NextPoint);
- point.gameObject.transform.SetParent(parent.transform, false);
- point.transform.localRotation = NextPoint.gameObject.transform.localRotation;
- point.transform.localPosition = new Vector3(firstPosition.x - newPos.x, NextPoint.gameObject.transform.localPosition.y, firstPosition.y - newPos.y);
- //Debug.Log("xpn: " + (firstPosition.x - newPos.x) + " ynp: " + (firstPosition.y - newPos.y));
- if (isContinue && !setPositionFromSave)
- {
- transform.position = new Vector3(point.transform.position.x, transform.position.y, point.transform.position.z);
- setPositionFromSave = true;
- }
- if (speed > speedLimit)// && speed > 0.01f)
- {
- Points.Add(point);
- currentTime = 0;
- pointsCount++;
- if (pointsCount >= pointsDealey)
- {
- point.transform.position = CreateSector();
- if (selectedPoints.Count >= sectorsDealey)
- {
- bool movingState = isMoving;
- if (!isMoving)
- {
- transform.LookAt(point.transform);
- }
- GameObject prevSector = NextPoint;
- GameObject newPoint = GetFinestPosition();
- prevSector.GetComponent<MeshRenderer>().material = PassedPointMaterial;
- if (movedCount > 2 && CheckWorkType.Instance.typeId == 8)
- {
- float widthM = (float)SaveController.Instance.data.widthM;
- float widthSM = (float)SaveController.Instance.data.widthSM / 100;
- float delt = (widthM + widthSM) / 2;
- double xM =
- KMLController.xToLon(
- (-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).x +
- firstPosition.x) / 50);
- double yM =
- KMLController.zToLat(
- (-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).z +
- firstPosition.y) / 60);
- gpxString += xM + "," + yM + "," + Math.Round(speed, 2) + "," + altitude + "," + currentDate +
- " \r\n";
- }
- if (MainRightPanel.Instance.Paint)
- {
- if (needToAddPosition)
- {
- float delt = (SaveController.Instance.data.widthM + SaveController.Instance.data.widthSM / 100) / 2;
- double xR = KMLController.xToLon((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).x + firstPosition.x) / 50);
- double yR = KMLController.zToLat((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).z + firstPosition.y) / 60);
- double xL = KMLController.xToLon((-(arrowTransform.position + (-arrowTransform.up * (delt * 6.278353f))).x + firstPosition.x) / 50);
- double yL = KMLController.zToLat((-(arrowTransform.position + (-arrowTransform.up * (delt * 6.278353f))).z + firstPosition.y) / 60);
- if (CheckWorkType.Instance.typeId == 8)
- {
- if (!SquareController.Instance.newMode ||
- (SquareController.Instance.newMode &&
- SquareController.InSquare(
- SquareController.Instance.linePositions.ToArray(),
- transform.position)))
- {
- forGoogleString += lat + "," + lon + "|";
- forKMLLeft += xL + "," + yL + "," + altitude + " \r\n";
- kmlRightList.Add(xR + "," + yR + "," + altitude + " \r\n");
- forKML += lat + "," + lon + "," + altitude + " \r\n";
- }
- double xM = KMLController.xToLon((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).x + firstPosition.x) / 50);
- double yM = KMLController.zToLat((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).z + firstPosition.y) / 60);
- //gpxString += xM + "," + yM + "," + Math.Round(speed, 2) + ","+altitude+","+currentDate+" \r\n";
- minSpeed = SpeedWindow.Instance.CurrentMinSpeed;
- maxSpeed = SpeedWindow.Instance.CurrentMaxSpeed;
- }
- else
- {
- if (!SquareController.Instance.newMode ||
- (SquareController.Instance.newMode &&
- SquareController.InSquare(
- SquareController.Instance.linePositions.ToArray(),
- transform.position)))
- {
- forGoogleString += lat + "," + lon + "|";
- forKMLLeft += xL + "," + yL + ",0 \r\n";
- kmlRightList.Add(xR + "," + yR + ",0 \r\n");
- forKML += lat + "," + lon + ",0 \r\n";
- }
- }
- PlayerPrefs.SetString("map" + SaveController.Instance.data.saveIndex, forGoogleString);
- needToAddPosition = false;
- }
- else
- {
- needToAddPosition = true;
- }
- speeds.Add(speed);
- }
- if (SquareController.Instance.isTracked)
- {
- if (needToAddSquare)
- {
- if (CheckWorkType.Instance.typeId == 8)
- {
- kmlSquare += lon + "," + lat + "," + altitude + " \r\n";
- }
- else
- {
- kmlSquare += lon + "," + lat + ",0 \r\n";
- }
- if (string.IsNullOrEmpty(kmlStartSquare))
- {
- kmlStartSquare = kmlSquare;
- }
- needToAddSquare = false;
- }
- else
- {
- needToAddSquare = true;
- }
- }
- if (newPoint != null)
- {
- bool needToRotate = false;
- NextPoint = newPoint;
- if (NextPoint.transform.position != prevSector.transform.position)
- {
- prevSector.transform.LookAt(NextPoint.transform);
- NextPoint.transform.rotation = prevSector.transform.rotation;
- needToRotate = true;
- }
- int i = selectedPoints.IndexOf(NextPoint);
- for (int k = i; k >= 0; k--)
- {
- selectedPoints.RemoveAt(k);
- }
- if (isMoving)
- {
- if (trailer[0].transform.parent != null && ponitCount == 3)
- {
- //SetZOffset(normalOffset);
- StartCoroutine(SmoothChangeJoint(normalOffset + 1, Gz * ((pointsDealey) * (sectorsDealey - selectedPoints.Count + 1)) * 2));// SetZOffset(normalOffset);
- ponitCount = 0;
- transform.LookAt(NextPoint.transform);
- transform.LookAt(NextPoint.transform);
- transform.LookAt(NextPoint.transform);
- transform.LookAt(NextPoint.transform);
- foreach (GameObject go in trailer)
- go.transform.SetParent(null);
- MainRightPanel.Instance.ContinueDraw();
- isBack = false;
- }
- else if (trailer[0].transform.parent != null && ponitCount < 3)
- {
- //transform.LookAt(NextPoint.transform);
- //transform.position = NextPoint.transform.position;
- ponitCount++;
- }
- }
- Vector3 heading = NextPoint.transform.position - transform.position;
- float dot = Vector3.Dot(heading, transform.forward);
- if (dot < -1 && trailer[0].transform.parent == null)
- {
- /* Debug.Log("Dot: " + dot);
- StopCoroutine("LookToEuler");
- MainRightPanel.Instance.EndDraw();
- foreach (GameObject go in trailer)
- {
- go.transform.SetParent(transform);
- go.transform.localEulerAngles = Vector3.zero;
- }
- SetZOffset(0, 0);
- transform.LookAt(NextPoint.transform);
- */
- }
- isMoving = true;
- CheckForMinMax(new Vector2(NextPoint.transform.position.x, NextPoint.transform.position.z));
- if (!isBack)
- {
- float angle = AngleSigned(transform.forward, NextPoint.transform.position - transform.position, transform.up);
- if (movCor != null)
- {
- //StopCoroutine(movCor);
- }
- movCor = StartCoroutine(MoveToPosition(transform, prevSector.transform, NextPoint.transform.position, Gz * (pointsDealey * (sectorsDealey - selectedPoints.Count + 1))));
- string androidDate = gpsActivityJavaClass.CallStatic<String>("GetDate");
- if (string.IsNullOrEmpty(startingDate) && !string.IsNullOrEmpty(androidDate))
- {
- string[] dd = androidDate.Split(new[] { ' ' },
- StringSplitOptions.RemoveEmptyEntries);
- string d = string.Format("{0}/{1}/{2} {3}:{4}:{5}",
- dd[0].Substring(0, 2), dd[0].Substring(2, 2),
- dd[0].Substring(4, 2),
- dd[1].Substring(0, 2), dd[1].Substring(2, 2),
- dd[1].Substring(4, 2));
- startingDate = d;
- PlayerPrefs.SetString("date" + SaveController.Instance.data.saveIndex, startingDate);
- }
- else
- {
- string[] dd = androidDate.Split(new[] { ' ' },
- StringSplitOptions.RemoveEmptyEntries);
- string d = string.Format("{0}/{1}/{2} {3}:{4}:{5}",
- dd[0].Substring(0, 2), dd[0].Substring(2, 2),
- dd[0].Substring(4, 2),
- dd[1].Substring(0, 2), dd[1].Substring(2, 2),
- dd[1].Substring(4, 2));
- currentDate = d;
- if (currentDate.EndsWith("18"))
- {
- //PlayerPrefs.SetInt("NeedUpdate", 1);
- }
- }
- if (firstPos)
- {
- SetZOffset(normalOffset);
- foreach (GameObject go in trailer)
- go.transform.SetParent(null);
- SquareController.Instance.CheckAfterMove();
- CurveController.Instance.CheckAfterMove();
- ParalelsController.Instance.CheckAfterMove();
- }
- firstPos = false;
- if (needToRotate)
- {
- if (rotCor != null)
- StopCoroutine(rotCor);
- if (dot > -4)
- {
- rotCor = StartCoroutine(LookToEuler(NextPoint.transform.rotation, Gz * ((pointsDealey) * (sectorsDealey - selectedPoints.Count + 1))));
- if (trailer[0].transform.parent != null)
- {
- trailer[0].transform.SetParent(transform);
- trailer[0].transform.localEulerAngles = Vector3.zero;
- }
- }
- else
- {
- if (trailer[0].transform.parent == null)
- {
- if (rotCor != null)
- StopCoroutine(rotCor);
- StopCoroutine(movCor);
- MainRightPanel.Instance.EndDraw();
- foreach (GameObject go in trailer)
- {
- go.transform.SetParent(transform);
- go.transform.localEulerAngles = Vector3.zero;
- StopCoroutine("SmoothChangeJoint");
- //SetZOffset(0, 0);
- startingRotate = trackedPoint.rotation;
- StartCoroutine(SmoothChangeJoint(0, Gz * ((pointsDealey) * (sectorsDealey - selectedPoints.Count + 1))));// SetZOffset(normalOffset);//SetZOffset(0, 0);
- ponitCount = 0;
- //transform.LookAt(NextPoint.transform);
- }
- isBack = true;
- }
- }
- }
- }
- else
- {
- StopCoroutine(movCor);
- }
- /*else
- {
- }*/
- Points.Clear();
- }
- }
- pointsCount = 0;
- }
- else if (!isMoving && selectedPoints.Count == 1 && point.transform.position != transform.position)
- {
- }
- if (Points.Count >= 100)
- {
- Points.RemoveRange(0, 50);
- }
- }
- else
- {
- StopCoroutine("MoveToPosition");
- }
- }
- if (sendCount == 5)
- {
- GenerateSendData();
- sendCount = 0;
- }
- sendCount++;
- }
- }
- #else
- PositionModel ajObject = uBluetooth.GetPosition();
- altitude = uBluetooth.altitude;
- if (ajObject != null)
- {
- double lat = ajObject.lat;
- double lon = ajObject.lon;
- double ac = 0;
- double hdop = ajObject.hdop;
- if (IsConnected)
- hdop2Text.text = "HDOP: " + Math.Round(hdop, 1).ToString();
- Vector2 newPos = new Vector2(KMLController.lonToX(lon) * 50, KMLController.latToZ(lat) * 60);
- if (lat != 0 && lon != 0)
- {
- if (firstPosition == Vector2.zero)
- {
- if (SaveController.Instance.data.startingPos != Vector2.zero)
- {
- firstPosition = SaveController.Instance.data.startingPos;
- }
- else
- {
- SaveController.Instance.data.startingPos = newPos;
- firstPosition = newPos;
- SaveController.Instance.InsertFristPosition(firstPosition);
- }
- }
- var point = Instantiate(NextPoint);
- point.gameObject.transform.SetParent(parent.transform, false);
- point.transform.localRotation = NextPoint.gameObject.transform.localRotation;
- point.transform.localPosition = new Vector3(firstPosition.x - newPos.x, NextPoint.gameObject.transform.localPosition.y, firstPosition.y - newPos.y);
- //Debug.Log("xpn: " + (firstPosition.x - newPos.x) + " ynp: " + (firstPosition.y - newPos.y));
- if (isContinue && !setPositionFromSave)
- {
- transform.position = new Vector3(point.transform.position.x,transform.position.y,point.transform.position.z);
- setPositionFromSave = true;
- }
- if (speed > speedLimit)// && speed > 0.01f)
- {
- Points.Add(point);
- currentTime = 0;
- pointsCount++;
- if (pointsCount >= pointsDealey)
- {
- point.transform.position = CreateSector();
- if (selectedPoints.Count >= sectorsDealey)
- {
- bool movingState = isMoving;
- if (!isMoving)
- {
- transform.LookAt(point.transform);
- }
- GameObject prevSector = NextPoint;
- GameObject newPoint = GetFinestPosition();
- prevSector.GetComponent<MeshRenderer>().material = PassedPointMaterial;
- if (movedCount > 2 && CheckWorkType.Instance.typeId == 8)
- {
- float widthM = (float) SaveController.Instance.data.widthM;
- float widthSM = (float) SaveController.Instance.data.widthSM / 100;
- float delt = (widthM + widthSM) / 2;
- double xM =
- KMLController.xToLon(
- (-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).x +
- firstPosition.x) / 50);
- double yM =
- KMLController.zToLat(
- (-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).z +
- firstPosition.y) / 60);
- gpxString += xM + "," + yM + "," + Math.Round(speed, 2) + "," + altitude + "," + currentDate +
- " \r\n";
- }
- if (MainRightPanel.Instance.Paint)
- {
- if (needToAddPosition)
- {
- float delt = (SaveController.Instance.data.widthM + SaveController.Instance.data.widthSM / 100) / 2;
- double xR = KMLController.xToLon((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).x + firstPosition.x) / 50);
- double yR = KMLController.zToLat((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).z + firstPosition.y) / 60);
- double xL = KMLController.xToLon((-(arrowTransform.position + (-arrowTransform.up * (delt * 6.278353f))).x + firstPosition.x) / 50);
- double yL = KMLController.zToLat((-(arrowTransform.position + (-arrowTransform.up * (delt * 6.278353f))).z + firstPosition.y) / 60);
- if (CheckWorkType.Instance.typeId == 8)
- {
- if (!SquareController.Instance.newMode ||
- (SquareController.Instance.newMode &&
- SquareController.InSquare(SquareController.Instance.linePositions.ToArray(),
- transform.position)))
- {
- forGoogleString += lat + "," + lon + "|";
- forKMLLeft += xL + "," + yL + "," + altitude + " \r\n";
- kmlRightList.Add(xR + "," + yR + "," + altitude + " \r\n");
- forKML += lat + "," + lon + "," + altitude + " \r\n";
- }
- double xM = KMLController.xToLon((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).x + firstPosition.x) / 50);
- double yM = KMLController.zToLat((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).z + firstPosition.y) / 60);
- //gpxString += xM + "," + yM + "," + Math.Round(speed, 2) + ","+altitude+","+currentDate+" \r\n";
- minSpeed = SpeedWindow.Instance.CurrentMinSpeed;
- maxSpeed = SpeedWindow.Instance.CurrentMaxSpeed;
- }
- else
- {
- forGoogleString += lat + "," + lon + "|";
- forKMLLeft += xL + "," + yL + ",0 \r\n";
- kmlRightList.Add(xR + "," + yR + ",0 \r\n");
- forKML += lat + "," + lon + ",0 \r\n";
- }
- speeds.Add(speed);
- PlayerPrefs.SetString("map" + SaveController.Instance.data.saveIndex, forGoogleString);
- needToAddPosition = false;
- }
- else
- {
- needToAddPosition = true;
- }
- }
- if (SquareController.Instance.isTracked)
- {
- if (needToAddSquare)
- {
- if (CheckWorkType.Instance.typeId != 8)
- {
- kmlSquare += lat + "," + lon + ",0 \r\n";
- }else
- {
- kmlSquare += lat + "," + lon + ","+altitude+" \r\n";
- }
- if (string.IsNullOrEmpty(kmlStartSquare))
- {
- kmlStartSquare = kmlSquare;
- }
- needToAddSquare = false;
- }
- else
- {
- needToAddSquare = true;
- }
- }
- if (newPoint != null)
- {
- bool needToRotate = false;
- NextPoint = newPoint;
- if (NextPoint.transform.position != prevSector.transform.position)
- {
- prevSector.transform.LookAt(NextPoint.transform);
- NextPoint.transform.rotation = prevSector.transform.rotation;
- needToRotate = true;
- }
- int i = selectedPoints.IndexOf(NextPoint);
- for (int k = i; k >= 0; k--)
- {
- selectedPoints.RemoveAt(k);
- }
- if (isMoving)
- {
- if (trailer[0].transform.parent != null && ponitCount == 3)
- {
- //SetZOffset(normalOffset);
- StartCoroutine(SmoothChangeJoint(normalOffset + 1, Gz * ((pointsDealey) * (sectorsDealey - selectedPoints.Count + 1)) * 2));// SetZOffset(normalOffset);
- ponitCount = 0;
- transform.LookAt(NextPoint.transform);
- transform.LookAt(NextPoint.transform);
- transform.LookAt(NextPoint.transform);
- transform.LookAt(NextPoint.transform);
- foreach (GameObject go in trailer)
- go.transform.SetParent(null);
- MainRightPanel.Instance.ContinueDraw();
- isBack = false;
- }
- else if (trailer[0].transform.parent != null && ponitCount < 3)
- {
- //transform.LookAt(NextPoint.transform);
- //transform.position = NextPoint.transform.position;
- ponitCount++;
- }
- }
- Vector3 heading = NextPoint.transform.position - transform.position;
- float dot = Vector3.Dot(heading, transform.forward);
- if (dot < -1 && trailer[0].transform.parent == null)
- {
- /* Debug.Log("Dot: " + dot);
- StopCoroutine("LookToEuler");
- MainRightPanel.Instance.EndDraw();
- foreach (GameObject go in trailer)
- {
- go.transform.SetParent(transform);
- go.transform.localEulerAngles = Vector3.zero;
- }
- SetZOffset(0, 0);
- transform.LookAt(NextPoint.transform);
- */
- }
- isMoving = true;
- CheckForMinMax(new Vector2(NextPoint.transform.position.x, NextPoint.transform.position.z));
- if (!isBack)
- {
- float angle = AngleSigned(transform.forward, NextPoint.transform.position - transform.position, transform.up);
- if (movCor != null)
- {
- //StopCoroutine(movCor);
- }
- movCor = StartCoroutine(MoveToPosition(transform, prevSector.transform, NextPoint.transform.position, Gz * (pointsDealey * (sectorsDealey - selectedPoints.Count + 1))));
- if (string.IsNullOrEmpty(uBluetooth.currentData) && !string.IsNullOrEmpty(uBluetooth.currentData))
- {
- startingDate = uBluetooth.currentData;
- PlayerPrefs.SetString("date" + SaveController.Instance.data.saveIndex, startingDate);
- }
- else
- {
- currentDate = uBluetooth.currentData;
- if (currentDate.EndsWith("18"))
- {
- //PlayerPrefs.SetInt("NeedUpdate", 1);
- }
- }
- if (firstPos)
- {
- SetZOffset(normalOffset);
- foreach (GameObject go in trailer)
- go.transform.SetParent(null);
- SquareController.Instance.CheckAfterMove();
- CurveController.Instance.CheckAfterMove();
- ParalelsController.Instance.CheckAfterMove();
- }
- firstPos = false;
- if (needToRotate)
- {
- if (rotCor != null)
- StopCoroutine(rotCor);
- if (dot > -4)
- {
- rotCor = StartCoroutine(LookToEuler(NextPoint.transform.rotation, Gz * ((pointsDealey) * (sectorsDealey - selectedPoints.Count + 1))));
- if (trailer[0].transform.parent != null)
- {
- trailer[0].transform.SetParent(transform);
- trailer[0].transform.localEulerAngles = Vector3.zero;
- }
- }
- else
- {
- if (trailer[0].transform.parent == null)
- {
- if (rotCor != null)
- StopCoroutine(rotCor);
- StopCoroutine(movCor);
- MainRightPanel.Instance.EndDraw();
- foreach (GameObject go in trailer)
- {
- go.transform.SetParent(transform);
- go.transform.localEulerAngles = Vector3.zero;
- StopCoroutine("SmoothChangeJoint");
- //SetZOffset(0, 0);
- startingRotate = trackedPoint.rotation;
- StartCoroutine(SmoothChangeJoint(0, Gz * ((pointsDealey) * (sectorsDealey - selectedPoints.Count + 1))));// SetZOffset(normalOffset);//SetZOffset(0, 0);
- ponitCount = 0;
- //transform.LookAt(NextPoint.transform);
- }
- isBack = true;
- }
- }
- }
- }
- else
- {
- StopCoroutine(movCor);
- }
- /*else
- {
- }*/
- Points.Clear();
- }
- }
- pointsCount = 0;
- }
- else if (!isMoving && selectedPoints.Count == 1 && point.transform.position != transform.position)
- {
- }
- if (Points.Count >= 100)
- {
- Points.RemoveRange(0, 50);
- }
- }
- else
- {
- StopCoroutine("MoveToPosition");
- }
- }
- if (sendCount == 1)
- {
- GenerateSendData();
- sendCount = 0;
- }
- sendCount++;
- }
- #endif
- }
- yield return new WaitForSeconds(Gz);
- }
- }
- private int sendCount;
- private int ponitCount = 0;
- private Coroutine rotCor = null;
- private Coroutine movCor = null;
- public bool isBack = false;
- private float altitude = 0;
- private bool setPositionFromSave = false;
- private IEnumerator GetPositionsFromNMEA()
- {
- NMEAParser.Instance.StartGPS();
- while (true)
- {
- GPSData ajObject = NMEAParser.Instance.newData;
- if (ajObject != null)
- {
- float xp = KMLController.lonToX(ajObject.position.x) * 50f;
- float yp = KMLController.latToZ(ajObject.position.y) * 60f;
- altitude = ajObject.altitude;
- Vector2 newPos = new Vector2(xp, yp);
- if (SaveController.Instance.data.debugData.pointsDealey == 0.1f)
- newPos = new Vector2(newPos.x + UnityEngine.Random.Range(-1.03f, 1.03f), newPos.y + UnityEngine.Random.Range(-1.03f, 1.03f));
- speed = ajObject.speed;
- //if (ajObject.position.x != 0 && ajObject.position.y != 0)
- //{
- // if (!CachedDynamicTileManager.Instance.Started)
- // {
- // CachedDynamicTileManager.Instance.Latitude = ajObject.position.y;
- // CachedDynamicTileManager.Instance.Longitude = ajObject.position.x;
- // CachedDynamicTileManager.Instance.StartParse();
- // }
- //}
- speedText.text = Math.Round(speed, 1).ToString();
- if (ajObject.position.x != 0 && ajObject.position.y != 0 && speed > 1f)
- {
- if (!SendLimit)
- {
- #if UNITY_EDITOR || !UNITY_WSA_10_0
- if (gpsActivityJavaClass != null && PlayerPrefs.GetString("deviceId").Length != 10)
- {
- gpsActivityJavaClass.CallStatic<string>("SendData", PlayerPrefs.GetString("deviceSpeed") + "\r\n");
- SendLimit = true;
- }
- #else
- #endif
- }
- if (firstPosition == Vector2.zero)
- {
- if (SaveController.Instance.data.startingPos != Vector2.zero)
- {
- firstPosition = SaveController.Instance.data.startingPos;
- }
- else
- {
- SaveController.Instance.data.startingPos = newPos;
- firstPosition = newPos;
- SaveController.Instance.InsertFristPosition(firstPosition);
- }
- }
- var point = Instantiate(NextPoint);
- point.gameObject.transform.SetParent(parent.transform, false);
- point.transform.localRotation = NextPoint.gameObject.transform.localRotation;
- point.transform.localPosition = new Vector3(firstPosition.x - newPos.x, NextPoint.transform.position.y, firstPosition.y - newPos.y);
- //Debug.Log("xpn: " + (firstPosition.x - newPos.x).ToString("F4") + " ynp: " + (firstPosition.y - newPos.y).ToString("F4"));
- if (speed > speedLimit)// && speed > 0.01f)
- {
- Points.Add(point);
- currentTime = 0;
- pointsCount++;
- if (movedCount > 2 && CheckWorkType.Instance.typeId == 8)
- {
- float widthM = (float)SaveController.Instance.data.widthM;
- float widthSM = (float)SaveController.Instance.data.widthSM / 100;
- float delt = (widthM + widthSM) / 2;
- double xM =
- KMLController.xToLon(
- (-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).x +
- firstPosition.x) / 50);
- double yM =
- KMLController.zToLat(
- (-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).z +
- firstPosition.y) / 60);
- gpxString += xM + "," + yM + "," + Math.Round(speed, 2) + "," + altitude + "," + currentDate +
- " \r\n";
- }
- if (MainRightPanel.Instance.Paint && movedCount > 2)
- {
- if (needToAddPosition)
- {
- float widthM = (float)SaveController.Instance.data.widthM;
- float widthSM = (float)SaveController.Instance.data.widthSM / 100;
- float delt = (widthM + widthSM) / 2;
- double xR = KMLController.xToLon((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).x + firstPosition.x) / 50);
- double yR = KMLController.zToLat((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).z + firstPosition.y) / 60);
- double xL = KMLController.xToLon((-(arrowTransform.position + (-arrowTransform.up * (delt * 6.278353f))).x + firstPosition.x) / 50);
- double yL = KMLController.zToLat((-(arrowTransform.position + (-arrowTransform.up * (delt * 6.278353f))).z + firstPosition.y) / 60);
- LineDrawController rightCub = Bar.Instance.cubs[Bar.Instance.cubs.Count - 1].GetComponent<LineDrawController>();
- LineDrawController leftCub = Bar.Instance.cubs[0].GetComponent<LineDrawController>();
- if (CheckWorkType.Instance.typeId == 8)
- {
- if (!SquareController.Instance.newMode ||
- (SquareController.Instance.newMode &&
- SquareController.InSquare(SquareController.Instance.linePositions.ToArray(),
- transform.position)))
- {
- forKMLLeft += xL + "," + yL + "," + altitude + " \r\n";
- kmlRightList.Add(xR + "," + yR + "," + altitude + " \r\n");
- }
- double xM = KMLController.xToLon((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).x + firstPosition.x) / 50);
- double yM = KMLController.zToLat((-(arrowTransform.position + arrowTransform.up * (delt * 6.278353f)).z + firstPosition.y) / 60);
- //gpxString += xM + "," + yM + "," + Math.Round(speed, 2) + "," + altitude + "," + currentDate + " \r\n";
- minSpeed = SpeedWindow.Instance.CurrentMinSpeed;
- maxSpeed = SpeedWindow.Instance.CurrentMaxSpeed;
- }
- else
- {
- if (!SquareController.Instance.newMode ||
- (SquareController.Instance.newMode &&
- SquareController.InSquare(SquareController.Instance.linePositions.ToArray(),
- transform.position)))
- {
- forKMLLeft += xL + "," + yL + ",0 \r\n";
- kmlRightList.Add(xR + "," + yR + ",0 \r\n");
- }
- altOffset++;
- }
- speeds.Add(speed);
- //PlayerPrefs.SetString("map" + SaveController.Instance.data.saveIndex, forGoogleString);
- needToAddPosition = false;
- }
- else
- {
- needToAddPosition = true;
- }
- }
- if (pointsCount >= pointsDealey || speed >= 12)
- {
- point.transform.position = CreateSector();
- if (selectedPoints.Count >= sectorsDealey)
- {
- bool movingState = isMoving;
- if (!isMoving)
- {
- transform.LookAt(point.transform);
- }
- GameObject prevSector = NextPoint;
- GameObject newPoint = GetFinestPosition();
- prevSector.GetComponent<MeshRenderer>().material = PassedPointMaterial;
- /*if (MainRightPanel.Instance.Paint)
- {
- if (needToAddPosition)
- {
- float widthM = (float)SaveController.Instance.data.widthM;
- float widthSM = (float)SaveController.Instance.data.widthSM / 100;
- float delt = (widthM + widthSM) / 2;
- double xR = KMLController.xToLon((-(trailer[0].transform.position + trailer[0].transform.right * (delt * 6.278353f)).x + firstPosition.x) / 50);
- double yR = KMLController.zToLat((-(trailer[0].transform.position + trailer[0].transform.right * (delt * 6.278353f)).z + firstPosition.y) / 60);
- double xL = KMLController.xToLon((-(trailer[0].transform.position + (-trailer[0].transform.right * (delt * 6.278353f))).x + firstPosition.x) / 50);
- double yL = KMLController.zToLat((-(trailer[0].transform.position + (-trailer[0].transform.right * (delt * 6.278353f))).z + firstPosition.y) / 60);
- forGoogleString += ajObject.position.y + "," + ajObject.position.y + "|";
- forKMLLeft += xL + "," + yL + ",0 \r\n";
- kmlRightList.Add(xR + "," + yR + ",0 \r\n");
- forKML += ajObject.position.x + "," + ajObject.position.y + ",0 \r\n";
- PlayerPrefs.SetString("map" + SaveController.Instance.data.saveIndex, forGoogleString);
- needToAddPosition = false;
- }
- else
- {
- needToAddPosition = true;
- }
- }*/
- if (SquareController.Instance.isTracked)
- {
- if (needToAddSquare)
- {
- if (CheckWorkType.Instance.typeId != 8)
- {
- kmlSquare += ajObject.position.x + "," + ajObject.position.y + ",0 \r\n";
- }
- else
- {
- kmlSquare += ajObject.position.x + "," + ajObject.position.y + ","+altitude+" \r\n";
- }
- if (string.IsNullOrEmpty(kmlStartSquare))
- {
- kmlStartSquare = kmlSquare;
- }
- needToAddSquare = false;
- }
- else
- {
- needToAddSquare = true;
- }
- }
- if (newPoint != null)
- {
- bool needToRotate = false;
- NextPoint = newPoint;
- if (NextPoint.transform.position != prevSector.transform.position)
- {
- prevSector.transform.LookAt(NextPoint.transform);
- NextPoint.transform.rotation = prevSector.transform.rotation;
- needToRotate = true;
- }
- int i = selectedPoints.IndexOf(NextPoint);
- for (int k = i; k >= 0; k--)
- {
- selectedPoints.RemoveAt(k);
- }
- if (isMoving)
- {
- if (trailer[0].transform.parent != null && ponitCount == 3)
- {
- //SetZOffset(normalOffset);
- StartCoroutine(SmoothChangeJoint(normalOffset + 1, Gz * ((pointsDealey) * (sectorsDealey - selectedPoints.Count + 1)) * 2));// SetZOffset(normalOffset);
- ponitCount = 0;
- transform.LookAt(NextPoint.transform);
- transform.LookAt(NextPoint.transform);
- transform.LookAt(NextPoint.transform);
- transform.LookAt(NextPoint.transform);
- foreach (GameObject go in trailer)
- go.transform.SetParent(null);
- MainRightPanel.Instance.ContinueDraw();
- isBack = false;
- }
- else if (trailer[0].transform.parent != null && ponitCount < 3)
- {
- //transform.LookAt(NextPoint.transform);
- //transform.position = NextPoint.transform.position;
- ponitCount++;
- }
- }
- Vector3 heading = NextPoint.transform.position - transform.position;
- float dot = Vector3.Dot(heading, transform.forward);
- if (dot < -1 && trailer[0].transform.parent == null)
- {
- /* Debug.Log("Dot: " + dot);
- StopCoroutine("LookToEuler");
- MainRightPanel.Instance.EndDraw();
- foreach (GameObject go in trailer)
- {
- go.transform.SetParent(transform);
- go.transform.localEulerAngles = Vector3.zero;
- }
- SetZOffset(0, 0);
- transform.LookAt(NextPoint.transform);
- */
- }
- isMoving = true;
- CheckForMinMax(new Vector2(NextPoint.transform.position.x, NextPoint.transform.position.z));
- if (!isBack)
- {
- float angle = AngleSigned(transform.forward, NextPoint.transform.position - transform.position, transform.up);
- if (movCor != null)
- {
- //StopCoroutine(movCor);
- }
- if (string.IsNullOrEmpty(startingDate))
- {
- startingDate = ajObject.data;
- PlayerPrefs.SetString("date" + SaveController.Instance.data.saveIndex, startingDate);
- }
- else
- {
- currentDate = ajObject.data;
- if (currentDate.EndsWith("18"))
- {
- //PlayerPrefs.SetInt("NeedUpdate", 1);
- }
- }
- movCor = StartCoroutine(MoveToPosition(transform, prevSector.transform, NextPoint.transform.position, Gz * (pointsDealey * (sectorsDealey - selectedPoints.Count + 1))));
- if (movedCount <= 2)
- {
- movedCount++;
- }
- if (firstPos)
- {
- SetZOffset(normalOffset);
- foreach (GameObject go in trailer)
- go.transform.SetParent(null);
- SquareController.Instance.CheckAfterMove();
- CurveController.Instance.CheckAfterMove();
- ParalelsController.Instance.CheckAfterMove();
- }
- firstPos = false;
- if (needToRotate)
- {
- if (rotCor != null)
- StopCoroutine(rotCor);
- if (dot > -4)
- {
- rotCor = StartCoroutine(LookToEuler(NextPoint.transform.rotation, Gz * ((pointsDealey) * (sectorsDealey - selectedPoints.Count + 1))));
- if (trailer[0].transform.parent != null)
- {
- trailer[0].transform.SetParent(transform);
- trailer[0].transform.localEulerAngles = Vector3.zero;
- }
- }
- else
- {
- if (trailer[0].transform.parent == null)
- {
- if (rotCor != null)
- StopCoroutine(rotCor);
- StopCoroutine(movCor);
- MainRightPanel.Instance.EndDraw();
- foreach (GameObject go in trailer)
- {
- go.transform.SetParent(transform);
- go.transform.localEulerAngles = Vector3.zero;
- StopCoroutine("SmoothChangeJoint");
- //SetZOffset(0, 0);
- startingRotate = trackedPoint.rotation;
- StartCoroutine(SmoothChangeJoint(0, Gz * ((pointsDealey) * (sectorsDealey - selectedPoints.Count + 1))));// SetZOffset(normalOffset);//SetZOffset(0, 0);
- ponitCount = 0;
- //transform.LookAt(NextPoint.transform);
- }
- isBack = true;
- }
- }
- }
- }
- else
- {
- StopCoroutine(movCor);
- }
- /*else
- {
- }*/
- Points.Clear();
- }
- }
- pointsCount = 0;
- }
- else if (!isMoving && selectedPoints.Count == 1 && point.transform.position != transform.position)
- {
- }
- if (Points.Count >= 100)
- {
- Points.RemoveRange(0, 50);
- }
- }
- else
- {
- StopCoroutine("MoveToPosition");
- }
- }
- if (sendCount == 5)
- {
- #if UNITY_EDITOR || !UNITY_WSA_10_0
- GenerateSendData();
- #endif
- sendCount = 0;
- }
- sendCount++;
- }
- yield return new WaitForSeconds(Gz);
- }
- }
- private int forRotation = 0;
- public float minX = Mathf.Infinity;
- public float minY = Mathf.Infinity;
- public float maxX = -Mathf.Infinity;
- public float maxY = -Mathf.Infinity;
- public Quaternion startingRotate;
- private void CheckForMinMax(Vector2 pos)
- {
- if (pos.x < minX)
- {
- minX = pos.x;
- }
- else if (pos.x > maxX)
- {
- maxX = pos.x;
- }
- if (pos.y < minY)
- {
- minY = pos.y;
- }
- else if (pos.y > maxY)
- {
- maxY = pos.y;
- }
- PlayerPrefs.SetFloat("minX" + SaveController.Instance.data.saveIndex, minX);
- PlayerPrefs.SetFloat("maxX" + SaveController.Instance.data.saveIndex, maxX);
- PlayerPrefs.SetFloat("minY" + SaveController.Instance.data.saveIndex, minY);
- PlayerPrefs.SetFloat("maxY" + SaveController.Instance.data.saveIndex, maxY);
- }
- private GameObject GetFinestPosition()
- {
- float minAngle = 999;
- int selectedIndex = 0;
- for (int i = 0; i < selectedPoints.Count; i++)
- {
- var angle = AngleSigned(transform.position, selectedPoints[i].transform.position - transform.position, Vector3.up);
- if (angle > 0 && angle < minAngle)
- {
- minAngle = angle;
- selectedIndex = i;
- }
- else if (angle < 0 && minAngle > 0)
- {
- minAngle = angle;
- selectedIndex = i;
- }
- else if (angle < 0 && minAngle < 0 && angle > minAngle)
- {
- minAngle = angle;
- selectedIndex = i;
- }
- else if (angle == 0)
- {
- selectedIndex = i;
- }
- }
- if (selectedIndex < selectedPoints.Count)
- return selectedPoints[selectedIndex];
- else if (selectedIndex >= selectedPoints.Count && selectedPoints.Count > 0)
- {
- return selectedPoints[0];
- }
- else
- {
- return Points[Points.Count - 1];
- }
- }
- private Vector3 CreateSector()
- {
- try
- {
- Dictionary<Vector2, List<GameObject>> sectors = new Dictionary<Vector2, List<GameObject>>();
- float sm = (6.278353f / 100) * (smDealey * 2);
- for (int i = Points.Count - (int)(pointsDealey); i < Points.Count; i++)
- {
- int x = (int)(Points[i].transform.position.x * sm);
- int z = (int)(Points[i].transform.position.z * sm);
- Vector2 tmp = new Vector2(x, z);
- if (sectors.ContainsKey(tmp))
- {
- sectors[tmp].Add(Points[i].gameObject);
- }
- else
- {
- sectors.Add(tmp, new List<GameObject>());
- sectors[tmp].Add(Points[i].gameObject);
- }
- }
- int max = 0;
- Vector2 tmpKey = Vector2.zero;
- foreach (KeyValuePair<Vector2, List<GameObject>> pair in sectors)
- {
- if (sectors[pair.Key].Count >= max)
- {
- if (selectedPoints.Count == 0)
- {
- max = sectors.Count;
- tmpKey = pair.Key;
- }
- else
- {
- if (Vector3.Distance(sectors[pair.Key][0].transform.position, selectedPoints[0].transform.position) > 0)
- {
- max = sectors.Count;
- tmpKey = pair.Key;
- }
- }
- }
- }
- var sphere = Instantiate(Sphere);
- sphere.gameObject.transform.SetParent(parent.transform, false);
- Vector3 pos = new Vector3((int)(sectors[tmpKey][0].transform.position.x / sm) * sm, sectors[tmpKey][0].transform.position.y, (int)(sectors[tmpKey][0].transform.position.z / sm) * sm);
- sphere.transform.position = pos;
- sphere.GetComponent<MeshRenderer>().material = NextPointMaterial;
- selectedPoints.Add(sphere);
- return sectors[tmpKey][0].transform.position;
- }
- catch (Exception ex)
- {
- return Points[Points.Count - 1].transform.position;
- }
- }
- public IEnumerator LookToEuler(Quaternion euler, float timeToMove)
- {
- var currentPos = transform.rotation;
- var t = 0f;
- while (t < 1)
- {
- t += Time.deltaTime / (timeToMove * 2);
- transform.rotation = Quaternion.Lerp(currentPos, euler, t);
- yield return null;
- }
- }
- public void ChangeFilter()
- {
- enabledFilter = !enabledFilter;
- }
- public IEnumerator SmoothChangeJoint(float to, float timeToMove)
- {
- var currentPos = trailerJoint[0].connectedAnchor.z;
- var t = 0f;
- float step = to / timeToMove * Time.deltaTime;
- float baseZ = 0;
- bool isDisabled = true;
- while (t < 1)
- {
- //stepToMove = normalDist / 6.278353f * Time.deltaTime / timeToMove;
- t += Time.deltaTime / timeToMove;
- baseZ = Mathf.Lerp(currentPos, to, t);
- if (to == 0)
- {
- if (startingRotate == transform.rotation && isDisabled)
- {
- MainRightPanel.Instance.ContinueDraw();
- isDisabled = false;
- }
- else if (startingRotate != transform.rotation)
- {
- if (!isDisabled)
- {
- MainRightPanel.Instance.EndDraw();
- }
- }
- }
- trailerJoint[0].connectedAnchor = new Vector3(0, 0, baseZ);
- yield return null;
- }
- if (to == 0)
- {
- MainRightPanel.Instance.EndDraw();
- }
- }
- public float stepToMove = 0;
- public IEnumerator MoveToPosition(Transform transform, Transform prev, Vector3 position, float timeToMove)
- {
- var currentPos = transform.position;
- var t = 0f;
- //timeToMove += 0.1f;
- float baseDist = Vector3.Distance(prev.position, position);
- stepToMove = baseDist / 5.238071f * Time.deltaTime / timeToMove;
- moved = true;
- while (t < 1)
- {
- //stepToMove = normalDist / 6.278353f * Time.deltaTime / timeToMove;
- t += Time.deltaTime / timeToMove;
- if (isBack)
- {
- t = 1;
- break;
- }
- if (MainRightPanel.Instance != null && MainRightPanel.Instance.Paint)
- {
- movedDistance += stepToMove;
- SaveController.Instance.data.distance = startingDistance + movedDistance;
- int k = -1;
- for (int i = 0; i < filledAreas.Count; i++)
- {
- if (filledAreas[i].width == (float)(MetricsWindow.Instance.metrics + ((float)MetricsWindow.Instance.sm / 100)))
- {
- k = i;
- break;
- }
- }
- if (k == -1)
- {
- FilledArea area = new FilledArea();
- area.width = (float)(MetricsWindow.Instance.metrics + ((float)MetricsWindow.Instance.sm / 100));
- filledAreas.Add(area);
- k = filledAreas.Count - 1;
- }
- filledAreas[k].distance += stepToMove * (float)((float)TogglesPanel.Instance.workingToggles / (float)TogglesPanel.Instance.toggleCount);
- SaveController.Instance.data.filledDistance = filledAreas[k].distance;
- foreach (var drawer in MainRightPanel.Instance.controllers)
- {
- if(!TogglesPanel.Instance.indexes.Contains(drawer.index) && drawer.InArea)
- drawer.CheckSquare();
- }
- }
- SetMovedText();
- if (MainRightPanel.Instance.Paint)
- {
- PlayerPrefs.SetFloat("posX" + SaveController.Instance.data.saveIndex, transform.position.x);
- PlayerPrefs.SetFloat("posZ" + SaveController.Instance.data.saveIndex, transform.position.z);
- }
- if (!isBack)
- transform.position = Vector3.Lerp(currentPos, position + offsetPos, t);
- yield return null;
- }
- if (SaveController.Instance.data.debugFileName != "-" || IsOriginalDevice)
- {
- if (speed < 3)
- {
- pointsDealey = 0.2f * 10;
- sectorsDealey = 4;
- }
- else if (speed >= 3 && speed <= 8)
- {
- pointsDealey = 0.5f * 10;
- sectorsDealey = 1;
- }
- else if (speed >= 8 && speed <= 15)
- {
- pointsDealey = 0.4f * 10;
- sectorsDealey = 1;
- }
- else if (speed >= 15 && speed <= 25)
- {
- pointsDealey = 0.3f * 10;
- sectorsDealey = 1;
- }
- else if (speed >= 25 && speed <= 65)
- {
- pointsDealey = 0.2f * 10;
- sectorsDealey = 1;
- }
- else
- {
- pointsDealey = 1;
- sectorsDealey = 1;
- }
- }
- moved = false;
- }
- public void AddOverSquare(float square)
- {
- overSquare += square;
- }
- public IEnumerator SaveWork()
- {
- while (true)
- {
- yield return new WaitForSeconds(60);
- try
- {
- SaveController.Instance.SaveData();
- }
- catch
- {
- }
- }
- }
- private void SetMovedText()
- {
- if (startingDistance + movedDistance < 1000)
- {
- movedDistanceText.text = Math.Round(startingDistance + movedDistance, 1).ToString();
- speedKMText.text = "м";
- }
- else
- {
- movedDistanceText.text = (Math.Round((startingDistance + movedDistance) / 1000, 2)).ToString();
- speedKMText.text = "км";
- }
- float dist = 0;
- foreach (FilledArea area in filledAreas)
- {
- float tempDist = area.distance * area.width;
- if (tempDist < 0)
- {
- tempDist *= -1;
- }
- if(!float.IsNaN(tempDist))
- dist += tempDist;
- }
- filledDistanceText.text = (Math.Round((dist) / 10000 + startingFillingDistance, 2)).ToString();
- SaveController.Instance.data.filledDistance = (dist) / 10000 + startingFillingDistance;
- if (filledDistanceText.text == "NaN")
- {
- filledDistanceText.text = "0";
- SaveController.Instance.data.filledDistance = 0;
- }
- }
- private List<float> _distances = new List<float>();
- private GameObject[] LoadCoordinatesByName(string fileName, int distance)
- {
- var coords = KMLController.LoadXML(fileName);
- var pairs = KMLController.GetPairsFromLoadedKML(coords);
- if (_zeroPoint == Vector3.zero)
- _zeroPoint = coords[0];
- var newPoints = new GameObject[pairs.Count * 2];
- var parent = new GameObject(fileName);
- parent.gameObject.transform.SetParent(NextPoint.gameObject.transform.parent, false);
- for (int i = 0; i < pairs.Count; i++)
- {
- var item = pairs[i];
- var point = Instantiate(NextPoint);
- point.gameObject.transform.SetParent(parent.transform, false);
- point.transform.localRotation = NextPoint.gameObject.transform.localRotation;
- point.transform.localPosition = new Vector3(_zeroPoint.x - item.First.x, NextPoint.gameObject.transform.localPosition.y, _zeroPoint.z - item.First.z);
- //point.gameObject.SetActive(false);
- newPoints[i * 2] = point;
- point = Instantiate(NextPoint);
- point.gameObject.transform.SetParent(parent.transform, false);
- point.transform.localRotation = NextPoint.gameObject.transform.localRotation;
- point.transform.localPosition = new Vector3(_zeroPoint.x - item.Second.x, NextPoint.gameObject.transform.localPosition.y, _zeroPoint.z - item.Second.z);
- //point.gameObject.SetActive(false);
- newPoints[i * 2 + 1] = point;
- var dis = Vector3.Distance(pairs[i].First, pairs[i].Second) / distance;
- _distances.Add(dis);
- //Debug.LogError(dis);
- }
- NextPoint = newPoints[0];
- return newPoints;
- }
- private GameObject SkippedPoint = null;
- IEnumerator StartEmitor()
- {
- yield return new WaitForSeconds(0.1f);
- Particle.Play();
- }
- private float GetAngle()
- {
- var turnDir = (NextPoint.transform.position - transform.position);
- var rotationAngle = 0f;
- if (turnDir != Vector3.zero)
- rotationAngle = AngleAroundAxis(transform.forward, turnDir, Vector3.up);
- return rotationAngle;
- }
- private bool isPrevDirectionForvard = true;
- float prevAngle = 0f;
- public float speed = 0;
- private Vector3 lastPos = Vector3.zero;
- private float lastRotY = 0;
- private bool lastWorkState = false;
- private bool minSpeedAir = true;
- public void FixedUpdate()
- {
- if (CheckWorkType.Instance.typeId == 8 && SquareController.Instance.newMode && SquareController.InSquare(SquareController.Instance.linePositions.ToArray(),transform.position))
- {
- if (speed > SpeedWindow.Instance.CurrentMinSpeed && speed < SpeedWindow.Instance.CurrentMaxSpeed &&
- !MainRightPanel.Instance.Paint)
- {
- MainRightPanel.Instance.UI_OnTurnPaint(true);
- }else if ((speed < SpeedWindow.Instance.CurrentMinSpeed || speed > SpeedWindow.Instance.CurrentMaxSpeed) &&
- MainRightPanel.Instance.Paint)
- {
- MainRightPanel.Instance.UI_OnTurnPaint(false);
- }
- }else if (CheckWorkType.Instance.typeId == 8 && !SquareController.Instance.newMode)
- {
- if ((TractorController.Instance.speed < SpeedWindow.Instance.CurrentMinSpeed ||
- TractorController.Instance.speed > SpeedWindow.Instance.CurrentMaxSpeed))
- {
- if (!minSpeedAir)
- {
- MainRightPanel.Instance.UI_OnTurnPaint(false);
- MainRightPanel.Instance.UI_OnTurnPaint(true);
- minSpeedAir = true;
- }
- }
- else if ((TractorController.Instance.speed > SpeedWindow.Instance.CurrentMinSpeed &&
- TractorController.Instance.speed < SpeedWindow.Instance.CurrentMaxSpeed))
- {
- if (minSpeedAir)
- {
- MainRightPanel.Instance.UI_OnTurnPaint(false);
- MainRightPanel.Instance.UI_OnTurnPaint(true);
- minSpeedAir = false;
- }
- }
- }
- if (SquareController.Instance.newMode)
- {
- bool newWorkState = SquareController.InSquare(SquareController.Instance.linePositions.ToArray(),
- trackedPoint.position);
- if (lastWorkState != newWorkState)
- {
- MainRightPanel.Instance.UI_OnTurnPaint(false);
- MainRightPanel.Instance.UI_OnTurnPaint(true);
- }
- lastWorkState = newWorkState;
- }
- /*Vector3 targetPostition = new Vector3(NextPoint.transform.position.x,
- Arrow.transform.transform.position.y,
- NextPoint.transform.position.z);
- Arrow.transform.LookAt(targetPostition);
- */
- var RotateFrontWheelTransform = RotateFrontWheels[0].transform;
- // var angle = trailer.transform.eulerAngles.y - transform.eulerAngles.y;// AngleSigned(trackedPoint.forward, transform.position - trackedPoint.position + trackedPoint.forward, trackedPoint.up);
- // trackedPoint.RotateAround(trackedPoint.position, Vector3.up, trackedPoint.position.y + angle);
- for (int i = 0; i < 2; i++)
- {
- // RotateFrontWheels[i].transform.RotateAround(FrontWheels[i].transform.position, Vector3.up, FrontWheels[i].transform.position.y + angle);
- //RotateFrontWheels[i].transform.localEulerAngles = new Vector3(0, 0, trackedPoint.localEulerAngles.y);
- if (CheckWorkType.Instance.typeId != 5)
- {
- RotateFrontWheels[i].transform.eulerAngles = new Vector3(0, transform.eulerAngles.y - 180, 0);
- // new Vector3(0,0, -angle);
- }
- //RotateFrontWheels[i].transform.LookAt(transform);
- }
- if (CheckWorkType.Instance.typeId != 5)
- {
- if (RotateFrontWheels[0].transform.localEulerAngles.x < 45)
- {
- RotateFrontWheels[0].transform.localEulerAngles = new Vector3(45, 0, 0);
- }
- else if (RotateFrontWheels[0].transform.localEulerAngles.x > 135)
- {
- RotateFrontWheels[0].transform.localEulerAngles = new Vector3(135, 0, 0);
- }
- if (RotateFrontWheels[1].transform.localEulerAngles.x < 45)
- {
- RotateFrontWheels[1].transform.localEulerAngles = new Vector3(45, 0, 0);
- }
- else if (RotateFrontWheels[1].transform.localEulerAngles.x > 135)
- {
- RotateFrontWheels[1].transform.localEulerAngles = new Vector3(135, 0, 0);
- }
- }
- // MoveToNextPoint();
- if (lastPos != transform.position)
- {
- float dist = Vector3.Distance(lastPos, transform.position);
- if (CheckWorkType.Instance.typeId != 5)
- {
- foreach (var wheel in FrontWheels)
- wheel.transform.Rotate(new Vector3(1, 0, 0), -(dist * 5));
- foreach (var wheel in RearWheels)
- wheel.transform.Rotate(new Vector3(1, 0, 0), -(dist * 4));
- }
- else
- {
- foreach (var wheel in FrontWheels)
- wheel.transform.Rotate(new Vector3(1, 0, 0), (dist * 5));
- foreach (var wheel in RearWheels)
- wheel.transform.Rotate(new Vector3(1, 0, 0), (dist * 4));
- }
- Move = true;
- //Vector3 vectorForOffset = (transform.position -lastPos).normalized;
- //GrounMaterial.mainTextureOffset = new Vector2(GrounMaterial.mainTextureOffset.x + vectorForOffset.x * Time.deltaTime / 3, GrounMaterial.mainTextureOffset.y + vectorForOffset.y * Time.deltaTime / 3);
- lastPos = transform.position;
- if (CheckWorkType.Instance.typeId == 7 && SquareController.Instance.isTracked)
- {
- movedDistance += dist / 6.278354f;
- if (startingDistance + movedDistance < 1000)
- {
- movedDistanceText.text = Math.Round(startingDistance + movedDistance, 1).ToString();
- speedKMText.text = "м";
- }
- else
- {
- movedDistanceText.text = (Math.Round((startingDistance + movedDistance) / 1000, 2)).ToString();
- speedKMText.text = "км";
- }
- }
- }
- else
- {
- Move = false;
- }
- }
- private bool airOnGround = true;
- public bool isRotation = false;
- private IEnumerator TrackAirRotation()
- {
- while (true)
- {
- if (altitude < 1000)
- {
- altitudeText.text = Math.Round(altitude, 1).ToString();
- altitudeAdditionalText.text = "м";
- }
- else
- {
- altitudeText.text = Math.Round(altitude / 1000, 1).ToString();
- altitudeAdditionalText.text = "км";
- }
- if (isMoving && !isBack)
- {
- float angle = AngleInDeg();
- float x = transform.localEulerAngles.y - MainTransform.localEulerAngles.y;
- if (x > 45 && x <= 180)
- {
- x = 180 - x;
- }
- else if (x > 180 && x <= 360)
- {
- x = x - 360;
- }
- float newAngle = Mathf.LerpAngle(x, angle, 0.01f);
- newAngle = Mathf.LerpAngle(x, newAngle, 0.001f);
- Vector3 airVector = new Vector3(-newAngle, airship.localEulerAngles.y, airship.localEulerAngles.z);
- airVector = GetNormalVector(airVector);
- Vector3 lastRotation = airship.localEulerAngles;
- float timeCourotine = 0;
- float to = airVector.x;
- Vector3 newVector = airship.localEulerAngles;
- if (!airOnGround)
- {
- isRotation = to >= 35 || to <= -35;
- while (timeCourotine < 1)
- {
- newVector.x = Mathf.LerpAngle(lastRotation.x, to, timeCourotine);
- airship.localEulerAngles = newVector;
- //airship.localEulerAngles = Vector3.LerpUnclamped(lastRotation,airVector, timeCourotine);
- timeCourotine += Time.deltaTime / 2;
- yield return new WaitForSeconds(Time.deltaTime / 2);
- }
- }
- else
- {
- while (timeCourotine < 1)
- {
- newVector.x = Mathf.LerpAngle(lastRotation.x, 0, timeCourotine);
- airship.localEulerAngles = newVector;
- //airship.localEulerAngles = Vector3.LerpUnclamped(lastRotation,airVector, timeCourotine);
- timeCourotine += Time.deltaTime / 2;
- yield return new WaitForSeconds(Time.deltaTime / 2);
- }
- }
- if (speed > SpeedWindow.Instance.LandingSpeed && airOnGround)
- {
- float fromY = -10;
- float toY = 31;
- float timeToUp = 0;
- Vector3 airPosition = airship.localPosition;
- while (timeToUp < 1)
- {
- airPosition.y = Mathf.Lerp(fromY, toY, timeToUp);
- airship.localPosition = airPosition;
- timeToUp += Time.deltaTime / 4;
- yield return new WaitForSeconds(Time.deltaTime / 2);
- }
- airOnGround = false;
- }
- else if (speed < SpeedWindow.Instance.LandingSpeed && !airOnGround)
- {
- float fromY = 31;
- float toY = -10;
- float timeToUp = 0;
- Vector3 airPosition = airship.localPosition;
- airOnGround = true;
- while (timeToUp < 1)
- {
- airPosition.y = Mathf.Lerp(fromY, toY, timeToUp);
- airship.localPosition = airPosition;
- timeToUp += Time.deltaTime / 4;
- yield return new WaitForSeconds(Time.deltaTime / 2);
- }
- }
- }
- yield return new WaitForSeconds(Time.deltaTime);
- }
- }
- private Vector3 GetNormalVector(Vector3 airVector)
- {
- if (airVector.x > 45 && airVector.x <= 180)
- {
- airVector.x = 180 - airVector.x;
- }
- else if (airVector.x > 180 && airVector.x <= 360)
- {
- airVector.x = airVector.x - 360;
- }
- if (airVector.x < -45)
- {
- airVector.x = -45;
- }
- else if (airVector.x > 45)
- {
- airVector.x = 45;
- }
- if (airVector.y > 45 && airVector.y <= 180)
- {
- airVector.y = 180 - airVector.y;
- }
- else if (airVector.y > 180 && airVector.y <= 360)
- {
- airVector.y = airVector.y - 360;
- }
- if (airVector.y < -45)
- {
- airVector.y = -45;
- }
- else if (airVector.y > 45)
- {
- airVector.y = 45;
- }
- return airVector;
- }
- private float GetAngleBetweenAirShip()
- {
- Vector3 dir = MainTransform.position - transform.position;
- dir = MainTransform.InverseTransformDirection(dir);
- return Mathf.Atan2(dir.y, dir.x) * Mathf.Rad2Deg;
- }
- public float AngleInDegForCombine()
- {
- return AngleInRad(MainTransform.position, transform.position + transform.forward) * 180 / Mathf.PI;
- }
- public float AngleInRad(Vector3 vec1, Vector3 vec2)
- {
- return Mathf.Atan2(vec2.y - vec1.y, vec2.x - vec1.x);
- }
- //This returns the angle in degrees
- public float AngleInDeg()
- {
- return AngleInRad(MainTransform.position, transform.position) * 180 / Mathf.PI;
- }
- bool Move = false;
- float currentTime = 0;
- private float CalculateDistance()
- {
- float angle = Mathf.DeltaAngle(Mathf.Atan2(transform.position.x, transform.position.z) * Mathf.Rad2Deg,
- Mathf.Atan2(NextPoint.transform.position.x, NextPoint.transform.position.z) * Mathf.Rad2Deg);
- return angle;
- }
- public static float AngleAroundAxis(Vector3 dirA, Vector3 dirB, Vector3 axis)
- {
- // Project A and B onto the plane orthogonal target axis
- dirA = dirA - Vector3.Project(dirA, axis);
- dirB = dirB - Vector3.Project(dirB, axis);
- // Find (positive) angle between A and B
- float angle = Vector3.Angle(dirA, dirB);
- // Return angle multiplied with 1 or -1
- return angle * (Vector3.Dot(axis, Vector3.Cross(dirA, dirB)) < 0 ? -1 : 1);
- }
- public static float AngleSigned(Vector3 v1, Vector3 v2, Vector3 n)
- {
- return Mathf.Atan2(
- Vector3.Dot(n, Vector3.Cross(v1, v2)),
- Vector3.Dot(v1, v2)) * Mathf.Rad2Deg;
- }
- public void ChangeLight()
- {
- if (PlayerPrefs.GetInt("VelestorDevice") == 1)
- {
- light.SetActive(!light.activeSelf);
- if (CheckWorkType.Instance.typeId != 8)
- {
- carLightTexture.SetActive(!light.activeSelf);
- }
- lights.SetActive(!light.activeSelf);
- DayNightSwitcher.Instance.SetColors(!carLightTexture.activeSelf);
- }
- else
- {
- MainGUI.Instance.StartShowCantOpen();
- }
- }
- public void AddParallelPoint()
- {
- ParalelsController.Instance.SetPosition(transform);
- }
- private void OnTriggerEnter(Collider col)
- {
- if (col.tag == "Lines")
- {
- ParalelsController.Instance.ChangeLines(col.gameObject);
- }
- else if (col.tag == "Curves")
- {
- if (col.gameObject.transform.parent != null)
- {
- CurveController.Instance.ResetCurves(col.gameObject.transform.parent.gameObject);
- CurveController.Instance.SetTrackedPoint(col.gameObject);
- }
- }else if (col.tag == "Areas")
- {
- //lastArea = col;
- }
- }
- public void ChangeBTMode()
- {
- if (gpsActivityJavaClass != null)
- {
- string speedMessage = gpsActivityJavaClass.CallStatic<string>("ChangeMode");
- }
- }
- }
- [Serializable]
- public class FilledArea
- {
- public float distance = 0;
- public float width = 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement