public void GetOrCreateTest()
        {
            var target = new ActorPool();

            var countdownEvent = new CountdownEvent(3);

            using (IActor actor = target.GetOrCreate("a"))
            {
                Task Func()
                {
                    countdownEvent.Signal();
                    return(Task.CompletedTask);
                }

                actor.Enqueue(Func);
                actor.Enqueue(Func);
                actor.Enqueue(Func);
            }

            countdownEvent.Wait(TimeSpan.FromSeconds(1)).Should().Be(true);

            Thread.Sleep(100);

            target.EstimatedCount.Should().Be(0);
        }
Esempio n. 2
0
        public void multiple_actor_references_should_run_sequentially()
        {
            // arrange
            var random = new Random();

            var target = new ActorPool();

            int count = 0;

            async Task Work()
            {
                int temp = count;

                temp++;
                await Task.Yield();

                count = temp;
            }

            var id = Guid.NewGuid().ToString();

            // act
            Parallel.For(0, 100, _ =>
            {
                using (IActor actor = target.GetOrCreate(id))
                {
                    Thread.Sleep(random.Next(10));
                    actor.Enqueue(Work);
                }
            });

            // assert
            Thread.Sleep(5);
            count.Should().Be(100);
        }
Esempio n. 3
0
        internal void Intersect(ref BoundingSphere sphere, List <Actor> result)
        {
            if (Box.Intersects(ref sphere))
            {
                if (Children != null)
                {
                    Children[LEFT_TOP_FRONT].Intersect(ref sphere, result);
                    Children[RIGHT_TOP_FRONT].Intersect(ref sphere, result);
                    Children[LEFT_TOP_BACK].Intersect(ref sphere, result);
                    Children[RIGHT_TOP_BACK].Intersect(ref sphere, result);
                    Children[LEFT_BOTTOM_FRONT].Intersect(ref sphere, result);
                    Children[RIGHT_BOTTOM_FRONT].Intersect(ref sphere, result);
                    Children[LEFT_BOTTOM_BACK].Intersect(ref sphere, result);
                    Children[RIGHT_BOTTOM_BACK].Intersect(ref sphere, result);
                }

                if (Objects.Count > 0)
                {
                    for (var i = 0; i < Objects.Count; ++i)
                    {
                        if (Objects[i].Box.Intersects(ref sphere))
                        {
                            ActorPool.Verify(Objects[i].Actor);
                            result.Add(Objects[i].Actor);
                        }
                    }
                }
            }
        }
        public void ParallelTest()
        {
            var random = new Random();

            var target = new ActorPool();

            int count = 0;

            async Task Work()
            {
                int temp = count;

                temp++;
                await Task.Yield();

                count = temp;
            }

            Parallel.For(0, 100, _ =>
            {
                using (var worker = target.GetOrCreate("a"))
                {
                    Thread.Sleep(random.Next(50));
                    worker.Enqueue(Work);
                }
            });

            Thread.Sleep(5);
            count.Should().Be(100);
        }
Esempio n. 5
0
 void Awake()
 {
     _willAcceptTransitions = true;
     _actorPool             = new ActorPool(false);
     _backgroundPool        = new BackgroundPool(false);
     _pendingAnimations     = new Queue <AnimGroup>();
     _actorGroup            = ActorImage.GetComponent <CanvasGroup>();
 }
Esempio n. 6
0
        public void active_actor_should_have_reference()
        {
            // arrange
            var target = new ActorPool();

            // act
            using var actor = target.GetOrCreate(Guid.NewGuid().ToString());

            // assert
            target.TakeSnapshot().Count.Should().Be(1);
        }
 /// <summary>
 /// Turn an actorPool.SO into an ActorPoolFinal.SO along with actorDraft's. Takes name of provided ActorPool
 /// </summary>
 /// <param name="pool"></param>
 public void CreateActorPoolFinal(ActorPool pool)
 {
     if (pool != null)
     {
         InitialiseActorPoolFinal(pool);
     }
     else
     {
         Debug.LogError("Invalid actorPool (Null)");
     }
 }
