/// <summary>
        /// スポナー読み込み
        /// </summary>
        /// <param name="count"></param>
        public static void Load(ref int count)
        {
            try
            {
                Spawners.ClearOnScheduler();
                foreach (Coordinate coor in _spawnerCoordinates)
                {
                    // 実際の座標と画像のピクセル数から画像上のスポナー位置を計算
                    // 画像のサイズが変わると壊れます()
                    var X = (coor.X + 1502.5) / 1664;
                    var Z = (coor.Z + 114.5) / 247;

                    var isBroken = new Spawner(coor, World.WorldData).IsBroken;

                    Application.Current.Dispatcher.Invoke(() =>
                    {
                        Spawners.Add(new SpawnerPointer()
                        {
                            Center   = new Point(X, Z),
                            IsBroken = isBroken
                        });

                        BrokenCount.Value = Spawners.Where(x => x.IsBroken).Count();
                        BrokenRate.Value  = (BrokenCount.Value / 247.0) * 100;
                    });

                    World.LoadingProgress.Value = (++count / 297.0) * 100;
                }
            }
            catch
            {
                Reset();
                throw;
            }
        }
예제 #2
0
    private void HandleCellSpawns(Patch patch)
    {
        GD.Print("Number of species in this patch = ", patch.SpeciesInPatch.Count);

        foreach (var entry in patch.SpeciesInPatch)
        {
            var species = entry.Key;

            if (species.Population <= 0)
            {
                GD.Print(entry.Key.FormattedName, " population <= 0. Skipping Cell Spawn in patch.");
                continue;
            }

            var density = 1.0f / (Constants.STARTING_SPAWN_DENSITY -
                                  Math.Min(Constants.MAX_SPAWN_DENSITY,
                                           species.Population * 5));

            var name = species.ID.ToString(CultureInfo.InvariantCulture);

            HandleSpawnHelper(chunkSpawners, name, density,
                              () =>
            {
                var spawner     = new CreatedSpawner(name);
                spawner.Spawner = Spawners.MakeMicrobeSpawner(species,
                                                              compoundCloudSystem, currentGame);

                spawnSystem.AddSpawnType(spawner.Spawner, density,
                                         Constants.MICROBE_SPAWN_RADIUS);
                return(spawner);
            });
        }
    }
예제 #3
0
    void Update()
    {
        if (highScoreText != null)
        {
            highScoreText.text = "highscore: " + PlayerPrefs.GetInt("HighScore", 0).ToString();
        }
        if (currentsieText != null)
        {
            currentsieText.text = "coints: " + PlayerPrefs.GetInt("Currentsie", 0).ToString();
        }

        if (scoreText != null)
        {
            scoreText.text = "Level " + levelToLoadNumber.ToString();

            if (levelToLoadNumber >= 1)
            {
                spawnerTop.SetActive(true);
            }

            if (levelToLoadNumber >= 2)
            {
                spawnerBothem.SetActive(true);
            }

            if (levelToLoadNumber >= 3)
            {
                spawnerRight.SetActive(true);
            }

            if (levelToLoadNumber >= 4)
            {
                spawnerLeft.SetActive(true);
            }

            if (levelToLoadNumber >= 5)
            {
                Spawners spawner = spawnerTop.transform.GetComponent <Spawners>();
                spawner.UpdateState(true);
            }

            if (levelToLoadNumber >= 6)
            {
                Spawners spawner = spawnerBothem.transform.GetComponent <Spawners>();
                spawner.UpdateState(true);
            }
        }

        if (resetEverything)
        {
            PlayerPrefs.SetInt("HighScore", 0);
            PlayerPrefs.SetInt("Currentsie", 0);
        }
    }
예제 #4
0
        /**public void AddEnemy(Enemy enemy, int spawnerId) {
         *  Spawner spawner = Spawners.Find(p => p.Id == spawnerId);
         *  spawner.AddEnemy(enemy);
         * }**/

        private void CleanUp()
        {
            //Remove objects outside the screen
            AllDrawableGameObjects.RemoveAll(go => (go.Position.X <0 || go.Position.X> GeneralSettings.screenWidth + go.Width ||
                                                    go.Position.Y <0 || go.Position.Y> GeneralSettings.screenHeight + go.Height));

            //remove killed objts
            AllDrawableGameObjects.RemoveAll(o => o is KillableGameObject && ((KillableGameObject)o).Dead);

            //Remove spawner if all its enemies has spawned
            Spawners.RemoveAll(s => s.Enemies.Count == 0);
        }
