Skip to content

Commit 90acd9f

Browse files
committed
Reworking level landmark transforms to use the new applyTransform in quakemaps
1 parent b971a28 commit 90acd9f

File tree

2 files changed

+14
-15
lines changed

2 files changed

+14
-15
lines changed

entities/quakemap.zig

+13-15
Original file line numberDiff line numberDiff line change
@@ -330,34 +330,32 @@ pub const QuakeMapComponent = struct {
330330

331331
var err: delve.utils.quakemap.ErrorInfo = undefined;
332332

333+
// pick the transform to use when loading
334+
const load_transform = if (self.transform_landmark_name == null) self.map_transform else math.Mat4.identity;
335+
336+
self.quake_map = delve.utils.quakemap.QuakeMap.read(allocator, file_buffer, load_transform, &err) catch {
337+
delve.debug.log("Error reading quake map: {}", .{err});
338+
return;
339+
};
340+
333341
// find our landmark offset, if one was asked for
334342
if (self.transform_landmark_name) |landmark_str| {
335-
// read the map to try to get the landmark position
336-
// TODO: update quake map utils to have a version that just reads entities!
337-
var quake_map_landmark = delve.utils.quakemap.QuakeMap.read(allocator, file_buffer, self.map_transform, &err) catch {
338-
delve.debug.log("Error reading quake map: {}", .{err});
339-
return;
340-
};
341-
defer quake_map_landmark.deinit();
342-
343-
const landmark = getLandmark(&quake_map_landmark, landmark_str.str);
343+
const landmark = getLandmark(&self.quake_map, landmark_str.str);
344344
const landmark_offset_transformed = landmark.pos.mulMat4(self.map_transform);
345345
const transformed_origin = delve.math.Vec3.zero.mulMat4(self.map_transform);
346346
const rotate_angle = self.transform_landmark_angle - landmark.angle;
347-
self.angle_offset = rotate_angle;
348347

349348
const map_translate_amount = transformed_origin.sub(landmark_offset_transformed);
350349

351350
// update our map transforms by applying our rotation and offset
352351
self.transform = self.transform.mul(delve.math.Mat4.rotate(rotate_angle, delve.math.Vec3.new(0, 1, 0)));
353352
self.transform = self.transform.mul(delve.math.Mat4.translate(map_translate_amount));
354353
self.map_transform = self.transform.mul(delve.math.Mat4.scale(self.map_scale).mul(delve.math.Mat4.rotate(-90, delve.math.Vec3.x_axis)));
355-
}
354+
self.angle_offset = rotate_angle;
356355

357-
self.quake_map = delve.utils.quakemap.QuakeMap.read(allocator, file_buffer, self.map_transform, &err) catch {
358-
delve.debug.log("Error reading quake map: {}", .{err});
359-
return;
360-
};
356+
// can now apply the final transform to the map
357+
self.quake_map.applyTransform(self.map_transform);
358+
}
361359

362360
// calculate our bounds now!
363361
self.bounds = getBoundsForMap(&self.quake_map);

game/game.zig

+1
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@ pub const GameInstance = struct {
7474
var level_bit = try self.world.createEntity(.{});
7575
const map_component = try level_bit.createNewComponent(quakemap.QuakeMapComponent, .{
7676
.filename = string.init("assets/test.map"),
77+
// .filename = string.init("assets/levels/starts/1.map"),
7778
.transform = delve.math.Mat4.translate(delve.math.Vec3.zero),
7879
});
7980

0 commit comments

Comments
 (0)