Exemplo n.º 1
0
    public static void AttachAnimalToNetwork(AnimalSpawnZone zone, GameObject gameObject)
    {
        AnimalDespawner animalDespawner = gameObject.GetComponent <AnimalDespawner>();

        if (!animalDespawner)
        {
            animalDespawner = gameObject.AddComponent <AnimalDespawner>();
        }
        animalDespawner.SpawnedFromZone = zone;
        animalDespawner.DespawnRadius   = 70f;
        animalDespawner.UpdateRate      = 1f;
        if (BoltNetwork.isServer)
        {
            BoltEntity boltEntity = gameObject.AddComponent <BoltEntity>();
            BoltEntity component  = gameObject.GetComponent <CoopAnimalServer>().NetworkContainerPrefab.GetComponent <BoltEntity>();
            using (BoltEntitySettingsModifier boltEntitySettingsModifier = component.ModifySettings())
            {
                using (BoltEntitySettingsModifier boltEntitySettingsModifier2 = boltEntity.ModifySettings())
                {
                    boltEntitySettingsModifier2.clientPredicted          = boltEntitySettingsModifier.clientPredicted;
                    boltEntitySettingsModifier2.persistThroughSceneLoads = boltEntitySettingsModifier.persistThroughSceneLoads;
                    boltEntitySettingsModifier2.allowInstantiateOnClient = boltEntitySettingsModifier.allowInstantiateOnClient;
                    boltEntitySettingsModifier2.prefabId     = boltEntitySettingsModifier.prefabId;
                    boltEntitySettingsModifier2.updateRate   = boltEntitySettingsModifier.updateRate;
                    boltEntitySettingsModifier2.serializerId = boltEntitySettingsModifier.serializerId;
                }
            }
            BoltNetwork.Attach(gameObject);
        }
    }
Exemplo n.º 2
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)
            {
                this.SetupAnimal(transform, zone);
            }
        }
    }
Exemplo n.º 3
0
 private void Update()
 {
     if (BoltNetwork.isClient)
     {
         return;
     }
     if (AnimalSpawnController.lastUpdate + 2f < Time.time)
     {
         List <Transform> list = new List <Transform>();
         foreach (GameObject current in this.sceneTracker.allPlayers)
         {
             if (current)
             {
                 list.Add(current.transform);
             }
         }
         List <Transform> list2 = new List <Transform>();
         foreach (Transform current2 in list)
         {
             bool flag = false;
             foreach (Transform current3 in list2)
             {
                 if ((current2.position - current3.position).magnitude < Mathf.Lerp(30f, 60f, 0.6f))
                 {
                     flag = true;
                     break;
                 }
             }
             if (!flag)
             {
                 list2.Add(current2);
             }
         }
         AnimalSpawnZone[] zones = this.Zones;
         for (int i = 0; i < zones.Length; i++)
         {
             AnimalSpawnZone animalSpawnZone = zones[i];
             if (animalSpawnZone.DelayUntil <= Time.realtimeSinceStartup)
             {
                 if (list2.Count == 0)
                 {
                     break;
                 }
                 this.UpdateZone(animalSpawnZone, list2);
             }
         }
         AnimalSpawnController.lastUpdate = Time.time;
     }
 }
Exemplo n.º 4
0
 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);
 }
Exemplo n.º 5
0
 private void UpdateZone(AnimalSpawnZone zone, List <Transform> positions)
 {
     try
     {
         for (int i = 0; i < positions.Count; i++)
         {
             if ((positions[i].position - zone.transform.position).sqrMagnitude < zone.ZoneRadius * zone.ZoneRadius)
             {
                 this.SpawnOneAnimalForZone(zone, positions[i]);
                 positions.RemoveAt(i);
                 i--;
             }
         }
     }
     catch (Exception var_1_6B)
     {
     }
 }
Exemplo n.º 6
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);
        }
    }
Exemplo n.º 7
0
 private void OnEnable()
 {
     if (BoltNetwork.isClient)
     {
         return;
     }
     this.sceneTracker = Scene.SceneTracker;
     AnimalSpawnController.lastUpdate = Time.time;
     this.Zones = base.GetComponentsInChildren <AnimalSpawnZone>();
     AnimalSpawnZone[] zones = this.Zones;
     for (int i = 0; i < zones.Length; i++)
     {
         AnimalSpawnZone animalSpawnZone = zones[i];
         animalSpawnZone.SpawnedAnimals = new List <GameObject>();
         for (int j = 0; j < animalSpawnZone.Spawns.Length; j++)
         {
             animalSpawnZone.TotalWeight += animalSpawnZone.Spawns[j].Weight;
             animalSpawnZone.Spawns[j].WeightRunningTotal = animalSpawnZone.TotalWeight;
         }
     }
 }
