aboutsummaryrefslogtreecommitdiff
path: root/src/main.zig
diff options
context:
space:
mode:
authortslil clingman <>2021-10-22 17:21:10 -0400
committertslil clingman <>2021-10-22 17:36:22 -0400
commit5cecadb81ccab1a2e6ff264349f5fa73a720db9f (patch)
tree999831c7d77f954e8fb65667e6922f2d2db6e2e9 /src/main.zig
parent852a98fe4a56109f0f4947611a75d7a0eaea0bb5 (diff)
Specialise layers to be either lists of vertices or squares
Diffstat (limited to 'src/main.zig')
-rw-r--r--src/main.zig57
1 files changed, 21 insertions, 36 deletions
diff --git a/src/main.zig b/src/main.zig
index 8b77440..781b9a7 100644
--- a/src/main.zig
+++ b/src/main.zig
@@ -49,58 +49,43 @@ pub fn main() !void {
var map = try level.Map.new(16, 16, &gpa.allocator);
defer map.deinit();
- // floor
- const square_coords = [_][2]f32{
- .{ 0.00, 0.00 },
- .{ 1.00, 0.00 },
- .{ 1.00, 1.00 },
- .{ 0.00, 1.00 },
- };
-
var y: u32 = 0;
while (y < 16) : (y += 1) {
var x: usize = 0;
while (x < 16) : (x += 1) {
- var floor_verts = try std.BoundedArray([2]f32, level.Layer.MAX_VERTS).fromSlice(square_coords[0..]);
- try map.cells.items[y * 16 + x].lower_layers.append(level.Layer{ .height = 0, .vertices = floor_verts });
+ try map.cells.items[y * 16 + x].lower_layers.append(level.Layer{ .height = 0, .polygon = .square });
if (y == 0 or y == 15 or x == 0) {
- try map.cells.items[y * 16 + x].lower_layers.append(level.Layer{ .height = 2, .vertices = floor_verts });
+ try map.cells.items[y * 16 + x].lower_layers.append(level.Layer{ .height = 2, .polygon = .square });
} else {
if (x == 15)
- try map.cells.items[y * 16 + x].lower_layers.append(level.Layer{ .height = 2, .vertices = floor_verts, .vertical_texture = 2 });
+ try map.cells.items[y * 16 + x].lower_layers.append(level.Layer{ .height = 2, .polygon = .square, .vertical_texture = 2 });
}
if (y == 7 and x >= 5 and x <= 10) {
const vert_coords0 = [_][2]f32{
- .{ 0.10, 0.10 },
- .{ 0.90, 0.10 },
- .{ 0.90, 0.90 },
- .{ 0.10, 0.90 },
+ .{ 0.50, 0.10 },
+ .{ 0.10, 0.80 },
+ .{ 0.90, 0.80 },
};
- var verts = try std.BoundedArray([2]f32, level.Layer.MAX_VERTS).fromSlice(vert_coords0[0..]);
- var layer = level.Layer{ .height = 0.5, .vertices = verts, .vertical_texture = 3, .horizontal_texture = 1 };
+ var verts = try std.BoundedArray([2]f32, level.Polygon.MAX_VERTS).fromSlice(vert_coords0[0..]);
+ var layer = level.Layer{ .height = 0.5, .polygon = .{ .vertices = verts }, .vertical_texture = 3, .horizontal_texture = 1, .vertical_texture_scale = 3 };
try map.cells.items[y * 16 + x].lower_layers.append(layer);
- const vert_coords1 = [_][2]f32{
- .{ 0.75, 0.5 },
- .{ 0.72838634, 0.60168415 },
- .{ 0.66728264, 0.68578625 },
- .{ 0.57725424, 0.7377641 },
- .{ 0.47386786, 0.74863046 },
- .{ 0.375, 0.71650636 },
- .{ 0.29774573, 0.6469463 },
- .{ 0.2554631, 0.5519779 },
- .{ 0.25546312, 0.44802207 },
- .{ 0.29774576, 0.35305366 },
- .{ 0.37500003, 0.28349364 },
- .{ 0.47386792, 0.25136954 },
- .{ 0.5772543, 0.26223588 },
- .{ 0.6672827, 0.3142138 },
- .{ 0.7283864, 0.39831588 },
+ // cylinder
+ const vert_coords1 = comptime blk: {
+ const size = level.Polygon.MAX_VERTS;
+ var shape: [size][2]f32 = [_][2]f32{.{ 0, 0 }} ** size;
+ for (shape) |*pair, i| {
+ const theta = @intToFloat(f32, i) / @intToFloat(f32, shape.len) * 2 * std.math.pi;
+ pair.*[0] = 0.5 + 0.2 * std.math.cos(theta);
+ pair.*[1] = 0.5 + 0.2 * std.math.sin(theta);
+ }
+ break :blk shape;
};
- verts = try std.BoundedArray([2]f32, level.Layer.MAX_VERTS).fromSlice(vert_coords1[0..]);
- layer = level.Layer{ .height = 1, .vertices = verts, .vertical_texture = 1, .horizontal_texture = 2, .vertical_texture_scale = 2 };
+ verts = try std.BoundedArray([2]f32, level.Polygon.MAX_VERTS).fromSlice(vert_coords1[0..]);
+
+ layer = level.Layer{ .height = 1, .polygon = .{ .vertices = verts }, .vertical_texture = 1, .horizontal_texture = 2, .vertical_texture_scale = 2 };
try map.cells.items[y * 16 + x].lower_layers.append(layer);
}
}