chore(Assets): add LevelMapMark config

This commit is contained in:
xeon
2026-02-04 00:25:47 +03:00
parent b5012c03f4
commit 7a91e1e975
4 changed files with 49182 additions and 4 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -7,6 +7,7 @@ pub const CharacterSkillMap = @import("Assets/CharacterSkillMap.zig");
const Io = std.Io;
const Allocator = std.mem.Allocator;
const ArenaAllocator = std.heap.ArenaAllocator;
const StringHashMap = std.StringArrayHashMapUnmanaged;
const meta = std.meta;
const log = std.log.scoped(.assets);
@@ -17,7 +18,11 @@ char_skill_map: CharacterSkillMap,
str_to_num_dicts: IndexDictionaries.StrToNum,
num_to_str_dicts: IndexDictionaries.NumToStr,
common_skill_config: configs.CommonSkillConfig,
level_config_table: std.StringArrayHashMapUnmanaged(configs.LevelConfig),
level_config_table: StringHashMap(configs.LevelConfig),
// Map mark groups as they're stored in LevelMapMark.json
level_map_mark_groups: StringHashMap([]const configs.ClientSingleMapMarkData),
// instId-to-data mapping
map_mark_table: StringHashMap(*const configs.ClientSingleMapMarkData),
pub const IdGroup = enum {
char_id,
@@ -63,12 +68,21 @@ pub fn load(io: Io, gpa: Allocator) !Assets {
configs.CommonSkillConfig.file,
);
const level_config_table = try configs.loadJsonConfig(
const level_config_table = (try configs.loadJsonConfig(
std.json.ArrayHashMap(configs.LevelConfig),
io,
arena.allocator(),
"LevelConfigTable.json",
);
)).map;
const level_map_mark_groups = (try configs.loadJsonConfig(
std.json.ArrayHashMap([]const configs.ClientSingleMapMarkData),
io,
arena.allocator(),
"LevelMapMark.json",
)).map;
const map_mark_table = try buildMapMarkTable(&level_map_mark_groups, arena.allocator());
return .{
.arena = arena,
@@ -77,10 +91,30 @@ pub fn load(io: Io, gpa: Allocator) !Assets {
.str_to_num_dicts = str_to_num_dicts,
.num_to_str_dicts = num_to_str_dicts,
.common_skill_config = common_skill_config,
.level_config_table = level_config_table.map,
.level_config_table = level_config_table,
.level_map_mark_groups = level_map_mark_groups,
.map_mark_table = map_mark_table,
};
}
fn buildMapMarkTable(
groups: *const StringHashMap([]const configs.ClientSingleMapMarkData),
arena: Allocator,
) Allocator.Error!StringHashMap(*const configs.ClientSingleMapMarkData) {
var map: StringHashMap(*const configs.ClientSingleMapMarkData) = .empty;
for (groups.values()) |group| for (group) |*mark| {
const inst_id = try std.mem.concat(
arena,
u8,
&.{ mark.basicData.templateId, mark.basicData.markInstId },
);
try map.put(arena, inst_id, mark);
};
return map;
}
pub fn deinit(assets: *Assets) void {
assets.owned_tables.deinit();
assets.arena.deinit();

View File

@@ -3,6 +3,7 @@ const json = std.json;
pub const CommonSkillConfig = @import("configs/CommonSkillConfig.zig");
pub const LevelConfig = @import("configs/LevelConfig.zig");
pub const ClientSingleMapMarkData = @import("configs/ClientSingleMapMarkData.zig");
const Io = std.Io;
const Allocator = std.mem.Allocator;

View File

@@ -0,0 +1,11 @@
basicData: MapMarkBasicData,
pub const MapMarkBasicData = struct {
templateId: []const u8,
markInstId: []const u8,
pos: struct {
x: f32,
y: f32,
z: f32,
},
};