Files
2022-07-06 12:36:49 +03:00

257 lines
9.9 KiB
C#
Raw Permalink 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.UI;
using System;
using System.Linq;
public class MakeActive : MonoBehaviour //, IPointerEnterHandler
{
// public Color _defaultRender;
Material activeMaterial;
public Dictionary<string, GameObject> switchesList3D = new Dictionary<string, GameObject>(); // Обычные переключатели 3D
public Dictionary<string, GameObject> switchesList3Dh = new Dictionary<string, GameObject>(); // Переключатели 3D горизонтальные
public List<Material> materials = new List<Material>();
public List<Material> greenMaterials = new List<Material>();
public Renderer[] renderers;
public bool materialsReplaced = false;
Manager man;
public Material door_03_rend;
public Material door_03_mat;
//**** для подсказок
private GameObject hint3D;
public GameObject go;
private string t;
private GameObject canvasM;
//****
//void Start() // Вернуть потом назад
public void Start()
{
activeMaterial = Resources.Load<Material>("materials/Зелен");
man = GameObject.Find("Manager").GetComponent<Manager>();
//Debug.Log(activeMaterial);
renderers = this.transform.parent.GetComponentsInChildren<Renderer>();
RecordChildrenMaterials();
FindAndAddCoverVertical(); //Ищем крышки которые поворачиваются вертикально по тегу и вешаем скрипт поворота
FindAndAddCoverHorizontal(); //Ищем крышки которые поворачиваются горизонтально по тегу и вешаем скрипт поворота
FindAndAddSwitchVertikal(); //Ищем переключатели, вешаем скрипт поворота Switch3DRotate.cs
FindAndAddSwitchHorizontal();
canvasM = GameObject.Find("CanvasMenu");
go = man.prefabHint;
t = "";
foreach (KeyValuePair<string, string> p in panelName.allPanelsList)
{
if (String.Compare(p.Key, this.transform.parent.name) == 0)
{
t = panelName.allPanelsList[this.transform.parent.name];
}
}
}
//private void OnMouseEnter()
public void OnMouseEnter()
{
/* foreach (Transform child in this.transform.parent) //получить всех детей
{
//_defaultRender = child.GetComponent<Renderer>().material.color;
// child.GetComponent<Renderer>().material.color = Color.green;
}*/
ReplaceMaterialsWithActive();
//if (man.mode == "scedit" || man.mode == "play") return;
if (hint.IsHint && t != "")
{
hint3D = OnHint(this.gameObject, go, t);
}
}
public GameObject OnHint(GameObject btn, GameObject objGo, string t)
{
Vector3 mousePos = Input.mousePosition;
Vector2 hintPos = new Vector2(mousePos.x, mousePos.y);
GameObject hintObj = Instantiate(objGo, canvasM.transform);
hintObj.transform.position = hintPos;
Text txt = hintObj.GetComponentInChildren<Text>();
txt.text = t;
var hintBase = hintObj.GetComponentInChildren<Image>();
var s = txt.text.Length;
var upper = 0;
foreach (char letter in t.Where(char.IsUpper))
upper++;
var sizeX = (s- upper) * 11.2f+(upper*15.5f);
if ((sizeX + hintBase.transform.position.x) > 1920)
{
float pos = hintObj.transform.localPosition.x - sizeX;
if (pos < 0) pos = -30;
hintObj.transform.localPosition = new Vector2(pos, hintObj.transform.localPosition.y);
}
return hintObj;
}
//private void OnMouseExit()
public void OnMouseExit()
{
if (!hlight.l)
{
RestoreChildrenMaterials();
}
Destroy(hint3D);
}
private void RecordChildrenMaterials()
{
materials.Clear(); greenMaterials.Clear();
foreach (var renderer in renderers)
{
materials.Add(renderer.material);
if (this.name == "door_03")
{
Material[] door_03_rend = GameObject.Find("Copter/Fuzeliazh/Door_03/door_03").GetComponent<Renderer>().materials;
Material greenMat = new Material(door_03_rend[1]);
greenMat.SetColor("_EmissionColor", new Color(9f / 255f, 82f / 255f, 4f / 255f));
greenMaterials.Add(greenMat);
}
else if (this.name == "door_04")
{
Material[] door_04_rend = GameObject.Find("Copter/Fuzeliazh/Door_04/door_04").GetComponent<Renderer>().materials;
Material greenMat = new Material(door_04_rend[1]);
greenMat.SetColor("_EmissionColor", new Color(9f / 255f, 82f / 255f, 4f / 255f));
greenMaterials.Add(greenMat);
}
else
{
Material greenMat = new Material(renderer.material); //activeMaterial // renderer.material
greenMat.SetColor("_EmissionColor", new Color(9f / 255f, 82f / 255f, 4f / 255f));
greenMaterials.Add(greenMat);
}
}
}
public void RestoreChildrenMaterials()
{
for (int i = 0; i < renderers.Length; i++)
{
renderers[i].material = materials[i];
}
materialsReplaced = false;
}
public void ReplaceMaterialsWithActive()
{
//Debug.Log("ReplaceMaterialsWithActive: " + this.name);
if (activeMaterial != null)
{
for (int i = 0; i < renderers.Length; i++)
renderers[i].material = greenMaterials[i]; // = activeMaterial;
}
else
{
Debug.LogError("Active Material is not set!");
}
materialsReplaced = true;
}
void OnMouseDown()
{
if (man.mode == "scedit" || man.mode == "play") return;
// Скрываем люки под которыми спрятаны панели. Еще не решили нужно ли
if (this.transform.parent.gameObject.name == "Group019" || this.transform.parent.gameObject.name == "Group020") this.transform.parent.gameObject.SetActive(false);
//if (man.mode == "scedit") return;
//Debug.Log(this.transform.parent.name + " кликаю панель");
//Здесь проверку на not null сделать. Не все активные области являются панелями.
if (string.Compare(this.transform.parent.name.Substring(this.transform.parent.name.Length - 2), "3D") == 0 && this.transform.parent.name != null)
{
string panel2d = this.transform.parent.name.Substring(0, this.transform.parent.name.Length - 3);
//Debug.Log("MakeActive: " + panel2d);
// Может тут подвязать наш канвас и обзорку Максима
//man.cabines2d.SetActive(true);
//man.canvas.SetActive(true);
//man.fusel.SetActive(false);
man.SwitchTo2D(panel2d);
}
}
private void FindAndAddCoverVertical()
{
string s1 = this.transform.parent.name.Substring(this.transform.parent.name.Length - 7); // окончание названия панели например 0506_3D
string s2 = "Cover";
GameObject[] cover3Dv = GameObject.FindGameObjectsWithTag("cover3Dv");
foreach (GameObject _cover3Dv in cover3Dv)
{
if (_cover3Dv.name.EndsWith(s1) && _cover3Dv.name.StartsWith(s2))
{
//Debug.Log(_cover3Dv.name);
_cover3Dv.AddComponent<Cover3DVrotate>();
//switchesList3D.Add(sw.name, sw);
}
}
}
private void FindAndAddCoverHorizontal()
{
string s1 = this.transform.parent.name.Substring(this.transform.parent.name.Length - 7); // окончание названия панели например 0506_3D
string s2 = "Cover";
GameObject[] cover3Dh = GameObject.FindGameObjectsWithTag("cover3Dh");
foreach (GameObject _cover3Dh in cover3Dh)
{
if (_cover3Dh.name.EndsWith(s1) && _cover3Dh.name.StartsWith(s2))
{
//Debug.Log(_cover3Dh.name);
_cover3Dh.AddComponent<Cover3DHrotate>();
//_cover3Dh.AddComponent<Animation>();
//switchesList3D.Add(sw.name, sw);
}
}
}
private void FindAndAddSwitchVertikal()
{
string s1 = this.transform.parent.name.Substring(this.transform.parent.name.Length - 7); // окончание названия панели например 0506_3D
string s2 = "Tumbler";
GameObject[] switches3D = GameObject.FindGameObjectsWithTag("toggle3D");
foreach (GameObject sw in switches3D)
{
if (sw.name.EndsWith(s1) && sw.name.StartsWith(s2))
{
//Debug.Log(sw.name);
sw.AddComponent<Switch3DRotate>();
switchesList3D.Add(sw.name, sw);
}
}
}
private void FindAndAddSwitchHorizontal()
{
string s1 = this.transform.parent.name.Substring(this.transform.parent.name.Length - 7); // окончание названия панели например 0506_3D
string s2 = "Tumbler";
GameObject[] switches3Dh = GameObject.FindGameObjectsWithTag("toggle3Dh");
foreach (GameObject _switches3Dh in switches3Dh)
{
if (_switches3Dh.name.EndsWith(s1) && _switches3Dh.name.StartsWith(s2))
{
//Debug.Log(sw.name);
_switches3Dh.AddComponent<Switch3DHRotate>();
switchesList3Dh.Add(_switches3Dh.name, _switches3Dh);
}
}
}
}