Files
MI-38/Heli_with_panels/Assets/Scripts/Manager.cs
2022-07-06 12:36:49 +03:00

763 lines
35 KiB
C#
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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;
}
}*/
//}
}