private void Awake()
 {
     if (awake)
     {
         return;
     }
     else if (instance == null)
     {
         awake    = true;
         instance = this;
         DontDestroyOnLoad(this);
         if (Prefabs != null)
         {
             foreach (var prefab in Prefabs)
             {
                 SpawningPool.AddPrefab(prefab.Key, prefab.Prefab);
             }
         }
         UnityEngine.SceneManagement.SceneManager.sceneLoaded += SceneWasLoaded;
     }
     else
     {
         Object.Destroy(gameObject);
     }
 }
Beispiel #2
0
    protected override void Init()
    {
        base.Init();
        SceneType = Define.Scene.Play;

        Managers.UI.ShowSceneUI <UI_Play>();
        // Dictionary<int, Data.Stat> dict = Managers.Data.StatDict;

        // Transform rootTransform = Managers.UI.Root.transform;

        // GameObject goJoyStick = Managers.Resource.Instantiate("UI/JoyStick/UI_JoyStick");
        // GameObject goCommand = Managers.Resource.Instantiate("UI/Button/UI_Command");

        // goJoyStick.transform.SetParent(rootTransform);
        // goCommand.transform.SetParent(rootTransform);

        // rootTransform.SetParent(transform);

        GameObject player = Managers.Game.Spawn(Define.WorldObject.Player, "Player/donggun"); //캐릭터 객체의 프리펩 이름을 가져온다.

        // player.GetOrAddComponent<TestController>().SetCharater(charater);
        // charater.transform.SetParent(player.transform);
        Debug.Log(player.transform.name);

        Camera.main.gameObject.GetOrAddComponent <CameraController>().SetPlayer(player);

        //Managers.Game.Spawn(Define.WroldObject.Monster, "Knight");

        GameObject goSpawningPool = new GameObject {
            name = "SpawningPool"
        };
        SpawningPool pool = goSpawningPool.GetOrAddComponent <SpawningPool>();
        // pool.SetKeepMonsterCount(1);
    }
 public static void ReturnToCacheOrDeactive(GameObject gO)
 {
     if (!SpawningPool.ReturnToCache(gO))
     {
         gO.SetActive(false);
     }
 }
Beispiel #4
0
    private IEnumerator Spawning()
    {
        while (true)
        {
            if (Time.time > spawnTime)
            {
                spawnTime = Time.time + Random.Range(minTimeSpawn, maxTimeSpawn);
                GameObject go;

                //Get random upgrade from pool if upgrades amount more than one
                if (upgrades.Length > 1)
                {
                    string upgrade = upgrades[Random.Range(0, upgrades.Length)].name;
                    go = SpawningPool.CreateFromCache(upgrade);
                }
                else
                {
                    go = SpawningPool.CreateFromCache(upgrades[0].name);
                }

                //Set position
                upgradeSpawnPos.x     = Random.Range(-bound.x, bound.x);
                go.transform.position = upgradeSpawnPos;

                //Add to array
                var upgradeComponent = go.GetComponent <UpgradeBase>();
                activeUpgrades.Add(upgradeComponent);
            }

            yield return(null);
        }
    }
Beispiel #5
0
    protected override void Init()
    {
        base.Init();
        SceneType = Define.Scene.Game;

        //인게임 씬에서는 UI 팝업창이 열려~
        Managers.UI.ShowSceneUI <UI_Inven>();



        //임시로
        //for (int i = 0; i < 5; i++){
        //    Managers.Resource.Instantiate("UnityChan");
        //}

        //co = StartCoroutine("CoExplodeAfterSeconds", 4.0f);
        //StartCoroutine("CoStopExplode", 3.0f);

        //임시로
        Dictionary <int, Data.Stat> dict = Managers.Data.StatDict;

        gameObject.GetOrAddComponent <CursorController>();

        GameObject player = Managers.Game.Spawn(Define.WorldObject.Player, "UnityChan");

        Camera.main.gameObject.GetOrAddComponent <CameraController>().SetPlayer(player);
        //Managers.Game.Spawn(Define.WorldObject.Monster, "Knight");
        GameObject go = new GameObject {
            name = "SpawningPool"
        };
        SpawningPool pool = go.GetOrAddComponent <SpawningPool>();

        pool.SetKeepMonsterCount(5);
    }
