165 lines
3.9 KiB
C#
165 lines
3.9 KiB
C#
using QFramework;
|
||
using QFramework.Example;
|
||
using System;
|
||
using System.Collections;
|
||
using System.Collections.Generic;
|
||
using UnityEngine;
|
||
using UnityEngine.EventSystems;
|
||
using XMLTool;
|
||
using static UnityEditor.Progress;
|
||
|
||
public class Body3DController : MonoSingleton<Body3DController>
|
||
{
|
||
|
||
Body3DController() { }
|
||
|
||
Dictionary<GameObject, Body3DOjbItem> objs = new Dictionary<GameObject, Body3DOjbItem>();
|
||
|
||
bool selectIsGroup = false;
|
||
|
||
public List<GameObject> isOnList = new List<GameObject>();
|
||
public override void OnSingletonInit()
|
||
{
|
||
base.OnSingletonInit();
|
||
|
||
TypeEventSystem.Global.Register<OnBody3DStart>((arg) =>
|
||
{
|
||
Refresh();
|
||
}).UnRegisterWhenGameObjectDestroyed(gameObject);
|
||
|
||
TypeEventSystem.Global.Register<OnModuleQuit>(OnClear);
|
||
TypeEventSystem.Global.Register<OnBody3DGroupTypeChanged>(OnToggleSelectType);
|
||
TypeEventSystem.Global.Register<OnBody3DSelected>(OnBody3DSelectedHandler);
|
||
}
|
||
|
||
private void OnBody3DSelectedHandler(OnBody3DSelected selected)
|
||
{
|
||
|
||
if (selected.isOn)
|
||
{
|
||
if (isOnList.Contains(selected.obj) == false)
|
||
{
|
||
if (selectIsGroup == false)
|
||
{
|
||
ClearObjectToggle();
|
||
}
|
||
isOnList.Add(selected.obj);
|
||
}
|
||
}
|
||
else
|
||
{
|
||
if (isOnList.Contains(selected.obj))
|
||
{
|
||
isOnList.Remove(selected.obj);
|
||
selected.obj.GetComponent<ObjectToggle>().Set(false);
|
||
}
|
||
}
|
||
}
|
||
|
||
public void Active(GameObject obj, bool isActive, bool isOther)
|
||
{
|
||
if (isOther)
|
||
{
|
||
foreach (var item in objs)
|
||
{
|
||
if (item.Key != obj)
|
||
{
|
||
item.Key.SetActive(isOther);
|
||
}
|
||
}
|
||
}
|
||
else
|
||
{
|
||
obj.SetActive(isActive);
|
||
}
|
||
}
|
||
public void Transparent(GameObject obj, bool isTransparent, bool isOther)
|
||
{
|
||
if (isOther)
|
||
{
|
||
foreach (var item in objs)
|
||
{
|
||
if (item.Key != obj)
|
||
{
|
||
Utility.SetSurfaceType(item.Key.GetComponent<MeshRenderer>().material, isTransparent);
|
||
}
|
||
}
|
||
|
||
}
|
||
else
|
||
{
|
||
Utility.SetSurfaceType(obj.GetComponent<MeshRenderer>().material, isTransparent);
|
||
}
|
||
}
|
||
private void OnToggleSelectType(OnBody3DGroupTypeChanged type)
|
||
{
|
||
selectIsGroup = type.isGroup;
|
||
}
|
||
|
||
private void OnClear(OnModuleQuit quit)
|
||
{
|
||
Clear();
|
||
}
|
||
|
||
public void Refresh()
|
||
{
|
||
Parser(Global.Instance.cur3DPart);
|
||
}
|
||
|
||
public void Parser(Body3D.Body body)
|
||
{
|
||
GameObject obj = Utility.FindObj(body.Path);
|
||
var bodyObjItem = obj.GetOrAddComponent<Body3DOjbItem>();
|
||
bodyObjItem.Init(body);
|
||
objs.Add(obj, bodyObjItem);
|
||
if (body.subBody != null)
|
||
{
|
||
foreach (var item in body.subBody)
|
||
{
|
||
Parser(item.Value);
|
||
}
|
||
}
|
||
}
|
||
|
||
|
||
|
||
private void Update()
|
||
{
|
||
if (Input.GetMouseButtonDown(0) && EventSystem.current.IsPointerOverGameObject() == false)
|
||
{
|
||
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD><DFB5><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>
|
||
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
|
||
RaycastHit hit;
|
||
if (Physics.Raycast(ray, out hit))
|
||
{
|
||
GameObject obj = hit.collider.gameObject;
|
||
|
||
}
|
||
else
|
||
{
|
||
if (selectIsGroup == false)
|
||
{
|
||
ClearObjectToggle();
|
||
}
|
||
}
|
||
}
|
||
}
|
||
|
||
public void ClearObjectToggle()
|
||
{
|
||
for (int i = isOnList.Count - (1); i >= 0; i--)
|
||
{
|
||
isOnList[i].GetComponent<ObjectToggle>().Set(false);
|
||
}
|
||
}
|
||
|
||
public void Clear()
|
||
{
|
||
objs.Clear();
|
||
}
|
||
|
||
|
||
|
||
|
||
}
|