Esempio n. 1
0
 public void SetConnectedRoom(SpatialAudioRoom room)
 {
     if (connectedRooms.Count >= 2)
     {
         string offendingPortal = (string.IsNullOrEmpty(portalName) ? gameObject.name : portalName);
         Debug.LogError("Spatial Audio Portal '" + offendingPortal + "' already has been assigned with a pair of rooms that it connects. " +
                        "Each portal can only connect one room pair.");
     }
     else if (room != null)
     {
         connectedRooms.Add(room);
     }
 }
Esempio n. 2
0
        private bool IsRoomPairConnected(SpatialAudioRoom startingRoom, SpatialAudioRoom targetRoom)
        {
            List <SpatialAudioRoom> visitedRooms  = new List <SpatialAudioRoom>();
            List <SpatialAudioRoom> startingRooms = new List <SpatialAudioRoom>();

            startingRooms.Add(startingRoom);
            visitedRooms.Add(startingRoom);

            for (int i = 0; i < startingRooms.Count; i++)
            {
                for (int j = 0; j < startingRooms[i].roomConnections.Count; j++)
                {
                    var roomConnection = startingRooms[i].roomConnections[j];

                    if (roomConnection.connectedRoom != null && roomConnection.connectingPortals != null && !visitedRooms.Contains(roomConnection.connectedRoom))
                    {
                        bool hasValidConnectingPortal = false;

                        for (int k = 0; k < roomConnection.connectingPortals.Length; k++)
                        {
                            var portal = roomConnection.connectingPortals[k];

                            if (portal != null)
                            {
                                hasValidConnectingPortal = true;
                            }
                        }

                        if (!hasValidConnectingPortal)
                        {
                            Debug.LogError("No valid connecting portal exists for the connection between rooms '" + startingRooms[i].gameObject.name +
                                           " and " + roomConnection.connectedRoom.gameObject.name + "'.");
                        }

                        if (roomConnection.connectedRoom == targetRoom && hasValidConnectingPortal)
                        {
                            return(true);
                        }
                        else if (hasValidConnectingPortal)
                        {
                            startingRooms.Add(roomConnection.connectedRoom);
                            visitedRooms.Add(roomConnection.connectedRoom);
                        }
                    }
                }
            }

            return(false);
        }
Esempio n. 3
0
        public override void OnInspectorGUI()
        {
            var targetScript = target as SpatialAudioManager;

            serializedObject.Update();

            DrawDefaultInspector();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("", GUILayout.Width(EditorGUIUtility.labelWidth));
            if (GUILayout.Button("Add Spatial Audio Room"))
            {
                var newRoomGameObj = new GameObject();
                newRoomGameObj.name = "SpatialAudioRoom";
                newRoomGameObj.transform.SetParent(targetScript.transform);

                var roomComponent = newRoomGameObj.AddComponent <SpatialAudioRoom>();

                SpatialAudioRoom[] roomsCopy = new SpatialAudioRoom[targetScript.spatialAudioRooms.Length + 1];
                targetScript.spatialAudioRooms.CopyTo(roomsCopy, 0);
                roomsCopy[roomsCopy.Length - 1] = roomComponent;
                targetScript.spatialAudioRooms  = roomsCopy;
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("", GUILayout.Width(EditorGUIUtility.labelWidth));
            if (GUILayout.Button("Add Spatial Audio Portal"))
            {
                GameObject portalGameObj = GameObject.CreatePrimitive(PrimitiveType.Quad);
                portalGameObj.name = "SpatialAudioPortal";
                portalGameObj.transform.SetParent(targetScript.transform);
                portalGameObj.transform.position = new Vector3(0, 0.5f, 0);

                // Check if a layer with the name "AudioTooslPortal" has been created.
                // If found, automatically assign this layer to the portal gameObject.
                int layerIndex = LayerMask.NameToLayer("AudioToolsPortal");

                if (layerIndex > -1)
                {
                    portalGameObj.layer = layerIndex;
                }

                var meshCollider = portalGameObj.GetComponent <MeshCollider>();

                if (meshCollider != null)
                {
                    DestroyImmediate(meshCollider);
                }

                var boxCollider = portalGameObj.AddComponent <BoxCollider>();
                boxCollider.size      = new Vector3(1.0f, 1.0f, 0.0f);
                boxCollider.isTrigger = true;

                boxCollider.hideFlags = HideFlags.NotEditable;

                var portalComponent = portalGameObj.AddComponent <SpatialAudioPortal>();
                portalComponent.portalCollider = boxCollider;

                var material = (Material)AssetDatabase.LoadAssetAtPath("Assets/AudioTools/Assets/Materials/DebugTriggerRed.mat", typeof(Material));

                if (material != null)
                {
                    var meshRenderer = portalGameObj.GetComponent <MeshRenderer>();
                    meshRenderer.material        = material;
                    portalComponent.meshRenderer = meshRenderer;
                }

                SpatialAudioPortal[] portalsCopy = new SpatialAudioPortal[targetScript.spatialAudioPortals.Length + 1];
                targetScript.spatialAudioPortals.CopyTo(portalsCopy, 0);
                portalsCopy[portalsCopy.Length - 1] = portalComponent;
                targetScript.spatialAudioPortals    = portalsCopy;
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("", GUILayout.Width(EditorGUIUtility.labelWidth));
            if (GUILayout.Button("Clear & Retrieve All"))
            {
                var portals = targetScript.GetComponentsInChildren <SpatialAudioPortal>();
                targetScript.spatialAudioPortals = portals;

                var rooms = targetScript.GetComponentsInChildren <SpatialAudioRoom>();
                targetScript.spatialAudioRooms = rooms;
            }
            EditorGUILayout.EndHorizontal();

            EditorGUILayout.BeginHorizontal();
            GUILayout.Label("", GUILayout.Width(EditorGUIUtility.labelWidth));
            if (GUILayout.Button("Room Network Validity Test"))
            {
                TestGridValidity(targetScript.spatialAudioRooms);
            }
            EditorGUILayout.EndHorizontal();

            serializedObject.ApplyModifiedProperties();
        }