Exemple #1
0
    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++;
                }
            }
        }
    }
Exemple #2
0
    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);
    }
Exemple #6
0
 public void UnRegisterObject( PedestrianObject a_object )
 {
     m_spawnedObjects.Remove( a_object );
     RespawnObject();
 }
Exemple #7
0
 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;
 }
Exemple #11
0
 public void UnRegisterObject(PedestrianObject a_object)
 {
     m_spawnedObjects.Remove(a_object);
     RespawnObject();
 }
Exemple #12
0
 public void RegisterObject(PedestrianObject a_object)
 {
     m_spawnedObjects.Add(a_object);
 }