Esempio n. 8
0
 /// <summary>
 /// Read json file and update actorPool.SO
 /// </summary>
 /// <param name="pool"></param>
 public void ReadActorPool(ActorPool pool)
 {
     if (pool != null)
     {
         //get filepath
         fileName = pool.name + ".txt";
         filePath = Path.Combine(Application.persistentDataPath, fileName);
         bool isSuccess = false;
         if (string.IsNullOrEmpty(filePath) == false)
         {
             if (File.Exists(filePath) == true)
             {
                 //read data from File
                 try { jsonRead = File.ReadAllText(filePath); }
                 catch (Exception e) { Debug.LogErrorFormat("Failed to read TEXT FROM FILE, error \"{0}\"", e.Message); }
                 isSuccess = true;
                 if (isSuccess == true)
                 {
                     //read to Save file
                     try
                     {
                         readPool = JsonUtility.FromJson <SaveActorPool>(jsonRead);
                         Debug.LogFormat("[Fil] FileManager.cs -> ReadActorPool: POOL loaded from \"{0}\"{1}", filePath, "\n");
                         //update ActorPool.SO with loaded file data
                         ConvertToActorPool(readPool, pool);
                     }
                     catch (Exception e)
                     { Debug.LogErrorFormat("Failed to read Json, error \"{0}\"", e.Message); }
                 }
             }
             else
             {
                 //file doesn't exist, creat one
                 WriteActorPool(pool);
             }
         }
         else
         {
             Debug.LogError("Invalid filename (Null or Empty)");
         }
     }
     else
     {
         Debug.LogError("Invalid actorPool (Null)");
     }
 }
Esempio n. 9
0
        public void active_actor_should_have_multiple_reference()
        {
            // arrange
            var target = new ActorPool();

            var id = Guid.NewGuid().ToString();

            // act
            using var actor  = target.GetOrCreate(id);
            using var actor2 = target.GetOrCreate(id);

            // assert
            ActorPoolSnapshot snapshot = target.TakeSnapshot();

            snapshot.Count.Should().Be(1);
            snapshot[id].QueuedWork.Should().Be(0);
            snapshot[id].References.Should().Be(2);
        }
Esempio n. 10
0
    /// <summary>
    /// Converts actor pool, turns into JSON, saves to file
    /// </summary>
    public void WriteActorPool(ActorPool pool)
    {
        if (pool != null)
        {
            //convert SO to save file format
            savePool = ConvertFromActorPool(pool);
            if (savePool != null)
            {
                fileName = savePool.poolName + ".txt";
                filePath = Path.Combine(Application.persistentDataPath, fileName);
                if (string.IsNullOrEmpty(filePath) == false)
                {
                    //convert to Json (NOTE: second, optional, parameter gives pretty output for debugging purposes)
                    jsonWrite = JsonUtility.ToJson(savePool, true);

                    //file present? If so delete
                    if (File.Exists(filePath) == true)
                    {
                        try { File.Delete(filePath); }
                        catch (Exception e) { Debug.LogErrorFormat("Failed to DELETE FILE, error \"{0}\"", e.Message); }
                    }

                    //create new file
                    try { File.WriteAllText(filePath, jsonWrite); }
                    catch (Exception e) { Debug.LogErrorFormat("Failed to write TEXT FROM FILE, error \"{0}\"", e.Message); }
                    Debug.LogFormat("[Fil] FileManager.cs -> WriteActorPool: pool Data SAVED to \"{0}\"{1}", filePath, "\n");
                }
                else
                {
                    Debug.LogError("Invalid fileName (Null or Empty)");
                }
            }
            else
            {
                Debug.LogErrorFormat("Invalid savePool (Null) for ActorPool \"{0}\"", pool.name);
            }
        }
        else
        {
            Debug.LogError("Invalid actorPool (Null)");
        }
    }
Esempio n. 11
0
        public void GetOrCreateShouldReturnWorkingActorWithNoHandles()
        {
            var target = new ActorPool();

            var e = new ManualResetEventSlim(false);

            Task Work()
            {
                e.Wait();
                return(Task.CompletedTask);
            }

            using (var actor = target.GetOrCreate("a"))
            {
                actor.Enqueue(Work);
            }

            // this should not block
            using var temp = target.GetOrCreate("a");
        }