Beispiel #6
0
    private IEnumerator SendEnemytWave()
    {
        RestPlaceController restPlaceCon;
        GameObject          enemyGo;
        EnemyController     enemy;
        PatternRoute        pattern;
        Enemy enemyInfo;
        int   range;

        while (true)   //TODO Canviar per comprovació de Game Over
        {
            range = Random.Range(level.minEnemiesPerWave, level.maxEnemiesPerWave);
            for (var i = 0; i < range; i++)
            {
                if (CheckRestPlacesEnemy(out restPlaceCon))
                {
                    enemyGo   = SpawningPool.CreateFromCache("EO1");
                    enemy     = enemyGo.GetComponent <EnemyController> ();
                    pattern   = restPlaceCon.enemyComming(enemy);
                    enemyInfo = new Enemy(
                        GetNextEnemyIdString(),
                        level.enemyHealth,
                        level.enemySpeed,
                        pattern,
                        restPlaceCon,
                        1
                        );
                    enemy.Init(enemyInfo);
                }
                Debug.Log(restPlaceCon);
            }
            yield return(new WaitForSeconds(level.timeBetweenEnemyWaves));
        }
    }
 public static void AddPrefabCheck(string key, GameObject gO)
 {
     if (!SpawningPool.ContainsPrefab(key))
     {
         SpawningPool.AddPrefab(key, gO);
     }
 }
 private void SceneWasLoaded(UnityEngine.SceneManagement.Scene scene, UnityEngine.SceneManagement.LoadSceneMode mode)
 {
     if (ReturnToCacheOnLevelLoad)
     {
         SpawningPool.RecycleActiveObjects();
     }
 }
Beispiel #9
0
    // Start is called before the first frame update

    protected override void Init()
    {
        base.Init();

        SceneType = Define.Scene.Game;

        //인벤토리 열기
        //Managers.UI.ShowSceneUI<UI_Inven>();

        gameObject.GetOrAddComponent <CursorController>();

        GameObject player = Managers.Game.Spawn(Define.WorldObject.Player, "UnityChan");

        Camera.main.gameObject.GetOrAddComponent <CameraController>().SetPlayer(player);

        Managers.Game.Spawn(Define.WorldObject.Monster, "Knight");

        Managers.Sound.Play("Sounds/GameSound/AboveTheTreetops", Define.Sound.Bgm, 0.45f);

        GameObject go = new GameObject {
            name = "SpawningPool"
        };
        SpawningPool pool = go.GetOrAddComponent <SpawningPool>();

        //임시
        for (int i = 0; i < 30; i++)
        {
            Managers.Inven.Add(1000, Define.InvenType.Consume);
            Managers.Inven.Add(1002, Define.InvenType.Consume);
        }


        pool.SetKeepMonsterCount(5);
    }
Beispiel #10
0
 private void ProjectileSpawn()
 {
     for (int i = 0; i < barrels.Length; i++)
     {
         GameObject go = SpawningPool.CreateFromCache(bulletPrefab.name);
         go.transform.position = barrels[i].position;
         go.transform.rotation = Quaternion.identity;
     }
     nextFireTime = Time.time + fireDelay;
 }
Beispiel #11
0
    public void RestartGame()
    {
        StageManager.Instance.ResetData();
        UpgradeSpawnManager.Instance.ResetData();
        UIScore.Instance.ResetData();
        PlayerController.Instance.Spawn();

        SpawningPool.RecycleActiveObjects();
        StageManager.Instance.LoadStage();
    }
    // Start is called before the first frame update
    void Start()
    {
        int count = 3;

        for (int i = 0; i <= count; i++)
        {
            GameObject t_waveMonster = ReferenceManager.instance.GetData(UnityEngine.Random.Range(0, count));

            FunctionHelper.AddPrefabCheck(t_waveMonster.name, t_waveMonster);
            GameObject t_go = SpawningPool.CreateFromCache(t_waveMonster.name);
        }
    }
