Ejemplo n.º 1
0
    private void GenerateRoom(Vector2 pos, GameObject parent)
    {
        GameObject room = new GameObject("Room");

        //transform
        room.transform.parent        = parent.transform;
        room.transform.localPosition = pos;

        //set floors
        for (int i = 1; i < ROOM_SIZE - 1; i++)
        {
            for (int j = 1; j < ROOM_SIZE - 1; j++)
            {
                SetFloor(new Vector2(i, j), room);
            }
        }

        //generate the room from a random template
        int idx = Random.Range(0, levelTemplates.Count);

        byte[] levelCodes = File.ReadAllBytes(levelTemplates[idx]);
        foreach (byte levelCode in levelCodes)
        {
            Create(LevelCoder.Decode(levelCode), room);
        }
    }
    public override void OnInspectorGUI()
    {
        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Top & Bottom Connection Weight: ");
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("TOP: ", new GUILayoutOption[] { GUILayout.MaxWidth(60) });
        LevelCoder.TopConnectionWeight = EditorGUILayout.IntField(LevelCoder.TopConnectionWeight);
        EditorGUILayout.LabelField("BOTTOM: ", new GUILayoutOption[] { GUILayout.MaxWidth(60) });
        LevelCoder.BottomConnectionWeight = EditorGUILayout.IntField(LevelCoder.BottomConnectionWeight);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();
        EditorGUILayout.LabelField("Right & Left Connection Weight: ");
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Right: ", new GUILayoutOption[] { GUILayout.MaxWidth(60) });
        LevelCoder.RightConnectionWeight = EditorGUILayout.IntField(LevelCoder.RightConnectionWeight);
        EditorGUILayout.LabelField("Left: ", new GUILayoutOption[] { GUILayout.MaxWidth(60) });
        LevelCoder.LeftConnectionWeight = EditorGUILayout.IntField(LevelCoder.LeftConnectionWeight);
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();
        EditorGUILayout.PrefixLabel("Objeto de prueba:");
        Edit.TestObjet = (LevelPrefabSettings)EditorGUILayout.ObjectField(Edit.TestObjet, typeof(LevelPrefabSettings), true);

        EditorGUI.BeginDisabledGroup(Edit.TestObjet ? false : true);
        if (GUILayout.Button("¡Test Code Generated!"))
        {
            Edit.ExampleCode = LevelCoder.GetCode(Edit.TestObjet.getLevelSet());
        }
        EditorGUILayout.LabelField("Codigo Generado: " + Edit.ExampleCode.ToString());
        EditorGUILayout.LabelField(string.Format("Los Pesos usados son:\n{0} para TOP.\n{1} para Bottom.\n{2} para Right.\n{3} para Left", LevelCoder.TopConnectionWeight, LevelCoder.BottomConnectionWeight, LevelCoder.RightConnectionWeight, LevelCoder.LeftConnectionWeight), new GUILayoutOption[] { GUILayout.MinHeight(150) });
        EditorGUI.EndDisabledGroup();
    }
    IEnumerator ReplaceNodesForLevels()
    {
        foreach (var node in Nodes)
        {
            NodeConnections NodeConfigSet = node.GetConnectionSet();
            int             code          = LevelCoder.GetCode(NodeConfigSet);
            //print("Config Code: " + code);
            if (code == 0)
            {
                continue;
            }

            List <GameObject> posibleLevel = LevelCollectionManager.getLevelPrefabs(NodeConfigSet);
            if (posibleLevel.Count > 0)
            {
                //print("Lista de Posibles niveles: " + posibleLevel.Count);
                int randomIndex = UnityEngine.Random.Range(0, posibleLevel.Count);
                //print("Index Random: " + randomIndex);

                Vector3    nodePos = node.transform.position;
                Quaternion rot     = posibleLevel[randomIndex].transform.rotation;
                Instantiate(posibleLevel[randomIndex], nodePos, rot);
            }
            else
            {
                continue;
            }

            yield return(new WaitForEndOfFrame());
        }
        CleanNodes();
        print("Los nodos han sido reemplazados correctamente.");
        StopCoroutine(ReplaceNodesForLevels());
    }
 public static void Register()
 {
     registeredPrefabs = 0;
     foreach (var item in LevelPrefabs)
     {
         LevelPrefabSettings A = item.GetComponent <LevelPrefabSettings>();
         int code = LevelCoder.GetCode(A.getLevelSet());
         if (prefabs.ContainsKey(code))
         {
             if (!prefabs[code].Contains(A.gameObject))
             {
                 prefabs[code].Add(A.gameObject);
             }
         }
         else
         {
             prefabs.Add(code, new List <GameObject>()
             {
                 A.gameObject
             });
         }
     }
     MonoBehaviour.print("Registrados!");
 }
    //----------------------------------------------------------------
    public static List <GameObject> getLevelPrefabs(NodeConnections ParameterNode)
    {
        //Relleno la lista de prefabs
        if (LevelPrefabs.Count > 0)
        {
            //obtengo el codigo del nodo recibido.
            int recievedCode = LevelCoder.GetCode(ParameterNode);
            //devuelvo los prefabs existentes.
            NodeConnections A = ParameterNode;

            int code = LevelCoder.GetCode(A);

            if (prefabs.ContainsKey(code))
            {
                return(prefabs[recievedCode]);
            }
            else
            {
                MonoBehaviour.print(string.Format("No hay objetos con codigo {0} en la coleccion!.", code));
                return(new List <GameObject>());
            }
        }
        return(null);
    }
    private void OnGUI()
    {
        //Informo sobre cuantos objetos hay en prefabs.
        string Info = "";

        Info += string.Format("La coleccion contiene {0} objetos.\n", LevelCollectionManager.LevelPrefabs.Count);
        if (LevelCollectionManager.registeredPrefabs != LocalPrefabs.Count)
        {
            Info += string.Format("Solo {0} objetos estan registrados!.\n", LevelCollectionManager.registeredPrefabs);
        }
        if (LevelCollectionManager.registeredPrefabs == LocalPrefabs.Count && LevelCollectionManager.registeredPrefabs != 0)
        {
            Info += "Todos los objetos estan registrados";
        }
        if (!_Checked)
        {
            Info += "No se ha chequeado que todos los objetos esten registrados!\n";
        }

        EditorGUILayout.HelpBox(Info, MessageType.Info);

        //Muestro una lista de prefabs.
        _scroolPos = EditorGUILayout.BeginScrollView(_scroolPos, false, false, new GUILayoutOption[] { GUILayout.MinHeight(220) });
        if (LocalPrefabs.Count > 0)
        {
            List <GameObject> LevelsToRemove = new List <GameObject>();
            foreach (var level in LocalPrefabs)
            {
                EditorGUILayout.BeginHorizontal();
                EditorGUILayout.LabelField(string.Format("Codigo del Nivel: {0}.", LevelCoder.GetCode(level.GetComponent <LevelPrefabSettings>().getLevelSet())), new GUILayoutOption[] { GUILayout.MaxWidth(120) });
                EditorGUILayout.ObjectField(level, typeof(GameObject), false);
                GUI.color = Color.red;
                if (GUILayout.Button("Remove"))
                {
                    LevelsToRemove.Add(level);
                    _Saved      = false;
                    _hasChanges = true;
                }
                GUI.color = Color.white;
                EditorGUILayout.EndHorizontal();
            }
            if (LevelsToRemove.Count > 0)
            {
                foreach (var item in LevelsToRemove)
                {
                    LocalPrefabs.Remove(item);
                }
            }
        }

        EditorGUILayout.EndScrollView();

        //Permito Añadir y expandir la lista de prefabs.
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.LabelField("Nuevo Prefab de nivel: ", new GUILayoutOption[] { GUILayout.MaxWidth(150) });
        ItemToAdd = (LevelPrefabSettings)EditorGUILayout.ObjectField(ItemToAdd, typeof(LevelPrefabSettings), true);
        EditorGUI.BeginDisabledGroup(!ItemToAdd);
        GUI.backgroundColor = Color.green;
        if (GUILayout.Button("Add"))
        {
            LocalPrefabs.Add(ItemToAdd.gameObject);
            ItemToAdd   = null;
            _Saved      = false;
            _Checked    = false;
            _hasChanges = true;
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndHorizontal();

        //Permito que se guarden todos los cambios de manera segura en el Scriptable Object.
        EditorGUI.BeginDisabledGroup(!_hasChanges);
        if (GUILayout.Button("Save Changes"))
        {
            LevelCollectionManager.SavePrefabs(LocalPrefabs);
            LevelCollectionManager.Register();
            LevelCollectionManager.CheckRegisteredList();
            _hasChanges = false;
            _Saved      = true;
        }
        EditorGUI.EndDisabledGroup();


        GUI.backgroundColor = Color.white;
        if (_hasChanges && !_Saved)
        {
            EditorGUILayout.HelpBox("Hay cambios que no han sido guardados!", MessageType.Warning);
        }

        //--------------------------------Chequeos-----------------------------------------------------------------------
        EditorGUILayout.BeginHorizontal();
        if (GUILayout.Button("Force Check All objects!"))
        {
            LevelCollectionManager.CheckRegisteredList();
            _Checked = true;
        }
        EditorGUI.BeginDisabledGroup(!_Checked);
        if (GUILayout.Button("Force Register All objects!"))
        {
            LevelCollectionManager.Register();
        }
        EditorGUI.EndDisabledGroup();
        EditorGUILayout.EndHorizontal();
    }
 private void OnEnable()
 {
     Edit = (LevelCoder)target;
 }
    public override void OnInspectorGUI()
    {
        //base.OnInspectorGUI();
        Settings.ConnectionsNumber = ConnectionsAviable(Settings);
        EditorGUILayout.LabelField("Cantidad de conecciones activadas: " + Settings.ConnectionsNumber);

        EditorGUILayout.LabelField("Codigo de prefab: " + LevelCoder.GetCode(Settings.getLevelSet()));

        //----------------------------------------------------------------------------
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.Space();

        if (Settings.TopConnection)
        {
            GUI.backgroundColor = Color.green;
        }
        else
        {
            GUI.backgroundColor = Color.grey;
        }

        if (GUILayout.Button("Top"))
        {
            Settings.TopConnection = !Settings.TopConnection;
        }

        EditorGUILayout.Space();
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();
        EditorGUILayout.Space();

        //----------------------------------------------------------------------------

        EditorGUILayout.BeginHorizontal();
        if (Settings.LeftConnections)
        {
            GUI.backgroundColor = Color.green;
        }
        else
        {
            GUI.backgroundColor = Color.grey;
        }

        if (GUILayout.Button("Left"))
        {
            Settings.LeftConnections = !Settings.LeftConnections;
        }
        EditorGUILayout.Space();
        //----------------------------------------------------------------------------
        if (Settings.RightConnection)
        {
            GUI.backgroundColor = Color.green;
        }
        else
        {
            GUI.backgroundColor = Color.grey;
        }

        if (GUILayout.Button("Right"))
        {
            Settings.RightConnection = !Settings.RightConnection;
        }
        EditorGUILayout.EndHorizontal();

        //----------------------------------------------------------------------------
        EditorGUILayout.Space();
        EditorGUILayout.Space();
        EditorGUILayout.BeginHorizontal();
        EditorGUILayout.Space();
        if (Settings.BottomConnection)
        {
            GUI.backgroundColor = Color.green;
        }
        else
        {
            GUI.backgroundColor = Color.grey;
        }

        if (GUILayout.Button("Bottom"))
        {
            Settings.BottomConnection = !Settings.BottomConnection;
        }
        EditorGUILayout.Space();
        EditorGUILayout.EndHorizontal();
        EditorGUILayout.Space();
        EditorGUILayout.Space();
    }
    public override void OnInspectorGUI()
    {
        //Debugg.
        //base.OnInspectorGUI();

        EditorGUILayout.PrefixLabel("Generador de Código.");
        EditedNode.GeneradorCodigo = (LevelCoder)EditorGUILayout.ObjectField(EditedNode.GeneradorCodigo, typeof(LevelCoder), true);

        GUI.backgroundColor = Color.green;
        if (GUILayout.Button("Calculate Connections"))
        {
            CalculatedConnections = EditedNode.GetConnectionSet();
            EditedNode.code       = LevelCoder.GetCode(CalculatedConnections);
            Calculated            = true;
        }

        EditorGUILayout.LabelField("Codigo generado: " + EditedNode.code + ".");

        //--------------------------------------Validador-----------------------------------------------------
        //-------------------------------------------------------------------------------------
        string[] validados = new string[4] {
            "InValid", "InValid", "InValid", "InValid"
        };

        if (Calculated)
        {
            validados = valdidateConnections(EditedNode, CalculatedConnections);
        }

        EditorGUILayout.BeginHorizontal();
        if (Calculated && CalculatedConnections.TopConnection)
        {
            GUI.backgroundColor = Color.green;
        }
        else
        {
            GUI.backgroundColor = Color.grey;
        }

        GUILayout.Button("", new GUILayoutOption[] { GUILayout.MaxWidth(30) });
        EditorGUILayout.LabelField("Top Connection", new GUILayoutOption[] { GUILayout.MaxWidth(150) });

        GUI.backgroundColor = Color.white;
        EditorGUILayout.LabelField(validados[0]);

        GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal();
        //-------------------------------------------------------------------------------------
        EditorGUILayout.BeginHorizontal();
        if (Calculated && CalculatedConnections.BottomConnection)
        {
            GUI.backgroundColor = Color.green;
        }
        else
        {
            GUI.backgroundColor = Color.grey;
        }

        GUILayout.Button("", new GUILayoutOption[] { GUILayout.MaxWidth(30) });
        EditorGUILayout.LabelField("Bottom Connection", new GUILayoutOption[] { GUILayout.MaxWidth(150) });

        GUI.backgroundColor = Color.white;
        EditorGUILayout.LabelField(validados[1]);

        GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal();
        //-------------------------------------------------------------------------------------
        EditorGUILayout.BeginHorizontal();
        if (Calculated && CalculatedConnections.RightConnection)
        {
            GUI.backgroundColor = Color.green;
        }
        else
        {
            GUI.backgroundColor = Color.grey;
        }

        GUILayout.Button("", new GUILayoutOption[] { GUILayout.MaxWidth(30) });
        EditorGUILayout.LabelField("Right Connection", new GUILayoutOption[] { GUILayout.MaxWidth(150) });

        GUI.backgroundColor = Color.white;
        EditorGUILayout.LabelField(validados[2]);

        GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal();
        //-------------------------------------------------------------------------------------
        EditorGUILayout.BeginHorizontal();
        if (Calculated && CalculatedConnections.LeftConnections)
        {
            GUI.backgroundColor = Color.green;
        }
        else
        {
            GUI.backgroundColor = Color.grey;
        }

        GUILayout.Button("", new GUILayoutOption[] { GUILayout.MaxWidth(30) });
        EditorGUILayout.LabelField("Left Connection", new GUILayoutOption[] { GUILayout.MaxWidth(150) });

        GUI.backgroundColor = Color.white;
        EditorGUILayout.LabelField(validados[3]);

        GUILayout.FlexibleSpace();
        EditorGUILayout.EndHorizontal();
        //-------------------------------------------------------------------------------------
    }