using BigFloatNumerics; using System; using System.Numerics; using UnityEngine; [CreateAssetMenu(fileName = "DeepCaveDungeonProperty", menuName = "ScriptableObject/GameMod/DeepCaveDungeonProperty")] public class DeepCaveDungeonProperty : GameModProperty { [Serializable] public struct GoodsCreator { public ItemProp itemProp; public float startCount; public float multiplierPerLevel; public float adderPerLevel; public BigInteger GetCount(uint level) { return Formula.Calculate(startCount, multiplierPerLevel, adderPerLevel, level); } } [Serializable] public struct EnemyCreator { [Serializable] struct StatProperty { public float baseV; public float multiplierPerLevel; public float adderPerLevel; } public CharacterProperty property; [SerializeField] StatProperty hpStat; [SerializeField] StatProperty atkStat; public BigFloat GetHp(uint level) { return Formula.Calculate(hpStat.baseV, hpStat.multiplierPerLevel, hpStat.adderPerLevel, level); } public BigFloat GetAtk(uint level) { return Formula.Calculate(atkStat.baseV, atkStat.multiplierPerLevel, atkStat.adderPerLevel, level); } } public static string CodeName => "DeepCaveDungeon"; public override string codeName => CodeName; public uint openStage = 1; public EnemyCreator bossEnemyCreator; public float limitTime = 1; public GoodsCreator[] rewards; public override GameModData CreateData(GameModPlayProperty playProperty) { Debug.Assert(playProperty is DeepCaveDungeonPlayProperty, "Invalid play property type."); return new DeepCaveDungeonData(this, playProperty as DeepCaveDungeonPlayProperty); } }