Newer
Older
DungeonShooting / DungeonShooting_ExcelTool / serialize / test / ExcelConfig.cs
using System;
using System.Collections.Generic;
using System.Text.Json;
//using Godot;

namespace Config;

public static partial class ExcelConfig
{
    /// <summary>
    /// ActivityObject.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
    /// </summary>
    public static List<ActivityObject> ActivityObject_List { get; private set; }
    /// <summary>
    /// ActivityObject.xlsx表数据集合, 里 Map 形式存储, key 为 Id
    /// </summary>
    public static Dictionary<string, ActivityObject> ActivityObject_Map { get; private set; }

    /// <summary>
    /// Test.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
    /// </summary>
    public static List<Test> Test_List { get; private set; }
    /// <summary>
    /// Test.xlsx表数据集合, 里 Map 形式存储, key 为 Id
    /// </summary>
    public static Dictionary<string, Test> Test_Map { get; private set; }

    /// <summary>
    /// Weapon.xlsx表数据集合, 以 List 形式存储, 数据顺序与 Excel 表相同
    /// </summary>
    public static List<Weapon> Weapon_List { get; private set; }
    /// <summary>
    /// Weapon.xlsx表数据集合, 里 Map 形式存储, key 为 Id
    /// </summary>
    public static Dictionary<string, Weapon> Weapon_Map { get; private set; }


    private static bool _init = false;
    /// <summary>
    /// 初始化所有配置表数据
    /// </summary>
    public static void Init()
    {
        if (_init) return;
        _init = true;

        _InitActivityObjectConfig();
        _InitTestConfig();
        _InitWeaponConfig();

        _InitTestRef();
    }
    private static void _InitActivityObjectConfig()
    {
        try
        {
            var text = _ReadConfigAsText("res://resource/config/ActivityObject.json");
            ActivityObject_List = JsonSerializer.Deserialize<List<ActivityObject>>(text);
            ActivityObject_Map = new Dictionary<string, ActivityObject>();
            foreach (var item in ActivityObject_List)
            {
                ActivityObject_Map.Add(item.Id, item);
            }
        }
        catch (Exception e)
        {
            //GD.PrintErr(e.ToString());
            throw new Exception("初始化表'ActivityObject'失败!");
        }
    }
    private static void _InitTestConfig()
    {
        try
        {
            var text = _ReadConfigAsText("res://resource/config/Test.json");
            Test_List = JsonSerializer.Deserialize<List<Test>>(text);
            Test_Map = new Dictionary<string, Test>();
            foreach (var item in Test_List)
            {
                Test_Map.Add(item.Id, item);
            }
        }
        catch (Exception e)
        {
            //GD.PrintErr(e.ToString());
            throw new Exception("初始化表'Test'失败!");
        }
    }
    private static void _InitWeaponConfig()
    {
        try
        {
            var text = _ReadConfigAsText("res://resource/config/Weapon.json");
            Weapon_List = JsonSerializer.Deserialize<List<Weapon>>(text);
            Weapon_Map = new Dictionary<string, Weapon>();
            foreach (var item in Weapon_List)
            {
                Weapon_Map.Add(item.Id, item);
            }
        }
        catch (Exception e)
        {
            //GD.PrintErr(e.ToString());
            throw new Exception("初始化表'Weapon'失败!");
        }
    }

    private static void _InitTestRef()
    {
        foreach (var item in Test_List)
        {
            try
            {
                item.Weapon = Weapon_Map[item._Weapon];
                item.ActivityObject = ActivityObject_Map[item._ActivityObject];

                item.Weapons = new Weapon[item._Weapons.Length];
                for (var i = 0; i < item._Weapons.Length; i++)
                {
                    item.Weapons[i] = Weapon_Map[item._Weapons[i]];
                }

                item.WeaponMap = new Dictionary<string, Weapon>();
                foreach (var pair in item._WeaponMap)
                {
                    item.WeaponMap.Add(pair.Key, Weapon_Map[pair.Value]);
                }
            }
            catch (Exception e)
            {
                //GD.PrintErr(e.ToString());
                throw new Exception("初始化'Test'引用其他表数据失败, 当前行id: " + item.Id);
            }
        }
    }
    private static string _ReadConfigAsText(string path)
    {
        return "";
    }
}