private void DrawSkillAudio(float width, float height) { EDLayout.CreateScrollView(ref audioPos, "", width, height, (float wid, float hei) => { //音效列表 for (int i = 0; i < SelSkill.Audios.Count; i++) { EDLayout.CreateVertical("GroupBox", wid * 0.9f, 55, (float wid01, float hei01) => { int selIndex = i; object conValue = SelSkill.Audios[i].Time; EDTypeField.CreateTypeField("音效播放时间:", ref conValue, typeof(double), wid01, 25); SelSkill.Audios[i].Time = double.Parse(conValue.ToString()); //音效Id object idValue = SelSkill.Audios[i].AudioId; EDTypeField.CreateTypeField("音效Id:", ref idValue, typeof(int), wid01, 25); SelSkill.Audios[i].AudioId = int.Parse(idValue.ToString()); EDButton.CreateBtn("删除音效", wid01, 25, () => { SelSkill.Audios.RemoveAt(selIndex); }); }); } EDButton.CreateBtn("添加音效", wid * 0.9f, 25, () => { SelSkill.Audios.Add(new SkillAudioJson()); }); }); }
private void DrawNodeWindow(int id) { //前提 if (Json.Premise == null) { EDTypeField.CreateLableField("无节点前提:", "", mRect.width, 20); } else { Type premiseType = LCReflect.GetType(Json.Premise.TypeFullName); if (premiseType == null) { Json.Premise = null; } else { EDTypeField.CreateLableField("节点前提:" + Json.Premise.Name + "...", "", mRect.width, 20); } } //信息 EDTypeField.CreateLableField("节点类型:" + Json.Type.ToString(), "", mRect.width, 20); EDTypeField.CreateLableField("节点ID:" + MId, "", mRect.width, 20); DrawEditorNodeKeyValue(); }
private void DrawSkillEffect(float width, float height) { EDLayout.CreateScrollView(ref effectPos, "", width, height, (float wid, float hei) => { EDLayout.CreateVertical("GroupBox", wid * 0.9f, 55, (float wid01, float hei01) => { //特效列表 for (int i = 0; i < SelSkill.Effects.Count; i++) { int selIndex = i; object conValue = SelSkill.Effects[i].Time; EDTypeField.CreateTypeField("特效播放时间:", ref conValue, typeof(double), wid01, 25); SelSkill.Effects[i].Time = double.Parse(conValue.ToString()); //特效Id object idValue = SelSkill.Effects[i].EffectId; EDTypeField.CreateTypeField("特效Id:", ref idValue, typeof(int), wid01, 25); SelSkill.Effects[i].EffectId = int.Parse(idValue.ToString()); //特效位置 object value = LCConvert.StrChangeToObject(SelSkill.Effects[i].Pos, typeof(Vector3).FullName); EDTypeField.CreateTypeField("特效位置:", ref value, typeof(Vector3), width, 25); SelSkill.Effects[i].Pos = value.ToString(); EDButton.CreateBtn("删除特效", wid01, 25, () => { SelSkill.Effects.RemoveAt(selIndex); }); } }); EDButton.CreateBtn("添加特效", wid * 0.9f, 25, () => { SelSkill.Effects.Add(new SkillEffectJson()); }); }); }
//行为层 private void DrawBevTreeList() { //列表 EDLayout.CreateScrollView(ref leftPos, "box", position.width * 0.3f, position.height, () => { EDTypeField.CreateLableField("********世界行为********", "", position.width * 0.3f, 20); foreach (string group in MBevTrees.WorldTrees.Keys) { NodeDataJson tree = MBevTrees.WorldTrees[group]; EDButton.CreateBtn(group, position.width * 0.28f, 25, () => { SelTreeChange(tree); }); } EDTypeField.CreateLableField("********实体行为********", "", position.width * 0.3f, 20); foreach (string group in MBevTrees.EntityTrees.Keys) { NodeDataJson tree = MBevTrees.EntityTrees[group]; EDButton.CreateBtn(group, position.width * 0.28f, 25, () => { SelTreeChange(tree); }); } }); }
private void DrawSkillData(float width, float height) { EDLayout.CreateScrollView(ref dataPos, "", width, height, (float wid, float hei) => { for (int i = 0; i < SelSkill.Data.Count; i++) { EDLayout.CreateVertical("GroupBox", wid * 0.9f, 55, (float wid01, float hei01) => { int selIndex = i; SkillDataJson dataJson = SelSkill.Data[i]; //时间信息 EDLayout.CreateHorizontal("box", wid01, 25, (float wid02, float hei02) => { //作用时间 object timeValue = dataJson.Time; EDTypeField.CreateTypeField("作用时间:", ref timeValue, typeof(double), 220, 25); dataJson.Time = double.Parse(timeValue.ToString()); //持续时间 object continueTimeValue = dataJson.ContinueTime; EDTypeField.CreateTypeField("持续时间:", ref continueTimeValue, typeof(double), 220, 25); dataJson.ContinueTime = double.Parse(continueTimeValue.ToString()); //间隔时间 object gapTimeValue = dataJson.GapTime; EDTypeField.CreateTypeField("间隔时间:", ref gapTimeValue, typeof(double), 220, 25); dataJson.GapTime = double.Parse(gapTimeValue.ToString()); }); //技能枚举 EDLayout.CreateHorizontal("box", wid01, 25, (float wid02, float hei02) => { //技能类型 dataJson.Type = (SkillType)EditorGUILayout.EnumPopup("技能类型:", dataJson.Type, GUILayout.Width(220), GUILayout.Height(25)); //技能作用类型 dataJson.UseType = (SkillUseType)EditorGUILayout.EnumPopup("作用类型:", dataJson.UseType, GUILayout.Width(220), GUILayout.Height(25)); //数据类型 dataJson.DataType = (SkillDataType)EditorGUILayout.EnumPopup("数据类型:", dataJson.DataType, GUILayout.Width(220), GUILayout.Height(25)); }); //数据 object data = dataJson.Data; EDTypeField.CreateTypeField("数据:", ref data, typeof(String), 220, 20); dataJson.Data = data.ToString(); EDButton.CreateBtn("删除数据", wid01, 20, () => { SelSkill.Data.RemoveAt(selIndex); }); }); } EDButton.CreateBtn("添加数据", wid * 0.9f, 25, () => { SelSkill.Data.Add(new SkillDataJson()); }); }); }
private void DrawAnimList(float width, float height) { if (SelSkill == null) { return; } EDLayout.CreateVertical("", width, height, (float wid, float hei) => { if (SelSkill.AnimClips.Count != 0) { EDLayout.CreateScrollView(ref animPos, "box", wid, hei * 0.7f, (float wid01, float hei01) => { //动画列表 for (int i = 0; i < SelSkill.AnimClips.Count; i++) { int selIndex = i; if (CheckAnimatorHasClip(SelAnim, SelSkill.AnimClips[i].AnimName)) { EDLayout.CreateHorizontal("box", 210, 30, (float wid02, float hei02) => { EDTypeField.CreateLableField(string.Format("动画名:{0}", SelSkill.AnimClips[i].AnimName), "", wid02 * 0.7f, hei02); EDButton.CreateBtn("删除动画", wid02 * 0.3f, hei02, () => { SelSkill.AnimClips.RemoveAt(selIndex); UpdateAnimClipsTime(); }); }); } else { SelSkill.AnimClips.RemoveAt(selIndex); UpdateAnimClipsTime(); } } }); } //添加动画 if (RunningClip.Count == 0) { return; } List <string> showClips = new List <string>(); for (int i = 0; i < RunningClip.Count; i++) { showClips.Add(RunningClip[i].name); } EDButton.CreateBtn("添加动画", 180, 25, () => { EDPopMenu.CreatePopMenu(showClips, (string str) => { SkillAnimJson animJson = new SkillAnimJson(); animJson.AnimName = str; SelSkill.AnimClips.Add(animJson); UpdateAnimClipsTime(); }); }); }); }
private void OnGUI() { EDLayout.CreateScrollView(ref ScPos, "box", position.width, position.height, (width, height) => { EDTypeField.CreateLableField("", "------------ UpdateSystem ------------", width, 30); ShowSystemList(true, width); EDTypeField.CreateLableField("", "------------ FixedSystem ------------", width, 30); ShowSystemList(false, width); }); }
private void DrawSkillInfo(float width, float height) { object conValue = SelSkill.ContinueTime; EDTypeField.CreateTypeField("技能持续时间:", ref conValue, typeof(double), width, 25); SelSkill.ContinueTime = double.Parse(conValue.ToString()); object value = LCConvert.StrChangeToObject(SelSkill.Area, typeof(Vector2).FullName); EDTypeField.CreateTypeField("技能范围:", ref value, typeof(Vector2), width, 25); SelSkill.Area = value.ToString(); }
private void DrawEditorNodeKeyValue() { EDLayout.CreateScrollView(ref valuePos, "", mRect.width, mRect.height, ((width, height) => { //可编辑键值 for (int j = 0; j < Json.KeyValues.Count; j++) { NodeKeyValue keyValue = Json.KeyValues[j]; object value = LCConvert.StrChangeToObject(keyValue.Value, keyValue.TypeFullName); Type ty = LCReflect.GetType(keyValue.TypeFullName); EDTypeField.CreateTypeField(keyValue.KeyName + "= ", ref value, ty, width - 10, 20); keyValue.Value = value.ToString(); } })); }
private static void DrawEntity(EntityEditorViewHelp targetCom) { Entity entity = ECSLocate.ECS.GetEntity(targetCom.EntityId); if (entity == null) { return; } List <EntityComView> comViews = HandleEntityComs(entity); Rect showRect = targetCom.ShowRect; //渲染 Handles.BeginGUI(); GUILayout.BeginArea(showRect); //基础按钮和信息 EDTypeField.CreateLableField("实体名:", targetCom.name, showRect.width, 20); EDTypeField.CreateLableField("实体状态:", entity.IsEnable.ToString(), showRect.width, 20); EDButton.CreateBtn("激活/禁用 实体", 100, 50, () => { if (entity.IsEnable) { entity.Disable(); } else { entity.Enable(); } }); EDButton.CreateBtn("显示组件", 100, 50, () => { ShowComs = ShowComs?false:true; }); EDButton.CreateBtn("显示系统", 100, 50, () => { ShowSystems = ShowSystems?false:true; }); //组件列表 DrawEntityComs(ShowComs, comViews, showRect.width, showRect.height * 0.7f); //系统列表 DrawEntitySystem(ShowSystems, entity.Systems, showRect.width, showRect.height * 0.7f); GUILayout.EndArea(); Handles.EndGUI(); }
//组件编辑界面 private void ShowSelComWindow(float width, float height) { List <EntityComValueJson> values = UpdateSelComEditorValues(); EDLayout.CreateScrollView(ref ComValuePos, "Box", width, height, () => { for (int i = 0; i < values.Count; i++) { EntityComValueJson comView = values[i]; Type resType = null; resType = LCReflect.GetType(comView.Type); if (resType == null) { resType = LCReflect.GetType(comView.Type); } object value = LCConvert.StrChangeToObject(comView.Value, resType.FullName); EDTypeField.CreateTypeField(comView.Name + "= ", ref value, resType, width, 40); SetSelComJson(comView.Name, value.ToString()); } }); }
/// <summary> /// 渲染实体组件列表 /// </summary> private static void DrawEntityComs(bool isShow, List <EntityComView> comViews, float width, float height) { if (isShow == false) { return; } EDLayout.CreateScrollView(ref ScrollPos, "GroupBox", width, height, () => { for (int i = 0; i < comViews.Count; i++) { EntityComView comView = comViews[i]; EditorGUILayout.Space(); GUI.color = Color.green; //组件名 EditorGUILayout.LabelField("组件:", comView.ComName, GUILayout.Width(width), GUILayout.Height(20)); //可编辑键值 for (int j = 0; j < comView.EditorValueList.Count; j++) { GUI.color = Color.red; ComKeyValueView info = comView.EditorValueList[j]; object valueObj = info.Info.GetValue(info.Com); EDTypeField.CreateTypeField(info.KeyName + "= ", ref valueObj, info.Info.FieldType, width, 20); LCReflect.SetTypeFieldValue(info.Com, info.KeyName, valueObj); } //只读值 for (int j = 0; j < comView.ValueList.Count; j++) { GUI.color = Color.white; ComKeyValueView info = comView.ValueList[j]; object valueObj = info.Info.GetValue(info.Com); EDTypeField.CreateLableField(info.KeyName + "= ", valueObj.ToString(), width, 20); } } }); }
private void DrawReqList() { EDLayout.CreateScrollView(ref reqPos, "box", position.width, position.height - 20, (() => { List <int> showList = GetWeightList(); for (int i = 0; i < showList.Count; i++) { int key = showList[i]; string reqName = GetReqIdName(key); WeightJson json = GetReqWeightJson(key); object value = json.Weight; EDTypeField.CreateTypeField(reqName, ref value, typeof(int), position.width, 20); json.Weight = (int)value; EDButton.CreateBtn("强制置换请求权重", 200, 25, (() => { json.Weight = ECSDefinition.REForceSwithWeight; })); EDButton.CreateBtn("请求自身判断置换请求权重", 200, 25, (() => { json.Weight = ECSDefinition.RESwithRuleSelf; })); EDTypeField.CreateLableField("------------------------", "", position.width, 10); EditorGUILayout.Space(); } })); }
//实体编辑界面 private void ShowSelEntityWindow(float width) { //基础配置只读 EDTypeField.CreateLableField("实体名:", SelEntity.EntityName, width, 20); object tipobj = SelEntity.TipStr; EDTypeField.CreateTypeField("描述信息:", ref tipobj, typeof(string), width, 20); SelEntity.TipStr = tipobj.ToString(); //决策分组 SelEntity.Group = (EntityDecGroup)EditorGUILayout.EnumPopup("实体决策分组", SelEntity.Group); EditorGUILayout.Space(); //预制体路径 EditorGUILayout.LabelField("选择预制体:"); GameObject prefab = null; prefab = EditorGUILayout.ObjectField(prefab, typeof(GameObject), false) as GameObject; if (prefab != null) { SelEntity.PrefabPath = AssetDatabase.GetAssetPath(prefab); } EditorGUILayout.LabelField("预制体路径:"); EditorGUILayout.LabelField(SelEntity.PrefabPath, "", "box"); EditorGUILayout.Space(); //组件列表 EditorGUILayout.LabelField("组件列表:"); EDLayout.CreateScrollView(ref ComListPos, "box", width, 150, () => { for (int i = 0; i < SelEntity.Coms.Count; i++) { //按钮名 string btnName = SelEntity.Coms[i].ComName; Type comType = LCReflect.GetType(SelEntity.Coms[i].ComName); if (comType != null) { ComAttribute comAttribute = LCReflect.GetTypeAttr <ComAttribute>(comType); if (comAttribute != null) { btnName = comAttribute.ViewName; } } else { SelEntity.Coms.RemoveAt(i); continue; } EDButton.CreateBtn(btnName, width * 0.8f, 20, () => { int comIndex = i; EDPopMenu.CreatePopMenu(new List <string>() { "编辑组件", "删除组件" }, (int index) => { if (index == 0) { SelCom = LCReflect.GetType(SelEntity.Coms[comIndex].ComName); } else if (index == 1) { SelEntity.Coms.RemoveAt(comIndex); } }); }); EditorGUILayout.Space(); } }); //添加组件 EDButton.CreateBtn("添加组件", 200, 50, () => { List <Type> comTyps = LCReflect.GetClassByType <BaseCom>(); List <string> showList = new List <string>(); List <Type> showTyps = new List <Type>(); for (int j = 0; j < comTyps.Count; j++) { if (CheckContainCom(comTyps[j].FullName)) { continue; } showTyps.Add(comTyps[j]); ComAttribute comAttribute = LCReflect.GetTypeAttr <ComAttribute>(comTyps[j]); if (comAttribute != null) { if (comAttribute.GroupName == "") { comAttribute.GroupName = "Default"; } showList.Add(comAttribute.GroupName + "/" + comAttribute.ViewName); } else { showList.Add(comTyps[j].FullName); } } EDPopMenu.CreatePopMenu(showList, (int index) => { Type comType = showTyps[index]; if (CheckContainCom(comType.FullName)) { Debug.LogError("重复的组件>>>>>>>>" + comType.FullName); return; } EntityComJson comJson = new EntityComJson() { ComName = comType.FullName, }; SelEntity.Coms.Add(comJson); }); }); //保存配置 EDButton.CreateBtn("保存配置", 200, 50, SaveEntityJsonList); //删除实体 EDButton.CreateBtn("删除实体", 200, 30, () => { EDDialog.CreateDialog("删除", "确认删除该实体吗?", (() => { MEntityJsonList.List.Remove(SelEntity); SelEntityChange(null); })); }); }
private void DrawSkill(float width, float height) { if (SelSkill == null) { return; } EDLayout.CreateVertical("box", width, height, (float wid, float hei) => { //动画 if (SelAnim != null) { AnimPlayTime = EditorGUILayout.Slider("播放动画", AnimPlayTime, 0, GetTotalAnimTime()); object playScale = TimePlayScale; EDTypeField.CreateTypeField("播放动画时间倍数:", ref playScale, typeof(string), width, 25); TimePlayScale = float.Parse(playScale.ToString()); if (IsPlaying) { GUI.color = Color.red; EDButton.CreateBtn("暂停", width, 50, () => { IsPlaying = false; }); } else { GUI.color = Color.green; EDButton.CreateBtn("播放", width, 50, () => { IsPlaying = true; }); } } GUI.color = Color.white; EDTypeField.CreateLableField("技能Id:" + SelSkill.Id, "", width, 25); object value = SelSkill.DecStr; EDTypeField.CreateTypeField("技能描述:", ref value, typeof(string), width, 25); SelSkill.DecStr = value.ToString(); object triggerValue = SelSkill.TriggerTime; EDTypeField.CreateTypeField("技能触发时间:", ref triggerValue, typeof(double), width, 25); SelSkill.TriggerTime = double.Parse(triggerValue.ToString()); EDButton.CreateBtn("删除技能", 200, 50, () => { Json.List.Remove(SelSkill); SelSkill = null; }); ShowInfo = EditorGUILayout.Foldout(ShowInfo, "技能信息"); if (ShowInfo) { DrawSkillInfo(width, height * 0.3f); } GUILayout.Space(10); ShowData = EditorGUILayout.Foldout(ShowData, "技能数据"); if (ShowData) { DrawSkillData(width, height * 0.3f); } GUILayout.Space(10); ShowAudio = EditorGUILayout.Foldout(ShowAudio, "技能音效"); if (ShowAudio) { DrawSkillAudio(width, height * 0.3f); } GUILayout.Space(10); ShowEffect = EditorGUILayout.Foldout(ShowEffect, "技能特效"); if (ShowEffect) { DrawSkillEffect(width, height * 0.3f); } GUILayout.Space(10); }); }