Esempio n. 12
0
    /// <summary>
    ///  Creates an actorPoolFinal and populates with ActorDraftFinal.SO's.
    /// </summary>
    /// <param name="pool"></param>
    private void InitialiseActorPoolFinal(ActorPool pool)
    {
        string pathPool, pathDraft;
        //
        // - - - ActorPool
        //
        ActorPoolFinal poolAsset = ScriptableObject.CreateInstance <ActorPoolFinal>();

        //path with unique asset name for each
        pathPool = string.Format("Assets/SO/ActorPoolFinal/{0}.asset", pool.name);
        //how many actors required to populate pool
        int numToCreate = numOfActors;

        poolAsset.nameSet     = pool.nameSet;
        poolAsset.tag         = pool.tag;
        poolAsset.side        = pool.side;
        poolAsset.author      = pool.author;
        poolAsset.dateCreated = pool.dateCreated;
        //
        // - - - ActorDraftFinals
        //
        for (int i = 0; i < numToCreate; i++)
        {
            //create SO object
            ActorDraftFinal actorAsset = ScriptableObject.CreateInstance <ActorDraftFinal>();
            //overwrite default data
            UpdateActorDraftFinal(pool, poolAsset, actorAsset, i);
            //path with unique asset name for each (poolName + counter)
            pathDraft = string.Format("Assets/SO/ActorDraftFinal/{0}{1}.asset", pool.name, i);
            //delete any existing asset at the same location (if same named asset presnet, new asset won't overwrite)
            AssetDatabase.DeleteAsset(pathDraft);
            //Add asset to file and give it a name ('actor')
            AssetDatabase.CreateAsset(actorAsset, pathDraft);
        }
        //delete any existing asset at the same location (if same named asset presnet, new asset won't overwrite)
        AssetDatabase.DeleteAsset(pathPool);
        //initialise pool
        AssetDatabase.CreateAsset(poolAsset, pathPool);
        //Save assets to disk
        AssetDatabase.SaveAssets();
    }
Esempio n. 13
0
        public async Task <Dictionary <DateTime, Double> > CalculateMediumTemperatureByActors(Dictionary <DateTime, List <CsvMappingResult <WeatherDetails> > > groupedData, int actorsCount = 1)
        {
            var res = new Dictionary <DateTime, Double>();

            var calculators = new ActorPool(actorsCount);
            var taskList    = new List <Task <(DateTime, double)> >();

            foreach (var entry in groupedData)
            {
                taskList.Add(calculators.GetActor().Enqueue(() =>
                {
                    return(entry.Key, Value: this.CalculateMedium(entry.Value));
                }));
            }
            await Task.WhenAll(taskList);

            foreach (var task in taskList)
            {
                var(Key, Value) = await task;
                res.Add(Key, Value);
            }

            return(res);
        }
