Delete wires from database after loading
parent
af85ae5ae7
commit
cfbee44872
|
@ -226,7 +226,9 @@ fn loadLevel(lvl: usize) !void {
|
||||||
{
|
{
|
||||||
_ = try wires.resize(0);
|
_ = try wires.resize(0);
|
||||||
var a: usize = 0;
|
var a: usize = 0;
|
||||||
while (db.getWire(level, a)) |wireSlice| : (a += 1) {
|
while (db.findWire(level, 0)) |wireArr| : (a += 1) {
|
||||||
|
defer db.deleteWire(wireArr);
|
||||||
|
const wireSlice = db.getWire(wireArr);
|
||||||
const wire = try world.Wire.getEnds(wireSlice);
|
const wire = try world.Wire.getEnds(wireSlice);
|
||||||
const coord0 = wire[0].coord.subC(levelc);
|
const coord0 = wire[0].coord.subC(levelc);
|
||||||
const coord1 = wire[1].coord.subC(levelc);
|
const coord1 = wire[1].coord.subC(levelc);
|
||||||
|
|
|
@ -857,7 +857,20 @@ pub const Database = struct {
|
||||||
db.entities[coin].kind = .Collected;
|
db.entities[coin].kind = .Collected;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn getWire(database: *Database, level: Level, num: usize) ?[]Wire {
|
/// Remove a wire slice from the wires array. Invalidates handles returned from findWire
|
||||||
|
pub fn deleteWire(database: *Database, wire: [2]usize) void {
|
||||||
|
const wire_size = wire[1] - wire[0];
|
||||||
|
std.mem.rotate(Wire, database.wires, wire_size);
|
||||||
|
database.wire_count -= wire_size;
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Retrieve the slice of the wire from findWire
|
||||||
|
pub fn getWire(database: *Database, wire: [2]usize) []Wire {
|
||||||
|
return database.wires[wire[0]..wire[1]];
|
||||||
|
}
|
||||||
|
|
||||||
|
/// Find a wire within the limits of a given level
|
||||||
|
pub fn findWire(database: *Database, level: Level, num: usize) ?[2]usize {
|
||||||
const nw = Coord.fromWorld(level.world_x, level.world_y);
|
const nw = Coord.fromWorld(level.world_x, level.world_y);
|
||||||
const se = nw.add(.{ 20, 20 });
|
const se = nw.add(.{ 20, 20 });
|
||||||
var node_begin: ?usize = null;
|
var node_begin: ?usize = null;
|
||||||
|
@ -878,7 +891,7 @@ pub const Database = struct {
|
||||||
.End => {
|
.End => {
|
||||||
if (node_begin) |node| {
|
if (node_begin) |node| {
|
||||||
if (wire_count == num) {
|
if (wire_count == num) {
|
||||||
return database.wires[node..i + 1];
|
return [2]usize{node, i + 1};
|
||||||
}
|
}
|
||||||
wire_count += 1;
|
wire_count += 1;
|
||||||
node_begin = null;
|
node_begin = null;
|
||||||
|
|
Loading…
Reference in New Issue