diff options
Diffstat (limited to 'src/misc.zig')
-rw-r--r-- | src/misc.zig | 38 |
1 files changed, 15 insertions, 23 deletions
diff --git a/src/misc.zig b/src/misc.zig index 7ff4680..fc428b2 100644 --- a/src/misc.zig +++ b/src/misc.zig @@ -75,32 +75,28 @@ export fn loadAnimation(name: [*:0]const u8) extern struct { }) catch unreachable; defer allocator.free(anim_file); const length = count(u8, anim_file, "\t") - 1; - const frames = allocator.alloc(Frame, length) catch unreachable; - var anim = tokenize(anim_file, "\n"); _ = anim.next().?; // ignore field names - var i = @as(usize, 0); - while (i < length) : (i += 1) { + + const frames = allocator.alloc(Frame, length) catch unreachable; + for (frames) |*frame| { var values = tokenize(anim.next().?, "\t"); const frame_file = readFile(dir, "{s}{c}frames{c}{s}.tsv", .{ name, sep, sep, values.next().?, // $animation/frames/$frame.tsv }) catch unreachable; defer allocator.free(frame_file); + frame.speed = parseFloat(f32, values.next().?) catch unreachable; - var frame = tokenize(frame_file, "\n"); - _ = frame.next().?; // ignore field names - var j = @as(usize, 0); - while (frame.next()) |position| { - var coordinates = tokenize(position, "\t"); - frames[i].joints[j].x = parseFloat(f32, coordinates.next().?) - catch unreachable; - frames[i].joints[j].y = parseFloat(f32, coordinates.next().?) - catch unreachable; - frames[i].joints[j].z = parseFloat(f32, coordinates.next().?) - catch unreachable; - j += 1; + var joints = tokenize(frame_file, "\n"); + _ = joints.next().?; // ignore field names + for (frame.joints) |*joint| { + var coordinates = tokenize(joints.next().?, "\t"); + joint.* = .{ + .x = parseFloat(f32, coordinates.next().?) catch unreachable, + .y = parseFloat(f32, coordinates.next().?) catch unreachable, + .z = parseFloat(f32, coordinates.next().?) catch unreachable, + }; } - frames[i].speed = parseFloat(f32, values.next().?) catch unreachable; } return .{ .ptr = frames.ptr, .len = frames.len }; } @@ -144,10 +140,8 @@ export fn loadJoints(joints: [*]Joint) void { var tsv = tokenize(@embedFile("joints.tsv"), "\n"); _ = tsv.next().?; // ignore field names var i = @as(u8, 0); - while (tsv.next()) |row| { + while (tsv.next()) |row| : (i += 1) joints[i].load(row) catch unreachable; - i += 1; - } } const Vertex = extern struct { @@ -265,10 +259,8 @@ export fn loadMuscles(muscles: [*]Muscle) void { var tsv = tokenize(@embedFile("muscles.tsv"), "\n"); _ = tsv.next().?; // ignore field names var i = @as(u8, 0); - while (tsv.next()) |row| { + while (tsv.next()) |row| : (i += 1) muscles[i].load(row) catch unreachable; - i += 1; - } } /// Load audio file into an OpenAL buffer and return it. |