Beispiel #13
0
 internal static void NextLevel()
 {
     actualLevelIndex++;
     if (actualLevelIndex < levels.Count)
     {
         actualLevel = levels[actualLevelIndex];
         SpawningPool.Clear(true);
         SceneManager.LoadScene("LevelScene", LoadSceneMode.Single);
     }
     else if (actualLevelIndex >= levels.Count)
     {
         SpawningPool.Clear(true);
         SceneManager.LoadScene("StartScene", LoadSceneMode.Single);
     }
 }
Beispiel #14
0
 void OnCollisionEnter2D(Collision2D coll)
 {
     if (IsDropped && coll.transform.tag == "Player")
     {
         if (_Inventory.FindSimilar(_Block) != null)
         {
             _Inventory.AddItem(_Inventory.FindSimilar(_Block), _Block, 1, true);
         }
         else
         {
             _Inventory.AddItem(_Inventory.FindEmptyCell(), _Block, 1, false);
         }
         SpawningPool.ReturnToCache(gameObject, gameObject.transform.name);
         gameObject.SetActive(false);
     }
 }
Beispiel #15
0
    protected override void Init()
    {
        base.Init();

        SceneType = Define.Scene.Game;

        Dictionary <int, Data.Stat> dict = Managers.Data.StatDict;

        gameObject.GetOrAddComponent <CursorController>();

        GameObject player = Managers.Game.Spawn(Define.WorldObject.Player, "UnityChan");

        Camera.main.gameObject.GetOrAddComponent <CameraController>().SetPlayer(player);
        GameObject go = new GameObject {
            name = "SpawningPool"
        };
        SpawningPool pool = go.GetOrAddComponent <SpawningPool>();

        pool.SetKeepMonsterCount(5);
    }
Beispiel #16
0
    protected override void Init()
    {
        base.Init();

        SceneType = Define.Scene.Game;
        //Managers.UI.ShowSceneUI<UI_Inven>();
        gameObject.GetOrAddComponent <CursorController>();

        GameObject player = Managers.Game.Spawn(Define.WorldObject.Player, "UnityChan");

        Camera.main.gameObject.GetOrAddComponent <CameraController>().SetPlayer(player);

        //Managers.Game.Spawn(Define.WorldObject.Monster, "Knight");
        GameObject go = new GameObject {
            name = "SpawningPool"
        };
        SpawningPool pool = go.GetOrAddComponent <SpawningPool>();

        pool.SetKeepMonsterCount(5);
    }
Beispiel #17
0
    IEnumerator SpawnWithDelay(int amount, float delay)
    {
        while (ships.Count < enemyCount)
        {
            if (Time.time >= lastSpawnTime)
            {
                lastSpawnTime = Time.time + spawnEnemyDelay;

                GameObject go = SpawningPool.CreateFromCache(enemyPrefab.name);
                go.transform.position = spawnPosition;  //For safe object spawn

                EnemyShip ship = go.GetComponent <EnemyShip>();
                ship.OnDeactivate += RecountActiveShips;
                ship.SetPath(path);
                ships.Add(ship);

                currentActiveShipCount++;
                spawnedShipsCount++;
            }
            yield return(null);
        }
    }
Beispiel #18
0
    private IEnumerator SendTouristWave()
    {
        RestPlaceController restPlaceCon;
        GameObject          turistaGo;
        PatternRoute        pattern;
        TouristController   tourist;
        Tourist             touristInfo;
        int    range;
        string touristId;

        while (true)
        {
            range = Random.Range(level.minTouristsPerWave, level.maxTouristsPerWave);
            for (var i = 0; i < range; i++)
            {
                if (CheckRestPlaces(out restPlaceCon))
                {
                    yield return(new WaitForSeconds(level.touristSpanSpeed));

                    turistaGo   = SpawningPool.CreateFromCache("TO1");
                    touristId   = GetNextTouristIdString();
                    tourist     = turistaGo.GetComponent <TouristController> ();
                    pattern     = restPlaceCon.touristComming(tourist);
                    touristInfo = new Tourist(
                        TourisType.Girl,
                        touristId,
                        level.touristSpeed,
                        pattern,
                        restPlaceCon,
                        2
                        );
                    tourist.Init(touristInfo);
                }
            }
            yield return(new WaitForSeconds(level.timeBetweenWaves));
        }
    }
