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); }
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); }
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); }
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); }