using System.Collections.Generic;
using Cielonos.MainGame.Characters;
using Cielonos.MainGame.Inventory;
using Cielonos.MainGame.Map;
using Sirenix.OdinInspector;
using SLSUtilities.General;
using UnityEngine;
namespace Cielonos.MainGame
{
///
/// Run 系统的核心配置数据集合。集中管理地图参数、Zone 池、初始装备和货币范围配置。
/// 在 Resources 根目录下以 "MainGameConfig" 命名放置,供全局访问。
///
[CreateAssetMenu(fileName = "MainGameConfig", menuName = "Cielonos/MainGameConfig")]
public class MainGameConfig : SerializedScriptableObject
{
// ----------------------------------------------------------------
// 地图配置
// ----------------------------------------------------------------
[TitleGroup("地图配置")]
[Tooltip("地图生成的默认参数配置")]
public MapGenerationConfig defaultMapConfig;
[TitleGroup("地图配置")]
[Tooltip("特定地图的生成参数配置,键为地图 ID。")]
public Dictionary mapConfigs = new Dictionary();
// ----------------------------------------------------------------
// 初始装备
// ----------------------------------------------------------------
[TitleGroup("初始装备")]
[Tooltip("每局开始时玩家携带的初始武器预制体列表")]
public List startingWeapons = new List();
// ----------------------------------------------------------------
// 货币
// ----------------------------------------------------------------
[TitleGroup("货币 - 击杀奖励")]
public Vector2Int normalEnemyCurrencyRange = new Vector2Int(5, 15);
[TitleGroup("货币 - 击杀奖励")]
public Vector2Int eliteEnemyCurrencyRange = new Vector2Int(20, 40);
[TitleGroup("货币 - 击杀奖励")]
public Vector2Int bossCurrencyRange = new Vector2Int(80, 120);
[TitleGroup("货币 - 装备价格")]
public Dictionary itemPrices = new Dictionary()
{
{ItemRarity.None, new Vector2Int(9999, 9999)},
{ItemRarity.Tera, new Vector2Int(200, 250)},
{ItemRarity.Moser, new Vector2Int(300, 350)},
{ItemRarity.Graham, new Vector2Int(500, 600)},
{ItemRarity.Epsilon, new Vector2Int(700, 800)},
{ItemRarity.Aleph, new Vector2Int(900, 1000)},
};
[TitleGroup("机械台 - 各稀有度概率")]
public Dictionary mechanicalTableRarityWeights = new Dictionary
{
{ ItemRarity.Tera, 50f },
{ ItemRarity.Moser, 30f },
{ ItemRarity.Graham, 15f },
{ ItemRarity.Epsilon, 4f },
{ ItemRarity.Aleph, 1f },
};
// ----------------------------------------------------------------
// 公共方法
// ----------------------------------------------------------------
///
/// 根据敌人等级随机生成单个敌人的货币掉落数量。
///
/// 敌人等级(Node / Nexus / Core)。
/// 随机数实例。
/// 随机货币数量。
public int RollCurrency(EnemyRank rank, System.Random rng)
{
Vector2Int range = rank switch
{
EnemyRank.Nexus => eliteEnemyCurrencyRange,
EnemyRank.Core => bossCurrencyRange,
_ => normalEnemyCurrencyRange,
};
return rng.Next(range.x, range.y + 1);
}
///
/// 根据物品稀有度随机生成售价。
///
/// 物品稀有度。
/// 随机数实例。
/// 随机售价;若该稀有度无配置则返回 0。
public int RollPrice(ItemRarity rarity, System.Random rng)
{
if (!itemPrices.TryGetValue(rarity, out Vector2Int range))
{
return 0;
}
return rng.Next(range.x, range.y + 1);
}
}
}