예제 #5
0
 public override void Create(List <IGameObject> avoidObjects, bool avoidSelf = true)
 {
     for (int i = 0; i < SpawnersAmount; i++)
     {
         Spawner spawner = new Spawner(gridSize, minBorderMargin, minMarginBetween, avoidObjects);
         Spawners.Add(spawner);
         if (avoidSelf)
         {
             avoidObjects.Add(spawner);
         }
     }
 }
예제 #6
0
    // Look through all spawnwers and set myLaneSpawner if found
    void SetMyLaneSpawner()
    {
        Spawners[] spawnerArray = GameObject.FindObjectsOfType <Spawners>();

        foreach (Spawners spawner in spawnerArray)
        {
            if (spawner.transform.position.y == transform.position.y)
            {
                myLaneSpawners = spawner;
                return;
            }
        }
    }
예제 #7
0
    private void HandleCloudSpawns(BiomeConditions biome)
    {
        GD.Print("Number of clouds in this patch = ", biome.Compounds.Count);

        foreach (var entry in biome.Compounds)
        {
            HandleSpawnHelper(chunkSpawners, entry.Key.InternalName, entry.Value.Density,
                              () =>
            {
                var spawner     = new CreatedSpawner(entry.Key.InternalName);
                spawner.Spawner = Spawners.MakeCompoundSpawner(entry.Key, compoundCloudSystem, entry.Value.Amount);

                spawnSystem.AddSpawnType(spawner.Spawner, entry.Value.Density,
                                         Constants.CLOUD_SPAWN_RADIUS);
                return(spawner);
            });
        }
    }
예제 #8
0
    private void HandleChunkSpawns(BiomeConditions biome)
    {
        GD.Print("Number of chunks in this patch = ", biome.Chunks.Count);

        foreach (var entry in biome.Chunks)
        {
            HandleSpawnHelper(chunkSpawners, entry.Value.Name, entry.Value.Density,
                              () =>
            {
                var spawner     = new CreatedSpawner(entry.Value.Name);
                spawner.Spawner = Spawners.MakeChunkSpawner(entry.Value,
                                                            compoundCloudSystem);

                spawnSystem.AddSpawnType(spawner.Spawner, (int)entry.Value.Density,
                                         Constants.MICROBE_SPAWN_RADIUS);
                return(spawner);
            });
        }
    }
예제 #9
0
 public void AddSpawner(Spawner spawner)
 {
     Spawners.Add(spawner);
 }
예제 #10
0
 void Awake()
 {
     instance = this;
 }
예제 #11
0
 public static void AddSpawner(GEntity Spawner)
 {
     Spawners.Add(Spawner);
 }
