Example #1
0
 public void calculateIslandToDecoMapping()
 {
     this.m_islandToDecoMap.Clear();
     if (this.DecoSpawnpoints.Count != 0)
     {
         if ((this.DecoSpawnpoints.Count > 0) && (this.IslandSpawnpoints.Count == 0))
         {
             Debug.LogError("Decos require at least one island spawnpoint.");
         }
         else
         {
             for (int i = 0; i < this.IslandSpawnpoints.Count; i++)
             {
                 this.m_islandToDecoMap.Add(this.IslandSpawnpoints[i], new List <MarkerSpawnPointDeco>());
             }
             for (int j = 0; j < this.DecoSpawnpoints.Count; j++)
             {
                 MarkerSpawnPointDeco item = this.DecoSpawnpoints[j];
                 float      maxValue       = float.MaxValue;
                 Spawnpoint spawnpoint     = null;
                 for (int k = 0; k < this.IslandSpawnpoints.Count; k++)
                 {
                     Spawnpoint spawnpoint2 = this.IslandSpawnpoints[k];
                     float      num5        = Vector3.Distance(item.Tm.position, spawnpoint2.WorldPt);
                     if (num5 < maxValue)
                     {
                         spawnpoint = spawnpoint2;
                         maxValue   = num5;
                     }
                 }
                 this.m_islandToDecoMap[spawnpoint].Add(item);
             }
         }
     }
 }
Example #2
0
        private void onCharacterHordeSpawned(Room.Spawnpoint spawnpoint, bool isBoss)
        {
            ActiveDungeon activeDungeon = GameLogic.Binder.GameState.ActiveDungeon;
            Player        player        = GameLogic.Binder.GameState.Player;

            activeDungeon.ActiveRoom.flagAllDungeonBoostsForOffscreenDestroy();
            Room.Spawnpoint             islandSpawnpoint = activeDungeon.ActiveRoom.getClosestIslandSpawnpoint(spawnpoint.WorldPt);
            List <MarkerSpawnPointDeco> list             = activeDungeon.ActiveRoom.getDecoSpawnpointMarkersForIsland(islandSpawnpoint);

            if ((App.Binder.ConfigMeta.DUNGEON_BOOST_BOX_SPAWN_ENABLED_DURING_FRENZY || !GameLogic.Binder.FrenzySystem.isFrenzyActive()) && (islandSpawnpoint != this.m_lastIslandSpawnpointForBoxes))
            {
                this.m_validDecoSpawnpoints.Clear();
                for (int i = 0; i < list.Count; i++)
                {
                    MarkerSpawnPointDeco item = list[i];
                    if (ConfigDungeons.DUNGEON_DECO_CATEGORIES_AS_DUNGEON_BOOST_SPAWNPOINTS.Contains(item.DecoCategoryType) && (item.ActiveDeco != null))
                    {
                        this.m_validDecoSpawnpoints.Add(item);
                    }
                }
                int num2 = ConfigDungeonBoosts.GetBoxSpawnCountForFloor(player, activeDungeon.Floor, this.m_validDecoSpawnpoints.Count);
                for (int j = 0; (j < this.m_validDecoSpawnpoints.Count) && (j < num2); j++)
                {
                    MarkerSpawnPointDeco deco2 = this.m_validDecoSpawnpoints[j];
                    Vector3 position           = deco2.transform.position;
                    Vector3 vector4            = islandSpawnpoint.WorldPt - deco2.transform.position;
                    Vector3 normalized         = vector4.normalized;
                    Vector3 worldPt            = position + ((Vector3)(normalized * 1f));
                    float   fallbackStep       = ConfigDungeonBoosts.BOX_RADIUS;
                    worldPt   = activeDungeon.ActiveRoom.calculateNearestEmptySpot(worldPt, normalized, 1f, fallbackStep, 6f, new int?(Layers.DungeonBoostEmptySpotLayerMask));
                    worldPt.y = activeDungeon.ActiveRoom.WorldGroundPosY;
                    SpawnBox(CmdRollDungeonBoostBoxTable.ExecuteStatic(App.Binder.ConfigLootTables.DungeonBoostBoxTable, player), player, worldPt);
                }
            }
            this.m_lastIslandSpawnpointForBoxes = islandSpawnpoint;
        }