Exemplo n.º 8
0
    private void SpawnOneAnimalForZone(AnimalSpawnZone zone, Transform pos)
    {
        if (zone.SpawnedAnimals.Count >= zone.MaxAnimalsTotal)
        {
            return;
        }
        float num = Mathf.Clamp01((float)zone.SpawnedAnimals.Count / (float)zone.MaxAnimalsTotal) - 0.25f;

        if (num < UnityEngine.Random.value)
        {
            float num2 = UnityEngine.Random.Range(0f, zone.TotalWeight);
            for (int i = 0; i < zone.Spawns.Length; i++)
            {
                if (num2 <= zone.Spawns[i].WeightRunningTotal)
                {
                    this.SpawnOneAnimalForZoneOfType(zone, zone.Spawns[i], pos);
                    return;
                }
            }
        }
    }
Exemplo n.º 9
0
    private void OnSpawnAnimalFromZone(GameObject spawned)
    {
        AnimalSpawnZone animalSpawnZone = null;

        for (int i = 0; i < this.queuedAnimalZones.Count; i++)
        {
            for (int j = 0; j < this.queuedAnimalZones[i].Spawns.Length; j++)
            {
                if (this.queuedAnimalZones[i].Spawns[j].bundleKey.asset == spawned.GetComponent <BundledPrefabSpawn>().id)
                {
                    animalSpawnZone = this.queuedAnimalZones[i];
                    break;
                }
            }
        }
        if (animalSpawnZone != null)
        {
            Debug.Log("successfully spawned animal from spawn zone");
            this.queuedAnimalZones.Remove(animalSpawnZone);
            this.OnSpawnedAnimalInZone(spawned, animalSpawnZone);
        }
    }
Exemplo n.º 10
0
    public void UpdateSpawnState()
    {
        for (int i = 0; i < this.sceneTracker.allPlayers.Count; i++)
        {
            GameObject gameObject = this.sceneTracker.allPlayers[i];
            if (gameObject && (gameObject.transform.position - base.transform.position).sqrMagnitude < this.DespawnRadius * this.DespawnRadius)
            {
                return;
            }
        }
        Vector3 vector = LocalPlayer.Transform.InverseTransformPoint(base.transform.position);
        float   num    = Mathf.Atan2(vector.x, vector.z) * 57.29578f;

        if (num < 90f && num > -90f)
        {
            return;
        }
        if (this.SpawnedFromZone)
        {
            this.SpawnedFromZone.SpawnedAnimals.Remove(base.gameObject);
            this.SpawnedFromZone = null;
        }
        if (BoltNetwork.isRunning)
        {
            BoltNetwork.Detach(base.gameObject);
            UnityEngine.Object.Destroy(base.gameObject.GetComponent <BoltEntity>());
            UnityEngine.Object.Destroy(this);
        }
        if (base.GetComponent <CoopAnimalServer>().NonPooled || !PoolManager.Pools["creatures"].IsSpawned(base.transform))
        {
            UnityEngine.Object.Destroy(base.gameObject);
        }
        else
        {
            PoolManager.Pools["creatures"].Despawn(base.transform);
            UnityEngine.Object.Destroy(this);
        }
    }
Exemplo n.º 11
0
 public void SpawnAnimalFromZone(BundleKey bundleKey, Vector3 pos, Quaternion rot, AnimalSpawnZone spawnZone)
 {
     Debug.Log("Starting to spawn animal from spawn zone");
     this.queuedAnimalZones.Add(spawnZone);
     this.SpawnObject(bundleKey, pos, rot, null, new Action <GameObject>(this.OnSpawnAnimalFromZone));
 }
Exemplo n.º 12
0
 private void OnSpawnedFromAssetBundle(GameObject animal, AnimalSpawnZone zone)
 {
     this.SetupAnimal(animal.transform, zone);
 }
Exemplo n.º 13
0
 private void SpawnFromAssetBundle(AnimalSpawnZone zone, BundleKey bundleKey, Vector3 pos, Quaternion rot)
 {
     BundledPrefabSpawnPoolManager.instance.SpawnAnimalFromZone(bundleKey, pos, rot, zone);
 }