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); } } } }
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; }