public void Test_01_Array_AddItem_Extension()
        {
            Vector2[] newArray  = null;
            Vector2[] testArray = null;

            try
            {
                // ReSharper disable once ExpressionIsAlwaysNull
                // We know the array is null and is initialized
                // in the extension method we're testing
                newArray = testArray.AddItem(Vector2.zero);
            }
            catch
            {
                // ignored
            }

            Assert.IsNotNull(newArray);

            testArray = new Vector2[5];
            newArray  = testArray.AddItem(Vector2.one);

            Assert.IsTrue(newArray[newArray.Length - 1] == Vector2.one);
            Assert.IsTrue(newArray.Length > testArray.Length);
            Assert.IsTrue(newArray.Length - testArray.Length == 1);
        }
Beispiel #2
0
        IEnumerable <object[]> GetIndexesForPrefix(TSource source, object[] previousIndex)
        {
            if (previousIndex.Length == m_indexCount)
            {
                yield return(previousIndex);

                yield break;
            }

            var lastIndexes = m_indexes(source, previousIndex);

            if (lastIndexes == null)
            {
                yield break;
            }

            foreach (var tIt in lastIndexes)
            {
                var newIndexes = previousIndex.AddItem(tIt).ToArray();

                foreach (var t in GetIndexesForPrefix(source, newIndexes))
                {
                    yield return(t);
                }
            }
        }
 public static void Postfix(EditorUserFlagAttribute __instance, string displayName, params Type[] allowedTypes)
 {
     if (displayName.Equals("Right Pole") || displayName.Equals("Left Pole"))
     {
         FieldInfo allowedTypesFieldInfo = typeof(EditorUserFlagAttribute).GetField("m_AllowedTypes", BindingFlags.Instance | BindingFlags.NonPublic);
         Type[]    value = (Type[])allowedTypesFieldInfo.GetValue(__instance);
         value = value.AddItem(typeof(TrolleybusTrailerAI)).ToArray();
         allowedTypesFieldInfo.SetValue(__instance, value);
     }
 }
Beispiel #4
0
        /// <summary>
        /// Faz a união de dois arrays
        /// </summary>
        /// <param name="secondArray">Array a ser feito a união</param>
        /// <returns>Novo array contendo a união dos dois objetos</returns>
        public static T[] UnionWith <T>(this T[] array, T[] secondArray)
        {
            //Atribui todos os itens do array atual para o novo array
            T[] newArray = array;

            //Para todos os itens do segundo array, verifica se já está no novo array,
            //Caso não estiver, adiciona no novo array
            for (int i = 0; i < secondArray.Length; i++)
            {
                if (!newArray.ContainsValue(secondArray[i]))
                {
                    newArray = newArray.AddItem(secondArray[i]);
                }
            }

            return(newArray);
        }
Beispiel #5
0
        public static T[] InsertItem <T>(this T[] array, int index, T value)
        {
            if (array.Length < index || index < 0)
            {
                throw new ArgumentOutOfRangeException();
            }
            var isLast = array.Length == index;

            if (isLast)
            {
                return(array.AddItem(value));
            }
            var newArray = new T[array.Length + 1];

            Array.Copy(array, newArray, index);
            newArray[index] = value;
            Array.Copy(array, index + 1, newArray, index + 1, array.Length - index);
            return(newArray);
        }
        internal static int GetWindows()
        {
            GameObject[] rObjs = ALUtils.GetRootObjects().ToArray();

            int wCount = 0;

            foreach (GameObject rootObj in rObjs)
            {
                Renderer   childRenderer = rootObj.GetComponent <Renderer>();
                Renderer[] allRenderers  = rootObj.GetComponentsInChildren <Renderer>();
                //allRenderers.Add(childRenderer);
                allRenderers.AddItem(childRenderer);

                foreach (Renderer renderer in allRenderers)
                {
                    if (!renderer.gameObject.name.Contains("_XPZ_Window"))
                    {
                        foreach (Material mat in renderer.materials)
                        {
                            if (mat.name.ToLower().Contains("glow") && !renderer.gameObject.name.ToLower().Contains("truck") && !renderer.gameObject.name.ToLower().Contains("car") && !renderer.gameObject.name.ToLower().Contains("lamp"))
                            {
                                gameWindows.Add(renderer);
                                renderer.gameObject.name += "_XPZ_Window";

                                WindowsCastShadow(renderer.gameObject);
                                renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
                                renderer.receiveShadows    = false;

                                wCount++;
                                break;
                            }
                        }
                    }
                }
            }

            return(wCount);
        }
