using System.Collections.Generic; using UnityEngine; using System.IO; #if UNITY_EDITOR using UnityEditor; #endif namespace H2Engine { public class Bhv_MapTrigger : MonoBehaviour { [HideInInspector] public int id; [HideInInspector] public MapTrigger.E_TriggerType triggerType = MapTrigger.E_TriggerType.Trigger; [HideInInspector] public Evt.E_EventType type = Evt.E_EventType.Enemy; [HideInInspector] public int prevID = -1; [HideInInspector] public int nextID = -1; [HideInInspector] public List eventIDList = new List(); #if UNITY_EDITOR [HideInInspector] public BoxCollider boxCollider; private bool showDetail = false; private bool showEventList = false; public void Save(BinaryWriter bw) { bw.Write(id); bw.Write((byte)triggerType); bw.Write((byte)type); bw.Write(prevID); bw.Write(nextID); bw.Write((float)System.Math.Round(transform.position.x, 2)); bw.Write((float)System.Math.Round(transform.position.y, 2)); bw.Write((float)System.Math.Round(transform.position.z, 2)); bw.Write((float)System.Math.Round(boxCollider.size.x, 2)); bw.Write((float)System.Math.Round(boxCollider.size.z, 2)); bw.Write((float)System.Math.Round(transform.eulerAngles.y, 2)); bw.Write(eventIDList.Count); foreach (var _eventID in eventIDList) { bw.Write(_eventID); } } public void Export(BinaryWriter bw) { Save(bw); } public void Load(BinaryReader br) { id = br.ReadInt32(); triggerType = (MapTrigger.E_TriggerType)br.ReadByte(); type = (Evt.E_EventType)br.ReadByte(); prevID = br.ReadInt32(); nextID = br.ReadInt32(); float _pX = br.ReadSingle(); float _pY = br.ReadSingle(); float _pZ = br.ReadSingle(); float _x = br.ReadSingle(); float _z = br.ReadSingle(); float _eY = br.ReadSingle(); int _count = br.ReadInt32(); for (int i = 0; i < _count; ++i) { eventIDList.Add(br.ReadInt32()); } transform.position = new Vector3(_pX, _pY, _pZ); boxCollider.size = new Vector3(_x, 1, _z); transform.eulerAngles = new Vector3(0, _eY, 0); } public bool DrawUI(GUISkin guiSkin) { bool _result = false; EditorGUILayout.BeginVertical(guiSkin.box); EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); EditorGUI.indentLevel += 1; showDetail = EditorGUILayout.Foldout(showDetail, " 触发器ID:" + id, true, guiSkin.customStyles[3]); if (GUILayout.Button("查找", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22))) { Selection.activeGameObject = gameObject; if (Selection.activeGameObject) { SceneView.lastActiveSceneView.LookAt(Selection.activeGameObject.transform.position); } } if (GUILayout.Button("删除", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22))) { _result = true; } EditorGUILayout.EndHorizontal(); if (showDetail) { EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); EditorGUILayout.LabelField("触发器类型", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(80)); triggerType = (MapTrigger.E_TriggerType)EditorGUILayout.EnumPopup(triggerType, guiSkin.customStyles[1], GUILayout.Height(20), GUILayout.Width(100)); if (triggerType != MapTrigger.E_TriggerType.EnterStage) { var _descript = string.Empty; if (triggerType == MapTrigger.E_TriggerType.Trigger) { _descript = "前置ID"; } else if (triggerType == MapTrigger.E_TriggerType.Mission) { _descript = "任务ID"; } EditorGUILayout.LabelField(_descript, guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(55)); prevID = EditorGUILayout.IntField(prevID, guiSkin.textField, GUILayout.Height(20)); } EditorGUILayout.LabelField("结束触发", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(55)); nextID = EditorGUILayout.IntField(nextID, guiSkin.textField, GUILayout.Height(20)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical(guiSkin.customStyles[1]); EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); if (eventIDList.Count > 0) { showEventList = EditorGUILayout.Foldout(showEventList, " 触发事件列表", true, guiSkin.customStyles[3]); } else { EditorGUILayout.LabelField(" 触发事件列表:", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(100)); GUILayout.FlexibleSpace(); } if (GUILayout.Button("添加", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22))) { eventIDList.Add(0); showEventList = true; } EditorGUILayout.EndHorizontal(); if (showEventList) { for (int i = eventIDList.Count - 1; i >= 0; --i) { EditorGUILayout.BeginHorizontal(guiSkin.box, GUILayout.Height(22)); EditorGUILayout.LabelField("事件ID", guiSkin.customStyles[0], GUILayout.Height(20), GUILayout.Width(60)); eventIDList[i] = EditorGUILayout.IntField(eventIDList[i], guiSkin.textField, GUILayout.Height(22)); if (GUILayout.Button("删除", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22))) { eventIDList.RemoveAt(i); } EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndVertical(); } EditorGUI.indentLevel -= 1; EditorGUILayout.EndVertical(); return _result; } #endif } }