Add auditory active circuit tone

master
Louis Pearson 2022-01-20 01:46:17 -07:00
parent b1a22f7c11
commit 18dae1722d
8 changed files with 57 additions and 34 deletions

File diff suppressed because one or more lines are too long

View File

@ -3,7 +3,7 @@
"infinite":false, "infinite":false,
"layers":[ "layers":[
{ {
"data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 1, 1, 1, 55, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 36, 19, 52, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 21, 36, 1, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 50, 54, 36, 1, 39, 1, 50, 19, 19, 19, 22, 22, 22, 19, 19, 19, 19, 52, 1, 1, 1, 1, 37, 1, 39, 1, 1, 1, 1, 1, 37, 1, 55, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 22, 52, 1, 1, 1, 37, 39, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 39, 1, 1, 1, 1, 37, 54, 19, 52, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 39, 1, 1, 1, 50, 67, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 39, 1, 1, 1, 1, 20, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 36, 52, 1, 1, 1, 20, 1, 1, 17, 19, 19, 19, 19, 19, 19, 19, 19, 36, 1, 1, 39, 1, 1, 1, 1, 20, 1, 1, 20, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 39, 1, 1, 1, 50, 67, 1, 1, 51, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 39, 1, 1, 1, 1, 20, 1, 1, 35, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 54, 66, 52, 1, 1, 1, 51, 1, 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, 66, 54, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 35, 1, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1], "data":[1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 54, 1, 1, 1, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 1, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 1, 36, 19, 52, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 21, 36, 1, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 50, 54, 36, 1, 39, 0, 50, 19, 19, 19, 22, 22, 22, 19, 19, 19, 19, 52, 0, 0, 0, 0, 37, 1, 39, 0, 0, 0, 0, 0, 37, 1, 55, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 1, 1, 22, 52, 0, 0, 0, 37, 39, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 1, 1, 39, 0, 0, 0, 0, 37, 54, 19, 52, 1, 1, 1, 1, 1, 1, 1, 1, 37, 1, 1, 39, 0, 0, 0, 50, 67, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 1, 1, 39, 0, 0, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 37, 1, 1, 36, 52, 0, 0, 0, 20, 0, 0, 17, 19, 19, 19, 19, 19, 19, 19, 19, 36, 1, 1, 39, 0, 0, 0, 0, 20, 0, 0, 20, 0, 0, 0, 0, 0, 0, 0, 0, 37, 1, 1, 39, 0, 0, 0, 50, 67, 0, 0, 51, 0, 0, 0, 0, 0, 0, 0, 0, 37, 1, 1, 39, 0, 0, 0, 1, 20, 0, 0, 35, 0, 0, 0, 0, 0, 0, 0, 0, 37, 1, 54, 66, 52, 0, 0, 1, 51, 0, 50, 19, 19, 19, 19, 19, 19, 19, 19, 19, 66, 54, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 35, 1, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 22, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1],
"height":20, "height":20,
"id":1, "id":1,
"name":"solid", "name":"solid",
@ -143,6 +143,18 @@
"width":0, "width":0,
"x":76, "x":76,
"y":124 "y":124
},
{
"height":0,
"id":12,
"name":"",
"point":true,
"rotation":0,
"type":"spawn",
"visible":true,
"width":0,
"x":4,
"y":140
}], }],
"opacity":1, "opacity":1,
"type":"objectgroup", "type":"objectgroup",
@ -151,7 +163,7 @@
"y":0 "y":0
}], }],
"nextlayerid":5, "nextlayerid":5,
"nextobjectid":12, "nextobjectid":13,
"orientation":"orthogonal", "orientation":"orthogonal",
"renderorder":"right-down", "renderorder":"right-down",
"tiledversion":"1.7.2", "tiledversion":"1.7.2",

View File