Beispiel #7
0
 private static void Postfix(ref CarePackageInfo[] ___carePackages)
 {
     ___carePackages = ___carePackages.AddItem(new CarePackageInfo(GlomConfig.ID, 1f, null)).ToArray();
 }
Beispiel #8
0
            private static void Postfix(GorillaLocomotion.Player __instance)
            {
                try
                {
                    if (fetched)
                    {
                        Vector3 plyPos = __instance.bodyCollider.transform.position; // Get player position.

                        if (!ranOnce)
                        {
                            audio                = Resources.FindObjectsOfTypeAll <AudioListener>()[0]; // Get audio listener.
                            audioReverb          = audio.gameObject.AddComponent <AudioReverbFilter>();
                            audioLowPass         = audio.gameObject.AddComponent <AudioLowPassFilter>();
                            audioReverb.enabled  = true;
                            audioLowPass.enabled = false;
                            triggers             = Resources.FindObjectsOfTypeAll <GorillaTriggerBox>();
                            for (int i = 0; i < ambienceAudio.Length; i++) // Create audio sources.
                            {
                                if (i != 7 || i != 8)                      // Is this actually working?
                                {
                                    AudioSource source = GorillaLocomotion.Player.Instance.gameObject.AddComponent <AudioSource>();
                                    sources.Add(source);
                                }
                            }
                            int cnt = 0;
                            foreach (AudioSource source in sources) // Set up audio sources.
                            {
                                source.volume = 0f;
                                source.loop   = true;

                                source.clip = ambienceAudio[cnt];
                                source.Play();
                                cnt++;
                            }

                            foreach (GorillaTriggerBox trig in triggers) // Set up triggers.
                            {
                                if (triggerList.Contains <string>(trig.name))
                                {
                                    boundList.AddItem <Bounds>(trig.GetComponent <Collider>().bounds);
                                }
                            }

                            triggerSides[(int)Areas.None]      = false; // How could I do this better? Actually I know, I'll do it later! Or will I?
                            triggerSides[(int)Areas.Forest]    = false;
                            triggerSides[(int)Areas.Cosmetics] = false;
                            triggerSides[(int)Areas.Cave]      = false;
                            triggerSides[(int)Areas.Canyon]    = false;

                            ranOnce           = true;
                            sources[5].volume = volume;
                            GameObject.Destroy(sources[5], ambienceAudio[5].length); // Destroy startup sound game object.
                            timeSinceLoad = Time.time;

                            //Inserting computer ambience here. Computer ambience is 3D sound for now.
                            pcSource              = GorillaComputer.instance.gameObject.AddComponent <AudioSource>();
                            pcSource.volume       = volume / 8;
                            pcSource.spatialBlend = 1f;
                            pcSource.maxDistance  = 1f;
                            pcSource.clip         = ambienceAudio[6];
                            pcSource.loop         = true;
                            pcSource.Play();

                            Console.WriteLine(Application.streamingAssetsPath);

                            Console.WriteLine("Ambient Sounds is ready!");
                        }
                        if (Time.frameCount % 5 == 0)                           // OpTiMiZaTiOnS!?!?
                        {
                            Task t1 = new Task(() =>                            // Run in new thread. Multi-threading for the win!
                            {
                                foreach (GorillaTriggerBox trigger in triggers) // Cycle through all triggers, maybe a better way?
                                {
                                    string name     = trigger.name;
                                    Bounds bounds   = trigger.GetComponent <Collider>().bounds;
                                    Vector3 closest = bounds.ClosestPoint(plyPos);
                                    Vector3 center  = bounds.center;
                                    bool hit        = bounds.Intersects(__instance.bodyCollider.bounds);
                                    float dist      = (plyPos - closest).magnitude / 6;

                                    AudioSource source = new AudioSource();
                                    float tmpVolume    = -0f;
                                    Areas side         = Areas.None;
                                    bool sideBool      = false;
                                    switch (name) // Ignore everything in this switch statement, it's all a mess! AHHHHH!!
                                    {
                                    case "JoinPublicRoom (tree exit)":
                                        if (hit)
                                        {
                                            side = Areas.Forest;
                                            if (plyPos.z > center.z - 1)
                                            {
                                                sideBool        = true;
                                                curReverbPreset = UserReverbPresets.Forest;
                                                pcSource.volume = 0f;
                                            }
                                            else if (plyPos.x < center.x + 2 && plyPos.x > center.x - 3)
                                            {
                                                sideBool        = false;
                                                curReverbPreset = UserReverbPresets.Room;
                                                pcSource.volume = volume / 8;
                                            }
                                        }
                                        source = sources[(int)Tracks.Forest - 1];

                                        if (!triggerSides[(int)Areas.Forest])
                                        {
                                            if (!triggerSides[(int)Areas.Cosmetics])
                                            {
                                                tmpVolume = (1 - dist) * volume;
                                            }
                                            Vector3 dir      = (__instance.headCollider.transform.position - closest).normalized;
                                            source.panStereo = Vector3.Dot(-__instance.headCollider.transform.right, dir) / Mathf.Clamp(2 - dist, 0, 2);
                                        }
                                        else
                                        {
                                            source.panStereo = 0f;
                                        }

                                        break;

                                    case "JoinPublicRoom (cave entrance)":
                                        if (hit)
                                        {
                                            side = Areas.Cave;
                                            if (plyPos.z < center.z)
                                            {
                                                curReverbPreset = UserReverbPresets.Cave;
                                                sideBool        = true;
                                            }
                                            else
                                            {
                                                curReverbPreset = UserReverbPresets.Hallway;
                                                sideBool        = false;
                                            }
                                        }
                                        source = sources[(int)Tracks.Cave - 1];
                                        if (triggerSides[(int)Areas.Cave])
                                        {
                                            tmpVolume = Mathf.Clamp(dist, 0, 1) * volume;
                                        }
                                        else
                                        {
                                            tmpVolume = 0;

                                            if (triggerSides[(int)Areas.Cave])
                                            {
                                                if (plyPos.y < 20)
                                                {
                                                    Console.WriteLine("1");
                                                    curReverbPreset = UserReverbPresets.Forest;
                                                }
                                                else
                                                {
                                                    curReverbPreset = UserReverbPresets.Cave;
                                                }
                                            }
                                        }
                                        break;

                                    case "LeavingCaveGeo":
                                        if (hit)
                                        {
                                            if (plyPos.y < center.y)
                                            {
                                                curReverbPreset = UserReverbPresets.Hallway;
                                            }
                                            else
                                            {
                                                curReverbPreset = UserReverbPresets.Room;
                                            }
                                        }

                                        break;

                                    case "EnteringCosmetics":
                                        if (hit)
                                        {
                                            side = Areas.Cosmetics;
                                            if (plyPos.x < center.x)
                                            {
                                                sideBool        = true;
                                                pcSource.volume = 0f;
                                            }
                                            else
                                            {
                                                sideBool        = false;
                                                pcSource.volume = volume / 8;
                                            }
                                        }
                                        source = sources[(int)Tracks.Cosmetics - 1];

                                        if (triggerSides[(int)Areas.Cosmetics])
                                        {
                                            tmpVolume = Mathf.Clamp(dist * 2, 0, 1) * volume;
                                        }
                                        else
                                        {
                                            tmpVolume = 0;
                                        }
                                        break;

                                        /*
                                         * if (!triggerSides[(int)Areas.Cosmetics] && !triggerSides[(int)Areas.Forest])
                                         * {
                                         *  tmpVolume = (1 - dist * 3) * volume;
                                         *  Vector3 dir = (__instance.headCollider.transform.position - closest).normalized;
                                         *  source.panStereo = Vector3.Dot(-__instance.headCollider.transform.right, dir) / Mathf.Clamp(2 - dist, 0, 2);
                                         * }
                                         * else
                                         * {
                                         *  Vector3 dir = (__instance.headCollider.transform.position - closest).normalized;
                                         *  source.panStereo = Vector3.Dot(-__instance.headCollider.transform.right, dir) / Mathf.Clamp(2 - dist, 0, 2);
                                         *  if (triggerSides[(int)Areas.Forest])
                                         *      tmpVolume = 0;
                                         * }
                                         */
                                        break;

                                    case "JoinPublicRoom (canyon)":
                                        if (hit)
                                        {
                                            side = Areas.Canyon;
                                            if (plyPos.z < center.z)
                                            {
                                                sideBool        = true;
                                                curReverbPreset = UserReverbPresets.City;
                                            }
                                            else if (plyPos.x < center.x + 2 && plyPos.x > center.x - 3)
                                            {
                                                sideBool        = false;
                                                curReverbPreset = UserReverbPresets.Room;
                                            }
                                        }
                                        source = sources[(int)Tracks.Canyon - 1];
                                        if (!triggerSides[(int)Areas.Canyon] && !triggerSides[(int)Areas.Forest])
                                        {
                                            tmpVolume        = (1 - dist) * volume;
                                            Vector3 dir      = (__instance.headCollider.transform.position - closest).normalized;
                                            source.panStereo = Vector3.Dot(-__instance.headCollider.transform.right, dir) / Mathf.Clamp(2 - dist, 0, 2);
                                        }
                                        else
                                        {
                                            source.panStereo = 0f;

                                            if (triggerSides[(int)Areas.Forest])
                                            {
                                                tmpVolume = 0;
                                            }

                                            if (triggerSides[(int)Areas.Canyon])
                                            {
                                                if (plyPos.y < 5)
                                                {
                                                    curReverbPreset = UserReverbPresets.Hallway;
                                                }
                                                else
                                                {
                                                    curReverbPreset = UserReverbPresets.City;
                                                }
                                            }
                                        }
                                        break;

                                    case "QuitBox":
                                        source    = sources[(int)Tracks.Void - 1];
                                        tmpVolume = (1 - Mathf.Clamp((float)Math.Log(dist / 2.5f), 0, 1)) * volume * 2;
                                        //tmpVolume = (1 - dist / 25) * volume;
                                        break;
                                    }
                                    if (tmpVolume != -0f) // Weird crap here.
                                    {
                                        source.volume = tmpVolume;
                                    }
                                    if (side != Areas.None) // Why do I have Areas.None??
                                    {
                                        triggerSides[(int)side] = sideBool;
                                    }
                                }
                                // Falling and reverb.
                                AudioSource falling = sources[(int)Tracks.Falling - 1];
                                float vel           = __instance.GetComponent <Rigidbody>().velocity.magnitude;

                                falling.pitch  = Mathf.Clamp((float)Math.Log(vel / 5), 0, 3);
                                falling.volume = (float)Math.Log(vel / 10) * volume * 12;

                                SetReverbPreset();
                            });
                            t1.Start();
                        }
                        float time = Time.time - timeSinceLoad; // Startup sound. OpTiMiZe!
                        if (time < 1)
                        {
                            AudioListener.volume = time;
                        }
                    }
                }
                catch (Exception err)
                {
                    Console.WriteLine("AmbientSounds Error! : " + err);
                }
            }
