void Start() { if (Instance != this) { return; } if (m_randomObjectSpawnPerNode && Application.isPlaying) { PedestrianNode[] nodes = GameObject.FindObjectsOfType <PedestrianNode>(); for (int rIndex = 0; rIndex < nodes.Length; rIndex++) { int perNodeCount = 0; while (perNodeCount < m_numOfObjectsSpawnedPerNode) { float rand = Random.Range(0.0f, 1.0f); if (rand <= m_randomObjectSpawnChancePerNode && CanSpawn()) { int randObjectIndex = Random.Range(0, m_objectPrefabs.Count); PedestrianObject obj = Instantiate(m_objectPrefabs[randObjectIndex], transform.position, transform.rotation) as PedestrianObject; obj.Spawn(nodes[rIndex].transform.position, nodes[rIndex]); } perNodeCount++; } } } }
public PedestrianNode NextNode( PedestrianObject a_obj ) { switch(a_obj.m_pathingStatus) { case PedestrianObject.PathingStatus.RANDOM: { if( m_nodes.Count > 0) { int count = 0; List<PedestrianNode> m_tmpNodes = new List<PedestrianNode>(); for(int nIndex = 0; nIndex < m_nodes.Count; nIndex++) m_tmpNodes.Add(m_nodes[nIndex]); while(count < m_tmpNodes.Count) { count++; PedestrianNode node = m_tmpNodes[Random.Range(0, m_tmpNodes.Count)]; if(node && !a_obj.HasVisitedNode( node )) return node; else { m_tmpNodes.Remove( node ); count = 0; } } } } break; } return null; }
public PedestrianObject SpawnRandomObject(bool a_ignoreChangeOfSpawning = false) { if (m_objectPrefabs.Count <= 0) { return(null); } if (PedestrianSystem.Instance && !PedestrianSystem.Instance.CanSpawn()) { return(null); } float chanceOfSpawn = Random.Range(0.0f, 1.0f); if (!a_ignoreChangeOfSpawning && chanceOfSpawn > m_nodeObjectSpawnChance) { return(null); } int randIndex = Random.Range(0, m_objectPrefabs.Count); PedestrianObject obj = Instantiate(m_objectPrefabs[randIndex], transform.position, transform.rotation) as PedestrianObject; obj.Spawn(transform.position, m_startNode); return(obj); }
IEnumerator Start() { if (PedestrianSystem.Instance) { PedestrianSystem.Instance.RegisterObjectSpawner(this); } if (m_totalToSpawn <= 0) { yield break; } for (int sIndex = 0; sIndex < m_totalToSpawn; sIndex++) { PedestrianObject obj = SpawnRandomObject(true); obj.gameObject.SetActive(false); m_objectPool.Add(obj); } yield return(new WaitForSeconds(m_onStartDelay)); while (m_totalSpawned < m_totalToSpawn) { Collider[] colliderHit = Physics.OverlapSphere(transform.position, m_spawnCheckRadius); bool hitObj = false; for (int hIndex = 0; hIndex < colliderHit.Length; hIndex++) { if (colliderHit[hIndex].transform.GetComponent <PedestrianObject>()) { hitObj = true; } } if (!hitObj) { if (m_totalSpawned < m_objectPool.Count) { PedestrianObject obj = m_objectPool[m_totalSpawned]; obj.gameObject.SetActive(true); } m_totalSpawned++; } yield return(new WaitForSeconds(m_spawnDelayBetweenTries)); } }
public PedestrianNode NextNode(PedestrianObject a_obj) { switch (a_obj.m_pathingStatus) { case PedestrianObject.PathingStatus.RANDOM: { if (m_nodes.Count > 0) { int count = 0; List <PedestrianNode> m_tmpNodes = new List <PedestrianNode>(); for (int nIndex = 0; nIndex < m_nodes.Count; nIndex++) { m_tmpNodes.Add(m_nodes[nIndex]); } while (count < m_tmpNodes.Count) { count++; PedestrianNode node = m_tmpNodes[Random.Range(0, m_tmpNodes.Count)]; if (node && !a_obj.HasVisitedNode(node)) { return(node); } else { m_tmpNodes.Remove(node); count = 0; } } } } break; } return(null); }
public void UnRegisterObject( PedestrianObject a_object ) { m_spawnedObjects.Remove( a_object ); RespawnObject(); }
public void RegisterObject( PedestrianObject a_object ) { m_spawnedObjects.Add( a_object ); }
void Awake() { PedestrianObject = (PedestrianObject)target; }
void Awake() { PedestrianSystem = (PedestrianSystem)target; if (!PedestrianSystem) { Debug.LogError("Pedestrian System Error -> \"Pedestrian System\" script must be in the scene. It is missing. Drop in the \"PedestrianSystem\" Prefab to fix this."); } string sDataPath = Application.dataPath + "/Pedestrian System/Prefabs/Resources/Active/"; // get the system file paths of all the files in the asset folder string[] aFilePaths = Directory.GetFiles(sDataPath); // enumerate through the list of files loading the assets they represent and getting their type int count = 0; foreach (string sFilePath in aFilePaths) { if (sFilePath.Length <= 6) { continue; } string sAssetPath = sFilePath.Substring(sFilePath.Length - 6, 6); if (sAssetPath == "prefab") { count++; } } m_prefabLocation = new string[count]; m_highAssets.Clear(); count = 0; foreach (string sFilePath in aFilePaths) { if (sFilePath.Length <= 6) { continue; } string sAssetPath = sFilePath.Substring(sFilePath.Length - 6, 6); if (sAssetPath == "prefab") { string file = sFilePath.Substring(sDataPath.Length); m_prefabLocation[count] = sDataPath + file; //Debug.Log("count " + count + " : " + m_prefabLocation[count]); PedestrianObject asset = AssetDatabase.LoadAssetAtPath(m_prefabLocation[count], typeof(PedestrianObject)) as PedestrianObject; if (asset) { if (asset.m_assetFrequency == PedestrianSystem.ObjectFrequency.HIGH) { m_highAssets.Add(asset); } else if (asset.m_assetFrequency == PedestrianSystem.ObjectFrequency.MEDIUM) { m_mediumAssets.Add(asset); } else if (asset.m_assetFrequency == PedestrianSystem.ObjectFrequency.LOW) { m_lowAssets.Add(asset); } m_allAssets.Add(asset); } count++; } } }
void Awake() { PedestrianObject = (PedestrianObject)target; }
public void UnRegisterObject(PedestrianObject a_object) { m_spawnedObjects.Remove(a_object); RespawnObject(); }
public void RegisterObject(PedestrianObject a_object) { m_spawnedObjects.Add(a_object); }