Esempio n. 14
0
 /// <summary>
 /// Takes a SaveActorPool.cs object and converts to an ActorPool.SO
 /// </summary>
 /// <param name="pool"></param>
 private void ConvertToActorPool(SaveActorPool savePool, ActorPool pool)
 {
     //hq hierarchy
     ConvertToActorDraft(savePool.hqBoss0, pool.hqBoss0);
     ConvertToActorDraft(savePool.hqBoss1, pool.hqBoss1);
     ConvertToActorDraft(savePool.hqBoss2, pool.hqBoss2);
     ConvertToActorDraft(savePool.hqBoss3, pool.hqBoss3);
     //hq workers
     if (savePool.listHqWorkers.Count == pool.listHqWorkers.Count)
     {
         for (int i = 0; i < savePool.listHqWorkers.Count; i++)
         {
             ConvertToActorDraft(savePool.listHqWorkers[i], pool.listHqWorkers[i]);
         }
     }
     else
     {
         Debug.LogWarningFormat("Mismatch on count -> savePool.listHqWorkers has {0} records, ActorPool.listHqWorkers has {1} records", savePool.listHqWorkers.Count, pool.listHqWorkers.Count);
     }
     //OnMap
     if (savePool.listOnMap.Count == pool.listOnMap.Count)
     {
         for (int i = 0; i < savePool.listOnMap.Count; i++)
         {
             ConvertToActorDraft(savePool.listOnMap[i], pool.listOnMap[i]);
         }
     }
     else
     {
         Debug.LogWarningFormat("Mismatch on count -> savePool.listOnMap has {0} records, ActorPool.listOnMap has {1} records", savePool.listOnMap.Count, pool.listOnMap.Count);
     }
     //Level One
     if (savePool.listLevelOne.Count == pool.listLevelOne.Count)
     {
         for (int i = 0; i < savePool.listLevelOne.Count; i++)
         {
             ConvertToActorDraft(savePool.listLevelOne[i], pool.listLevelOne[i]);
         }
     }
     else
     {
         Debug.LogWarningFormat("Mismatch on count -> savePool.listLevelOne has {0} records, ActorPool.listLevelOne has {1} records", savePool.listLevelOne.Count, pool.listLevelOne.Count);
     }
     //Level Two
     if (savePool.listLevelTwo.Count == pool.listLevelTwo.Count)
     {
         for (int i = 0; i < savePool.listLevelTwo.Count; i++)
         {
             ConvertToActorDraft(savePool.listLevelTwo[i], pool.listLevelTwo[i]);
         }
     }
     else
     {
         Debug.LogWarningFormat("Mismatch on count -> savePool.listLevelTwo has {0} records, ActorPool.listLevelTwo has {1} records", savePool.listLevelTwo.Count, pool.listLevelTwo.Count);
     }
     //Level Three
     if (savePool.listLevelThree.Count == pool.listLevelThree.Count)
     {
         for (int i = 0; i < savePool.listLevelThree.Count; i++)
         {
             ConvertToActorDraft(savePool.listLevelThree[i], pool.listLevelThree[i]);
         }
     }
     else
     {
         Debug.LogWarningFormat("Mismatch on count -> savePool.listLevelThree has {0} records, ActorPool.listLevelThree has {1} records", savePool.listLevelThree.Count, pool.listLevelThree.Count);
     }
 }
