using UnityEngine;
|
using System.Collections.Generic;
|
using System.IO;
|
|
#if UNITY_EDITOR
|
using UnityEditor;
|
#endif
|
|
namespace H2Engine
|
{
|
public class Bhv_Trasfer : MonoBehaviour
|
{
|
[HideInInspector]
|
public int id;
|
[HideInInspector]
|
public MapTrasfer.E_TransferType transferType = MapTrasfer.E_TransferType.None;
|
[HideInInspector]
|
public int param;
|
[HideInInspector]
|
public List<Bhv_TransferPoint> pointList = new List<Bhv_TransferPoint>();
|
|
#if UNITY_EDITOR
|
|
private bool showDetail;
|
|
public void Save(BinaryWriter bw)
|
{
|
bw.Write((byte)transferType);
|
bw.Write(param);
|
bw.Write(pointList.Count);
|
foreach (var _point in pointList)
|
{
|
_point.Save(bw);
|
}
|
}
|
|
public void SaveJson(System.Text.StringBuilder stringBuilder)
|
{
|
stringBuilder.Append("{");
|
stringBuilder.Append("\"transferType\":").Append((byte)transferType).Append(",");
|
stringBuilder.Append("\"param\":").Append(param).Append(",");
|
stringBuilder.Append("\"pointList\":[");
|
if (pointList.Count > 0)
|
{
|
pointList[0].SaveJson(stringBuilder);
|
for (int i = 1; i < pointList.Count; ++i)
|
{
|
stringBuilder.Append(",");
|
pointList[i].SaveJson(stringBuilder);
|
}
|
}
|
stringBuilder.Append("]");
|
stringBuilder.Append("}");
|
}
|
|
public void LoadJson(LitJson.JsonData json)
|
{
|
transferType = (MapTrasfer.E_TransferType)(byte)json["transferType"];
|
param = (int)json["param"];
|
var _pointList = json["pointList"];
|
for (int i = 0; i < _pointList.Count; ++i)
|
{
|
var _go = new GameObject(pointList.Count + "_TransferPoint");
|
_go.transform.SetParent(transform);
|
_go.transform.localPosition = Vector3.zero;
|
_go.transform.eulerAngles = Vector3.zero;
|
_go.transform.localScale = Vector3.one;
|
var _transferPoint = _go.AddComponent<Bhv_TransferPoint>();
|
_transferPoint.capsuleCollider = _go.AddComponent<CapsuleCollider>();
|
pointList.Add(_transferPoint);
|
|
_transferPoint.LoadJson(_pointList[i]);
|
}
|
}
|
|
public void Export(BinaryWriter bw)
|
{
|
bw.Write((byte)transferType);
|
bw.Write(param);
|
bw.Write(pointList.Count);
|
foreach (var _point in pointList)
|
{
|
_point.Export(bw);
|
}
|
}
|
|
public void Load(BinaryReader br)
|
{
|
transferType = (MapTrasfer.E_TransferType)br.ReadByte();
|
param = br.ReadInt32();
|
int _count = br.ReadInt32();
|
for (int i = 0; i < _count; ++i)
|
{
|
var _go = new GameObject(pointList.Count + "_TransferPoint");
|
_go.transform.SetParent(transform);
|
_go.transform.localPosition = Vector3.zero;
|
_go.transform.eulerAngles = Vector3.zero;
|
_go.transform.localScale = Vector3.one;
|
var _transferPoint = _go.AddComponent<Bhv_TransferPoint>();
|
_transferPoint.capsuleCollider = _go.AddComponent<CapsuleCollider>();
|
pointList.Add(_transferPoint);
|
|
_transferPoint.Load(br);
|
}
|
}
|
|
public bool DrawUI(Bhv_MapData mapData, GUISkin guiSkin)
|
{
|
bool _result = false;
|
EditorGUILayout.BeginVertical(guiSkin.box);
|
EditorGUILayout.BeginHorizontal(GUILayout.Height(20));
|
EditorGUI.indentLevel += 1;
|
showDetail = EditorGUILayout.Foldout(showDetail, " No." + mapData.transferList.IndexOf(this), true, guiSkin.customStyles[3]);
|
if (GUILayout.Button("删除", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
|
{
|
_result = true;
|
}
|
EditorGUILayout.EndHorizontal();
|
if (showDetail)
|
{
|
EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
|
EditorGUILayout.LabelField("类型", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(40));
|
transferType = (MapTrasfer.E_TransferType)EditorGUILayout.EnumPopup(transferType, guiSkin.box, GUILayout.Height(20));
|
EditorGUILayout.EndHorizontal();
|
if (transferType == MapTrasfer.E_TransferType.Other)
|
{
|
EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
|
EditorGUILayout.LabelField("MapID", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(40));
|
param = EditorGUILayout.IntField(param, guiSkin.textField, GUILayout.Height(20));
|
EditorGUILayout.EndHorizontal();
|
}
|
|
EditorGUILayout.BeginVertical(guiSkin.customStyles[1]);
|
|
EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
|
EditorGUILayout.LabelField("传送点列表", guiSkin.customStyles[0], GUILayout.Height(20));
|
if (GUILayout.Button("添加", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20)))
|
{
|
var _go = new GameObject(pointList.Count + "_TransferPoint");
|
_go.transform.SetParent(transform);
|
_go.transform.localPosition = Vector3.zero;
|
_go.transform.eulerAngles = Vector3.zero;
|
_go.transform.localScale = Vector3.one;
|
var _transferPoint = _go.AddComponent<Bhv_TransferPoint>();
|
_transferPoint.capsuleCollider = _go.AddComponent<CapsuleCollider>();
|
pointList.Add(_transferPoint);
|
}
|
EditorGUILayout.EndHorizontal();
|
if (pointList.Count > 0)
|
{
|
for (int i = pointList.Count - 1; i >= 0; --i)
|
{
|
if (pointList[i] == null)
|
{
|
pointList.RemoveAt(i);
|
continue;
|
}
|
EditorGUILayout.BeginVertical(guiSkin.box);
|
EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
|
EditorGUILayout.LabelField("[" + (i + 1) + "]", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(25));
|
EditorGUILayout.LabelField("特效", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(25));
|
var _effectID = pointList[i].effectID;
|
_effectID = EditorGUILayout.IntField(_effectID, guiSkin.textField, GUILayout.Height(20));
|
if (_effectID != pointList[i].effectID)
|
{
|
if (EffectConfig.Has(_effectID))
|
{
|
var _prefab = InstanceResourcesLoader.LoadEffect(_effectID);
|
if (_prefab)
|
{
|
if (pointList[i].Effect)
|
{
|
DestroyImmediate(pointList[i].Effect);
|
pointList[i].Effect = null;
|
}
|
pointList[i].Effect = Instantiate(_prefab);
|
pointList[i].Effect.transform.SetParent(pointList[i].transform);
|
pointList[i].Effect.transform.localPosition = Vector3.zero;
|
pointList[i].Effect.transform.localScale = Vector3.one;
|
pointList[i].Effect.transform.rotation = Quaternion.identity;
|
pointList[i].effectID = _effectID;
|
}
|
}
|
}
|
EditorGUILayout.EndHorizontal();
|
|
if (i - 1 >= 0)
|
{
|
EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
|
EditorGUILayout.LabelField("到上一个节点的动作", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(120));
|
pointList[i].stateNameBack = EditorGUILayout.TextField(pointList[i].stateNameBack, guiSkin.textField, GUILayout.Height(20));
|
EditorGUILayout.LabelField("时间", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(25));
|
pointList[i].flyTimeBack = EditorGUILayout.FloatField(pointList[i].flyTimeBack, guiSkin.textField, GUILayout.Height(20));
|
EditorGUILayout.EndHorizontal();
|
}
|
|
if (i + 1 < pointList.Count)
|
{
|
EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
|
EditorGUILayout.LabelField("到下一个节点的动作", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(120));
|
pointList[i].stateNameFront = EditorGUILayout.TextField(pointList[i].stateNameFront, guiSkin.textField, GUILayout.Height(20));
|
EditorGUILayout.LabelField("时间", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(25));
|
pointList[i].flyTimeFront = EditorGUILayout.FloatField(pointList[i].flyTimeFront, guiSkin.textField, GUILayout.Height(20));
|
EditorGUILayout.EndHorizontal();
|
}
|
|
EditorGUILayout.BeginHorizontal(GUILayout.Height(22));
|
if (GUILayout.Button("定高", guiSkin.button, GUILayout.Height(20)))
|
{
|
Vector3 _pos = pointList[i].transform.position;
|
_pos.y = 0;
|
RaycastHit _hit;
|
|
Ray _ray = new Ray(_pos + Vector3.up * 100, Vector3.down);
|
if (Physics.Raycast(_ray, out _hit, 200, 1 << LayerMask.NameToLayer("WalkbleLayer")))
|
{
|
pointList[i].transform.position = _hit.point;
|
}
|
}
|
if (GUILayout.Button("查找", guiSkin.button, GUILayout.Height(20)))
|
{
|
Selection.activeGameObject = pointList[i].gameObject;
|
if (Selection.activeGameObject)
|
{
|
SceneView.lastActiveSceneView.LookAt(Selection.activeGameObject.transform.position);
|
}
|
}
|
if (GUILayout.Button("删除", guiSkin.button, GUILayout.Height(20)))
|
{
|
DestroyImmediate(pointList[i].gameObject);
|
pointList.RemoveAt(i);
|
}
|
EditorGUILayout.EndHorizontal();
|
EditorGUILayout.EndVertical();
|
}
|
}
|
EditorGUILayout.EndVertical();
|
}
|
|
EditorGUI.indentLevel -= 1;
|
EditorGUILayout.EndVertical();
|
return _result;
|
}
|
#endif
|
}
|
}
|