private void DrawGenericMenu() { if (GUILayout.Button(SkillEditTempData.settingTex, EditorStyles.toolbarButton, GUILayout.Width(20))) { GenericMenu toolsMenu = new GenericMenu(); for (int j = 0; j < SkillEditorUtility.timeLineTypes.Count; j++) { int copyj = j; var display = SkillEditorUtility.GetDisplayAttr(SkillEditorUtility.timeLineTypes[j]); if (display != null) { GenericMenu.MenuFunction func = () => { var tl = Activator.CreateInstance(SkillEditorUtility.timeLineTypes[copyj]) as TimeLine; timglineGroup.TimeLines.Add(tl); eTimelines.Add(new ETimeline(this, tl)); }; toolsMenu.AddItem(new GUIContent("添加/" + display.DisplayName), false, func); GenericMenu.MenuFunction pasteFunc = () => { var tl = SkillEditTempData.copyItem as TimeLine; timglineGroup.TimeLines.Add(tl); eTimelines.Add(new ETimeline(this, tl)); }; if (SkillEditTempData.copyItem != null && SkillEditTempData.copyItem is TimeLine) { toolsMenu.AddItem(new GUIContent("粘贴"), false, pasteFunc); } } } var e = UnityEngine.Event.current; toolsMenu.DropDown(new Rect(e.mousePosition.x, e.mousePosition.y, 0, 0)); EditorGUIUtility.ExitGUI(); } }
public void Draw() { GUILayout.BeginVertical(); GUILayout.BeginHorizontal(GUILayout.MinWidth(150)); DisplayAttribute displayAttr = SkillEditorUtility.GetDisplayAttr(timeline.GetType()); GUILayout.Space(30); if (GUILayout.Button((displayAttr.DisplayName + " 时长:" + timeline.FrameCount + " 次数:" + timeline.Times), "Label")) { SkillEditTempData.editingItemCache = timeline; // OnSelected.Invoke(timeline); } DrawGenericMenu(); GUILayout.EndHorizontal(); for (int i = 0; i < list.Count; i++) { if (list[i].action.GetType().Equals(typeof(BaseAction))) { } else { list[i].Draw(); } } GUILayout.EndVertical(); }
public void Initiate() { SkillEditTempData.copyItem = null; SkillEditTempData.editingItem = null; SkillEditTempData.editingItemCache = null; SkillEditTempData.editingSkill = null; Type[] typelist = SkillEditorUtility.GetAllClasses(); SkillEditorUtility.timeLineTypes.Clear(); SkillEditorUtility.actionTypes.Clear(); foreach (Type t in typelist) { if (typeof(BaseAction).IsAssignableFrom(t)) { SkillEditorUtility.actionTypes.Add(t); } else if (typeof(TimeLine).IsAssignableFrom(t)) { SkillEditorUtility.timeLineTypes.Add(t); } else if (typeof(Skill).IsAssignableFrom(t)) { SkillEditorUtility.skillTypes.Add(t); } else if (typeof(Buff).IsAssignableFrom(t)) { SkillEditorUtility.buffTypes.Add(t); } else if (typeof(Logic.Skill.Event).IsAssignableFrom(t)) { SkillEditorUtility.eventTypes.Add(t); } } fileInfos.Clear(); _runtimeOperatePanel = new ERuntimeOperatePanel(); _actionDetailPanel = new EShowActionDetailPanel(); GetFiles(SkillUtility.GetRequiredConfigsPath(), fileInfos, null); SkillEditTempData.settingTex = AssetDatabase.LoadAssetAtPath <Texture2D>("Assets/Editor/Image/setting.png"); }
public override void Draw() { GUILayout.BeginHorizontal(GUILayout.MinWidth(400)); GUILayout.Space(30 * 2); GUI.color = Color.white; int val = (int)GUILayout.HorizontalSlider((float)action.ExecuteFrameIndex, 0, parent.timeline.FrameCount, GUILayout.MinWidth(150)); if (val != action.ExecuteFrameIndex) { SkillEditorUtility.SetValue(action, "ExecuteFrameIndex", val); } GUI.color = Color.white; DrawGenericMenu(); GUI.color = Color.white; var attr = SkillEditorUtility.GetDisplayAttr(action.GetType()); if (GUILayout.Button(attr.DisplayName + " 调用帧数" + action.ExecuteFrameIndex.ToString("000"), "Label")) { SkillEditTempData.editingItemCache = action; } GUI.color = Color.white; GUILayout.EndHorizontal(); base.Draw(); }
public void DrawGenericMenu() { if (GUILayout.Button(SkillEditTempData.settingTex, EditorStyles.toolbarButton, GUILayout.MaxWidth(20))) { GenericMenu toolsMenu = new GenericMenu(); GenericMenu.MenuFunction func = () => { if (action == SkillEditTempData.editingItem) { SkillEditTempData.editingItem = null; } parent.RemoveAction(this); }; toolsMenu.AddItem(new GUIContent("删除"), false, func); GenericMenu.MenuFunction copyFunc = () => { SkillEditTempData.copyItem = SkillEditorUtility.Clone(action); }; toolsMenu.AddItem(new GUIContent("复制"), false, copyFunc); Event e = Event.current; toolsMenu.DropDown(new Rect(e.mousePosition.x, e.mousePosition.y, 0, 0)); EditorGUIUtility.ExitGUI(); } }
public void DrawGenericMenu() { if (GUILayout.Button(SkillEditTempData.settingTex, EditorStyles.toolbarButton, GUILayout.MaxWidth(20))) { int cur_tl_index = parent.timglineGroup.TimeLines.IndexOf(timeline); GenericMenu toolsMenu = new GenericMenu(); GenericMenu.MenuFunction moveUpFunc = () => { var tempTl = this.timeline; parent.timglineGroup.TimeLines[cur_tl_index] = parent.timglineGroup.TimeLines[cur_tl_index - 1]; parent.timglineGroup.TimeLines[cur_tl_index - 1] = tempTl; }; if (cur_tl_index != 0) { toolsMenu.AddItem(new GUIContent("向上"), false, moveUpFunc); } GenericMenu.MenuFunction moveDownFunc = () => { var tempTl = parent.timglineGroup.TimeLines[cur_tl_index]; parent.timglineGroup.TimeLines[cur_tl_index] = parent.timglineGroup.TimeLines[cur_tl_index + 1]; parent.timglineGroup.TimeLines[cur_tl_index + 1] = tempTl; }; if (cur_tl_index != parent.timglineGroup.TimeLines.Count - 1) { toolsMenu.AddItem(new GUIContent("向下"), false, moveDownFunc); } GenericMenu.MenuFunction copyFunc = () => { SkillEditTempData.copyItem = SkillEditorUtility.Clone(parent.timglineGroup.TimeLines[cur_tl_index]); }; toolsMenu.AddItem(new GUIContent("复制"), false, copyFunc); GenericMenu.MenuFunction pasteFunc = () => { timeline.BaseActions.Add(SkillEditTempData.copyItem as BaseAction); list.Add(new EActionControl(this, SkillEditTempData.copyItem as BaseAction)); }; if (SkillEditTempData.copyItem != null && SkillEditTempData.copyItem is BaseAction) { toolsMenu.AddItem(new GUIContent("粘贴"), false, pasteFunc); } for (int j = 0; j < SkillEditorUtility.actionTypes.Count; j++) { int copyj = j; var display = SkillEditorUtility.GetDisplayAttr(SkillEditorUtility.actionTypes[j]); if (display != null) { GenericMenu.MenuFunction func = () => { var new_action = Activator.CreateInstance(SkillEditorUtility.actionTypes[copyj]) as BaseAction; timeline.BaseActions.Add(new_action); this.list.Add(new EActionControl(this, new_action)); }; if (typeof(DisplayAction).IsAssignableFrom(SkillEditorUtility.actionTypes[j])) { toolsMenu.AddItem(new GUIContent("添加/表现/" + display.DisplayName), false, func); } else { toolsMenu.AddItem(new GUIContent("添加/逻辑/" + display.DisplayName), false, func); } } } GenericMenu.MenuFunction del_func = () => { if (SkillEditTempData.editingItem == timeline) { SkillEditTempData.editingItem = null; } parent.RemoveTimeline(this); }; toolsMenu.AddItem(new GUIContent("删除"), false, del_func); Event e = Event.current; toolsMenu.DropDown(new Rect(e.mousePosition.x, e.mousePosition.y, 0, 0)); EditorGUIUtility.ExitGUI(); } }
public void Draw() { if (SkillEditTempData.editingItem != null) { Dictionary <string, List <PropertyInfo> > group_items = new Dictionary <string, List <PropertyInfo> >(); PropertyInfo[] fields = SkillEditTempData.editingItem.GetType().GetProperties(); for (int i = 0; i < fields.Length; i++) { var displayAttributes = fields[i].GetCustomAttributes(typeof(DisplayAttribute), true) as DisplayAttribute[];//.FieldType.GetCustomAttributes<DisplayAttribute>(); foreach (var displayAttribute in displayAttributes) { if (!group_items.ContainsKey(displayAttribute.GroupName)) { group_items.Add(displayAttribute.GroupName, new List <PropertyInfo>()); } group_items[displayAttribute.GroupName].Add(fields[i]); } } foreach (var groupItem in group_items) { GUILayout.Label(groupItem.Key); for (int i = 0; i < groupItem.Value.Count; i++) { PropertyInfo fi = groupItem.Value[i]; var displayAttr = SkillEditorUtility.GetDisplayAttr(fi); GUILayout.BeginHorizontal(GUILayout.MinWidth(100)); GUILayout.Space(space); GUILayout.Label(displayAttr.DisplayName); GUILayout.Space(space); if (displayAttr.ControlType == UIControlType.Range) { TimeLine tl = GetTimeLine(); var val = fi.GetValue(SkillEditTempData.editingItem, null); var new_val = GUILayout.HorizontalSlider((int)val, 0, tl.FrameCount, GUILayout.MinWidth(100), GUILayout.MaxWidth(200), GUILayout.ExpandWidth(false)); fi.SetValue(SkillEditTempData.editingItem, (int)new_val, null); GUILayout.Label(new_val.ToString("0.00")); } else if (displayAttr.ControlType == UIControlType.MutiSelection) { System.Array enumValues = System.Enum.GetValues(displayAttr.data as Type); GUILayout.BeginVertical(); foreach (var item in enumValues) { int val = (int)item; int storedVal = (int)fi.GetValue(SkillEditTempData.editingItem, null); bool check = (storedVal & val) != 0; bool new_check = GUILayout.Toggle(check, item.ToString(), GUILayout.MinWidth(70)); if (new_check != check) { if (new_check) { storedVal += val; } else { storedVal -= val; } fi.SetValue(SkillEditTempData.editingItem, storedVal, null); } } GUILayout.EndVertical(); } else if (displayAttr.ControlType == UIControlType.Default) { if (fi.PropertyType == typeof(string)) { string val = fi.GetValue(SkillEditTempData.editingItem, null) as string; val = val == null ? "" : val; int textFieldID = GUIUtility.GetControlID("TextField".GetHashCode(), FocusType.Keyboard) + 1; if (textFieldID != 0) { val = SkillEditorUtility.HandleCopyPaste(textFieldID) ?? val; } string new_val = GUILayout.TextField(val, GUILayout.MinWidth(100)); fi.SetValue(SkillEditTempData.editingItem, new_val, null); } else if (fi.PropertyType == typeof(int)) { int val = (int)fi.GetValue(SkillEditTempData.editingItem, null); string new_val = GUILayout.TextField(val.ToString(), GUILayout.MinWidth(70)); if (int.TryParse(new_val, out val)) { fi.SetValue(SkillEditTempData.editingItem, val, null); } } else if (fi.PropertyType == typeof(bool)) { bool val = (bool)fi.GetValue(SkillEditTempData.editingItem, null); bool new_val = GUILayout.Toggle(val, "", GUILayout.MinWidth(70)); fi.SetValue(SkillEditTempData.editingItem, new_val, null); } else if (fi.PropertyType == typeof(float)) { float val = (float)fi.GetValue(SkillEditTempData.editingItem, null); string new_val = GUILayout.TextField(val.ToString(), GUILayout.MinWidth(70)); if (new_val != val.ToString() && float.TryParse(new_val, out val)) { fi.SetValue(SkillEditTempData.editingItem, val, null); } } else if (fi.PropertyType.IsEnum) { var val = fi.GetValue(SkillEditTempData.editingItem, null) as Enum; var new_val = EditorGUILayout.EnumPopup("", val, GUILayout.MinWidth(70)); fi.SetValue(SkillEditTempData.editingItem, new_val, null); } else if (fi.PropertyType == typeof(FixedAnimationCurve)) { var val = fi.GetValue(SkillEditTempData.editingItem, null) as FixedAnimationCurve; if (val == null) { val = new FixedAnimationCurve(); } AnimationCurve ac = new AnimationCurve(); if (val.Keyframes.Count > 0) { Keyframe[] keyframes = new Keyframe[val.Keyframes.Count]; for (int j = 0; j < val.Keyframes.Count; j++) { var ori_key = val.Keyframes[j]; keyframes[j] = new Keyframe(ori_key.time.ToFloat(), ori_key.value.ToFloat(), ori_key.inTangent.ToFloat(), ori_key.outTangent.ToFloat()); keyframes[j].tangentMode = ori_key.tangentMode; } ac.keys = keyframes; } var new_val = EditorGUILayout.CurveField("", ac); val.Keyframes.Clear(); List <FixedKeyFrame> ckfs = new List <FixedKeyFrame>(); for (int j = 0; j < new_val.keys.Length; j++) { Keyframe kf = new_val.keys[j]; val.AddKeyFrame(new FixedKeyFrame() { time = kf.time.ToLong(), value = kf.value.ToLong(), inTangent = kf.inTangent.ToLong(), outTangent = kf.outTangent.ToLong(), tangentMode = kf.tangentMode }); } fi.SetValue(SkillEditTempData.editingItem, val, null); } else if (fi.PropertyType == typeof(List <EventTrigger>)) { GUILayout.BeginVertical(); var val = fi.GetValue(SkillEditTempData.editingItem, null) as List <EventTrigger>; if (GUILayout.Button("添加事件", GUILayout.MaxWidth(70))) { val.Add(new EventTrigger()); } for (int j = 0; j < val.Count; j++) { GUILayout.BeginHorizontal(); DisplayAttribute event_display_attr = SkillEditorUtility.GetDisplayAttr(SkillEditorUtility.GetPropertyInfo(val[j], "e")); GUILayout.Label(event_display_attr.DisplayName); var res = (Logic.Skill.EventType)EditorGUILayout.EnumPopup("", val[j].e, GUILayout.MinWidth(70)); if ((int)res < (int)Logic.Skill.EventType.MEELEEWEAPONHIT) { res = Logic.Skill.EventType.MEELEEWEAPONHIT; } SkillEditorUtility.SetValue(val[j], "e", res); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); DisplayAttribute path_display_attr = SkillEditorUtility.GetDisplayAttr(SkillEditorUtility.GetPropertyInfo(val[j], "path")); GUILayout.Label(path_display_attr.DisplayName); var path = GUILayout.TextField(val[j].EventId.ToString(), GUILayout.MinWidth(70)); SkillEditorUtility.SetValue(val[j], "path", path); GUILayout.Space(space); if (GUILayout.Button("删除")) { val.RemoveAt(j); } GUILayout.EndHorizontal(); } fi.SetValue(SkillEditTempData.editingItem, val, null); GUILayout.EndVertical(); } else if (fi.PropertyType.Name.Contains("DataBind")) { object val = fi.GetValue(SkillEditTempData.editingItem, null); Type db_type = val.GetType(); var db_properites = db_type.GetProperties((BindingFlags)int.MaxValue); bool needBind = false; for (int j = 0; j < db_properites.Length; j++) { if (db_properites[j].Name.Contains("needDataBind")) { needBind = (bool)(db_properites[j].GetValue(val, null)); GUILayout.Label("数据绑定"); bool new_needBind = GUILayout.Toggle(needBind, ""); if (new_needBind != needBind) { db_properites[j].SetValue(val, new_needBind, null); } break; } } if (needBind) { for (int j = 0; j < db_properites.Length; j++) { if (db_properites[j].Name.Contains("bindFrom")) { GUILayout.Label("数据源字段"); string bindFrom = (string)(db_properites[j].GetValue(val, null)); if (bindFrom == null) { bindFrom = ""; } string new_bindFrom = GUILayout.TextField(bindFrom, GUILayout.Width(50)); if (bindFrom != new_bindFrom) { db_properites[j].SetValue(val, new_bindFrom, null); } break; } } } else { for (int j = 0; j < db_properites.Length; j++) { if (db_properites[j].Name.Contains("value_SetDirectly")) { GUILayout.Label("数据"); var genericTypes = fi.PropertyType.GetGenericArguments(); if (genericTypes[0] == typeof(int)) { int bindFrom = (int)(db_properites[j].GetValue(val, null)); string new_bindFrom_str = GUILayout.TextField(bindFrom.ToString(), GUILayout.Width(50)); int new_bindFrom; if (int.TryParse(new_bindFrom_str, out new_bindFrom)) { if (bindFrom != new_bindFrom) { db_properites[j].SetValue(val, new_bindFrom, null); } } } break; } } } } } GUILayout.EndHorizontal(); } } } }