// 检测行为是否有效 // @actionData:行为数据 // return:有效返回true;否则false private bool CheckActionIsValid(SkillActionData actionData) { if (!m_dicActNum.ContainsKey(actionData.i) || m_dicActNum[actionData.i] != 1) { return(false); } for (int i = 0; i < actionData.aH.Length; ++i) { int harmId = actionData.aH[i]; if (!CheckHurmIsValid(harmId)) { return(false); } } // 触发行为判断 if (actionData.tA == 0) { // 自己触发自己 for (int i = 0; i < actionData.aT.Length; ++i) { // 先判断触发id是否正确 SkillTriggerData tData = actionData.aT[i]; if (!m_dicActNum.ContainsKey(tData.i) || m_dicActNum[tData.i] != 1 || tData.i == actionData.i) { return(false); } for (int j = 0; j < m_skillData.aA.Length; ++j) { // 触发的行为不是触发行为 SkillActionData aData = m_skillData.aA[j]; if (aData.i == tData.i && aData.tA != 1) { return(false); } } } } return(true); }
// 绘制行为图标 // @actionData:行为数据 private void DrawActionItem(SkillActionData actionData) { if (CheckActionIsValid(actionData)) { if (actionData.tA == 1) { GUI.backgroundColor = new Color32(255, 175, 0, 255); } else { GUI.backgroundColor = Color.green; } } else { GUI.backgroundColor = Color.red; } GUILayout.BeginVertical(new GUIStyle(EditorStyles.textField), GUILayout.Width(MENU_WIDTH - 20), GUILayout.ExpandHeight(true)); GUI.backgroundColor = m_defaultBgClr; GUILayout.BeginHorizontal(); GUILayout.Label("行为id:", GUILayout.Width(75)); actionData.i = (int)EditorGUILayout.IntField(actionData.i, GUILayout.Width(100)); //GUILayout.FlexibleSpace(); if (GUILayout.Button("-", GUILayout.Width(20))) { List <SkillActionData> listAction = new List <SkillActionData>(m_skillData.aA); listAction.Remove(actionData); m_skillData.aA = listAction.ToArray(); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("行为类型:", GUILayout.Width(75)); actionData.a = (int)EditorGUILayout.Popup(actionData.a, ARR_ACTION_TYPE_NAME, GUILayout.Width(100)); //GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); bool isTrigger = actionData.tA == 1; if (!isTrigger) { GUILayout.Label("行为播放时间:", GUILayout.Width(75)); actionData.t = EditorGUILayout.FloatField(actionData.t, GUILayout.Width(100)); } GUILayout.Label("触发行为:", GUILayout.Width(75)); isTrigger = EditorGUILayout.Toggle(isTrigger, GUILayout.Width(40)); actionData.tA = isTrigger ? 1 : 0; GUILayout.EndHorizontal(); if (actionData.a == (int)SkillActionType.PLAY_EFFECT || actionData.a == (int)SkillActionType.PLAY_EFFECT_SELF) // 播放特效 { GUILayout.BeginHorizontal(); GUILayout.Label("特效ID:", GUILayout.Width(75)); actionData.e1 = EditorGUILayout.IntField(actionData.e1, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("坐标X:", GUILayout.Width(75)); actionData.x = EditorGUILayout.IntField(actionData.x, GUILayout.Width(100)); GUILayout.Label("坐标Y:", GUILayout.Width(75)); actionData.y = EditorGUILayout.IntField(actionData.y, GUILayout.Width(100)); GUILayout.EndHorizontal(); } else if (actionData.a == (int)SkillActionType.CRASH_TARGET) // 冲向目标 { GUILayout.BeginHorizontal(); GUILayout.Label("移动速度:", GUILayout.Width(75)); actionData.s = EditorGUILayout.IntField(actionData.s, GUILayout.Width(100)); GUILayout.Label("限制移动时间:", GUILayout.Width(75)); bool limitMove = actionData.l2 == 1; limitMove = EditorGUILayout.Toggle(limitMove, GUILayout.Width(40)); actionData.l2 = limitMove ? 1 : 0; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("前排特效ID:", GUILayout.Width(75)); actionData.e1 = EditorGUILayout.IntField(actionData.e1, GUILayout.Width(100)); GUILayout.Label("后排特效ID:", GUILayout.Width(75)); actionData.e2 = EditorGUILayout.IntField(actionData.e2, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("特效锁目标:", GUILayout.Width(75)); bool lookTarget = actionData.l == 1; lookTarget = EditorGUILayout.Toggle(lookTarget, GUILayout.Width(40)); actionData.l = lookTarget ? 1 : 0; GUILayout.EndHorizontal(); } //else if (actionData.a == (int)SkillActionType.CRASH_POS) // 冲向位置 //{ // GUILayout.BeginHorizontal(); // GUILayout.Label("坐标X:", GUILayout.Width(55)); // actionData.x = EditorGUILayout.IntField(actionData.x, GUILayout.Width(100)); // GUILayout.Label("坐标Y:", GUILayout.Width(55)); // actionData.y = EditorGUILayout.IntField(actionData.y, GUILayout.Width(100)); // GUILayout.EndHorizontal(); //} else if (actionData.a == (int)SkillActionType.SHOOT_BULLET) // 发射子弹 { GUILayout.BeginHorizontal(); GUILayout.Label("子弹速度:", GUILayout.Width(75)); actionData.s = EditorGUILayout.IntField(actionData.s, GUILayout.Width(100)); GUILayout.Label("限制移动时间:", GUILayout.Width(75)); bool limitMove = actionData.l2 == 1; limitMove = EditorGUILayout.Toggle(limitMove, GUILayout.Width(40)); actionData.l2 = limitMove ? 1 : 0; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("前排特效ID:", GUILayout.Width(75)); actionData.e1 = EditorGUILayout.IntField(actionData.e1, GUILayout.Width(100)); GUILayout.Label("后排特效ID:", GUILayout.Width(75)); actionData.e2 = EditorGUILayout.IntField(actionData.e2, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("发射点偏移X:", GUILayout.Width(75)); actionData.x = EditorGUILayout.IntField(actionData.x, GUILayout.Width(100)); GUILayout.Label("发射点偏移Y:", GUILayout.Width(75)); actionData.y = EditorGUILayout.IntField(actionData.y, GUILayout.Width(100)); GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("特效锁目标:", GUILayout.Width(75)); bool lookTarget = actionData.l == 1; lookTarget = EditorGUILayout.Toggle(lookTarget, GUILayout.Width(40)); actionData.l = lookTarget ? 1 : 0; GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("子弹时间1-3:", GUILayout.Width(75)); for (int i = 0; i < 3; ++i) { actionData.aB[i] = EditorGUILayout.FloatField(actionData.aB[i], GUILayout.Width(60)); } GUILayout.EndHorizontal(); GUILayout.BeginHorizontal(); GUILayout.Label("子弹时间4-6:", GUILayout.Width(75)); for (int i = 3; i < 6; ++i) { actionData.aB[i] = EditorGUILayout.FloatField(actionData.aB[i], GUILayout.Width(60)); } GUILayout.EndHorizontal(); } else if (actionData.a == (int)SkillActionType.SHOOT_BULLET) // 敌人特效 { } else if (actionData.a == (int)SkillActionType.PLAY_EFFECT_LINK) // 链特效 { GUILayout.BeginHorizontal(); GUILayout.Label("链特效ID:", GUILayout.Width(75)); actionData.e1 = EditorGUILayout.IntField(actionData.e1, GUILayout.Width(100)); GUILayout.EndHorizontal(); } // 伤害集合 GUILayout.BeginVertical(); for (int i = 0; i < actionData.aH.Length; ++i) { GUILayout.BeginHorizontal(); GUILayout.Label("伤害id:", GUILayout.Width(75)); actionData.aH[i] = EditorGUILayout.IntField(actionData.aH[i], GUILayout.Width(100)); if (GUILayout.Button("-", GUILayout.Width(20))) { List <int> listId = new List <int>(actionData.aH); listId.RemoveAt(i); actionData.aH = listId.ToArray(); break; } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } GUILayout.EndVertical(); // 触发集合 GUILayout.BeginVertical(); for (int i = 0; i < actionData.aT.Length; ++i) { SkillTriggerData triData = actionData.aT[i]; GUILayout.BeginHorizontal(); GUILayout.Label("触发id:", GUILayout.Width(75)); triData.i = EditorGUILayout.IntField(triData.i, GUILayout.Width(60)); GUILayout.Label("触发时间:", GUILayout.Width(50)); triData.t = EditorGUILayout.FloatField(triData.t, GUILayout.Width(60)); if (GUILayout.Button("-", GUILayout.Width(20))) { List <SkillTriggerData> listData = new List <SkillTriggerData>(actionData.aT); listData.RemoveAt(i); actionData.aT = listData.ToArray(); break; } GUILayout.FlexibleSpace(); GUILayout.EndHorizontal(); } GUILayout.EndVertical(); GUILayout.BeginHorizontal(); // +按钮 if (GUILayout.Button("绑定伤害", GUILayout.Height(20), GUILayout.Width(150))) { List <int> listId = new List <int>(actionData.aH); listId.Add(0); actionData.aH = listId.ToArray(); } if (GUILayout.Button("绑定触发", GUILayout.Height(20), GUILayout.Width(150))) { List <SkillTriggerData> listData = new List <SkillTriggerData>(actionData.aT); listData.Add(new SkillTriggerData()); actionData.aT = listData.ToArray(); } GUILayout.EndHorizontal(); GUILayout.EndVertical(); }