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