Esempio n. 15
0
    /// <summary>
    /// Initialises data for a newly created ActorDraft.
    /// </summary>
    /// <param name="actor"></param>
    private void UpdateActorDraft(ActorPool pool, ActorDraft actor, int num)
    {
        if (actor != null)
        {
            //
            // - - - name and sex
            //
            if (Random.Range(0, 100) < 50)
            {
                actor.sex       = sexMale;
                actor.firstName = pool.nameSet.firstMaleNames.GetRandomRecord();
            }
            else
            {
                actor.sex       = sexFemale;
                actor.firstName = pool.nameSet.firstFemaleNames.GetRandomRecord();
            }
            actor.lastName  = pool.nameSet.lastNames.GetRandomRecord();
            actor.actorName = string.Format("{0} {1}", actor.firstName, actor.lastName);
            //
            // - - - status, arc, level and power -> assign to actorPool
            //
            switch (num)
            {
            case 0:
                actor.status = statusHqBoss0;
                actor.arc    = listOfActorArcs[Random.Range(0, listOfActorArcs.Count)];
                actor.sprite = actor.arc.sprite;
                actor.power  = (numOfActorsHQ + 2 - (int)ActorHQ.Boss) * hqPowerFactor;
                actor.level  = 3;
                actor.trait  = GetTrait();
                UpdateActorData(actor);
                //add to pool (do after all data initialisation)
                pool.hqBoss0 = actor;
                break;

            case 1:
                actor.status = statusHqBoss1;
                actor.arc    = listOfActorArcs[Random.Range(0, listOfActorArcs.Count)];
                actor.sprite = actor.arc.sprite;
                actor.power  = (numOfActorsHQ + 2 - (int)ActorHQ.SubBoss1) * hqPowerFactor;
                actor.level  = 2;
                actor.trait  = GetTrait();
                UpdateActorData(actor);
                pool.hqBoss1 = actor;
                break;

            case 2:
                actor.status = statusHqBoss2;
                actor.arc    = listOfActorArcs[Random.Range(0, listOfActorArcs.Count)];
                actor.sprite = actor.arc.sprite;
                actor.power  = (numOfActorsHQ + 2 - (int)ActorHQ.SubBoss2) * hqPowerFactor;
                actor.level  = 2;
                actor.trait  = GetTrait();
                UpdateActorData(actor);
                pool.hqBoss2 = actor;
                break;

            case 3:
                actor.status = statusHqBoss3;
                actor.arc    = listOfActorArcs[Random.Range(0, listOfActorArcs.Count)];
                actor.sprite = actor.arc.sprite;
                actor.power  = (numOfActorsHQ + 2 - (int)ActorHQ.SubBoss3) * hqPowerFactor;
                actor.level  = 2;
                actor.trait  = GetTrait();
                UpdateActorData(actor);
                pool.hqBoss3 = actor;
                break;

            case 4:
            case 5:
            case 6:
            case 7:
            case 8:
            case 9:
            case 10:
            case 11:
                //workers
                actor.status = statusHqWorker;
                actor.arc    = listOfActorArcs[Random.Range(0, listOfActorArcs.Count)];
                actor.sprite = actor.arc.sprite;
                actor.power  = Random.Range(1, 6);
                actor.level  = 2;
                actor.trait  = GetTrait();
                UpdateActorData(actor);
                pool.listHqWorkers.Add(actor);
                break;

            case 12:
            case 13:
            case 14:
            case 15:
                //OnMap
                actor.status = statusOnMap;
                index        = Random.Range(0, listOfTempArcs.Count);
                actor.arc    = listOfTempArcs[index];
                actor.sprite = actor.arc.sprite;
                //remove arc from temp list to prevent dupes
                listOfTempArcs.RemoveAt(index);
                actor.power = 0;
                actor.level = 1;
                actor.trait = GetTrait();
                UpdateActorData(actor);
                pool.listOnMap.Add(actor);
                //set counter to 0 for remaining level 1 actors using left over temp Arcs
                if (num == 15)
                {
                    counter = 0;
                }
                break;

            case 16:
            case 17:
            case 18:
            case 19:
            case 20:
                //Level one, remaining temp arcs
                actor.status = statusPool;
                actor.arc    = listOfTempArcs[counter++];
                actor.sprite = actor.arc.sprite;
                actor.power  = 0;
                actor.level  = 1;
                actor.trait  = GetTrait();
                UpdateActorData(actor);
                pool.listLevelOne.Add(actor);
                //reset counter ready for a full arc set of level one actors
                if (num == 20)
                {
                    counter = 0;
                }
                break;

            case 21:
            case 22:
            case 23:
            case 24:
            case 25:
            case 26:
            case 27:
            case 28:
            case 29:
                //Level one, an additional full set of 9
                actor.status = statusPool;
                actor.arc    = listOfActorArcs[counter++];
                actor.sprite = actor.arc.sprite;
                actor.power  = 0;
                actor.level  = 1;
                actor.trait  = GetTrait();
                UpdateActorData(actor);
                pool.listLevelOne.Add(actor);
                //reset counter ready for a full arc set of level two actors
                if (num == 29)
                {
                    counter = 0;
                }
                break;

            case 30:
            case 31:
            case 32:
            case 33:
            case 34:
            case 35:
            case 36:
            case 37:
            case 38:
                //Level two, a full set of 9
                actor.status = statusPool;
                actor.arc    = listOfActorArcs[counter++];
                actor.sprite = actor.arc.sprite;
                actor.power  = 0;
                actor.level  = 2;
                actor.trait  = GetTrait();
                UpdateActorData(actor);
                pool.listLevelTwo.Add(actor);
                //reset counter ready for a full arc set of level three actors
                if (num == 38)
                {
                    counter = 0;
                }
                break;

            case 39:
            case 40:
            case 41:
            case 42:
            case 43:
            case 44:
            case 45:
            case 46:
            case 47:
                //Level three, a full set of 9
                actor.status = statusPool;
                actor.arc    = listOfActorArcs[counter++];
                actor.sprite = actor.arc.sprite;
                actor.power  = 0;
                actor.level  = 3;
                actor.trait  = GetTrait();
                UpdateActorData(actor);
                pool.listLevelThree.Add(actor);
                break;

            default: Debug.LogWarningFormat("Unrecognised num \"{0}\"", num); break;
            }
        }
        else
        {
            Debug.LogError("Invalid actorDraft (Null)");
        }
    }
