mirror of
https://gitea.msk.dinamika-avia.ru/Constanta-Design/MI-38.git
synced 2026-01-23 15:25:44 +03:00
763 lines
35 KiB
C#
763 lines
35 KiB
C#
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.SceneManagement;
|
||
using UnityEngine.EventSystems;
|
||
using System;
|
||
using UnityEngine.UI;
|
||
|
||
public class Manager : MonoBehaviour
|
||
{
|
||
public Mi38Objects objects = new Mi38Objects();
|
||
public Player player;
|
||
public GameObject copter;
|
||
public GameObject cabines2d;
|
||
public GameObject canvas;
|
||
public GameObject fusel;
|
||
public GameObject copterProz;
|
||
public GameObject skv;
|
||
public GameObject air;
|
||
public GameObject menuPlayButtons;
|
||
public GameObject viewCamera, cabinCamera;
|
||
GameObject pilotcabin;
|
||
GameObject passcabin;
|
||
GameObject externalpanels;
|
||
GameObject backBtn;
|
||
public GameObject ViewBackButton;
|
||
Transform allPanelsInCanvas;
|
||
public string mode = "view"; // free, view, scedit, play
|
||
public int viewmode; // 1 кабина пилотов, 2 пассажирский отсек , 3 снаружи вертолета
|
||
public bool is3D; // Находимся мы в 2D режиме или 3D
|
||
public bool isInitiated = false;
|
||
public bool isPanelsActivated = false;
|
||
public bool isMouseOverUI = false;
|
||
[HideInInspector] public bool isProgressBarChangingInProgress = false;
|
||
hintUI menuViewButton, menuCabinButton, menuPassButton;
|
||
[HideInInspector] Camera mfi1_cam, mfi2_cam, mfi3_cam, mfi4_cam, mfi5_cam;
|
||
[HideInInspector] public MFPUScript mfpuScript;
|
||
|
||
|
||
Dictionary<string, GameObject> panel3D = new Dictionary<string, GameObject>(); // Панели 3D
|
||
public Dictionary<string, Panel2D> panel2D = new Dictionary<string, Panel2D>(); // Панели 2D
|
||
|
||
//public Dictionary<string, string> allPanelsStatesList = new Dictionary<string, string>(); //Словарь соответствия панелей 2D и 3D
|
||
public Dictionary<GameObject, GameObject> allPanelsStatesList = new Dictionary<GameObject, GameObject>(); //Словарь соответствия панелей 2D и 3D
|
||
Transform[] layersPass;
|
||
Transform[] layersPilot;
|
||
Transform[] layersExternalPanels;
|
||
Transform[] layerHeli;
|
||
Transform[] otherPanels;
|
||
public List<LayerMask> layersOrigHeli = new List<LayerMask>();
|
||
public List<LayerMask> layersOrigPass = new List<LayerMask>();
|
||
public List<LayerMask> layersOrigPilot = new List<LayerMask>();
|
||
public List<LayerMask> layersOrigExternalPanels = new List<LayerMask>();
|
||
public List<GameObject> layersOrigOtherPanels = new List<GameObject>();
|
||
public List<GameObject> layersChangedOtherPanels = new List<GameObject>();
|
||
public Camera cam;
|
||
public GameObject prefabHint;
|
||
// Глобальные переменные для хранения текущих углов поворотов ручек 0701,0702,0801,0802,0901-0902(Педали)
|
||
[HideInInspector] public float cur070XangleVert; //Текущий угол наклона ручки 0701 и 0702 по вертикали
|
||
[HideInInspector] public float cur080XangleVert; //Текущий угол наклона ручки 0801 и 0802 по вертикали
|
||
[HideInInspector] public float cur080XangleHor; //Текущий угол наклона ручки 0801 и 0802 по горизонтали
|
||
[HideInInspector] public float cur090XangleHor; //Текущий угол поворота педалей 0901 и 0902
|
||
[HideInInspector] public string opened2Dpanel="";
|
||
[HideInInspector] public MFIScript mfi1, mfi2, mfi3, mfi4, mfi5;
|
||
// change skybox
|
||
private Material sky, parking;
|
||
public string skyboxmat = "park"; // sky,park - полет и земля; Варианты скайбокса для земли и воздуха
|
||
|
||
//[HideInInspector] public int memLeak = 0;
|
||
|
||
void Awake()
|
||
{
|
||
//Debug.Log("Starting Manager.Awake.");
|
||
player = GameObject.Find("Player").GetComponent<Player>();
|
||
copter = GetRootObject("Copter");
|
||
pilotcabin = GameObject.Find("Copter/Pilot_cabin");
|
||
passcabin = GameObject.Find("Copter/Passanger_cabine");
|
||
externalpanels = GameObject.Find("Copter/Fuzeliazh");
|
||
//canvas = GameObject.Find("Canvas"); //В старом варианте
|
||
canvas = GameObject.Find("CanvasPanel");//бутерброд не отключать
|
||
cam = GameObject.Find("Camera").GetComponent<Camera>();//зедсь показывается бутерброд
|
||
cabines2d = GameObject.Find("Cabines"); //здесть только основная камера для внутренних кабин и площадки перемещения внутри пассажирской кабины + eventSystems для канваса (не бутерброда)
|
||
fusel = GameObject.Find("Obzor"); fusel.SetActive(false);
|
||
//copterProz = GameObject.Find("CopterProz"); copterProz.SetActive(false);
|
||
// ViewBackButton = GameObject.FindGameObjectWithTag("ViewBackButton");
|
||
//ViewBackButton.SetActive(false);
|
||
skv = GameObject.Find("Copter/SKV"); // Система СКВ,которая задублирована в FBX и которую нужно отключать в режиме кабина
|
||
air = GameObject.Find("Air"); // Панель с видами вертолета
|
||
menuPlayButtons = GameObject.Find("PlayButtons"); // панель плеера
|
||
//allPanelsInCanvas = canvas.transform.GetChild(0);
|
||
backBtn = GameObject.Find("backButton"); // Скрывать кнопку <<В кабину в режиме 3D
|
||
//Camera.main.gameObject.AddComponent<forCamera>();
|
||
cabinCamera.gameObject.AddComponent<forCamera>();
|
||
backBtn.SetActive(false);
|
||
is3D = true;
|
||
// viewmode = 3; // По умолчанию мы находимся в обзорке
|
||
|
||
mfi1 = GameObject.Find("Panel0110").GetComponent<MFIScript>(); mfi1.LoadPrefab("mfi1");
|
||
mfi2 = GameObject.Find("Panel0111").GetComponent<MFIScript>(); mfi2.LoadPrefab("mfi2");
|
||
mfi3 = GameObject.Find("Panel0116").GetComponent<MFIScript>(); mfi3.LoadPrefab("mfi3");
|
||
mfi4 = GameObject.Find("Panel0121").GetComponent<MFIScript>(); mfi4.LoadPrefab("mfi4");
|
||
mfi5 = GameObject.Find("Panel0122").GetComponent<MFIScript>(); mfi5.LoadPrefab("mfi5");
|
||
mfi1_cam = GameObject.Find("CameraMFI1").GetComponent<Camera>(); mfi2_cam = GameObject.Find("CameraMFI2").GetComponent<Camera>();
|
||
mfi3_cam = GameObject.Find("CameraMFI3").GetComponent<Camera>(); mfi4_cam = GameObject.Find("CameraMFI4").GetComponent<Camera>();
|
||
mfi5_cam = GameObject.Find("CameraMFI5").GetComponent<Camera>();
|
||
mfi1_cam.enabled = false; mfi2_cam.enabled = false; mfi3_cam.enabled = false; mfi4_cam.enabled = false; mfi5_cam.enabled = false;
|
||
mfpuScript = GameObject.Find("MFPU_Screens").GetComponent<MFPUScript>();
|
||
|
||
objects = new Mi38Objects();
|
||
StartCoroutine(objects.Load());
|
||
player.Init();
|
||
|
||
StartCoroutine(Init());
|
||
//Try skybox
|
||
sky = Resources.Load<Material>("Materials/MatSky");
|
||
parking = Resources.Load<Material>("Materials/MatPark");
|
||
//Change SkyBox
|
||
if (skyboxmat == "sky") changeSkyBoxToSky();
|
||
if (skyboxmat == "park") changeSkyBoxToPark();
|
||
}
|
||
IEnumerator Init()
|
||
{
|
||
//Debug.Log("Starting Manager.Init.");
|
||
while (!objects.isLoaded)
|
||
yield return null;
|
||
//Debug.Log("Objects loaded.");
|
||
/* Записываем оригинальные слои кабины пилотов,пассажирской кабины, и вертолета*/
|
||
RecordOrigLayerHeli();
|
||
RecordOrigLayerPilot();
|
||
RecordOrigLayerPass();
|
||
RecordOrigExternalPanels();
|
||
|
||
Transform[] allPanels = canvas.transform.GetChild(0).GetComponentsInChildren<Transform>();
|
||
Transform[] allPanels3D = copter.GetComponentsInChildren<Transform>();
|
||
|
||
foreach (Transform _allPanels in allPanels)
|
||
{
|
||
if (_allPanels.name.StartsWith("Panel") && _allPanels.name.Length > 5)
|
||
{
|
||
foreach (Transform _allPanels3D in allPanels3D)
|
||
{
|
||
|
||
if (_allPanels3D.name.StartsWith(_allPanels.name) && string.Compare(_allPanels3D.name.Substring(_allPanels3D.name.Length - 2), "3D") == 0 && _allPanels3D.name != null)
|
||
{
|
||
//Debug.Log("панели 3D" + _allPanels3D.name + " панели 2D " + _allPanels.name);
|
||
allPanelsStatesList.Add(_allPanels3D.gameObject, _allPanels.gameObject);
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
//foreach (KeyValuePair<GameObject, GameObject> kvp in allPanelsStatesList)
|
||
// Debug.Log(kvp.Key.name + " " + kvp.Value.name);
|
||
|
||
GameObject[] activezones = GameObject.FindGameObjectsWithTag("activezone");
|
||
foreach (GameObject _activezones in activezones)
|
||
{
|
||
_activezones.AddComponent<MakeActive>();
|
||
_activezones.GetComponentInChildren<Collider>();
|
||
// BoxCollider childcol = _activezones.GetComponentInChildren<BoxCollider>();
|
||
// Debug.Log(_activezones.GetComponentInChildren<BoxCollider2D>() + " коллайдеры");
|
||
//Debug.Log(_activezones.name + " объекты с activezone");
|
||
//_activezones.GetComponentInChildren<BoxCollider>();
|
||
//Debug.Log(_activezones.GetComponentInChildren<BoxCollider>() + " коллайдеры");
|
||
}
|
||
|
||
StartCoroutine(ActivatePanels()); //yield return
|
||
|
||
//****************************
|
||
|
||
if (mode == "view")
|
||
{
|
||
fusel.SetActive(true);
|
||
copter.SetActive(true);
|
||
cabines2d.SetActive(false);
|
||
cam.gameObject.SetActive(false); //canvas.SetActive(false);
|
||
skv.SetActive(true); // Для Макса СКВ трубка
|
||
menuPlayButtons.SetActive(true);
|
||
// Закомментить
|
||
//ChangeLayerPassCabineIgnore();
|
||
//ChangeLayerPilotCabineIgnore();
|
||
//ChangeLayerExternalPanelsDefault();
|
||
DisablePassCabineCollider();
|
||
DisablePilotCabineCollider();
|
||
}
|
||
else
|
||
{
|
||
if (mode == "free") menuPlayButtons.SetActive(false);
|
||
copter.SetActive(true);
|
||
cabines2d.SetActive(true);
|
||
cam.gameObject.SetActive(false); //canvas.SetActive(false);
|
||
fusel.SetActive(false);
|
||
skv.SetActive(false);
|
||
EnablePassCabineCollider();
|
||
EnablePilotCabineCollider();
|
||
}
|
||
|
||
if(menuCabinButton == null)
|
||
{
|
||
menuCabinButton = GameObject.Find("Air/view1").GetComponent<hintUI>();
|
||
menuPassButton = GameObject.Find("Air/view2").GetComponent<hintUI>();
|
||
menuViewButton = GameObject.Find("Air/view3").GetComponent<hintUI>();
|
||
}
|
||
|
||
//SwitchTo3D();
|
||
if (viewmode == 1)
|
||
{
|
||
EnablePassCabineCollider();
|
||
EnablePilotCabineCollider();
|
||
|
||
ChangeLayerPilotCabineDefault();
|
||
ChangeLayerExternalPanelsIgnore();
|
||
ChangeLayerPassCabineIgnore();
|
||
menuCabinButton.isGreen = true; menuCabinButton.OnPointerUp(null);
|
||
menuPassButton.isGreen = false; menuPassButton.OnPointerUp(null);
|
||
menuViewButton.isGreen = false; menuViewButton.OnPointerUp(null);
|
||
}
|
||
else
|
||
if (viewmode == 2)
|
||
{
|
||
EnablePassCabineCollider();
|
||
EnablePilotCabineCollider();
|
||
|
||
ChangeLayerPilotCabineIgnore();
|
||
ChangeLayerPassCabineDefault();
|
||
ChangeLayerExternalPanelsIgnore();
|
||
menuCabinButton.isGreen = false; menuCabinButton.OnPointerUp(null);
|
||
menuPassButton.isGreen = true; menuPassButton.OnPointerUp(null);
|
||
menuViewButton.isGreen = false; menuViewButton.OnPointerUp(null);
|
||
}
|
||
else
|
||
if (viewmode == 3)
|
||
{
|
||
DisablePassCabineCollider();
|
||
DisablePilotCabineCollider();
|
||
//ChangeLayerPilotCabineIgnore();
|
||
//ChangeLayerPassCabineIgnore();
|
||
ChangeLayerExternalPanelsDefault();
|
||
menuCabinButton.isGreen = false; menuCabinButton.OnPointerUp(null);
|
||
menuPassButton.isGreen = false; menuPassButton.OnPointerUp(null);
|
||
menuViewButton.isGreen = true; menuViewButton.OnPointerUp(null);
|
||
}
|
||
|
||
isInitiated = true;
|
||
//player.LoadScenario("System_2"); //debug
|
||
//Debug.Log("Manager Initiated.");
|
||
}
|
||
|
||
IEnumerator ActivatePanels()
|
||
{
|
||
//Debug.Log("Starting Manager.ActivatePanels.");
|
||
GameObject[] panel2d = GameObject.FindGameObjectsWithTag("panels2d");
|
||
foreach (GameObject _panel2d in panel2d)
|
||
{
|
||
_panel2d.AddComponent<Panel2D>();
|
||
//Debug.LogError("Loading Panel2D: " + _panel2d.name);
|
||
while (!_panel2d.GetComponent<Panel2D>().isStarted)
|
||
yield return null;
|
||
|
||
_panel2d.GetComponent<Panel2D>().setDisabled();//отключаем панели кроме мфи
|
||
//_panel2d.SetActive(false); // ! не далать так! отключается МФИ
|
||
|
||
panel2D.Add(_panel2d.name, _panel2d.GetComponent<Panel2D>());
|
||
}
|
||
|
||
//if (mode != "scedit")
|
||
objects.SetDefaultValues();
|
||
|
||
mfi1_cam.enabled = true; mfi2_cam.enabled = true; mfi3_cam.enabled = true; mfi4_cam.enabled = true; mfi5_cam.enabled = true;
|
||
mfi1.SwitchScreen("ПИ_МАРШ"); mfi2.SwitchScreen("НИ_НАВ"); mfi3.SwitchScreen("НИ_ОВО"); mfi4.SwitchScreen("НИ_НАВ"); mfi5.SwitchScreen("ПИ_МАРШ");
|
||
isPanelsActivated = true;
|
||
//Debug.Log("Panels activated.");
|
||
// System.GC.Collect();
|
||
}
|
||
|
||
public void SwitchTo3D()
|
||
{
|
||
if (is3D) return;
|
||
|
||
foreach (Transform _allPanels in canvas.transform.GetChild(0).GetComponentsInChildren<Transform>())
|
||
{
|
||
_allPanels.gameObject.SetActive(true);
|
||
}
|
||
// Меняем слои,чтобы переключении в 2D блокировать элементы 3D кабины
|
||
// viewmode 1-кабина пилотов, 2-пассажирская кабина, 3-режим свободного обзора (системы)
|
||
is3D = true; opened2Dpanel = "";
|
||
|
||
if(!isProgressBarChangingInProgress)
|
||
mouseExitUI();
|
||
|
||
//Camera.main.gameObject.AddComponent<forCamera>();
|
||
cabinCamera.gameObject.AddComponent<forCamera>();
|
||
if (viewmode == 2) //Camera.main.GetComponent<forCamera>().limitVert = 179.99f; // Если мы в кабине пассажирской,то угол вращения увеличиваем
|
||
cabinCamera.GetComponent<forCamera>().limitVert = 179.99f; //Camera.main.transform.localEulerAngles = new Vector3(0, 0, 0); //Возврат камеры в исходное
|
||
cam.gameObject.SetActive(false); //canvas.SetActive(false);
|
||
foreach (Panel2D p in panel2D.Values)//отключаем панели кроме мфи
|
||
{
|
||
p.GetComponent<Panel2D>().setDisabled();
|
||
//if (String.Compare(p.name, "Panel0110") == 0) p.GetComponent<Panel2D>().setEnabled();
|
||
}
|
||
|
||
copter.SetActive(true);
|
||
backBtn.SetActive(false);
|
||
skv.SetActive(false);
|
||
//air.SetActive(true);
|
||
}
|
||
public void SwitchTo2D(string _panels2d)
|
||
{
|
||
if (!panel2D.ContainsKey(_panels2d))
|
||
return;
|
||
cam.gameObject.SetActive(true);// canvas.SetActive(true);
|
||
copter.SetActive(true);
|
||
backBtn.SetActive(true);
|
||
//air.SetActive(false);
|
||
//Component.Destroy(Camera.main.gameObject.GetComponent<forCamera>());
|
||
Component.Destroy(cabinCamera.gameObject.GetComponent<forCamera>());
|
||
// Блокируем в 2D все 3D панели
|
||
//ChangeLayerIgnore();
|
||
mouseEnterUI();
|
||
|
||
//Включаем Канвас и выключаем все 2D панели внутри Canvas -> Panel
|
||
foreach (string panelName in panel2D.Keys)
|
||
{
|
||
panel2D[panelName].setDisabled();
|
||
}
|
||
if (panel2D[_panels2d] != null)
|
||
{
|
||
is3D = false;
|
||
panel2D[_panels2d].setEnabled();
|
||
|
||
opened2Dpanel = _panels2d;
|
||
UnityObject switchTo2DPanelObject = objects.Find(_panels2d);
|
||
if (switchTo2DPanelObject != null)
|
||
StartCoroutine(SwitchTo2DSetCurrentStates(switchTo2DPanelObject));
|
||
|
||
/*if (_panels2d == "Panel0701")
|
||
panel2D[_panels2d].transform.Find("Button0701").gameObject.GetComponent<ButtonCubik>().SetView();
|
||
if (_panels2d == "Panel0702")
|
||
panel2D[_panels2d].transform.Find("Button0702").gameObject.GetComponent<ButtonCubik>().SetView();
|
||
if (_panels2d == "Panel0801")
|
||
panel2D[_panels2d].transform.Find("Button0801").gameObject.GetComponent<ButtonCubik>().SetView();
|
||
if (_panels2d == "Panel0802")
|
||
panel2D[_panels2d].transform.Find("Button0802").gameObject.GetComponent<ButtonCubik>().SetView(); */
|
||
if (mode == "play")
|
||
backBtn.SetActive(false);
|
||
}
|
||
else
|
||
{
|
||
//panel2D[_panels2d].setDisabled();
|
||
//SwitchTo3D();
|
||
}
|
||
}
|
||
IEnumerator SwitchTo2DSetCurrentStates(UnityObject switchTo2DPanelObject)
|
||
{
|
||
while (!switchTo2DPanelObject.gameObject.GetComponent<Panel2D>().isStarted)
|
||
yield return null;
|
||
//Debug.Log("Panel " + switchTo2DPanelObject.name + " isStarted " + switchTo2DPanelObject.gameObject.GetComponent<Panel2D>().isStarted);
|
||
if (switchTo2DPanelObject.name == "Panel0901") objects.Find("Rampa0901").SetObjectState((int)cur090XangleHor);
|
||
if (switchTo2DPanelObject.name == "Panel0902") objects.Find("Rampa0902").SetObjectState((int)cur090XangleHor);
|
||
if (switchTo2DPanelObject.name == "Panel0801") objects.Find("view3_0801").SetObjectState((int)cur080XangleHor); //.curState =
|
||
if (switchTo2DPanelObject.name == "Panel0802") objects.Find("view3_0802").SetObjectState((int)cur080XangleHor);
|
||
if (switchTo2DPanelObject.name == "Panel0801") objects.Find("view2_0801").SetObjectState((int)cur080XangleVert);
|
||
if (switchTo2DPanelObject.name == "Panel0802") objects.Find("view2_0802").SetObjectState((int)cur080XangleVert);
|
||
if (switchTo2DPanelObject.name == "Panel0701") objects.Find("Handle3_0701").SetObjectState((int)cur070XangleVert);
|
||
if (switchTo2DPanelObject.name == "Panel0702") objects.Find("Handle3_0702").SetObjectState((int)cur070XangleVert);
|
||
|
||
objects.SetCurrentValues(switchTo2DPanelObject);
|
||
}
|
||
|
||
public void RecordOrigLayerHeli()
|
||
{
|
||
layersOrigHeli.Clear();
|
||
layerHeli = copter.transform.GetComponentsInChildren<Transform>();
|
||
foreach (Transform _layerHeli in layerHeli)
|
||
{
|
||
layersOrigHeli.Add(_layerHeli.gameObject.layer);
|
||
}
|
||
}
|
||
public void RecordOrigLayerPass()
|
||
{
|
||
layersOrigPass.Clear();
|
||
layersPass = passcabin.transform.GetComponentsInChildren<Transform>();
|
||
foreach (Transform _layersPass in layersPass)
|
||
{
|
||
//Debug.Log(_layerHeli.gameObject.layer + " layer");
|
||
layersOrigPass.Add(_layersPass.gameObject.layer);
|
||
}
|
||
}
|
||
public void RecordOrigLayerPilot()
|
||
{
|
||
layersOrigPilot.Clear();
|
||
layersOrigOtherPanels.Clear();
|
||
layersChangedOtherPanels.Clear();
|
||
layersPilot = pilotcabin.transform.GetComponentsInChildren<Transform>();
|
||
foreach (Transform _layersPilot in layersPilot)
|
||
{
|
||
layersOrigPilot.Add(_layersPilot.gameObject.layer);
|
||
}
|
||
/* Добавляем те панели, которые не попали в panelcabin,passcabin*/
|
||
// layersOrigOtherPanels - список с оригинальными слоями остальных панелей
|
||
// layersChangedOtherPanels - список в котором мы переводим объекты в Ignore
|
||
/*
|
||
layersOrigOtherPanels.Add(GameObject.Find("Copter/ROSH_UprDvigateliamy/Dummy005/Panel0701_3D").gameObject.layer);
|
||
layersOrigOtherPanels.Add(GameObject.Find("Copter/ROSH_UprDvigateliamy/Dummy004/Panel0702_3D").gameObject.layer);
|
||
layersOrigOtherPanels.Add(GameObject.Find("Panel0801_3D").gameObject.layer);
|
||
layersOrigOtherPanels.Add(GameObject.Find("Panel0802_3D").gameObject.layer);
|
||
layersOrigOtherPanels.Add(GameObject.Find("Copter/Putevoe_upravlenie/Panel0901_3D").gameObject.layer);
|
||
layersOrigOtherPanels.Add(GameObject.Find("Copter/Putevoe_upravlenie/Panel0902_3D").gameObject.layer);
|
||
layersOrigOtherPanels.Add(GameObject.Find("Copter/Panel1001_3D").gameObject.layer);
|
||
|
||
layersChangedOtherPanels.Add(GameObject.Find("Copter/ROSH_UprDvigateliamy/Dummy005/Panel0701_3D").gameObject.layer);
|
||
layersChangedOtherPanels.Add(GameObject.Find("Copter/ROSH_UprDvigateliamy/Dummy004/Panel0702_3D").gameObject.layer);
|
||
layersChangedOtherPanels.Add(GameObject.Find("Panel0801_3D").gameObject.layer);
|
||
layersChangedOtherPanels.Add(GameObject.Find("Panel0802_3D").gameObject.layer);
|
||
layersChangedOtherPanels.Add(GameObject.Find("Copter/Putevoe_upravlenie/Panel0901_3D").gameObject.layer);
|
||
layersChangedOtherPanels.Add(GameObject.Find("Copter/Putevoe_upravlenie/Panel0902_3D").gameObject.layer);
|
||
layersChangedOtherPanels.Add(GameObject.Find("Copter/Panel1001_3D").gameObject.layer);
|
||
*/
|
||
|
||
layersChangedOtherPanels.Add(GameObject.Find("Copter/ROSH_UprDvigateliamy/Dummy005/Panel0701_3D"));
|
||
layersChangedOtherPanels.Add(GameObject.Find("Copter/ROSH_UprDvigateliamy/Dummy004/Panel0702_3D"));
|
||
layersChangedOtherPanels.Add(GameObject.Find("Panel0801_3D"));
|
||
layersChangedOtherPanels.Add(GameObject.Find("Panel0802_3D"));
|
||
layersChangedOtherPanels.Add(GameObject.Find("Copter/Putevoe_upravlenie/Panel0901_3D"));
|
||
layersChangedOtherPanels.Add(GameObject.Find("Copter/Putevoe_upravlenie/Panel0902_3D"));
|
||
layersChangedOtherPanels.Add(GameObject.Find("Copter/Panel1001_3D"));
|
||
}
|
||
|
||
public void RecordOrigExternalPanels() // Записываем слои внешних панелей
|
||
{
|
||
layersOrigExternalPanels.Clear();
|
||
layersExternalPanels = externalpanels.transform.GetComponentsInChildren<Transform>();
|
||
foreach (Transform _layersExternalPanels in layersExternalPanels)
|
||
{
|
||
layersOrigExternalPanels.Add(_layersExternalPanels.gameObject.layer);
|
||
}
|
||
}
|
||
|
||
/* public void ChangeLayerIgnore()
|
||
{
|
||
foreach (Transform _allPanels in copter.transform.GetComponentsInChildren<Transform>())
|
||
{
|
||
_allPanels.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");
|
||
}
|
||
}*/
|
||
|
||
public void ChangeLayerDefault()
|
||
{
|
||
for (int i = 0; i < layersOrigHeli.Count; i++)
|
||
{
|
||
layerHeli[i].gameObject.layer = layersOrigHeli[i];
|
||
}
|
||
}
|
||
// Кабина пилотов слои и коллайдеры
|
||
public void ChangeLayerPilotCabineIgnore()
|
||
{
|
||
/* foreach (Transform _allPanelsPilot in pilotcabin.transform.GetComponentsInChildren<Transform>())
|
||
{
|
||
_allPanelsPilot.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");
|
||
}*/
|
||
// Остальные панели(те которые находятся в других системах) переводим в Ignore
|
||
for (int i = 0; i < layersChangedOtherPanels.Count; i++)
|
||
{
|
||
// layersChangedOtherPanels[i] = LayerMask.NameToLayer("Ignore Raycast");
|
||
layersChangedOtherPanels[i].GetComponentInChildren<Collider>().enabled = false;
|
||
}
|
||
foreach (Collider _allPanelsPilot in pilotcabin.transform.GetComponentsInChildren<Collider>())
|
||
{
|
||
_allPanelsPilot.GetComponent<Collider>().enabled = false;
|
||
}
|
||
|
||
}
|
||
public void ChangeLayerPilotCabineDefault()
|
||
{
|
||
/* for (int i = 0; i < layersOrigPilot.Count; i++)
|
||
{
|
||
layersPilot[i].gameObject.layer = layersOrigPilot[i];
|
||
}*/
|
||
// Возвращаем оставшиеся панели обратно в родные слои // upd Коллайдеры включаем
|
||
//for (int y = 0; y < layersChangedOtherPanels.Count; y++)
|
||
for (int i = 0; i < layersChangedOtherPanels.Count; i++)
|
||
{
|
||
layersChangedOtherPanels[i].GetComponentInChildren<Collider>().enabled = true;
|
||
}
|
||
foreach (Collider _allPanelsPilot in pilotcabin.transform.GetComponentsInChildren<Collider>())
|
||
{
|
||
_allPanelsPilot.GetComponent<Collider>().enabled = true;
|
||
}
|
||
}
|
||
public void DisablePilotCabineCollider()
|
||
{
|
||
foreach (Collider _allPanelsPilot in pilotcabin.transform.GetComponentsInChildren<Collider>())
|
||
{
|
||
//_allPanelsPilot.collider.enabled = false;
|
||
_allPanelsPilot.GetComponent<Collider>().enabled = false;
|
||
}
|
||
}
|
||
public void EnablePilotCabineCollider()
|
||
{
|
||
foreach (Collider _allPanelsPilot in pilotcabin.transform.GetComponentsInChildren<Collider>())
|
||
{
|
||
//_allPanelsPilot.collider.enabled = false;
|
||
_allPanelsPilot.GetComponent<Collider>().enabled = true;
|
||
}
|
||
}
|
||
|
||
|
||
// Пассажирская кабина слои и коллайдеры
|
||
public void ChangeLayerPassCabineIgnore()
|
||
{
|
||
/* foreach (Transform _allPanelsPilot in passcabin.transform.GetComponentsInChildren<Transform>())
|
||
{
|
||
_allPanelsPilot.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");
|
||
}*/
|
||
foreach (Collider _allPanelsPass in passcabin.transform.GetComponentsInChildren<Collider>())
|
||
{
|
||
_allPanelsPass.GetComponent<Collider>().enabled = false;
|
||
}
|
||
|
||
}
|
||
public void ChangeLayerPassCabineDefault()
|
||
{
|
||
/* for (int i = 0; i < layersOrigPass.Count; i++)
|
||
{
|
||
layersPass[i].gameObject.layer = layersOrigPass[i];
|
||
}*/
|
||
foreach (Collider _allPanelsPass in passcabin.transform.GetComponentsInChildren<Collider>())
|
||
{
|
||
_allPanelsPass.GetComponent<Collider>().enabled = true;
|
||
}
|
||
}
|
||
|
||
public void DisablePassCabineCollider()
|
||
{
|
||
foreach (Collider _allCollidersPass in passcabin.transform.GetComponentsInChildren<Collider>())
|
||
{
|
||
//Debug.Log(_allPanelsPilot);
|
||
//_allPanelsPilot.collider.enabled = false;
|
||
_allCollidersPass.GetComponent<Collider>().enabled = false;
|
||
}
|
||
}
|
||
public void EnablePassCabineCollider()
|
||
{
|
||
foreach (Collider _allCollidersPass in passcabin.transform.GetComponentsInChildren<Collider>())
|
||
{
|
||
//Debug.Log(_allPanelsPilot);
|
||
//_allPanelsPilot.collider.enabled = false;
|
||
_allCollidersPass.GetComponent<Collider>().enabled = true;
|
||
}
|
||
}
|
||
|
||
|
||
// Внешние системы слои
|
||
public void ChangeLayerExternalPanelsIgnore()
|
||
{
|
||
/* foreach (Transform _allPanelsExt in externalpanels.transform.GetComponentsInChildren<Transform>())
|
||
{
|
||
_allPanelsExt.gameObject.layer = LayerMask.NameToLayer("Ignore Raycast");
|
||
*//* if(_allPanelsExt.GetComponentInChildren<Collider>() != null) // Для режима scedit raycast все равно пробивает объекты "ignore raycast"
|
||
_allPanelsExt.GetComponentInChildren<Collider>().enabled = false;*//*
|
||
}*/
|
||
foreach (Collider _allPanelsExt in externalpanels.transform.GetComponentsInChildren<Collider>())
|
||
{
|
||
//Debug.Log(_allPanelsPilot);
|
||
//_allPanelsPilot.collider.enabled = false;
|
||
_allPanelsExt.GetComponent<Collider>().enabled = false;
|
||
}
|
||
}
|
||
public void ChangeLayerExternalPanelsDefault()
|
||
{
|
||
/* for (int i = 0; i < layersOrigExternalPanels.Count; i++)
|
||
{
|
||
layersExternalPanels[i].gameObject.layer = layersOrigExternalPanels[i];
|
||
*//* if (layersExternalPanels[i].GetComponentInChildren<Collider>() != null)
|
||
layersExternalPanels[i].GetComponentInChildren<Collider>().enabled = true;*//*
|
||
}*/
|
||
foreach (Collider _allPanelsExt in externalpanels.transform.GetComponentsInChildren<Collider>())
|
||
{
|
||
//Debug.Log(_allPanelsPilot);
|
||
//_allPanelsPilot.collider.enabled = false;
|
||
_allPanelsExt.GetComponent<Collider>().enabled = true;
|
||
}
|
||
}
|
||
|
||
public void mouseEnterUI()
|
||
{
|
||
//Debug.Log("зашли на UI");
|
||
isMouseOverUI = true;
|
||
ChangeLayerPassCabineIgnore();
|
||
ChangeLayerPilotCabineIgnore();
|
||
ChangeLayerExternalPanelsIgnore();
|
||
}
|
||
public void mouseExitUI()
|
||
{
|
||
if (!is3D || !isInitiated || isProgressBarChangingInProgress) return; //
|
||
if (mode == "play" && player.playMode != "waitForClick") return; // если в глобальном режиме play, то подсвечиваем объекты только при waitForClick
|
||
//Debug.Log("вышли из UI");
|
||
// ChangeLayerDefault();
|
||
|
||
isMouseOverUI = false;
|
||
if (viewmode == 1)
|
||
{
|
||
//EnablePassCabineCollider();
|
||
EnablePilotCabineCollider();
|
||
|
||
ChangeLayerPilotCabineDefault();
|
||
ChangeLayerExternalPanelsIgnore();
|
||
ChangeLayerPassCabineIgnore();
|
||
menuCabinButton.isGreen = true; menuCabinButton.OnPointerUp(null);
|
||
menuPassButton.isGreen = false; menuPassButton.OnPointerUp(null);
|
||
menuViewButton.isGreen = false; menuViewButton.OnPointerUp(null);
|
||
}
|
||
else
|
||
if (viewmode == 2)
|
||
{
|
||
EnablePassCabineCollider();
|
||
//EnablePilotCabineCollider();
|
||
|
||
ChangeLayerPilotCabineIgnore();
|
||
ChangeLayerPassCabineDefault();
|
||
ChangeLayerExternalPanelsIgnore();
|
||
menuCabinButton.isGreen = false; menuCabinButton.OnPointerUp(null);
|
||
menuPassButton.isGreen = true; menuPassButton.OnPointerUp(null);
|
||
menuViewButton.isGreen = false; menuViewButton.OnPointerUp(null);
|
||
}
|
||
else
|
||
if (viewmode == 3)
|
||
{
|
||
DisablePassCabineCollider();
|
||
DisablePilotCabineCollider();
|
||
//ChangeLayerPilotCabineIgnore();
|
||
//ChangeLayerPassCabineIgnore();
|
||
ChangeLayerExternalPanelsDefault();
|
||
menuCabinButton.isGreen = false; menuCabinButton.OnPointerUp(null);
|
||
menuPassButton.isGreen = false; menuPassButton.OnPointerUp(null);
|
||
menuViewButton.isGreen = true; menuViewButton.OnPointerUp(null);
|
||
}
|
||
}
|
||
|
||
static GameObject GetRootObject(string objName)
|
||
{
|
||
UnityEngine.SceneManagement.Scene activeScene = UnityEngine.SceneManagement.SceneManager.GetActiveScene();
|
||
GameObject[] rootObjects = activeScene.GetRootGameObjects();
|
||
|
||
// GameObject res = new GameObject();
|
||
|
||
for (int i = 0; i < rootObjects.Length; i++)
|
||
{
|
||
//Debug.Log(rootObjects[i].name);
|
||
if (string.Compare(rootObjects[i].name, objName) == 0)
|
||
{
|
||
|
||
return (rootObjects[i]);
|
||
}
|
||
}
|
||
return (null);
|
||
}
|
||
public void switchModeView() // внешний вид
|
||
{
|
||
//mode = "view";
|
||
viewmode = 3;
|
||
fusel.SetActive(true);
|
||
copter.SetActive(true);
|
||
cabines2d.SetActive(false);
|
||
cam.gameObject.SetActive(false); //canvas.SetActive(false);
|
||
skv.SetActive(true); // Для Макса СКВ трубка
|
||
//menuPlayButtons.SetActive(true);
|
||
|
||
// Закомментить
|
||
//ChangeLayerPassCabineIgnore();
|
||
//ChangeLayerPilotCabineIgnore();
|
||
//ChangeLayerExternalPanelsDefault();
|
||
DisablePassCabineCollider();
|
||
DisablePilotCabineCollider();
|
||
ChangeLayerExternalPanelsDefault();
|
||
|
||
ViewBackButton.GetComponent<Button>().onClick.Invoke();
|
||
fusel.GetComponent<ChangeSystem>().SwitchOffAllCams();
|
||
//GameObject.Find("ButtonMainBack").SetActive(false); GameObject.Find("ButtonMainBackTMP").SetActive(false);
|
||
|
||
if (menuCabinButton == null)
|
||
{
|
||
menuCabinButton = GameObject.Find("Air/view1").GetComponent<hintUI>();
|
||
menuPassButton = GameObject.Find("Air/view2").GetComponent<hintUI>();
|
||
menuViewButton = GameObject.Find("Air/view3").GetComponent<hintUI>();
|
||
}
|
||
menuCabinButton.isGreen = false; menuCabinButton.OnPointerUp(null);
|
||
menuPassButton.isGreen = false; menuPassButton.OnPointerUp(null);
|
||
menuViewButton.isGreen = true; menuViewButton.OnPointerUp(null);
|
||
|
||
|
||
}
|
||
public void switchModeFree() // внутри: кабина или грузовой
|
||
{
|
||
if (mode == "free") menuPlayButtons.SetActive(false);
|
||
copter.SetActive(true);
|
||
cabines2d.SetActive(true);
|
||
cam.gameObject.SetActive(false); //canvas.SetActive(false);
|
||
fusel.SetActive(false);
|
||
skv.SetActive(false);
|
||
copterProz.SetActive(false);// Отключать прозрачный вертолет при выходе из обзорки
|
||
EnablePassCabineCollider();
|
||
EnablePilotCabineCollider();
|
||
ChangeLayerExternalPanelsIgnore();
|
||
menuCabinButton.isGreen = true; menuCabinButton.OnPointerUp(null);
|
||
menuPassButton.isGreen = false; menuPassButton.OnPointerUp(null);
|
||
menuViewButton.isGreen = false; menuViewButton.OnPointerUp(null);
|
||
}
|
||
|
||
public void changeSkyBoxToSky()
|
||
{
|
||
RenderSettings.skybox = sky;
|
||
}
|
||
public void changeSkyBoxToPark()
|
||
{
|
||
RenderSettings.skybox = parking;
|
||
}
|
||
private bool IsMouseOverUI()
|
||
{
|
||
return EventSystem.current.IsPointerOverGameObject();
|
||
}
|
||
// && !IsMouseOverUI()
|
||
//&& !EventSystem.current.IsPointerOverGameObject()
|
||
|
||
|
||
|
||
/* **** Подсветка Selectable панелей **** */
|
||
//private void Update()
|
||
//{
|
||
|
||
/* Debug.Log("bool IsMouseOverUI " + IsMouseOverUI());
|
||
if (_selection != null )
|
||
{
|
||
var selectionRenderer = _selection.GetComponent<Renderer>();
|
||
selectionRenderer.material = defaultMaterial;
|
||
_selection = null;
|
||
|
||
}
|
||
var ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
||
RaycastHit hit;
|
||
if (Physics.Raycast(ray, out hit) && !IsMouseOverUI() )
|
||
{
|
||
//Debug.Log("bool IsMouseOverUI " + IsMouseOverUI());
|
||
var selection = hit.transform;
|
||
if (selection.CompareTag(selectableTag) )
|
||
{
|
||
var selectionRenderer = selection.GetComponent<Renderer>();
|
||
var defaultRender = selectionRenderer;
|
||
if (selectionRenderer != null)
|
||
{
|
||
defaultMaterial = selectionRenderer.material;
|
||
//Debug.Log(defaultMaterial);
|
||
selectionRenderer.material = highlightMaterial;
|
||
}
|
||
_selection = selection;
|
||
}
|
||
}*/
|
||
//}
|
||
|
||
|
||
}
|