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 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 DrawSkillList(float width, float height) { EDLayout.CreateScrollView(ref LeftPos, "", width, height, () => { for (int i = 0; i < Json.List.Count; i++) { SkillJson skill = Json.List[i]; EDButton.CreateBtn(skill.Id, 180, 25, () => { SelSkillChange(skill); }); } //添加技能 EDButton.CreateBtn("新建技能", 180, 30, () => { EDPopPanel.PopWindow("输入技能Id>>>>>>", (x) => { if (CheckContainSkill(x)) { Debug.LogError("技能Id重复>>>>>>>>>>>>" + x); return; } int skillId = int.Parse(x); SkillJson json = new SkillJson { Id = skillId, }; Json.List.Add(json); }); }); }); }
//行为层 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 DrawSelNodePremise(float width, float height) { if (selNode == null) { return; } if (selNode.Json.Premise == null) { return; } EDLayout.CreateScrollView(ref nodePremisePos, "box", width, height, () => { NodePremiseJson premiseJson = selNode.Json.Premise; CreatePremiseBtn(premiseJson); }); }
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(); } })); }
/// <summary> /// 渲染实体观察系统列表 /// </summary> private static void DrawEntitySystem(bool isShow, List <string> systems, float width, float height) { if (isShow == false) { return; } EDLayout.CreateScrollView(ref SystemScrollPos, "GroupBox", width, height, () => { for (int i = 0; i < systems.Count; i++) { string systemName = systems[i]; EditorGUILayout.Space(); GUI.color = Color.green; //组件名 EditorGUILayout.LabelField("观察系统:", systemName, GUILayout.Width(width), GUILayout.Height(20)); } }); }
//组件编辑界面 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 DrawEntityJsonList() { //实体列表 EDLayout.CreateScrollView(ref LeftPos, "box", position.width * 0.2f, position.height, (float width, float height) => { for (int i = 0; i < MEntityJsonList.List.Count; i++) { EntityJson entity = MEntityJsonList.List[i]; EDButton.CreateBtn(entity.EntityName, width, 25, () => { SelEntityChange(entity); }); } //添加实体 EDButton.CreateBtn("新建实体", width, 30, () => { EDPopPanel.PopWindow("输入实体名>>>>>>", (x) => { if (CheckContainEntity(x)) { Debug.LogError("实体名重复>>>>>>>>>>>>" + x); return; } EntityJson json = new EntityJson(); json.EntityName = x; //默认添加Go组件 EntityComJson goComJson = new EntityComJson() { ComName = "LCECS.Core.ECS.GameObjectCom", }; json.Coms.Add(goComJson); MEntityJsonList.List.Add(json); SelEntityChange(json); }); }); }); //编辑实体 EDLayout.CreateVertical("box", position.width * 0.4f, position.height, (float width, float height) => { if (SelEntity != null) { ShowSelEntityWindow(width); } }); //实体预览 EDLayout.CreateVertical("box", position.width * 0.3f, position.height, (float width, float height) => { if (EntityEditor != null) { EntityEditor.DrawPreview(GUILayoutUtility.GetRect(300, 200)); } //实体编辑 if (SelCom != null) { ShowSelComWindow(width, position.height * 0.5f); } }); }
//实体编辑界面 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); })); }); }