summary refs log tree commit diff
path: root/src/misc.zig
diff options
context:
space:
mode:
Diffstat (limited to 'src/misc.zig')
-rw-r--r--src/misc.zig38
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.