public void OpenWindow(float fTotalTime, float fTime, EActionFrameType eType, ActionFrameData data) { ClearHintPoint(); m_Instance.SetBaseInfo(fTotalTime, fTime, eType, data); m_Instance.Init(); Repaint(); }
protected void SetBaseInfo(float fTotalTime, float fTime, EActionFrameType eType, ActionFrameData data) { m_fTime = fTime; m_fTotalTime = fTotalTime; m_eFrameType = eType; m_ActionFrameData = data; if (data == null) { //m_ActionFrameData = new ActionFrameData(); return; } if (data.TargetIDs != null) { m_lstTargetIDs = data.TargetIDs; m_nTargetObjectNum = m_lstTargetIDs.Count; m_nTargetObjectLastNum = m_lstTargetIDs.Count; } this.Focus(); }
private void OnGUI() { GUILayout.Space(WINDOW_SPACE); EditorGUILayout.LabelField("<color=#00FFFF>方案:</color>", titleStyle); if (GUI.Button(new Rect(Screen.width - 20, 0, 20, 20), "X", titleStyle)) { var option = EditorUtility.DisplayDialog("关闭编辑器", "未保存的数据将会丢失", "确定", "取消"); if (option) { CloseWindow(); } } #region 方案 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { if (GUILayout.Button("选择方案", GUILayout.Width(100f))) { ActionListWindow.Instance.OpenWindow(); } if (GUILayout.Button("创建方案", GUILayout.Width(100f))) { m_bIsCreateNew = true; } if (GUILayout.Button("重置面板", GUILayout.Width(100f))) { var option = EditorUtility.DisplayDialog("警告", "重置面板将清除本地数据", "确定", "取消"); if (option) { ClearData(); } } if (GUILayout.Button("取代方案", GUILayout.Width(100f))) { OnReplaceFile(); } if (GUILayout.Button("同步方案", GUILayout.Width(100f))) { OnSyncFile(); } if (GUILayout.Button("合并方案", GUILayout.Width(100f))) { OnMergeFile(); } if (GUILayout.Button("备份方案", GUILayout.Width(100f))) { OnBackupFile(); } } EditorGUILayout.EndHorizontal(); #endregion if (m_bIsCreateNew) { GUILayout.Space(WINDOW_VETICAL_SPACE); EditorGUILayout.LabelField("编辑:", titleStyle); #region 编辑 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { if (m_bIsPaused) { if (GUILayout.Button("播放", GUILayout.Width(100f))) { OnPlay(); } } else { if (GUILayout.Button("暂停", GUILayout.Width(100f))) { OnPaused(); } } if (GUILayout.Button("停止", GUILayout.Width(100f))) { OnStop(); } string save = m_FileData == null ? "初始化" : "保存"; if (GUILayout.Button(save, GUILayout.Width(100f))) { OnSave(); } } EditorGUILayout.EndHorizontal(); #endregion GUILayout.Space(WINDOW_VETICAL_SPACE); EditorGUILayout.LabelField("场景:", titleStyle); #region 场景 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("地图选择:", GUILayout.Width(60f)); m_ObjMap = (GameObject)EditorGUILayout.ObjectField(m_ObjMap, typeof(GameObject), true, GUILayout.Width(200f)); if (null != m_ObjMap && !FileUtils.IsEndof(m_ObjMap.name, "_map")) { m_ObjMap = null; } EditorGUILayout.LabelField("剧情名称:", GUILayout.Width(60f)); m_CurrentActionName = EditorGUILayout.TextField(m_CurrentActionName, GUILayout.Width(100f)); EditorGUILayout.LabelField("剧情ID:", GUILayout.Width(60f)); m_MapIDInputBuffer = EditorGUILayout.TextField(m_MapIDInputBuffer, GUILayout.Width(50f)); EditorGUILayout.LabelField("地形ID:", GUILayout.Width(60f)); m_TerrainID = EditorGUILayout.IntField(m_TerrainID, GUILayout.Width(50f)); if (GUILayout.Button("刷新地形", GUILayout.Width(100f))) { CloseTerrain(); OpenTerrain(); } int id = m_CurrentEditiongMapId; if (int.TryParse(m_MapIDInputBuffer, out id)) { m_CurrentEditiongMapId = id; } CheckMap(); CheckCamera(); } EditorGUILayout.EndHorizontal(); #endregion if (m_FileData == null) { return; } GUILayout.Space(WINDOW_VETICAL_SPACE); EditorGUILayout.LabelField("时间轴:", titleStyle); #region 时间轴 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { GUILayout.Space(WINDOW_SPACE); m_DurationInputBuffer = EditorGUILayout.TextArea(m_DurationInputBuffer, GUILayout.Width(50f)); float duration = m_fActionDuration; if (float.TryParse(m_DurationInputBuffer, out duration)) { m_fActionDuration = duration; } if (GUILayout.Button("<", GUILayout.Width(20f))) { m_fAniTimeValue -= ANIM_PERFRAME_LENGTH; if (m_fAniTimeValue < 0f) { m_fAniTimeValue = 0f; } OnChangePlayerTimeLine(m_fAniTimeValue); } if (GUILayout.Button(">", GUILayout.Width(20f))) { m_fAniTimeValue += ANIM_PERFRAME_LENGTH; if (m_fAniTimeValue > m_fActionDuration) { m_fAniTimeValue = m_fActionDuration; } OnChangePlayerTimeLine(m_fAniTimeValue); } m_fAniTimeValue = EditorGUILayout.Slider(m_fAniTimeValue, 0, m_fActionDuration, GUILayout.Width(ANIM_BAR_LENGTH)); if (!m_bPlay && m_fAniTimeValue != m_fAniTimeLastValue) { OnChangePlayerTimeLine(m_fAniTimeValue); } } EditorGUILayout.EndHorizontal(); #endregion #region 时间轴节点 if (m_KeyFrameDataDict != null) { int iIndex = 0; foreach (KeyValuePair <float, KeyframeData> unit in m_KeyFrameDataDict) { float fTime = 0f; float.TryParse(unit.Key.ToString("f2"), out fTime); float fPercent = (float)unit.Key / m_fActionDuration; if (null != unit.Value) { Rect rctA = new Rect(TIMELINE_START_X + ANIM_BAR_REAL_LENGTH * fPercent, TIMELINE_START_Y + (iIndex % 2 == 0 ? TIMELINE_OFFSET_UP : TIMELINE_OFFSET_DOWN), TIMELINE_WIDTH, TIMELINE_HIGHT); bool bPress = GUI.Button(rctA, "aaaa"); Texture tex = unit.Value.isSelected == true ? m_KeyframeTexRed : m_KeyframeTexBlue; GUI.DrawTexture(rctA, tex); if (Event.current.type == EventType.used && rctA.Contains(Event.current.mousePosition)) { //Debug.Log("asdsd" + iIndex.ToString()); } if (bPress) { ResetKeyFrameTex(); OnClickTimeFrameTex(unit); //Debug.Log(Event.current.mousePosition.ToString()); //Debug.Log(rctA.ToString()); if (Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("设置当前节点时间"), false, OnChangeFrameTime, unit.Value); menu.ShowAsContext(); Event.current.Use(); } } } ++iIndex; } } #endregion GUILayout.Space(WINDOW_VETICAL_SPACE); //EditorGUILayout.LabelField("使用对象:", titleStyle); if (NGUIEditorTools.DrawHeader("使用对象")) { #region 使用对象 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("对象数量: ", GUILayout.Width(60f)); m_nAffectedObjectNum = EditorGUILayout.IntField(m_nAffectedObjectNum, GUILayout.Width(60f)); if (!m_bPlay && m_nAffectedObjectNum != m_nAffectedObjectLastNum) { m_AffectedObjects = new GameObject[m_nAffectedObjectNum]; } EditorGUILayout.BeginVertical(); { for (int i = 0; i < m_AffectedObjects.Length; i++) { m_AffectedObjects[i] = (GameObject)EditorGUILayout.ObjectField(m_AffectedObjects[i], typeof(GameObject), true, GUILayout.Width(200f)); } } EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); #endregion GUILayout.Space(WINDOW_VETICAL_SPACE); } #region runtime param GUILayout.Space(WINDOW_VETICAL_SPACE); if (NGUIEditorTools.DrawHeader("运行时数据")) { EditorGUILayout.BeginHorizontal(); { if (GUILayout.Button("运行时数据编辑", GUILayout.Width(200f))) { AERuntimeParamEditorWindow.OpenWndow(m_RuntimeParam); } } EditorGUILayout.EndHorizontal(); } #endregion GUILayout.Space(WINDOW_VETICAL_SPACE); if (NGUIEditorTools.DrawHeader("节点")) { #region 创建节点 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { m_eActionFrameType = (EActionFrameType)EditorGUILayout.Popup((int)m_eActionFrameType, m_szActionFrameName, GUILayout.Width(150f)); if (m_eActionFrameType != EActionFrameType.Max) { if (GUILayout.Button("创建节点", GUILayout.Width(100f))) { if (Event.current.button == 0) { InsertFrame(m_eActionFrameType, null); } else if (Event.current.button == 1 && m_lstCopyedData != null && m_lstCopyedData.Count > 0) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("粘贴节点"), false, OnPasteFrameData); menu.ShowAsContext(); Event.current.Use(); } } } else { if (m_lstCopyedData != null && m_lstCopyedData.Count > 0) { if (GUILayout.Button("粘贴节点", GUILayout.Width(100f))) { OnPasteFrameData(); } } } } EditorGUILayout.EndHorizontal(); #endregion //EditorGUILayout.LabelField("节点列表:", titleStyle); #region 节点列表 GUILayout.Space(WINDOW_SPACE); GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) }); //draw line m_EventScorllPos = EditorGUILayout.BeginScrollView(m_EventScorllPos); { if (m_FileData != null && m_FileData.FrameDatalist != null) { List <ActionFrameData> lstTemp = m_FileData.FrameDatalist; GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) }); //draw line // whether has selected frame bool wetherSelected = false; float selectedTime = 0f; foreach (KeyframeData data in m_KeyFrameDataDict.Values) { if (data.isSelected) { wetherSelected = true; selectedTime = (float)data.framedatalist[0].Time; } } // for (int i = 0; i < lstTemp.Count; i++) { if (null == lstTemp[i]) { continue; } if (wetherSelected) { if (lstTemp[i].Time != selectedTime) { continue; } } else if (m_eActionFrameType != EActionFrameType.Max) { if ((EActionFrameType)lstTemp[i].Type != m_eActionFrameType) { continue; } } GUILayout.Space(5); EditorGUILayout.BeginHorizontal(); { GUIStyle textColor = new GUIStyle(); textColor.normal.textColor = GetFrameTypeColor(m_szActionFrameName[lstTemp[i].Type]); if (m_lstSelectedFrameData != null && m_lstSelectedFrameData.Count > 0) { if (m_lstSelectedFrameData.Contains(lstTemp[i])) { textColor.normal.textColor = Color.magenta; } } textColor.alignment = TextAnchor.MiddleLeft; GUILayout.Space(5); if (GUILayout.Button("X", GUILayout.Width(20f))) { var option = EditorUtility.DisplayDialog("确定要删除节点吗?", "确定吗?确定吗?确定吗?确定吗?确定吗?", "确定", "取消"); if (option) { OnStop(); DelFrame(lstTemp[i]); Repaint(); break; } else { OnStop(); } } GUILayout.Space(5); if (GUILayout.Button("编辑节点", GUILayout.Width(100f))) { OnStop(); InsertFrame((EActionFrameType)lstTemp[i].Type, lstTemp[i]); break; } GUILayout.Space(15); if (GUILayout.Button((i + 1).ToString() + ". 时间: " + lstTemp[i].Time.ToString("f2"), textColor, GUILayout.Width(100f), GUILayout.Height(20f))) { if (Event.current.button == 0) { OnClickFrame(lstTemp[i]); } else if (Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("复制节点"), false, OnCopyFrameData, lstTemp[i]); if (m_lstSelectedFrameData != null && m_lstSelectedFrameData.Count > 0) { menu.AddItem(new GUIContent("复制选择的节点"), false, OnCopySelectedAction); menu.AddItem(new GUIContent("平移选择的节点"), false, OnChangeSelectedActionTime); menu.AddItem(new GUIContent("取消选择的节点"), false, OnCancelSelectedAction); } if (m_lstCopyedData != null && m_lstCopyedData.Count > 0) { menu.AddItem(new GUIContent("粘贴节点在此时间位置"), false, OnPasteFrameData, (float)lstTemp[i].Time); } menu.ShowAsContext(); Event.current.Use(); } else if (Event.current.button == 2) { if (m_lstSelectedFrameData == null) { m_lstSelectedFrameData = new List <ActionFrameData>(); } m_lstSelectedFrameData.Add(lstTemp[i]); Debug.Log(lstTemp[i].ToString() + " added into SelectedFrameData"); } } GUILayout.Space(15f); if (GUILayout.Button("类型: " + m_szActionFrameName[lstTemp[i].Type], textColor, GUILayout.Width(150f), GUILayout.Height(20f))) { if (Event.current.button == 0) { OnClickFrame(lstTemp[i]); } else if (Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("复制节点"), false, OnCopyFrameData, lstTemp[i]); if (m_lstSelectedFrameData != null && m_lstSelectedFrameData.Count > 0) { menu.AddItem(new GUIContent("复制选择的节点"), false, OnCopySelectedAction); menu.AddItem(new GUIContent("平移选择的节点"), false, OnChangeSelectedActionTime); menu.AddItem(new GUIContent("取消选择的节点"), false, OnCancelSelectedAction); } if (m_lstCopyedData != null && m_lstCopyedData.Count > 0) { menu.AddItem(new GUIContent("粘贴节点在此时间位置"), false, OnPasteFrameData, (float)lstTemp[i].Time); } menu.ShowAsContext(); Event.current.Use(); } else if (Event.current.button == 2) { if (m_lstSelectedFrameData == null) { m_lstSelectedFrameData = new List <ActionFrameData>(); } m_lstSelectedFrameData.Add(lstTemp[i]); Debug.Log(lstTemp[i].ToString() + " added into SelectedFrameData"); } } GUILayout.Space(15f); if (GUILayout.Button("使用对象ID: ", textColor, GUILayout.Width(70f), GUILayout.Height(20f))) { if (Event.current.button == 0) { OnClickFrame(lstTemp[i]); } else if (Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("复制节点"), false, OnCopyFrameData, lstTemp[i]); if (m_lstSelectedFrameData != null && m_lstSelectedFrameData.Count > 0) { menu.AddItem(new GUIContent("复制选择的节点"), false, OnCopySelectedAction); menu.AddItem(new GUIContent("平移选择的节点"), false, OnChangeSelectedActionTime); menu.AddItem(new GUIContent("取消选择的节点"), false, OnCancelSelectedAction); } if (m_lstCopyedData != null && m_lstCopyedData.Count > 0) { menu.AddItem(new GUIContent("粘贴节点在此时间位置"), false, OnPasteFrameData, (float)lstTemp[i].Time); } menu.ShowAsContext(); Event.current.Use(); } else if (Event.current.button == 2) { if (m_lstSelectedFrameData == null) { m_lstSelectedFrameData = new List <ActionFrameData>(); } m_lstSelectedFrameData.Add(lstTemp[i]); Debug.Log(lstTemp[i].ToString() + " added into SelectedFrameData"); } } if (lstTemp[i].TargetIDs != null && lstTemp[i].TargetIDs.Count > 0) { System.Text.StringBuilder str = new System.Text.StringBuilder(); List <int> tempList = lstTemp[i].TargetIDs; for (int index = 0; index < tempList.Count; index++) { str.Append(tempList[index].ToString()); str.Append(" "); } EditorGUILayout.LabelField(str.ToString(), textColor, GUILayout.Height(20f)); } GUILayout.FlexibleSpace(); } EditorGUILayout.EndHorizontal(); GUILayout.Space(5); GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) }); //draw line } } } EditorGUILayout.EndScrollView(); #endregion } } m_fAniTimeLastValue = m_fAniTimeValue; m_nAffectedObjectLastNum = m_nAffectedObjectNum; if (Event.current.type == EventType.mouseUp && EditorWindow.mouseOverWindow == this) { OnClickWindow(); } }
public void InsertFrame(EActionFrameType eType, ActionFrameData frameData) { if (null != frameData) { m_fAniTimeValue = (float)frameData.Time; OnChangePlayerTimeLine(m_fAniTimeValue); } switch (eType) { case EActionFrameType.ShakeCamera: ShakeCameraFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.MoveCamera: MoveCameraFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.PlayAudio: PlayAudioFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.StopAudio: StopAudioFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.AddNpc: AddNpcFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.AnimChar: AnimCharFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.MoveObject: MoveFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.EnableObject: EnableObjFrameEidt.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.EnableMeshRender: EnableMeshRenderFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.ChangeColor: ChangeColorFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.Runtime_CreateEffect: Runtime_CreateEffectFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.Runtime_MoveEffect: Runtime_MoveEffectFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.Runtime_AttackExec: Runtime_AttackExecFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.Runtime_RemoveEffect: Runtime_RemoveEffectFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.AddStateEffect: AddStateEffectFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.Runtime_AddUI: AddUIFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.Runtime_RemoveUI: RemoveUIFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.MoveChar: MoveCharFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.EntityPlayAnimation: EntityPlayAnimFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.RotateChar: RotateCharFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.RotateCamera: RotateCameraFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.ObjTransform: ObjectTransformFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; case EActionFrameType.FuncMethod: FuncMethodFrameEdit.Instance.OpenWindow(m_fActionDuration, m_fAniTimeValue, eType, frameData); break; } }
public void OpenWindow(float fTotalTime, float fTime, EActionFrameType eType, ActionFrameData data) { m_Instance.SetBaseInfo(fTotalTime, fTime, eType, data); m_Instance.Init(); Repaint(); }
private void OnGUI() { GUILayout.Space(WINDOW_SPACE); EditorGUILayout.LabelField("<color=#00FFFF>方案:</color>", titleStyle); if (GUI.Button(new Rect(Screen.width - 20, 0, 20, 20), "X", titleStyle)) { var option = EditorUtility.DisplayDialog("关闭编辑器", "未保存的数据将会丢失", "确定", "取消"); if (option) { CloseWindow(); } } #region 方案 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { if (GUILayout.Button("选择方案", GUILayout.Width(100f))) { ActionListWindow.Instance.OpenWindow(); } if (GUILayout.Button("创建方案", GUILayout.Width(100f))) { m_bIsCreateNew = true; } if (GUILayout.Button("重置面板", GUILayout.Width(100f))) { var option = EditorUtility.DisplayDialog("警告", "重置面板将清除本地数据", "确定", "取消"); if (option) { ClearData(); } } if (GUILayout.Button("取代方案", GUILayout.Width(100f))) { OnReplaceFile(); } if (GUILayout.Button("同步方案", GUILayout.Width(100f))) { OnSyncFile(); } if (GUILayout.Button("合并方案", GUILayout.Width(100f))) { OnMergeFile(); } if (GUILayout.Button("备份方案", GUILayout.Width(100f))) { OnBackupFile(); } } EditorGUILayout.EndHorizontal(); #endregion if (m_bIsCreateNew) { GUILayout.Space(WINDOW_VETICAL_SPACE); EditorGUILayout.LabelField("编辑:", titleStyle); #region 编辑 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { if (m_bIsPaused) { if (GUILayout.Button("播放", GUILayout.Width(100f))) { OnPlay(); } } else { if (GUILayout.Button("暂停", GUILayout.Width(100f))) { OnPaused(); } } if (GUILayout.Button("停止", GUILayout.Width(100f))) { OnStop(); } string save = m_FileData == null ? "初始化" : "保存"; if (GUILayout.Button(save, GUILayout.Width(100f))) { OnSave(); } } EditorGUILayout.EndHorizontal(); #endregion GUILayout.Space(WINDOW_VETICAL_SPACE); EditorGUILayout.LabelField("场景:", titleStyle); #region 场景 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("地图选择:", GUILayout.Width(60f)); m_ObjMap = (GameObject)EditorGUILayout.ObjectField(m_ObjMap, typeof(GameObject), true, GUILayout.Width(200f)); if (null != m_ObjMap && !FileUtils.IsEndof(m_ObjMap.name, "_map")) { m_ObjMap = null; } EditorGUILayout.LabelField("剧情名称:", GUILayout.Width(60f)); m_CurrentActionName = EditorGUILayout.TextField(m_CurrentActionName, GUILayout.Width(100f)); EditorGUILayout.LabelField("剧情ID:", GUILayout.Width(60f)); m_MapIDInputBuffer = EditorGUILayout.TextField(m_MapIDInputBuffer, GUILayout.Width(50f)); EditorGUILayout.LabelField("地形ID:", GUILayout.Width(60f)); m_TerrainID = EditorGUILayout.IntField(m_TerrainID, GUILayout.Width(50f)); if (GUILayout.Button("刷新地形", GUILayout.Width(100f))) { CloseTerrain(); OpenTerrain(); } int id = m_CurrentEditiongMapId; if (int.TryParse(m_MapIDInputBuffer, out id)) { m_CurrentEditiongMapId = id; } CheckMap(); CheckCamera(); } EditorGUILayout.EndHorizontal(); #endregion if (m_FileData == null) return; GUILayout.Space(WINDOW_VETICAL_SPACE); EditorGUILayout.LabelField("时间轴:", titleStyle); #region 时间轴 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { GUILayout.Space(WINDOW_SPACE); m_DurationInputBuffer = EditorGUILayout.TextArea(m_DurationInputBuffer, GUILayout.Width(50f)); float duration = m_fActionDuration; if (float.TryParse(m_DurationInputBuffer, out duration)) { m_fActionDuration = duration; } if (GUILayout.Button("<", GUILayout.Width(20f))) { m_fAniTimeValue -= ANIM_PERFRAME_LENGTH; if (m_fAniTimeValue < 0f) { m_fAniTimeValue = 0f; } OnChangePlayerTimeLine(m_fAniTimeValue); } if (GUILayout.Button(">", GUILayout.Width(20f))) { m_fAniTimeValue += ANIM_PERFRAME_LENGTH; if (m_fAniTimeValue > m_fActionDuration) { m_fAniTimeValue = m_fActionDuration; } OnChangePlayerTimeLine(m_fAniTimeValue); } m_fAniTimeValue = EditorGUILayout.Slider(m_fAniTimeValue, 0, m_fActionDuration, GUILayout.Width(ANIM_BAR_LENGTH)); if (!m_bPlay && m_fAniTimeValue != m_fAniTimeLastValue) { OnChangePlayerTimeLine(m_fAniTimeValue); } } EditorGUILayout.EndHorizontal(); #endregion #region 时间轴节点 if (m_KeyFrameDataDict != null) { int iIndex = 0; foreach (KeyValuePair<float, KeyframeData> unit in m_KeyFrameDataDict) { float fTime = 0f; float.TryParse(unit.Key.ToString("f2"), out fTime); float fPercent = (float)unit.Key / m_fActionDuration; if (null != unit.Value) { Rect rctA = new Rect(TIMELINE_START_X + ANIM_BAR_REAL_LENGTH * fPercent, TIMELINE_START_Y + (iIndex % 2 == 0 ? TIMELINE_OFFSET_UP : TIMELINE_OFFSET_DOWN), TIMELINE_WIDTH, TIMELINE_HIGHT); bool bPress = GUI.Button(rctA, "aaaa"); Texture tex = unit.Value.isSelected == true ? m_KeyframeTexRed : m_KeyframeTexBlue; GUI.DrawTexture(rctA, tex); if (Event.current.type == EventType.used && rctA.Contains(Event.current.mousePosition)) { //Debug.Log("asdsd" + iIndex.ToString()); } if (bPress) { ResetKeyFrameTex(); OnClickTimeFrameTex(unit); //Debug.Log(Event.current.mousePosition.ToString()); //Debug.Log(rctA.ToString()); if (Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("设置当前节点时间"), false, OnChangeFrameTime, unit.Value); menu.ShowAsContext(); Event.current.Use(); } } } ++iIndex; } } #endregion GUILayout.Space(WINDOW_VETICAL_SPACE); //EditorGUILayout.LabelField("使用对象:", titleStyle); if (NGUIEditorTools.DrawHeader("使用对象")) { #region 使用对象 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { EditorGUILayout.LabelField("对象数量: ", GUILayout.Width(60f)); m_nAffectedObjectNum = EditorGUILayout.IntField(m_nAffectedObjectNum, GUILayout.Width(60f)); if (!m_bPlay && m_nAffectedObjectNum != m_nAffectedObjectLastNum) { m_AffectedObjects = new GameObject[m_nAffectedObjectNum]; } EditorGUILayout.BeginVertical(); { for (int i = 0; i < m_AffectedObjects.Length; i++) { m_AffectedObjects[i] = (GameObject)EditorGUILayout.ObjectField(m_AffectedObjects[i], typeof(GameObject), true, GUILayout.Width(200f)); } } EditorGUILayout.EndVertical(); } EditorGUILayout.EndHorizontal(); #endregion GUILayout.Space(WINDOW_VETICAL_SPACE); } #region runtime param GUILayout.Space(WINDOW_VETICAL_SPACE); if (NGUIEditorTools.DrawHeader("运行时数据")) { EditorGUILayout.BeginHorizontal(); { if (GUILayout.Button("运行时数据编辑", GUILayout.Width(200f))) { AERuntimeParamEditorWindow.OpenWndow(m_RuntimeParam); } } EditorGUILayout.EndHorizontal(); } #endregion GUILayout.Space(WINDOW_VETICAL_SPACE); if (NGUIEditorTools.DrawHeader("节点")) { #region 创建节点 GUILayout.Space(WINDOW_SPACE); EditorGUILayout.BeginHorizontal(); { m_eActionFrameType = (EActionFrameType)EditorGUILayout.Popup((int)m_eActionFrameType, m_szActionFrameName, GUILayout.Width(150f)); if (m_eActionFrameType != EActionFrameType.Max) { if (GUILayout.Button("创建节点", GUILayout.Width(100f))) { if (Event.current.button == 0) { InsertFrame(m_eActionFrameType, null); } else if (Event.current.button == 1 && m_lstCopyedData != null && m_lstCopyedData.Count > 0) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("粘贴节点"), false, OnPasteFrameData); menu.ShowAsContext(); Event.current.Use(); } } } else { if (m_lstCopyedData != null && m_lstCopyedData.Count > 0) { if (GUILayout.Button("粘贴节点", GUILayout.Width(100f))) { OnPasteFrameData(); } } } } EditorGUILayout.EndHorizontal(); #endregion //EditorGUILayout.LabelField("节点列表:", titleStyle); #region 节点列表 GUILayout.Space(WINDOW_SPACE); GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) }); //draw line m_EventScorllPos = EditorGUILayout.BeginScrollView(m_EventScorllPos); { if (m_FileData != null && m_FileData.FrameDatalist != null) { List<ActionFrameData> lstTemp = m_FileData.FrameDatalist; GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) }); //draw line // whether has selected frame bool wetherSelected = false; float selectedTime = 0f; foreach (KeyframeData data in m_KeyFrameDataDict.Values) { if (data.isSelected) { wetherSelected = true; selectedTime = (float)data.framedatalist[0].Time; } } // for (int i = 0; i < lstTemp.Count; i++) { if (null == lstTemp[i]) { continue; } if (wetherSelected) { if (lstTemp[i].Time != selectedTime) { continue; } } else if (m_eActionFrameType != EActionFrameType.Max) { if ((EActionFrameType)lstTemp[i].Type != m_eActionFrameType) { continue; } } GUILayout.Space(5); EditorGUILayout.BeginHorizontal(); { GUIStyle textColor = new GUIStyle(); textColor.normal.textColor = GetFrameTypeColor(m_szActionFrameName[lstTemp[i].Type]); if (m_lstSelectedFrameData != null && m_lstSelectedFrameData.Count > 0) { if (m_lstSelectedFrameData.Contains(lstTemp[i])) { textColor.normal.textColor = Color.magenta; } } textColor.alignment = TextAnchor.MiddleLeft; GUILayout.Space(5); if (GUILayout.Button("X", GUILayout.Width(20f))) { var option = EditorUtility.DisplayDialog("确定要删除节点吗?", "确定吗?确定吗?确定吗?确定吗?确定吗?", "确定", "取消"); if (option) { OnStop(); DelFrame(lstTemp[i]); Repaint(); break; } else { OnStop(); } } GUILayout.Space(5); if (GUILayout.Button("编辑节点", GUILayout.Width(100f))) { OnStop(); InsertFrame((EActionFrameType)lstTemp[i].Type, lstTemp[i]); break; } GUILayout.Space(15); if (GUILayout.Button((i + 1).ToString() + ". 时间: " + lstTemp[i].Time.ToString("f2"), textColor, GUILayout.Width(100f), GUILayout.Height(20f))) { if (Event.current.button == 0) { OnClickFrame(lstTemp[i]); } else if (Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("复制节点"), false, OnCopyFrameData, lstTemp[i]); if (m_lstSelectedFrameData != null && m_lstSelectedFrameData.Count > 0) { menu.AddItem(new GUIContent("复制选择的节点"), false, OnCopySelectedAction); menu.AddItem(new GUIContent("平移选择的节点"), false, OnChangeSelectedActionTime); menu.AddItem(new GUIContent("取消选择的节点"), false, OnCancelSelectedAction); } if (m_lstCopyedData != null && m_lstCopyedData.Count > 0) menu.AddItem(new GUIContent("粘贴节点在此时间位置"), false, OnPasteFrameData, (float)lstTemp[i].Time); menu.ShowAsContext(); Event.current.Use(); } else if (Event.current.button == 2) { if (m_lstSelectedFrameData == null) m_lstSelectedFrameData = new List<ActionFrameData>(); m_lstSelectedFrameData.Add(lstTemp[i]); Debug.Log(lstTemp[i].ToString() + " added into SelectedFrameData"); } } GUILayout.Space(15f); if (GUILayout.Button("类型: " + m_szActionFrameName[lstTemp[i].Type], textColor, GUILayout.Width(150f), GUILayout.Height(20f))) { if (Event.current.button == 0) { OnClickFrame(lstTemp[i]); } else if (Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("复制节点"), false, OnCopyFrameData, lstTemp[i]); if (m_lstSelectedFrameData != null && m_lstSelectedFrameData.Count > 0) { menu.AddItem(new GUIContent("复制选择的节点"), false, OnCopySelectedAction); menu.AddItem(new GUIContent("平移选择的节点"), false, OnChangeSelectedActionTime); menu.AddItem(new GUIContent("取消选择的节点"), false, OnCancelSelectedAction); } if (m_lstCopyedData != null && m_lstCopyedData.Count > 0) menu.AddItem(new GUIContent("粘贴节点在此时间位置"), false, OnPasteFrameData, (float)lstTemp[i].Time); menu.ShowAsContext(); Event.current.Use(); } else if (Event.current.button == 2) { if (m_lstSelectedFrameData == null) m_lstSelectedFrameData = new List<ActionFrameData>(); m_lstSelectedFrameData.Add(lstTemp[i]); Debug.Log(lstTemp[i].ToString() + " added into SelectedFrameData"); } } GUILayout.Space(15f); if (GUILayout.Button("使用对象ID: ", textColor, GUILayout.Width(70f), GUILayout.Height(20f))) { if (Event.current.button == 0) { OnClickFrame(lstTemp[i]); } else if (Event.current.button == 1) { GenericMenu menu = new GenericMenu(); menu.AddItem(new GUIContent("复制节点"), false, OnCopyFrameData, lstTemp[i]); if (m_lstSelectedFrameData != null && m_lstSelectedFrameData.Count > 0) { menu.AddItem(new GUIContent("复制选择的节点"), false, OnCopySelectedAction); menu.AddItem(new GUIContent("平移选择的节点"), false, OnChangeSelectedActionTime); menu.AddItem(new GUIContent("取消选择的节点"), false, OnCancelSelectedAction); } if (m_lstCopyedData != null && m_lstCopyedData.Count > 0) menu.AddItem(new GUIContent("粘贴节点在此时间位置"), false, OnPasteFrameData, (float)lstTemp[i].Time); menu.ShowAsContext(); Event.current.Use(); } else if (Event.current.button == 2) { if (m_lstSelectedFrameData == null) m_lstSelectedFrameData = new List<ActionFrameData>(); m_lstSelectedFrameData.Add(lstTemp[i]); Debug.Log(lstTemp[i].ToString() + " added into SelectedFrameData"); } } if (lstTemp[i].TargetIDs != null && lstTemp[i].TargetIDs.Count > 0) { System.Text.StringBuilder str = new System.Text.StringBuilder(); List<int> tempList = lstTemp[i].TargetIDs; for (int index = 0; index < tempList.Count; index++) { str.Append(tempList[index].ToString()); str.Append(" "); } EditorGUILayout.LabelField(str.ToString(), textColor, GUILayout.Height(20f)); } GUILayout.FlexibleSpace(); } EditorGUILayout.EndHorizontal(); GUILayout.Space(5); GUILayout.Box("", new GUILayoutOption[] { GUILayout.ExpandWidth(true), GUILayout.Height(1) }); //draw line } } } EditorGUILayout.EndScrollView(); #endregion } } m_fAniTimeLastValue = m_fAniTimeValue; m_nAffectedObjectLastNum = m_nAffectedObjectNum; if (Event.current.type == EventType.mouseUp && EditorWindow.mouseOverWindow == this) { OnClickWindow(); } }