Beispiel #9
0
 public static void RegisterReferences(Type t)
 {
     References.AddItem(MetadataReference.CreateFromFile(t.Assembly.Location));
 }
Beispiel #10
0
            private static void Postfix(ref CarePackageInfo[] ___carePackages)
            {
                var core = new CarePackageInfo(ID, 1, () => Condition(ID));

                ___carePackages = ___carePackages.AddItem(core).ToArray();
            }
        /****** SCENE *****/
        internal static void PrepareSceneShadows()
        {
            GameObject[] rObjs = ALUtils.GetRootObjects().ToArray();

            foreach (GameObject rootObj in rObjs)
            {
                MeshRenderer   childRenderer = rootObj.GetComponent <MeshRenderer>();
                MeshRenderer[] allRenderers  = rootObj.GetComponentsInChildren <MeshRenderer>();
                //allRenderers.Add(childRenderer);
                allRenderers.AddItem(childRenderer);

                foreach (MeshRenderer renderer in allRenderers)
                {
                    //Remove glass from sun layer
                    Material[] mats = renderer.materials;

                    foreach (Material mat in mats)
                    {
                        if (mat.name.ToLower().Contains("glass"))
                        {
                            renderer.gameObject.layer = 7;
                            continue;
                        }
                    }

                    //Ignore
                    if (renderer == null || renderer.gameObject.name.Contains("XPZ_Wall") || renderer.gameObject.name.Contains("XPZ_BaseWindow") ||
                        (renderer.gameObject.name.StartsWith("OBJ_") && !renderer.gameObject.name.ToLower().Contains("door") && !renderer.gameObject.name.ToLower().Contains("curtain") && !renderer.gameObject.name.ToLower().Contains("car")) ||
                        renderer.gameObject.name.StartsWith("GEAR_") ||
                        renderer.gameObject.name.StartsWith("FX_") ||
                        renderer.gameObject.name.StartsWith("CONTAINER_") ||
                        renderer.gameObject.name.StartsWith("INTERACTIVE_")
                        )
                    {
                        continue;
                    }

                    //Hide
                    if (renderer.gameObject.name.ToLower().Contains("shadow_caster") ||
                        (renderer.gameObject.name.ToLower().Contains("cylinder") && !renderer.material.name.StartsWith("FX_")) ||
                        renderer.gameObject.name.ToLower().Contains("sphere")
                        )
                    {
                        renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
                        renderer.gameObject.SetActive(false);

                        continue;
                    }

                    //Glass-Glow
                    if ((renderer.gameObject.name.ToLower().Contains("glass") || renderer.gameObject.name.ToLower().Contains("glow")) && (!renderer.gameObject.name.ToLower().Contains("shadow") && !renderer.gameObject.name.ToLower().Contains("truck") && !renderer.gameObject.name.ToLower().Contains("car") && !renderer.gameObject.name.ToLower().Contains("xpz_window")))
                    {
                        renderer.gameObject.name += "_XPZ_BaseWindow";

                        renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;

                        continue;
                    }
                    else if (renderer.gameObject.name.ToLower().Contains("glow") && renderer.gameObject.name.ToLower().Contains("shadow"))
                    {
                        renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.Off;
                        renderer.gameObject.SetActive(false);

                        continue;
                    }

                    if (renderer.gameObject.name.ToLower().Contains("decal"))
                    {
                        renderer.receiveShadows = true;
                        qd_Decal decalInst = renderer.GetComponent <qd_Decal>();

                        vp_Layer.Set(renderer.gameObject, 7, false);

                        continue;
                    }

                    //Rest - Cast shadows if not transparent
                    if (renderer.shadowCastingMode == UnityEngine.Rendering.ShadowCastingMode.Off || renderer.shadowCastingMode == UnityEngine.Rendering.ShadowCastingMode.On)
                    {
                        //Material[] mats = renderer.materials;

                        renderer.shadowCastingMode = UnityEngine.Rendering.ShadowCastingMode.TwoSided;

                        /*foreach (Material mat in mats)
                         * {
                         *  if (mat.name.ToLower().Contains("glass"))
                         *  {
                         *      renderer.gameObject.layer = 7;
                         *      continue;
                         *  }
                         * }*/
                    }
                    else if (renderer.shadowCastingMode == UnityEngine.Rendering.ShadowCastingMode.ShadowsOnly)
                    {
                        FlipMesh(renderer.gameObject);
                    }
                }
            }
        }