private CustomerData GetNextSpawningCustomer(CustomerSpawnStrategy strategy) { switch (strategy) { case CustomerSpawnStrategy.Random: int index = 0; int curIter = 0; while (true) { curIter++; if (curIter >= m_CustomerDataList.Count) { throw new System.Exception("Cannot spawn next customer"); } index = Random.Range(0, m_CustomerDataList.Count); CustomerData customerData = m_CustomerDataList[index]; if (m_SpawnedCustomerCache.Exists(x => x.GetComponent <Customer>().Data.CharacterName == customerData.CharacterName) == false) { return(customerData); } } default: return(new CustomerData()); } }
public void SpawnCustomerGroup(CustomerSpawnStrategy strategy, int groupNum, SpawnPosition selectedSpawner) { if (selectedSpawner == null) { return; } CustomerData leaderData = GetNextSpawningCustomer(strategy); Customer leader = SpawnCustomer(leaderData, selectedSpawner); leader.SetAsLeader(); Blackboard leader_bb = leader.GetComponent <Blackboard>(); CustomerGroup group = CustomerGroup.CreateGroup(leader); List <Customer> members = new List <Customer>(); //We can get positive relations from relaters, for now just get from closest relations for (int i = 0; i < leaderData.PositiveRelations.Count; ++i) { if (i >= groupNum - 1) { break; } //TODO add strategy here to choose relations Relationship relationShip = leaderData.PositiveRelations[i]; CustomerData related = LookupCustomer(relationShip.WithWho); Customer member = SpawnCustomer(related, selectedSpawner); members.Add(member); Blackboard member_bb = member.GetComponent <Blackboard>(); if (member_bb) { member_bb.AddOrModifyBBValue <CustomerGroup>("Group", group); } } group.ExpandGroup(members); //add group into all members' blackboard if (leader_bb) { leader_bb.AddOrModifyBBValue <CustomerGroup>("Group", group); } }