/// <summary> /// 选择列表类型 /// </summary> void DrawSelectTypeList() { EditorGUILayout.BeginVertical(); createListType = GUILayout.Toolbar(createListType, new GUIContent[] { new GUIContent("AI"), new GUIContent("道具") }); if (lastListType != createListType) { lastListType = createListType; curCreateData = null; } switch (createListType) { case 0: { DrawCreateListLayer(aiList); } break; case 1: { DrawCreateListLayer(propList); } break; } EditorGUILayout.EndVertical(); }
//* auto spawn ai void AutoSpawnAI() { int aiWaves = 20; levelData.appearSets = new AppearSetData[aiWaves]; for (int p = 0; p < aiWaves; p++) { levelData.appearSets[p] = new AppearSetData(); } //* must initialize each element levelData.activeSets = new ActiveSetData[1]; for (int p = 0; p < 1; p++) { levelData.activeSets[p] = new ActiveSetData(); } //* must initialize each element for (int i = 0; i < aiWaves; i++) { AppearSetData wave = levelData.appearSets[i]; wave.time = (i + 1) * 3; //Debug.LogError("µÚ"+i+"²¨: "+wave.time); int aiCount = Random.Range(3, 5); wave.objectCfgs = new AppearObjectData[aiCount]; for (int p = 0; p < aiCount; p++) { wave.objectCfgs[p] = new AppearObjectData(); } for (int j = 0; j < aiCount; j++) { AppearObjectData aiCraft = wave.objectCfgs[j]; aiCraft.objectIndex = 0; aiCraft.XAngle = Random.Range(-20, 20); aiCraft.YAngle = Random.Range(-5, 5); aiCraft.distance = Random.Range(200, 500); aiCraft.hp = 100; aiCraft.speed = 1; aiCraft.destroyTime = 300; aiCraft.aiCfg = aiStatusData; //* aircraft status //int stateCount = 3; //aiCraft.aiCfg.statusLoop = true; //aiCraft.aiCfg.statusArray = new AIState[stateCount]; //for(int p = 0; p < stateCount; p++) { aiCraft.aiCfg.statusArray[p] = new AIState(); } //for (int k = 0; k < stateCount; k++) //{ // AIState state = aiCraft.aiCfg.statusArray[k]; // state.action = BaseAI.AIActionEnum.ToPlayer; // state.fire = BaseAI.AIFireEnum.Fire; // state.keepTime = -1; // state.randomNext = false; // state.fireKeepTime = 2 + Random.Range(0, 1); // state.fireCDTime = 2 + Random.Range(0, 1); //} } } aiCreater.levelData = levelData; }
void OnLevelDataLoad() { curCreateData = null; createList.Clear(); activeList.Clear(); aiList.Clear(); propList.Clear(); dataTitle = string.Empty; if (levelData == null) { return; } if (levelData.appearSets != null) { AppearSetData[] createArray = levelData.appearSets; for (int i = 0; i < createArray.Length; i++) { if (createArray[i].type == AppearType.AI) { aiList.Add(createArray[i]); } else if (createArray[i].type == AppearType.PROP) { propList.Add(createArray[i]); } // createList.Add(createArray[i]); } } if (levelData.activeSets != null) { ActiveSetData[] activeArray = levelData.activeSets; for (int i = 0; i < activeArray.Length; i++) { activeList.Add(activeArray[i]); } } }
//检查创建对象 void CheckCreate() { if (appearTag != null) { for (int i = 0; i < appearTag.Length; i++) { if (appearTag[i] == false) { AppearSetData apData = levelData.appearSets[i]; if (gameTime >= apData.time) { appearTag[i] = true; if (apData.objectCfgs != null && apData.objectCfgs.Length > 0) { Debug.Log("第" + i + "波"); ProtoCreateObject[] list = new ProtoCreateObject[apData.objectCfgs.Length]; for (int z = 0; z < list.Length; z++) { var objData = apData.objectCfgs[z]; list[z] = new ProtoCreateObject(); list[z].objectIndex = objData.objectIndex; int id = GetCreateID(); list[z].hashCode = id; AddObjectCfg(id, objData); list[z].SetPos(GetPosByRadian(transform.position, objData.XAngle, objData.distance, objData.YAngle)); } var t = new EventObjectArgs(); t.t = list; SceneController.instance.SendNetMsg(ProtoIDCfg.CREATE_OBJECTS, t); } } } } } }
void CreateDefaultSets() { if (levelData == null) { Debug.LogError("LevelData对象为空"); return; } foreach (var item in aiStatus) { if (item == null) { Debug.LogError("AIStatusData对象为空"); return; } } int aiWaveCount = 40; levelData.appearSets = new AppearSetData[aiWaveCount]; for (int p = 0; p < aiWaveCount; p++) { levelData.appearSets[p] = new AppearSetData(); } //* must initialize each element levelData.activeSets = new ActiveSetData[1]; for (int p = 0; p < 1; p++) { levelData.activeSets[p] = new ActiveSetData(); } //* must initialize each element for (int i = 0; i < aiWaveCount; i++) { AppearSetData wave = levelData.appearSets[i]; wave.time = (i + 1) * 5; //Debug.LogError("第"+i+"波: "+wave.time); int aiCount = Random.Range(3, 5); wave.objectCfgs = new AppearObjectData[aiCount]; for (int p = 0; p < aiCount; p++) { wave.objectCfgs[p] = new AppearObjectData(); } for (int j = 0; j < aiCount; j++) { AppearObjectData aiCraft = wave.objectCfgs[j]; aiCraft.objectIndex = Random.Range(0, 3); //* model aiCraft.XAngle = Random.Range(-20, 20); aiCraft.YAngle = Random.Range(-5, 5); aiCraft.distance = Random.Range(200, 500); aiCraft.hp = 100; aiCraft.speed = 1; aiCraft.destroyTime = 300; aiCraft.aiCfg = aiStatus[Random.Range(0, aiStatus.Length - 1)]; //* aircraft status //int stateCount = 3; //aiCraft.aiCfg.statusLoop = true; //aiCraft.aiCfg.statusArray = new AIState[stateCount]; //for(int p = 0; p < stateCount; p++) { aiCraft.aiCfg.statusArray[p] = new AIState(); } //for (int k = 0; k < stateCount; k++) //{ // AIState state = aiCraft.aiCfg.statusArray[k]; // state.action = BaseAI.AIActionEnum.ToPlayer; // state.fire = BaseAI.AIFireEnum.Fire; // state.keepTime = -1; // state.randomNext = false; // state.fireKeepTime = 2 + Random.Range(0, 1); // state.fireCDTime = 2 + Random.Range(0, 1); //} } } OnLevelDataLoad(); //Save(); }
/// <summary> /// 绘制创建数据 /// </summary> void DrawCreateData(List <AppearSetData> list) { if (curCreateData == null) { if (list.Count > 0) { dataTitle = "第0波"; curCreateData = list[0]; } else { EditorGUILayout.LabelField("必须先编辑列表"); } } else { dataPos = EditorGUILayout.BeginScrollView(dataPos); EditorGUILayout.BeginVertical(); curCreateData.time = EditorGUILayout.FloatField("时间点:", curCreateData.time); EditorGUILayout.EndVertical(); EditorGUILayout.Space(20); EditorGUILayout.BeginVertical(); randomObjectCount = EditorGUILayout.IntField("随机对象数组大小:", randomObjectCount); if (randomObjectCount < 1) { randomObjectCount = 1; } EditorGUILayout.EndVertical(); //随机对象索引列表UI if (randomObjectIndexs == null) { randomObjectIndexs = new int[randomObjectCount]; } else { if (randomObjectIndexs.Length != randomObjectCount) { int[] temp = randomObjectIndexs; randomObjectIndexs = new int[randomObjectCount]; for (int i = 0; i < randomObjectCount; i++) { if (temp.Length - 1 < i) { break; } randomObjectIndexs[i] = temp[i]; } } } for (int i = 0; i < randomObjectCount; i++) { EditorGUILayout.BeginVertical(); randomObjectIndexs[i] = EditorGUILayout.IntField("随机对象Index:", randomObjectIndexs[i]); EditorGUILayout.EndVertical(); } EditorGUILayout.Space(20); //随机数量UI EditorGUILayout.BeginHorizontal(); createCountRangeMin = EditorGUILayout.IntField("随机数量最小值:", createCountRangeMin); if (createCountRangeMin < 1) { createCountRangeMin = 1; } createCountRangeMax = EditorGUILayout.IntField("随机数量最大值:", createCountRangeMax); EditorGUILayout.EndHorizontal(); //随机距离UI EditorGUILayout.BeginHorizontal(); randomCreateDistanceMin = EditorGUILayout.FloatField("随机距离最小值:", randomCreateDistanceMin); randomCreateDistanceMax = EditorGUILayout.FloatField("随机距离最大值:", randomCreateDistanceMax); EditorGUILayout.EndHorizontal(); //随机XY角度UI EditorGUILayout.BeginHorizontal(); xAngleMin = EditorGUILayout.FloatField("随机x夹角最小:", xAngleMin); xAngleMax = EditorGUILayout.FloatField("随机x夹角最大:", xAngleMax); yAngleMin = EditorGUILayout.FloatField("随机y夹角最小:", yAngleMin); yAngleMax = EditorGUILayout.FloatField("随机y夹角最大:", yAngleMax); EditorGUILayout.EndHorizontal(); //随机属性UI EditorGUILayout.BeginHorizontal(); hpMin = EditorGUILayout.IntField("随机hp最小值:", hpMin); hpMax = EditorGUILayout.IntField("随机hp最大值:", hpMax); speedMin = EditorGUILayout.FloatField("随机速度最小:", speedMin); speedMax = EditorGUILayout.FloatField("随机速度最大:", speedMax); EditorGUILayout.EndHorizontal(); EditorGUILayout.BeginHorizontal(); destroyTimeMin = EditorGUILayout.FloatField("随机销毁时间最小:", destroyTimeMin); destroyTimeMax = EditorGUILayout.FloatField("随机销毁时间最大:", destroyTimeMax); EditorGUILayout.EndHorizontal(); //AI if (createListType == 0) { //随机AI配置UI EditorGUILayout.Space(20); randomAIStatusCount = EditorGUILayout.IntField("随机AI配置(>0):", randomAIStatusCount); randomAIStatusCount = randomAIStatusCount <= 0 ? 1 : randomAIStatusCount; if (randomAiStatus == null) { randomAiStatus = new AIStatusData[randomAIStatusCount]; openStatus = new byte[randomAIStatusCount]; } else { if (randomAiStatus.Length != randomAIStatusCount) { AIStatusData[] temp = randomAiStatus; randomAiStatus = new AIStatusData[randomAIStatusCount]; openStatus = new byte[randomAIStatusCount]; for (int i = 0; i < randomAIStatusCount; i++) { if (temp.Length - 1 < i) { break; } randomAiStatus[i] = temp[i]; } } } for (int i = 0; i < randomAIStatusCount; i++) { EditorGUILayout.BeginVertical(); randomAiStatus[i] = EditorGUILayout.ObjectField(randomAiStatus[i], typeof(AIStatusData)) as AIStatusData; EditorGUILayout.EndVertical(); } EditorGUILayout.Space(20); } //生成随机数据 if (GUILayout.Button("随机数量(会重置所有Item)")) { if (createListType == 0 && randomAiStatus[0] == null) { EditorUtility.DisplayDialog("提示", "没放入AI配置", "OK"); } else { int count = Random.Range(createCountRangeMin, createCountRangeMax); curCreateData.objectCfgs = new AppearObjectData[count]; for (int i = 0; i < count; i++) { var temp = new AppearObjectData(); temp.objectIndex = randomObjectIndexs[Random.Range(0, randomObjectCount)];; temp.speed = Random.Range(speedMin, speedMax); temp.hp = Random.Range(hpMin, hpMax); temp.distance = Random.Range(randomCreateDistanceMin, randomCreateDistanceMax); temp.XAngle = Random.Range(xAngleMin, xAngleMax); temp.YAngle = Random.Range(yAngleMin, yAngleMax); temp.destroyTime = Random.Range(destroyTimeMin, destroyTimeMax); if (createListType == 0) { temp.aiCfg = randomAiStatus[Random.Range(0, randomAIStatusCount)]; } curCreateData.objectCfgs[i] = temp; } } } if (curCreateData.objectCfgs != null && curCreateData.objectCfgs.Length > 0) { if (openStatus == null || openStatus.Length != curCreateData.objectCfgs.Length) { openStatus = new byte[curCreateData.objectCfgs.Length]; } EditorGUILayout.Space(); EditorGUILayout.LabelField("Item:"); for (int i = 0; i < curCreateData.objectCfgs.Length; i++) { EditorGUILayout.BeginVertical(); if (GUILayout.Button("对象:" + i.ToString())) { if (openStatus[i] == 0) { openStatus[i] = 1; } else { openStatus[i] = 0; } } if (openStatus[i] == 1) { DrawAppearObjectData(curCreateData.objectCfgs[i]); } EditorGUILayout.EndVertical(); } } EditorGUILayout.Space(); EditorGUILayout.EndScrollView(); } }
/// <summary> /// 绘制创建列表 /// </summary> void DrawCreateList(List <AppearSetData> list) { EditorGUILayout.BeginHorizontal(); inserIndex = EditorGUILayout.IntField("目标索引", inserIndex); if (GUILayout.Button("插入新配置在:" + inserIndex)) { var item = new AppearSetData(); if (createListType == 0) { item.type = AppearType.AI; } else if (createListType == 1) { item.type = AppearType.PROP; } list.Insert(inserIndex, item); } if (copyAppearData != null && GUILayout.Button("复制:" + copyDataIndex + "插入:" + inserIndex)) { var copye = Util.CopyInstance(copyAppearData) as AppearSetData;; if (createListType == 0) { copye.type = AppearType.AI; } else if (createListType == 1) { copye.type = AppearType.PROP; } list.Insert(inserIndex, copye); } if (GUILayout.Button("清除所有")) { list.Clear(); } EditorGUILayout.EndHorizontal(); EditorGUILayout.Space(); EditorGUILayout.BeginVertical(); listPos = EditorGUILayout.BeginScrollView(listPos); for (int i = 0; i < list.Count; i++) { int curIndex = i; var curItem = list[curIndex]; EditorGUILayout.BeginVertical(); EditorGUILayout.BeginHorizontal(); string count = curItem.objectCfgs == null ? "0" : curItem.objectCfgs.Length.ToString(); string text = ("出现时间:" + curItem.time + " 对象数量:" + count); EditorGUILayout.LabelField("第" + curIndex + "波"); EditorGUILayout.LabelField(text); if (GUILayout.Button("修改")) { dataTitle = "第" + curIndex + "波"; curCreateData = curItem; createBar = 1; } if (GUILayout.Button("复制")) { copyAppearData = curItem; copyDataIndex = curIndex; } if (GUILayout.Button("删除")) { list.Remove(curItem); } EditorGUILayout.EndHorizontal(); EditorGUILayout.EndVertical(); } EditorGUILayout.Space(); EditorGUILayout.EndScrollView(); EditorGUILayout.EndVertical(); }