From cce79b4d90e3903ce35fafd770953b346ee22f5a Mon Sep 17 00:00:00 2001 From: Louis Pearson Date: Fri, 5 Aug 2022 16:42:24 -0600 Subject: [PATCH] Uncomment door code Still doesn't work because I decided to do doors differently. My next step is to make the door entities add and remove tiles --- assets/assets.zig | 1 - src/circuit.zig | 5 ++++- src/game.zig | 9 +++++---- src/main.zig | 4 ++-- src/util.zig | 25 +++++++++++++++++-------- 5 files changed, 28 insertions(+), 16 deletions(-) diff --git a/assets/assets.zig b/assets/assets.zig index cb86338..4198ec7 100644 --- a/assets/assets.zig +++ b/assets/assets.zig @@ -1,2 +1 @@ pub usingnamespace @import("tiles.zig"); -pub usingnamespace @import("maps/map.zig"); diff --git a/src/circuit.zig b/src/circuit.zig index 423ae72..2bc3b9d 100644 --- a/src/circuit.zig +++ b/src/circuit.zig @@ -235,9 +235,12 @@ pub fn enabledBridges(this: @This(), alloc: std.mem.Allocator) !util.Buffer(usiz } pub fn enabledDoors(this: @This(), alloc: std.mem.Allocator) !util.Buffer(Cell) { - var items = try alloc.alloc(Cell, this.doors.len); + var items = try alloc.alloc(Cell, this.doors.items.len); var buffer = util.Buffer(Cell).init(items); for (this.doors.items) |d| { + const x = d.cell[0]; + const y = d.cell[1]; + w4.tracef("%d, %d", x, y); if (d.enabled) buffer.append(d.cell); } return buffer; diff --git a/src/game.zig b/src/game.zig index ee8e325..444dc82 100644 --- a/src/game.zig +++ b/src/game.zig @@ -617,10 +617,11 @@ fn updateCircuit() !void { (circuit.isEnabled(cellEnd) and end.pinned)) wire.enabled = true; } // map.reset(&assets.solid); - // const enabledDoors = try circuit.enabledDoors(frame_alloc); - // for (enabledDoors.items) |door| { - // try map.set_cell(door, 0); - // } + const enabledDoors = try circuit.enabledDoors(frame_alloc); + defer frame_alloc.free(enabledDoors.items); + for (enabledDoors.items) |door| { + try map.set_cell(door, 0); + } } fn wirePhysicsProcess(dt: f32, wire: *Wire) !void { diff --git a/src/main.zig b/src/main.zig index 7cfaaf9..f66e40d 100644 --- a/src/main.zig +++ b/src/main.zig @@ -29,7 +29,7 @@ export fn update() void { .Menu => menu.update(), .Game => game.update(time) catch |e| switch (e) { error.Overflow => showErr(@errorName(e)), - // error.OutOfBounds => showErr(@errorName(e)), + error.OutOfBounds => showErr(@errorName(e)), // error.EndOfStream => showErr(@errorName(e)), error.OutOfMemory => showErr(@errorName(e)), }, @@ -40,7 +40,7 @@ export fn update() void { .Menu => menu.start(), .Game => game.start() catch |e| switch (e) { error.Overflow => showErr(@errorName(e)), - // error.OutOfBounds => showErr(@errorName(e)), + error.OutOfBounds => showErr(@errorName(e)), error.EndOfStream => showErr(@errorName(e)), error.OutOfMemory => showErr(@errorName(e)), error.NullTiles => showErr(@errorName(e)), diff --git a/src/util.zig b/src/util.zig index 390c00b..c8f1468 100644 --- a/src/util.zig +++ b/src/util.zig @@ -107,24 +107,33 @@ test "Queue" { pub fn Buffer(comptime T: type) type { return struct { - len: usize, + len: usize = 0, + backing_buffer: []T, items: []T, - pub fn init(slice: []T) @This() { - return @This(){ - .len = 0, - .items = slice, + pub fn init(backing_buffer: []T) @This() { + var this = @This(){ + .items = backing_buffer, + .backing_buffer = backing_buffer, }; + this.set_len(0); + return this; + } + + fn set_len(this: *@This(), len: usize) void { + this.len = len; + this.items.len = len; } pub fn reset(buf: *@This()) void { buf.len = 0; + buf.items.len = 0; } pub fn append(buf: *@This(), item: T) void { - std.debug.assert(buf.len < buf.items.len); - buf.items[buf.len] = item; - buf.len += 1; + std.debug.assert(buf.len < buf.backing_buffer.len); + buf.backing_buffer[buf.len] = item; + buf.set_len(buf.len + 1); } }; }