Пример #1
0
    public void ProcessCompletedCandidate(CandidateAgentData candidateData, MasterGenomePool masterGenomePool)
    {
        numAgentsEvaluated++;

        leaderboardGenomesList.Insert(0, candidateData);  // place at front of leaderboard list (genomes eligible for being parents)
        if(leaderboardGenomesList.Count > maxLeaderboardGenomePoolSize) {
            leaderboardGenomesList.RemoveAt(leaderboardGenomesList.Count - 1);
        }

        int beforeCount = candidateGenomesList.Count;
        int listIndex = -1;
        for (int i = 0; i < candidateGenomesList.Count; i++) {
            if(candidateData.candidateID == candidateGenomesList[i].candidateID) {
                listIndex = i;
            }
        }
        //Debug.Log("Removed! " + beforeCount.ToString() + " #: " + listIndex.ToString() + ", candID: " + candidateData.candidateID.ToString());
        if (listIndex > -1) {
            //Debug.Log("RemoveAt(" + listIndex.ToString() + "),[" + candidateGenomesList[listIndex].candidateID.ToString() + "], candID: " + candidateData.candidateID.ToString() + ", SpeciesPool: " + this.speciesID.ToString() + ", CDSID: " + candidateData.speciesID.ToString());
            candidateGenomesList.RemoveAt(listIndex);  // Will this work? never used this before

            masterGenomePool.debugRecentlyDeletedCandidateIDsList.Insert(0, candidateData.candidateID);
            if (masterGenomePool.debugRecentlyDeletedCandidateIDsList.Count > 512) {
                masterGenomePool.debugRecentlyDeletedCandidateIDsList.RemoveAt(masterGenomePool.debugRecentlyDeletedCandidateIDsList.Count - 1);
            }
        }
        else {
            Debug.LogError(candidateGenomesList.Count <= 0 ? "META-ERROR NO INDEX FOUND! " :
                $"ERROR NO INDEX FOUND! {candidateData.candidateID}, species: {speciesID}, CDSID: {candidateData.speciesID}, [0]: {candidateGenomesList[0].candidateID}");

            masterGenomePool.GlobalFindCandidateID(candidateData.candidateID); // temp debug
        }

        // *** NOTE! *** List.Remove() was unreliable - worked sometimes but not others? still unsure about it
    }
Пример #2
0
    public void FirstTimeInitialize(MasterGenomePool masterGenomePool)
    {
        nodeRaycastTargetsList = new List <TreeOfLifeNodeRaycastTarget>();

        // Create Nodes ( Copy from MasterGenomePool CompleteSpeciesList )
        for (int i = 0; i < masterGenomePool.completeSpeciesPoolsList.Count; i++)    // should only be one species at this point?
        {
            AddNewSpecies(masterGenomePool, i);
        }
    }
Пример #3
0
    public void AddNewSpecies(MasterGenomePool masterGenomePool, int newSpeciesID)
    {
        SpeciesGenomePool speciesPool = masterGenomePool.completeSpeciesPoolsList[newSpeciesID];
        // RaycastColliderGameObject:
        GameObject speciesNodeColliderGO = new GameObject("SpeciesNodeRaycastCollider_" + newSpeciesID.ToString());

        speciesNodeColliderGO.transform.parent        = treeOfLifeAnchorGO.transform;
        speciesNodeColliderGO.transform.localPosition = Vector3.zero; // new Vector3(-1f * (float)speciesPool.depthLevel, UnityEngine.Random.Range(-2f, 0f), 0f) * scaleMultiplier;
        speciesNodeColliderGO.transform.localScale    = Vector3.one * colliderBaseScaleMultiplier * camScale;
        TreeOfLifeNodeRaycastTarget rayTarget = speciesNodeColliderGO.AddComponent <TreeOfLifeNodeRaycastTarget>();

        rayTarget.Initialize(speciesPool);
        rayTarget.rayCollider           = speciesNodeColliderGO.AddComponent <CapsuleCollider>();
        rayTarget.rayCollider.isTrigger = true;

        nodeRaycastTargetsList.Add(rayTarget);
    }