Beispiel #19
0
        public string[] fancySolveProblem()
        {
            // Implement a genetic algorithm
            // set global data for Genetic Solution Citizens
            GSCitizen.setCities(Cities);
            GSCitizen.setRandom(rnd);
            int solutionsCount  = 0;
            int generationCount = 1;
            int attempts        = 0;
            // start time
            Stopwatch timer = new Stopwatch();

            timer.Start();
            // Best Citizen So Far
            GSCitizen bcsf = getRandomSolution();

            solutionsCount++;
            String bestTime = timer.Elapsed.ToString();
            // set global data for Genetic Solution
            int populationSize  = 2000;           // Cities.Length * 15;
            int groupSize       = 5;
            int numNearbyCities = Cities.Length;
            int bestSoFarGen    = 0;

            cityMap           = new CityMap(Cities, numNearbyCities);
            GSCitizen.cityMap = cityMap;
            List <GSCitizen> population = new List <GSCitizen>();

            // find initial greedy solutions
            for (int i = 0; i < populationSize; i++)
            {
                GSCitizen citizen = getGreedySolution(i % Cities.Length);
                if (bcsf.fitness() > citizen.fitness())
                {
                    bcsf     = citizen;
                    bestTime = timer.Elapsed.ToString();
                    solutionsCount++;
                }
                population.Add(citizen);
            }

            // Start breeding
            //while(generationCount < 200)
            while (attempts < populationSize * 10)
            {
                // produce the next generation
                List <GSCitizen> nextGeneration = new List <GSCitizen>();
                // shuffle the population
                Shuffle <GSCitizen>(population);
                // take groups of groupSize, breed the fitest two and replace the least fit group members with surviving children
                while (population.Count > 0)
                {
                    SpawningPool pool = new SpawningPool();
                    for (int i = 0; i < groupSize; i++)
                    {
                        if (population[0] != null)
                        {
                            pool.Add(population[0]);
                            population.RemoveAt(0);
                        }
                    }
                    GSCitizen[] survivors = pool.spawn();
                    for (int i = 0; i < survivors.Length; i++)
                    {
                        nextGeneration.Add(survivors[i]);
                        attempts++;
                        // if any survivers are more fit than the best citizen so far, make it the new best citizen so far
                        if (survivors[i].fitness() < bcsf.fitness())
                        {
                            bcsf     = survivors[i];
                            bestTime = timer.Elapsed.ToString();
                            solutionsCount++;
                            attempts = 0;
                        }
                    }
                }
                population = nextGeneration;
                generationCount++;
                //Console.WriteLine("Finished a generation");
            }

            //bssf = getGreedySolution(0).getSolution();
            bssf = bcsf.getSolution();
            double[] genValues = new double[populationSize];
            for (int i = 0; i < populationSize; i++)
            {
                genValues[i] = population[i].fitness();
            }

            //            bestTime = timer.Elapsed.ToString();
            Console.WriteLine("Run time: " + timer.Elapsed.ToString());
            string[] results = new string[3];
            results[COST]  = costOfBssf().ToString();   // load results into array here, replacing these dummy values
            results[TIME]  = timer.Elapsed.ToString();
            results[COUNT] = solutionsCount + "";

            return(results);
        }
Beispiel #20
0
 public void Deactivate()
 {
     OnDeactivate(this, EventArgs.Empty);
     SpawningPool.ReturnToCache(gameObject);
 }
Beispiel #21
0
 private void Destroy()
 {
     SpawningPool.ReturnToCache(gameObject);
 }
Beispiel #22
0
 public virtual void Destroy()
 {
     StopCoroutine(WaitBeforeDestroy());
     SpawningPool.ReturnToCache(gameObject);
 }