@ -1,5 +1,5 @@
<?xml version="1.0" encoding="UTF-8"?> <?xml version="1.0" encoding="UTF-8"?>
<map version="1.5" tiledversion="1.7.2" orientation="orthogonal" renderorder="right-down" width="20" height="20" tilewidth="8" tileheight="8" infinite="0" nextlayerid="5" nextobjectid="12"> <map version="1.5" tiledversion="1.7.2" orientation="orthogonal" renderorder="right-down" width="20" height="20" tilewidth="8" tileheight="8" infinite="0" nextlayerid="5" nextobjectid="13">
<editorsettings> <editorsettings>
<export target="test.json" format="json"/> <export target="test.json" format="json"/>
</editorsettings> </editorsettings>
@ -8,22 +8,22 @@
<data encoding="csv"> <data encoding="csv">
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1, 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,
1,1,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,1,1, 1,1,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,54,1,1,
1,55,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,37,1, 1,55,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,1,
39,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,37,1, 39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,37,1,
36,19,52,1,1,1,1,1,1,1,1,1,1,1,1,1,1,21,36,1, 36,19,52,0,0,0,0,0,0,0,0,0,0,0,0,0,0,21,36,1,
39,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,50,54,36,1, 39,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,50,54,36,1,
39,1,50,19,19,19,22,22,22,19,19,19,19,52,1,1,1,1,37,1, 39,0,50,19,19,19,22,22,22,19,19,19,19,52,0,0,0,0,37,1,
39,1,1,1,1,1,37,1,55,1,1,1,1,1,1,1,1,1,37,1, 39,0,0,0,0,0,37,1,55,0,0,0,0,0,0,0,0,0,37,1,
1,22,52,1,1,1,37,39,1,1,1,1,1,1,1,1,1,1,37,1, 1,22,52,0,0,0,37,39,0,0,0,0,0,0,0,0,0,0,37,1,
1,39,1,1,1,1,37,54,19,52,1,1,1,1,1,1,1,1,37,1, 1,39,0,0,0,0,37,54,19,52,1,1,1,1,1,1,1,1,37,1,
1,39,1,1,1,50,67,1,1,1,1,1,1,1,1,1,1,1,37,1, 1,39,0,0,0,50,67,0,0,0,0,0,0,0,0,0,0,0,37,1,
1,39,1,1,1,1,20,1,1,1,1,1,1,1,1,1,1,1,37,1, 1,39,0,0,0,0,20,0,0,0,0,0,0,0,0,0,0,0,37,1,
1,36,52,1,1,1,20,1,1,17,19,19,19,19,19,19,19,19,36,1, 1,36,52,0,0,0,20,0,0,17,19,19,19,19,19,19,19,19,36,1,
1,39,1,1,1,1,20,1,1,20,1,1,1,1,1,1,1,1,37,1, 1,39,0,0,0,0,20,0,0,20,0,0,0,0,0,0,0,0,37,1,
1,39,1,1,1,50,67,1,1,51,1,1,1,1,1,1,1,1,37,1, 1,39,0,0,0,50,67,0,0,51,0,0,0,0,0,0,0,0,37,1,
1,39,1,1,1,1,20,1,1,35,1,1,1,1,1,1,1,1,37,1, 1,39,0,0,0,1,20,0,0,35,0,0,0,0,0,0,0,0,37,1,
54,66,52,1,1,1,51,1,50,19,19,19,19,19,19,19,19,19,66,54, 54,66,52,0,0,1,51,0,50,19,19,19,19,19,19,19,19,19,66,54,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,35,1, 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,35,1,
22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22, 22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,22,
1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1 1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1,1
</data> </data>
@ -78,5 +78,8 @@
<object id="11" type="door" x="76" y="124"> <object id="11" type="door" x="76" y="124">
<point/> <point/>
</object> </object>
<object id="12" type="spawn" x="4" y="140">
<point/>
</object>
</objectgroup> </objectgroup>
</map> </map>

View File

@ -2,4 +2,4 @@
w4 png2src --template assets/assets-template --zig assets/tiles.png -o assets/tiles.zig w4 png2src --template assets/assets-template --zig assets/tiles.png -o assets/tiles.zig
w4 png2src --template assets/assets-template --zig assets/sprites.png -o assets/sprites.zig w4 png2src --template assets/assets-template --zig assets/sprites.png -o assets/sprites.zig
zig run map2src.zig -- assets/maps/map.zig assets/maps/map.json zig run map2src.zig -- assets/maps/map.zig assets/maps/test.json

View File

