SDM_LethalCompany_Mod/ScarletMansion/ScarletMansion/GamePatch/LoadAssetsIntoLevelPatch.cs

92 lines
3.2 KiB
C#

using HarmonyLib;
using System.Collections.Generic;
using System.Linq;
using UnityEngine;
using System.Reflection.Emit;
using System.Reflection;
using DunGenPlus.Managers;
using ScarletMansion.GamePatch.Components;
using ScarletMansion.Configs;
namespace ScarletMansion.GamePatch {
public class LoadAssetsIntoLevelPatch {
public static void AddItemsLocal(RoundManager roundManager){
if (DunGenPlus.API.IsDevDebugModeActive()) return;
foreach(var item in Assets.scrapItems){
if (item.SpawnsOnMap) {
var config = item.GetConfigScrapItemEntry();
if (config.enabled && config.spawnWeight > 0 && !config.spawnOnAllMoons) {
var entry = item.GetItemRarity();
ScrapItemManager.AddItem(entry);
}
}
}
}
public static void AddItemsGlobal(RoundManager roundManager){
if (DunGenPlus.API.IsDevDebugModeActive()) return;
foreach(var item in Assets.scrapItems){
if (item.SpawnsOnMap) {
var config = item.GetConfigScrapItemEntry();
if (config.enabled && config.spawnWeight > 0 && config.spawnOnAllMoons) {
var entry = item.GetItemRarity();
ScrapItemManager.AddItem(entry);
}
}
}
}
public static void AddEnemiesLocal(RoundManager roundManager) {
if (DunGenPlus.API.IsDevDebugModeActive()) return;
var currentEnemies = roundManager.currentLevel.Enemies;
void AddEnemy(Assets.Enemy enemy, string sourceEnemyName, string targetEnemyName, ConfigSpawnableEnemy enemyConfig) {
const int minBaseWeight = 10;
if (!enemyConfig.enabled) {
Plugin.logger.LogDebug($"{sourceEnemyName} is disabled. Not loading onto moon.");
return;
}
if (enemy != null) {
var target = currentEnemies
.Where(c => c.enemyType.name.ToLowerInvariant() == targetEnemyName)
.FirstOrDefault();
if (target == null){
Plugin.logger.LogDebug($"No enemy {targetEnemyName} in level, using default rarity of {minBaseWeight}.");
var entry = enemy.GetItemEntry(enemyConfig.spawnWeightBase + minBaseWeight);
EnemyManager.AddEnemy(entry);
} else {
Plugin.logger.LogError($"{sourceEnemyName}: {enemyConfig.spawnWeightStealPercentage}");
var entryRarity = Mathf.RoundToInt(target.rarity * enemyConfig.spawnWeightStealPercentage);
var prevEntry = new SpawnableEnemyWithRarity();
prevEntry.enemyType = target.enemyType;
prevEntry.rarity = target.rarity - entryRarity;
var newEntry = enemy.GetItemEntry(enemyConfig.spawnWeightBase + entryRarity);
EnemyManager.AddEnemy(newEntry);
EnemyManager.AddEnemy(prevEntry);
}
} else {
Plugin.logger.LogError($"Failed to load custom enemy {sourceEnemyName} as their reference is missing");
}
}
AddEnemy(Assets.knight, "knight", "springman", ConfigMain.Instance.knightEnemyValue);
AddEnemy(Assets.maid, "maid", "butler", ConfigMain.Instance.maidEnemyValue);
ScarletBedroom.CreateRandomEnemyList(currentEnemies);
}
}
}