Esempio n. 16
0
    /// <summary>
    /// creates an ActorDraftFinal.SO's using data from supplied ActorDraft.SO
    /// </summary>
    private void UpdateActorDraftFinal(ActorPool pool, ActorPoolFinal poolFinal, ActorDraftFinal actor, int num)
    {
        ActorDraft draft = null;

        if (actor != null)
        {
            //
            // - - - Get ActorDraft
            //
            switch (num)
            {
            //hq hierarchy
            case 0: draft = pool.hqBoss0; break;

            case 1: draft = pool.hqBoss1; break;

            case 2: draft = pool.hqBoss2; break;

            case 3: draft = pool.hqBoss3; break;

            //hq Workers
            case 4: draft = pool.listHqWorkers[0]; break;

            case 5: draft = pool.listHqWorkers[1]; break;

            case 6: draft = pool.listHqWorkers[2]; break;

            case 7: draft = pool.listHqWorkers[3]; break;

            case 8: draft = pool.listHqWorkers[4]; break;

            case 9: draft = pool.listHqWorkers[5]; break;

            case 10: draft = pool.listHqWorkers[6]; break;

            case 11: draft = pool.listHqWorkers[7]; break;

            //onMap
            case 12: draft = pool.listOnMap[0]; break;

            case 13: draft = pool.listOnMap[1]; break;

            case 14: draft = pool.listOnMap[2]; break;

            case 15: draft = pool.listOnMap[3]; break;

            //level one, remaining of full set
            case 16: draft = pool.listLevelOne[0]; break;

            case 17: draft = pool.listLevelOne[1]; break;

            case 18: draft = pool.listLevelOne[2]; break;

            case 19: draft = pool.listLevelOne[3]; break;

            case 20: draft = pool.listLevelOne[4]; break;

            //level one, second full set
            case 21: draft = pool.listLevelOne[5]; break;

            case 22: draft = pool.listLevelOne[6]; break;

            case 23: draft = pool.listLevelOne[7]; break;

            case 24: draft = pool.listLevelOne[8]; break;

            case 25: draft = pool.listLevelOne[9]; break;

            case 26: draft = pool.listLevelOne[10]; break;

            case 27: draft = pool.listLevelOne[11]; break;

            case 28: draft = pool.listLevelOne[12]; break;

            case 29: draft = pool.listLevelOne[13]; break;

            //level two, full set
            case 30: draft = pool.listLevelTwo[0]; break;

            case 31: draft = pool.listLevelTwo[1]; break;

            case 32: draft = pool.listLevelTwo[2]; break;

            case 33: draft = pool.listLevelTwo[3]; break;

            case 34: draft = pool.listLevelTwo[4]; break;

            case 35: draft = pool.listLevelTwo[5]; break;

            case 36: draft = pool.listLevelTwo[6]; break;

            case 37: draft = pool.listLevelTwo[7]; break;

            case 38: draft = pool.listLevelTwo[8]; break;

            //level three, full set
            case 39: draft = pool.listLevelThree[0]; break;

            case 40: draft = pool.listLevelThree[1]; break;

            case 41: draft = pool.listLevelThree[2]; break;

            case 42: draft = pool.listLevelThree[3]; break;

            case 43: draft = pool.listLevelThree[4]; break;

            case 44: draft = pool.listLevelThree[5]; break;

            case 45: draft = pool.listLevelThree[6]; break;

            case 46: draft = pool.listLevelThree[7]; break;

            case 47: draft = pool.listLevelThree[8]; break;

            default: Debug.LogWarningFormat("Unrecognised num \"{0}\"", num); break;
            }
            if (draft != null)
            {
                //transfer data
                UpdateActorDataFinal(actor, draft);
                //
                // - - - Assign to ActorPoolFinal
                //
                switch (num)
                {
                //hq hierarchy
                case 0: poolFinal.hqBoss0 = actor; break;

                case 1: poolFinal.hqBoss1 = actor; break;

                case 2: poolFinal.hqBoss2 = actor; break;

                case 3: poolFinal.hqBoss3 = actor; break;

                //hq Workers
                case 4:
                case 5:
                case 6:
                case 7:
                case 8:
                case 9:
                case 10:
                case 11:
                    poolFinal.listHqWorkers.Add(actor);  break;

                //onMap
                case 12:
                case 13:
                case 14:
                case 15:
                    poolFinal.listOnMap.Add(actor); break;

                //level one, remaining of full set
                case 16:
                case 17:
                case 18:
                case 19:
                case 20:
                    poolFinal.listLevelOne.Add(actor); break;

                //level one, second full set
                case 21:
                case 22:
                case 23:
                case 24:
                case 25:
                case 26:
                case 27:
                case 28:
                case 29:
                    poolFinal.listLevelOne.Add(actor); break;

                //level two, full set
                case 30:
                case 31:
                case 32:
                case 33:
                case 34:
                case 35:
                case 36:
                case 37:
                case 38:
                    poolFinal.listLevelTwo.Add(actor); break;

                //level three, full set
                case 39:
                case 40:
                case 41:
                case 42:
                case 43:
                case 44:
                case 45:
                case 46:
                case 47:
                    poolFinal.listLevelThree.Add(actor); break;

                default: Debug.LogWarningFormat("Unrecognised num \"{0}\"", num); break;
                }
            }
            else
            {
                Debug.LogError("Invalid actorDraft (Null)");
            }
        }
        else
        {
            Debug.LogError("Invalid actorDraftFinal (Null)");
        }
    }
