Implement saving of logic gates and directional blocks

This commit is contained in:
Eevee (Evelyn Woods) 2020-12-07 21:15:18 -07:00
parent 2849260672
commit 35f040c8d7
3 changed files with 39 additions and 4 deletions

View File

@ -4,6 +4,7 @@ export const DIRECTIONS = {
north: {
movement: [0, -1],
bit: 0x01,
index: 0,
action: 'up',
left: 'west',
right: 'east',
@ -12,6 +13,7 @@ export const DIRECTIONS = {
south: {
movement: [0, 1],
bit: 0x04,
index: 2,
action: 'down',
left: 'east',
right: 'west',
@ -20,6 +22,7 @@ export const DIRECTIONS = {
west: {
movement: [-1, 0],
bit: 0x08,
index: 3,
action: 'left',
left: 'south',
right: 'north',
@ -28,6 +31,7 @@ export const DIRECTIONS = {
east: {
movement: [1, 0],
bit: 0x02,
index: 1,
action: 'right',
left: 'north',
right: 'south',

View File

@ -462,7 +462,34 @@ const TILE_ENCODING = {
}
},
encode(tile) {
// FIXME implement
let direction_offset = DIRECTIONS[tile.direction].index;
if (tile.gate_type === 'not') {
return 0 + direction_offset;
}
else if (tile.gate_type === 'and') {
return 4 + direction_offset;
}
else if (tile.gate_type === 'or') {
return 8 + direction_offset;
}
else if (tile.gate_type === 'xor') {
return 12 + direction_offset;
}
else if (tile.gate_type === 'latch-cw') {
return 16 + direction_offset;
}
else if (tile.gate_type === 'nand') {
return 20 + direction_offset;
}
else if (tile.gate_type === 'counter') {
return 30 + tile.memory;
}
else if (tile.gate_type === 'latch-ccw') {
return 64 + direction_offset;
}
else {
return 0xff;
}
},
},
},
@ -612,8 +639,11 @@ const TILE_ENCODING = {
tile.arrows = arrows;
},
encode(tile) {
// TODO
return 0;
let bits = 0;
for (let direction of tile.arrows) {
bits |= DIRECTIONS[direction].bit;
}
return bits;
},
},
],

View File

@ -1007,6 +1007,7 @@ const EDITOR_PALETTE = [{
// - wires, wire tunnels probably a dedicated tool, placing tunnels like a tile makes no sense
// - canopy normal tile; layering problem
// - thin walls special rotate logic, like force floors; layering problem
// - light switches
// TODO should tiles that respond to wiring and/or gray buttons be highlighted, highlightable?
}, {
title: "Logic",
@ -1045,7 +1046,7 @@ const SPECIAL_PALETTE_ENTRIES = {
'logic_gate/nand': { name: 'logic_gate', direction: 'north', gate_type: 'nand' },
'logic_gate/latch-cw': { name: 'logic_gate', direction: 'north', gate_type: 'latch-cw' },
'logic_gate/latch-ccw': { name: 'logic_gate', direction: 'north', gate_type: 'latch-ccw' },
'logic_gate/counter': { name: 'logic_gate', direction: 'north', gate_type: 'counter' },
'logic_gate/counter': { name: 'logic_gate', direction: 'north', gate_type: 'counter', memory: 0 },
};
const _RAILROAD_ROTATED_LEFT = [3, 0, 1, 2, 5, 4];
const _RAILROAD_ROTATED_RIGHT = [1, 2, 3, 0, 5, 4];