using System.Collections.Generic; using UnityEngine; using System.IO; #if UNITY_EDITOR using UnityEditor; #endif namespace H2Engine { public class Bhv_Evt_RefreshMonster : Bhv_Evt { [HideInInspector] public Evt_RefreshMonster.E_OverCondition overCondition = Evt_RefreshMonster.E_OverCondition.None; [HideInInspector] public Evt_RefreshMonster.E_RefreshType refreshType = Evt_RefreshMonster.E_RefreshType.All; [HideInInspector] public List monsterList = new List(); [HideInInspector] public int conditionParam; [HideInInspector] public int overParam; #if UNITY_EDITOR [HideInInspector] private bool showMonsterList = false; public override void Save(BinaryWriter bw) { base.Save(bw); bw.Write((byte)overCondition); bw.Write((byte)refreshType); bw.Write(conditionParam); bw.Write(overParam); bw.Write(monsterList.Count); foreach (var _monster in monsterList) { _monster.Save(bw); } } public override void Export(BinaryWriter bw) { base.Export(bw); bw.Write((byte)overCondition); bw.Write((byte)refreshType); bw.Write(conditionParam); bw.Write(overParam); bw.Write(monsterList.Count); foreach (var _monster in monsterList) { _monster.Export(bw); } } public override void Load(BinaryReader br) { base.Load(br); overCondition = (Evt_RefreshMonster.E_OverCondition)br.ReadByte(); refreshType = (Evt_RefreshMonster.E_RefreshType)br.ReadByte(); conditionParam = br.ReadInt32(); overParam = br.ReadInt32(); int _count = br.ReadInt32(); for (int i = 0; i < _count; ++i) { var _go = new GameObject(); _go.transform.SetParent(transform); _go.transform.localPosition = Vector3.zero; _go.transform.eulerAngles = Vector3.zero; _go.transform.localScale = Vector3.one; var _monsterData = _go.AddComponent(); monsterList.Add(_monsterData); _monsterData.Load(br); } } public override 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 + " | Type: " + type, 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(60)); refreshType = (Evt_RefreshMonster.E_RefreshType)EditorGUILayout.EnumPopup(refreshType, guiSkin.box, GUILayout.Height(20)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); if (refreshType == Evt_RefreshMonster.E_RefreshType.OneByOneTime) { EditorGUILayout.LabelField("等待时间", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60)); conditionParam = EditorGUILayout.IntField(conditionParam, guiSkin.textField, GUILayout.Height(20)); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); EditorGUILayout.LabelField("完成方式", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60)); overCondition = (Evt_RefreshMonster.E_OverCondition)EditorGUILayout.EnumPopup(overCondition, guiSkin.box, GUILayout.Height(20)); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); if (overCondition == Evt_RefreshMonster.E_OverCondition.DeadCount) { EditorGUILayout.LabelField("死亡数量", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60)); overParam = EditorGUILayout.IntField(overParam, guiSkin.textField, GUILayout.Height(20)); } else if (overCondition == Evt_RefreshMonster.E_OverCondition.Time) { EditorGUILayout.LabelField("结束时间", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60)); overParam = EditorGUILayout.IntField(overParam, guiSkin.textField, GUILayout.Height(20)); } EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginVertical(guiSkin.customStyles[1]); EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); showMonsterList = EditorGUILayout.Foldout(showMonsterList, " 刷怪列表", true, guiSkin.customStyles[3]); if (GUILayout.Button("添加", guiSkin.button, GUILayout.Width(60), GUILayout.Height(22))) { var _go = new GameObject("RefreshMonster"); _go.transform.SetParent(transform); _go.transform.localPosition = Vector3.zero; _go.transform.eulerAngles = Vector3.zero; _go.transform.localScale = Vector3.one; var _monsterData = _go.AddComponent(); monsterList.Add(_monsterData); showMonsterList = true; } EditorGUILayout.EndHorizontal(); if (showMonsterList) { for (int i = monsterList.Count - 1; i >= 0; --i) { EditorGUILayout.BeginHorizontal(GUILayout.Height(22)); EditorGUILayout.LabelField("NPCID", guiSkin.customStyles[0], GUILayout.Height(22), GUILayout.Width(60)); var _npcID = monsterList[i].npcID; monsterList[i].npcID = EditorGUILayout.IntField(monsterList[i].npcID, guiSkin.textField, GUILayout.Height(20)); if (_npcID != monsterList[i].npcID) { monsterList[i].name = monsterList[i].npcID + "_RefreshNPC"; } if (GUILayout.Button("定高", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20))) { Vector3 _pos = monsterList[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, LayerUtility.WalkbleMask)) { monsterList[i].transform.position = _hit.point; } } if (GUILayout.Button("查找", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20))) { Selection.activeGameObject = monsterList[i].gameObject; if (Selection.activeGameObject) { SceneView.lastActiveSceneView.LookAt(Selection.activeGameObject.transform.position); } } if (GUILayout.Button("删除", guiSkin.button, GUILayout.Width(60), GUILayout.Height(20))) { DestroyImmediate(monsterList[i].gameObject); monsterList.RemoveAt(i); } EditorGUILayout.EndHorizontal(); } } EditorGUILayout.EndVertical(); } EditorGUI.indentLevel -= 1; EditorGUILayout.EndVertical(); return _result; } #endif } }