예제 #12
0
        private void FirstWave()
        {
            //First greeting enemy (plan is to display a greeting message using black_old_face.png within the UI)
            Spawners.Add
            (
                new EnemySpawner
                (
                    x: (float)Field.Size.Width / 2
                    , y: 20
                    , remainingEnemies: 1
                    , spawnCallback: spawner => spawner.PlaceActor(new Lakebeam())
                )
            );

            //First Bomb to give Player some small target to fire on
            AddDualSpawner
            (
                percentDelay: 2
                , enemies: 1
                , spawnCallback: spawner =>
            {
                var enemy = new Doomday(Field.Player);
                spawner.PlaceActor(enemy);
            }
            );

            //Wave of Lakebeams for the opportunity of quickly upgrading the basic weapon
            AddDualSpawner
            (
                percentDelay: 6
                , enemies: 4
                , spawnCallback: spawner =>
            {
                var enemy = new Lakebeam();
                spawner.PlaceActor(enemy);
            }
            );

            //Wave of bombs
            AddDualSpawner
            (
                percentDelay: 16
                , enemies: 5
                , spawnCallback: spawner =>
            {
                var enemy = new Doomday(Field.Player);
                spawner.PlaceActor(enemy);
            }
            );

            //Two Venomflares to make it more interesting
            Spawners.Add
            (
                new DelayedStart
                (
                    actsDelay: 0
                    , percentDelay: 26
                    , spawner: new EnemySpawner
                    (
                        //Spawns in the 1/3 of the Field
                        x: (float)Field.Size.Width / 3
                        , y: 0
                        , remainingEnemies: 1
                        , spawnCallback: spawner => spawner.PlaceActor(new Venomflare())
                    )
                )
            );
            Spawners.Add
            (
                new DelayedStart
                (
                    actsDelay: 0
                    , percentDelay: 26
                    , spawner: new EnemySpawner
                    (
                        //Spawns in the 2/3 of the Field
                        x: 2 * (float)Field.Size.Width / 3
                        , y: 0
                        , remainingEnemies: 1
                        , spawnCallback: spawner => spawner.PlaceActor(new Venomflare())
                    )
                )
            );

            //Waveghosts that will rotate around
            AddDualSpawner
            (
                percentDelay: 36
                , y: (float)Field.Size.Height / 2
                , enemies: 2
                , spawnCallback: spawner => spawner.PlaceActor(new Waveghost())
            );

            //Larger wave of Lakebeams
            AddDualSpawner
            (
                percentDelay: 50
                , enemies: 8
                , spawnCallback: spawner =>
            {
                var enemy = new Lakebeam();
                spawner.PlaceActor(enemy);
            }
            );

            //Last small wave of bombs
            AddDualSpawner
            (
                percentDelay: 60
                , enemies: 4
                , spawnCallback: spawner =>
            {
                var enemy = new Doomday(Field.Player);
                spawner.PlaceActor(enemy);
            }
            );

            //Final battle before boss appears
            AddDualSpawner
            (
                percentDelay: 75
                , y: (float)Field.Size.Height / 2
                , enemies: 4
                , spawnCallback: spawner => spawner.PlaceActor(new Waveghost())
            );

            //The Boss
            Spawners.Add
            (
                new DelayedStart
                (
                    actsDelay: 0
                    , percentDelay: 95
                    , spawner: new EnemySpawner
                    (
                        x: (float)Field.Size.Width / 2
                        , y: 0
                        , remainingEnemies: 1
                        , spawnCallback: spawner =>
            {
                var boss = new DarkspringTheTwisted();
                spawner.PlaceActor(boss);
                //Boss will be spawned outside of the field and comes in afterwards
                boss.Y -= (float)boss.Height / 2;
            }
                    )
                )
            );
        }
예제 #13
0
 /// <summary>
 /// データをリセット
 /// </summary>
 public static void Reset()
 {
     Spawners.ClearOnScheduler();
     BrokenCount.Value = 0;
     BrokenRate.Value  = 0;
 }
예제 #14
0
 // Start is called before the first frame update
 void Start()
 {
     spawnControl = FindObjectOfType <Spawners>();
     startTimer   = timer;
 }
예제 #15
0
 internal static void CombatDirector_SetNextSpawnAsBoss(On.RoR2.CombatDirector.orig_SetNextSpawnAsBoss orig, CombatDirector self)
 {
     orig(self);
     var selected = CurrentRun.nextBoss;
     selected.spawnCard.directorCreditCost = (int)((self.monsterCredit / CurrentRun.nextBossCount) / Spawners.GetTierDef(CurrentRun.nextBossElite).costMultiplier);
     self.OverrideCurrentMonsterCard(selected);
     self.SetFieldValue<CombatDirector.EliteTierDef>("currentActiveEliteTier", Spawners.GetTierDef(CurrentRun.nextBossElite));
     self.SetFieldValue<EliteIndex>("currentActiveEliteIndex", CurrentRun.nextBossElite);
     Log.Message($"{selected.spawnCard.name} cost has been set to {selected.cost} for {CurrentRun.nextBossCount} {CurrentRun.nextBossElite} bosses with available credit: {self.monsterCredit}",Log.LogLevel.Info);
     CurrentRun.nextBossCount = 1;
     CurrentRun.nextBossElite = EliteIndex.None;
     On.RoR2.CombatDirector.SetNextSpawnAsBoss -= CombatDirector_SetNextSpawnAsBoss;
 }
예제 #16
0
 private void InitializeSpawners()
 {
     Spawners.Add(Cardboard.Spawner);
 }