private void SpawnOneAnimalForZoneOfType(AnimalSpawnZone zone, AnimalSpawnConfig spawn, Transform basePos)
    {
        if (spawn.nocturnal && !Clock.Dark)
        {
            return;
        }
        float sendDir;

        if (spawn.largeAnimalType)
        {
            sendDir = -1f;
        }
        else
        {
            sendDir = 1f;
        }
        Vector3 pos;

        if (AnimalSpawnController.TryFindSpawnPosition(basePos, sendDir, out pos))
        {
            Transform transform = PoolManager.Pools["creatures"].Spawn(spawn.Prefab.transform, pos, zone.transform.rotation);
            if (transform)
            {
                this.SetupAnimal(transform, zone);
            }
        }
    }
 private void SetupAnimal(Transform animal, AnimalSpawnZone zone)
 {
     if (animal)
     {
         animal.GetChild(0).eulerAngles = new Vector3(0f, (float)UnityEngine.Random.Range(0, 360), 0f);
     }
     if (animal)
     {
         animal.SendMessage("startUpdateSpawn");
     }
     if (animal)
     {
         animal.SendMessage("setSnowType", zone.snowType, SendMessageOptions.DontRequireReceiver);
     }
     zone.SpawnedAnimals.Add(animal.gameObject);
     AnimalSpawnController.AttachAnimalToNetwork(zone, animal.gameObject);
 }
Beispiel #3
0
    public override void OnEvent(SpawnBunny evnt)
    {
        Transform transform = (UnityEngine.Object.Instantiate(Resources.Load <CoopRabbitReference>("CoopRabbitReference").Rabbit, evnt.Pos, Quaternion.identity) as GameObject).transform;

        if (!transform)
        {
            return;
        }
        if (transform)
        {
            transform.GetChild(0).eulerAngles = new Vector3(0f, (float)UnityEngine.Random.Range(0, 360), 0f);
        }
        if (transform)
        {
            transform.SendMessage("startUpdateSpawn");
        }
        AnimalSpawnController.AttachAnimalToNetwork(null, null, transform.gameObject);
    }
Beispiel #4
0
 public static bool TryFindSpawnPosition(Transform basePos, float sendDir, out Vector3 pos)
 {
     pos = Vector3.zero;
     for (int i = 0; i < 2; i++)
     {
         pos    = AnimalSpawnController.SpawnPos(basePos, sendDir);
         pos.y += 100f;
         RaycastHit raycastHit;
         if (Physics.Raycast(pos, Vector3.down, out raycastHit, 300f, 67108864) && raycastHit.collider.CompareTag("TerrainMain") && AstarPath.active != null)
         {
             GraphNode node = AstarPath.active.GetNearest(raycastHit.point).node;
             if (node != null && node.Walkable)
             {
                 pos = new Vector3((float)(node.position[0] / 1000), (float)(node.position[1] / 1000), (float)(node.position[2] / 1000));
                 return(true);
             }
         }
     }
     return(false);
 }
Beispiel #5
0
    private void SpawnOneAnimalForZoneOfType(AnimalSpawnZone zone, AnimalSpawnConfig spawn, Transform basePos)
    {
        if (spawn.nocturnal && !Clock.Dark)
        {
            return;
        }
        float sendDir;

        if (spawn.largeAnimalType)
        {
            sendDir = -1f;
        }
        else
        {
            sendDir = 1f;
        }
        Vector3 pos;

        if (AnimalSpawnController.TryFindSpawnPosition(basePos, sendDir, out pos))
        {
            Transform transform = PoolManager.Pools["creatures"].Spawn(spawn.Prefab.transform, pos, zone.transform.rotation);
            if (!transform)
            {
                return;
            }
            if (transform)
            {
                transform.GetChild(0).eulerAngles = new Vector3(0f, (float)UnityEngine.Random.Range(0, 360), 0f);
            }
            if (transform)
            {
                transform.SendMessage("startUpdateSpawn");
            }
            if (transform)
            {
                transform.SendMessage("setSnowType", zone.snowType, SendMessageOptions.DontRequireReceiver);
            }
            zone.SpawnedAnimals.Add(transform.gameObject);
            AnimalSpawnController.AttachAnimalToNetwork(zone, spawn, transform.gameObject);
        }
    }
 public static bool TryFindSpawnPosition(Transform basePos, float sendDir, out Vector3 pos)
 {
     pos = Vector3.zero;
     for (int i = 0; i < 2; i++)
     {
         pos    = AnimalSpawnController.SpawnPos(basePos, sendDir);
         pos.y += 100f;
         RaycastHit raycastHit;
         if (Physics.Raycast(pos, Vector3.down, out raycastHit, 300f, 67108864) && raycastHit.collider.CompareTag("TerrainMain") && AstarPath.active != null)
         {
             GraphNode node = AstarPath.active.GetNearest(raycastHit.point, NNConstraint.Default).node;
             if (node == null)
             {
                 return(false);
             }
             bool flag = false;
             using (List <uint> .Enumerator enumerator = Scene.MutantControler.mostCommonArea.GetEnumerator())
             {
                 while (enumerator.MoveNext())
                 {
                     int num = (int)enumerator.Current;
                     if ((long)num == (long)((ulong)node.Area))
                     {
                         flag = true;
                     }
                 }
             }
             if (node != null && node.Walkable && flag)
             {
                 pos = new Vector3((float)(node.position[0] / 1000), (float)(node.position[1] / 1000), (float)(node.position[2] / 1000));
                 return(true);
             }
         }
     }
     return(false);
 }