@ -177,7 +177,7 @@ pub fn bridge(this: *@This(), cells: [2]Cell) void {
} }
} }
pub fn enabled(this: @This(), cell: Cell) bool { pub fn isEnabled(this: @This(), cell: Cell) bool {
if (this.indexOf(cell)) |c| { if (this.indexOf(cell)) |c| {
return this.cells[c].enabled; return this.cells[c].enabled;
} }
@ -223,6 +223,7 @@ pub fn fill(this: *@This(), rootRaw: Cell) void {
if (!conductor) continue; if (!conductor) continue;
const s = @intToEnum(Side, i); const s = @intToEnum(Side, i);
const delta = dir(s); const delta = dir(s);
// TODO: check that cell can recieve from this side
q.insert(cell + delta); q.insert(cell + delta);
} }
if (is_plug(tile)) { if (is_plug(tile)) {

View File

@ -109,7 +109,7 @@ export fn start() void {
w4.trace("{}, {}, {}", .{ assets.spawn, mapPos, assets.spawn - mapPos }); w4.trace("{}, {}, {}", .{ assets.spawn, mapPos, assets.spawn - mapPos });
_ = world.create(.{ _ = world.create(.{
.pos = Pos.init(util.vec2ToVec2f((assets.spawn - mapPos) * Map.tile_size) + Vec2f{ 4, 4 }), .pos = Pos.init(util.vec2ToVec2f((assets.spawn - mapPos) * Map.tile_size) + Vec2f{ 4, 8 }),
.control = .{ .controller = .player, .state = .stand }, .control = .{ .controller = .player, .state = .stand },
.sprite = .{ .offset = .{ -4, -8 }, .size = .{ 8, 8 }, .index = 0, .flags = .{ .bpp = .b1 } }, .sprite = .{ .offset = .{ -4, -8 }, .size = .{ 8, 8 }, .index = 0, .flags = .{ .bpp = .b1 } },
.physics = .{ .friction = Vec2f{ 0.15, 0.1 }, .gravity = Vec2f{ 0, 0.25 } }, .physics = .{ .friction = Vec2f{ 0.15, 0.1 }, .gravity = Vec2f{ 0, 0.25 } },
@ -196,13 +196,16 @@ export fn update() void {
var size = Vec2{ 0, 0 }; var size = Vec2{ 0, 0 };
switch (stage) { switch (stage) {
0 => size = Vec2{ 6, 6 }, 0 => size = Vec2{ 6, 6 },
// 1 => size = Vec2{ 5, 5 },
else => size = Vec2{ 8, 8 }, else => size = Vec2{ 8, 8 },
} }
w4.DRAW_COLORS.* = 0x0020; if (circuit.isEnabled(util.vec2cell(pos))) {
w4.tone(.{ .start = 60, .end = 1 }, .{ .release = 30, .sustain = 0 }, 10, .{ .channel = .triangle });
w4.DRAW_COLORS.* = 0x0020;
} else {
w4.DRAW_COLORS.* = 0x0030;
}
var half = Vec2{ @divTrunc(size[0], 2), @divTrunc(size[1], 2) }; var half = Vec2{ @divTrunc(size[0], 2), @divTrunc(size[1], 2) };
// w4.trace("{}", .{half});
switch (details.t) { switch (details.t) {
.wire => w4.oval(pos - half, size), .wire => w4.oval(pos - half, size),
.plug => w4.rect(pos - half, size), .plug => w4.rect(pos - half, size),

View File

@ -107,7 +107,7 @@ pub fn collide(this: @This(), rect: util.AABB) std.BoundedArray(util.AABB, 9) {
pub fn isSolid(this: @This(), cell: Cell) bool { pub fn isSolid(this: @This(), cell: Cell) bool {
if (this.getTile(cell[0], cell[1])) |tile| { if (this.getTile(cell[0], cell[1])) |tile| {
return tile != 0; return tile != 0 and tile != 1;
} }
return true; return true;
} }

View File

@ -29,6 +29,10 @@ pub fn world2cell(vec: Vec2f) Vec2 {
return vec2fToVec2(vec / @splat(2, @as(f32, 8))); return vec2fToVec2(vec / @splat(2, @as(f32, 8)));
} }
pub fn vec2cell(vec: Vec2) Cell {
return @divTrunc(vec, @splat(2, @as(i32, 8)));
}
pub fn vec2ToVec2f(vec2: Vec2) Vec2f { pub fn vec2ToVec2f(vec2: Vec2) Vec2f {
return Vec2f{ @intToFloat(f32, vec2[0]), @intToFloat(f32, vec2[1]) }; return Vec2f{ @intToFloat(f32, vec2[0]), @intToFloat(f32, vec2[1]) };
} }