Esempio n. 17
0
    /// <summary>
    /// Takes an ActorPool.So and converts to a SaveActorPool.cs file suitable for serialising to file
    /// </summary>
    /// <param name="pool"></param>
    /// <returns></returns>
    private SaveActorPool ConvertFromActorPool(ActorPool pool)
    {
        SaveActorPool poolSave = new SaveActorPool();

        if (pool != null)
        {
            poolSave.poolName = pool.name;

            poolSave.hqBoss0 = ConvertFromActorDraft(pool.hqBoss0);
            poolSave.hqBoss1 = ConvertFromActorDraft(pool.hqBoss1);
            poolSave.hqBoss2 = ConvertFromActorDraft(pool.hqBoss2);
            poolSave.hqBoss3 = ConvertFromActorDraft(pool.hqBoss3);
            //hq workers
            for (int i = 0; i < pool.listHqWorkers.Count; i++)
            {
                SaveActorDraft draft = ConvertFromActorDraft(pool.listHqWorkers[i]);
                if (draft != null)
                {
                    poolSave.listHqWorkers.Add(draft);
                }
                else
                {
                    Debug.LogErrorFormat("Invalid ActorDraft (Null) for listOfHqWorkers[{0}]", i);
                }
            }
            //onMap
            for (int i = 0; i < pool.listOnMap.Count; i++)
            {
                SaveActorDraft draft = ConvertFromActorDraft(pool.listOnMap[i]);
                if (draft != null)
                {
                    poolSave.listOnMap.Add(draft);
                }
                else
                {
                    Debug.LogErrorFormat("Invalid ActorDraft (Null) for listOfOnMap[{0}]", i);
                }
            }
            //level 1
            for (int i = 0; i < pool.listLevelOne.Count; i++)
            {
                SaveActorDraft draft = ConvertFromActorDraft(pool.listLevelOne[i]);
                if (draft != null)
                {
                    poolSave.listLevelOne.Add(draft);
                }
                else
                {
                    Debug.LogErrorFormat("Invalid ActorDraft (Null) for listOfLevelOne[{0}]", i);
                }
            }
            //level 2
            for (int i = 0; i < pool.listLevelTwo.Count; i++)
            {
                SaveActorDraft draft = ConvertFromActorDraft(pool.listLevelTwo[i]);
                if (draft != null)
                {
                    poolSave.listLevelTwo.Add(draft);
                }
                else
                {
                    Debug.LogErrorFormat("Invalid ActorDraft (Null) for listOfLevelTwo[{0}]", i);
                }
            }
            //level 3
            for (int i = 0; i < pool.listLevelThree.Count; i++)
            {
                SaveActorDraft draft = ConvertFromActorDraft(pool.listLevelThree[i]);
                if (draft != null)
                {
                    poolSave.listLevelThree.Add(draft);
                }
                else
                {
                    Debug.LogErrorFormat("Invalid ActorDraft (Null) for listOfLevelThree[{0}]", i);
                }
            }
        }
        else
        {
            Debug.LogError("Invalid ActorPool (Null)");
        }
        return(poolSave);
    }