Ejemplo n.º 1
0
    /// <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();
    }
Ejemplo n.º 2
0
    //* 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;
    }
Ejemplo n.º 3
0
    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]);
            }
        }
    }
Ejemplo n.º 4
0
    //检查创建对象
    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);
                        }
                    }
                }
            }
        }
    }
Ejemplo n.º 5
0
    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();
    }
Ejemplo n.º 6
0
    /// <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();
        }
    }
Ejemplo n.º 7
0
    /// <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();
    }