Readd missing import files
This commit is contained in:
@@ -0,0 +1,173 @@
|
||||
using UnityEngine;
|
||||
using System.Collections;
|
||||
using System.Collections.Generic;
|
||||
using DG.Tweening;
|
||||
using System;
|
||||
using Wing.Utils;
|
||||
|
||||
namespace Wing.Gizmos
|
||||
{
|
||||
public class CameraNavigator : MonoBehaviour
|
||||
{
|
||||
public const int ElementType = 999;
|
||||
public Vector3 Pos = new Vector3(0.8f, 0.8f, 1);
|
||||
|
||||
public enum ENaviType
|
||||
{
|
||||
PX,
|
||||
NX,
|
||||
PY,
|
||||
NY,
|
||||
PZ,
|
||||
NZ,
|
||||
Center,
|
||||
}
|
||||
|
||||
public Camera RendererCamera;
|
||||
public GameObject NaviRoot;
|
||||
private List<GameObject> Navis = new List<GameObject>();
|
||||
|
||||
private List<Vector3> _angles = new List<Vector3>() {
|
||||
Vector3.left, Vector3.right,
|
||||
Vector3.down, Vector3.up,
|
||||
Vector3.back, Vector3.forward,
|
||||
Vector3.zero };
|
||||
private List<Color> _colors = new List<Color>() {
|
||||
Color.red, Color.white,
|
||||
Color.green, Color.white,
|
||||
Color.blue, Color.white,
|
||||
Color.white };
|
||||
private List<MeshRenderer> _naviRenders = new List<MeshRenderer>();
|
||||
private Camera _camera;
|
||||
private bool _enableNaviUpdate = true;
|
||||
private TouchInteraction _interacton;
|
||||
|
||||
void Start()
|
||||
{
|
||||
_camera = Camera.main;
|
||||
|
||||
this.gameObject.SetLayerWithChildren(Settings.NavLayerName);
|
||||
var displayCam = this.gameObject.GetComponentInChildren<Camera>();
|
||||
if(displayCam != null)
|
||||
{
|
||||
displayCam.cullingMask = 1 << this.gameObject.layer;
|
||||
}
|
||||
|
||||
_interacton = this.gameObject.AddComponent<TouchInteraction>();
|
||||
_interacton.Set(RendererCamera, 1 << this.gameObject.layer);
|
||||
_interacton.HoverTargetChangedEvent += _interacton_HoverTargetChangedEvent;
|
||||
_interacton.SelectedEvent += _interacton_SelectedEvent;
|
||||
|
||||
for (int i = 0; i < NaviRoot.transform.childCount; i++)
|
||||
{
|
||||
Transform t = NaviRoot.transform.GetChild(i);
|
||||
Navis.Add(t.gameObject);
|
||||
|
||||
MeshRenderer mr = t.GetComponent<MeshRenderer>();
|
||||
_naviRenders.Add(mr);
|
||||
}
|
||||
}
|
||||
|
||||
private void _interacton_SelectedEvent(ElementTag tag)
|
||||
{
|
||||
if (!_enableNaviUpdate)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
for (int i = 0; i < Navis.Count; i++)
|
||||
{
|
||||
_naviRenders[i].material.color = _colors[i];
|
||||
|
||||
Navis[i].SetActive(true);
|
||||
}
|
||||
|
||||
if (tag != null)
|
||||
{
|
||||
int id = int.Parse(tag.ID);
|
||||
|
||||
if (id == (int)ENaviType.Center)
|
||||
{
|
||||
//CameraCtrl.Instance.Reset(CameraCtrl.Instance.StateType, CameraCtrl.Instance.Locked, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
_enableNaviUpdate = false;
|
||||
|
||||
//var currentAngle = _camera.transform.forward;
|
||||
//var targetAngle = _angles[id];
|
||||
var euler = Quaternion.LookRotation(_angles[id], Vector3.up).eulerAngles;
|
||||
Color color = _naviRenders[id].material.color;
|
||||
Tweener tweener = _camera.transform.DORotate(euler, 0.5f);
|
||||
tweener.OnComplete(() =>
|
||||
{
|
||||
_enableNaviUpdate = true;
|
||||
Navis[id].SetActive(false);
|
||||
}).OnUpdate(() =>
|
||||
{
|
||||
color.a = 1 - tweener.timeScale;
|
||||
_naviRenders[id].material.color = color;
|
||||
}).Play();
|
||||
|
||||
//_camera.gameObject.Tween(0.5f)
|
||||
// .SetUpdate((scale) =>
|
||||
// {
|
||||
// color.a = 1 - scale;
|
||||
// _naviRenders[id].material.color = color;
|
||||
// _camera.transform.forward = Vector3.Slerp(currentAngle, targetAngle, scale);
|
||||
// }).
|
||||
// SetComplete(() =>
|
||||
// {
|
||||
// _enableNaviUpdate = true;
|
||||
// Navis[id].SetActive(false);
|
||||
// _camera.transform.forward = targetAngle;
|
||||
// return false;
|
||||
// }).
|
||||
// Play();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
private void _interacton_HoverTargetChangedEvent(ElementTag tag)
|
||||
{
|
||||
if (_interacton.LastSelectedTag != null)
|
||||
{
|
||||
int id = int.Parse(_interacton.LastSelectedTag.ID);
|
||||
_naviRenders[id].material.color = _colors[id];
|
||||
}
|
||||
if (tag != null)
|
||||
{
|
||||
int id = int.Parse(tag.ID);
|
||||
ENaviType ntype = (ENaviType)id;
|
||||
Color color = _naviRenders[id].material.color * 0.3f;
|
||||
color.a = 1;
|
||||
_naviRenders[id].material.color = color;
|
||||
}
|
||||
}
|
||||
|
||||
private void UpdateNavi()
|
||||
{
|
||||
NaviRoot.transform.eulerAngles = -_camera.transform.eulerAngles;
|
||||
|
||||
Vector3 angles = _camera.transform.eulerAngles;
|
||||
float min = 20;
|
||||
if (Mathf.Abs(angles.x % 90) > min ||
|
||||
Mathf.Abs(angles.y % 90) > min ||
|
||||
Mathf.Abs(angles.z % 90) > min)
|
||||
{
|
||||
for (int i = 0; i < Navis.Count; i++)
|
||||
{
|
||||
_naviRenders[i].material.color = _colors[i];
|
||||
|
||||
Navis[i].SetActive(true);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void Update()
|
||||
{
|
||||
|
||||
UpdateNavi();
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user