Combine manipulation processes
parent
3644d40849
commit
e8c0ebd94f
80
src/main.zig
80
src/main.zig
|
@ -269,8 +269,7 @@ export fn update() void {
|
||||||
|
|
||||||
velocityProcess(1, &player.pos);
|
velocityProcess(1, &player.pos);
|
||||||
physicsProcess(1, &player.pos, &player.physics);
|
physicsProcess(1, &player.pos, &player.physics);
|
||||||
circuitManipulationProcess(1, &player.pos, &player.control);
|
manipulationProcess(&player.pos, &player.control);
|
||||||
wireManipulationProcess(1, &player.pos, &player.control);
|
|
||||||
controlProcess(1, &player.pos, &player.control, &player.physics, &player.kinematic);
|
controlProcess(1, &player.pos, &player.control, &player.physics, &player.kinematic);
|
||||||
kinematicProcess(1, &player.pos, &player.kinematic);
|
kinematicProcess(1, &player.pos, &player.kinematic);
|
||||||
controlAnimProcess(1, &player.sprite, &player.controlAnim, &player.control);
|
controlAnimProcess(1, &player.sprite, &player.controlAnim, &player.control);
|
||||||
|
@ -348,16 +347,17 @@ export fn update() void {
|
||||||
time += 1;
|
time += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
fn circuitManipulationProcess(_: f32, pos: *Pos, control: *Control) void {
|
fn manipulationProcess(pos: *Pos, control: *Control) void {
|
||||||
var offset = switch (control.facing) {
|
var offset = switch (control.facing) {
|
||||||
.left => Vec2f{ -6, -4 },
|
.left => Vec2f{ -6, -4 },
|
||||||
.right => Vec2f{ 6, -4 },
|
.right => Vec2f{ 6, -4 },
|
||||||
.up => Vec2f{ 0, -12 },
|
.up => Vec2f{ 0, -12 },
|
||||||
.down => Vec2f{ 0, 4 },
|
.down => Vec2f{ 0, 4 },
|
||||||
};
|
};
|
||||||
|
const offsetPos = pos.pos + offset;
|
||||||
|
const cell = util.world2cell(offsetPos);
|
||||||
|
|
||||||
if (control.grabbing == null) {
|
if (control.grabbing == null) {
|
||||||
const mapPos = vec2ftovec2(pos.pos + offset);
|
|
||||||
const cell = @divTrunc(mapPos, @splat(2, @as(i32, 8)));
|
|
||||||
if (circuit.get_cell(cell)) |tile| {
|
if (circuit.get_cell(cell)) |tile| {
|
||||||
if (Circuit.is_switch(tile)) {
|
if (Circuit.is_switch(tile)) {
|
||||||
indicator = .{ .t = .lever, .pos = cell * @splat(2, @as(i32, 8)) + Vec2{ 4, 4 } };
|
indicator = .{ .t = .lever, .pos = cell * @splat(2, @as(i32, 8)) + Vec2{ 4, 4 } };
|
||||||
|
@ -366,48 +366,6 @@ fn circuitManipulationProcess(_: f32, pos: *Pos, control: *Control) void {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
fn wireManipulationProcess(_: f32, pos: *Pos, control: *Control) void {
|
|
||||||
var offset = switch (control.facing) {
|
|
||||||
.left => Vec2f{ -6, -4 },
|
|
||||||
.right => Vec2f{ 6, -4 },
|
|
||||||
.up => Vec2f{ 0, -12 },
|
|
||||||
.down => Vec2f{ 0, 4 },
|
|
||||||
};
|
|
||||||
var offsetPos = pos.pos + offset;
|
|
||||||
var mapPos = util.world2cell(offsetPos);
|
|
||||||
|
|
||||||
if (control.grabbing) |details| {
|
|
||||||
var wire = &wires.slice()[details.id];
|
|
||||||
var nodes = wire.nodes.slice();
|
|
||||||
|
|
||||||
var maxLength = wireMaxLength(wire);
|
|
||||||
var length = wireLength(wire);
|
|
||||||
|
|
||||||
if (length > maxLength * 1.5) {
|
|
||||||
nodes[details.which].pinned = false;
|
|
||||||
control.grabbing = null;
|
|
||||||
return;
|
|
||||||
} else {
|
|
||||||
nodes[details.which].pos = pos.pos + Vec2f{ 0, -4 };
|
|
||||||
}
|
|
||||||
|
|
||||||
if (Circuit.is_plug(circuit.get_cell(mapPos) orelse 0)) {
|
|
||||||
const active = circuit.isEnabled(mapPos);
|
|
||||||
indicator = .{ .t = .plug, .pos = mapPos * @splat(2, @as(i32, 8)) + Vec2{ 4, 4 }, .active = active };
|
|
||||||
if (input.btnp(.one, .two)) {
|
|
||||||
nodes[details.which].pinned = true;
|
|
||||||
nodes[details.which].pos = vec2tovec2f(indicator.?.pos);
|
|
||||||
nodes[details.which].last = vec2tovec2f(indicator.?.pos);
|
|
||||||
control.grabbing = null;
|
|
||||||
}
|
|
||||||
} else if (input.btnp(.one, .two)) {
|
|
||||||
nodes[details.which].pinned = false;
|
|
||||||
control.grabbing = null;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
const interactDistance = 4;
|
const interactDistance = 4;
|
||||||
var minDistance: f32 = interactDistance;
|
var minDistance: f32 = interactDistance;
|
||||||
var interactWireID: ?usize = null;
|
var interactWireID: ?usize = null;
|
||||||
|
@ -436,6 +394,34 @@ fn wireManipulationProcess(_: f32, pos: *Pos, control: *Control) void {
|
||||||
control.grabbing = .{ .id = wireID, .which = which };
|
control.grabbing = .{ .id = wireID, .which = which };
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
} else if (control.grabbing) |details| {
|
||||||
|
var wire = &wires.slice()[details.id];
|
||||||
|
var nodes = wire.nodes.slice();
|
||||||
|
|
||||||
|
var maxLength = wireMaxLength(wire);
|
||||||
|
var length = wireLength(wire);
|
||||||
|
|
||||||
|
if (length > maxLength * 1.5) {
|
||||||
|
nodes[details.which].pinned = false;
|
||||||
|
control.grabbing = null;
|
||||||
|
return;
|
||||||
|
} else {
|
||||||
|
nodes[details.which].pos = pos.pos + Vec2f{ 0, -4 };
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Circuit.is_plug(circuit.get_cell(cell) orelse 0)) {
|
||||||
|
const active = circuit.isEnabled(cell);
|
||||||
|
indicator = .{ .t = .plug, .pos = cell * @splat(2, @as(i32, 8)) + Vec2{ 4, 4 }, .active = active };
|
||||||
|
if (input.btnp(.one, .two)) {
|
||||||
|
nodes[details.which].pinned = true;
|
||||||
|
nodes[details.which].pos = vec2tovec2f(indicator.?.pos);
|
||||||
|
nodes[details.which].last = vec2tovec2f(indicator.?.pos);
|
||||||
|
control.grabbing = null;
|
||||||
|
}
|
||||||
|
} else if (input.btnp(.one, .two)) {
|
||||||
|
nodes[details.which].pinned = false;
|
||||||
|
control.grabbing = null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue