Implement Diode
Emits power only when receiving power. (Effectively, this delays power by one frame.) Also I made it so circuit blocks clone properly
This commit is contained in:
parent
931f3c19c7
commit
11747f0d6e
@ -530,8 +530,8 @@ const TILE_ENCODING = {
|
|||||||
else {
|
else {
|
||||||
tile.direction = DIRECTION_ORDER[modifier & 0x03];
|
tile.direction = DIRECTION_ORDER[modifier & 0x03];
|
||||||
let type = modifier >> 2;
|
let type = modifier >> 2;
|
||||||
if (type < 6) {
|
if (type < 7) {
|
||||||
tile.gate_type = ['not', 'and', 'or', 'xor', 'latch-cw', 'nand'][type];
|
tile.gate_type = ['not', 'and', 'or', 'xor', 'latch-cw', 'nand', 'diode'][type];
|
||||||
}
|
}
|
||||||
else if (type === 16) {
|
else if (type === 16) {
|
||||||
tile.gate_type = 'latch-ccw';
|
tile.gate_type = 'latch-ccw';
|
||||||
@ -561,6 +561,9 @@ const TILE_ENCODING = {
|
|||||||
else if (tile.gate_type === 'nand') {
|
else if (tile.gate_type === 'nand') {
|
||||||
return 20 + direction_offset;
|
return 20 + direction_offset;
|
||||||
}
|
}
|
||||||
|
else if (tile.gate_type === 'diode') {
|
||||||
|
return 24 + direction_offset;
|
||||||
|
}
|
||||||
else if (tile.gate_type === 'counter') {
|
else if (tile.gate_type === 'counter') {
|
||||||
return 30 + tile.memory;
|
return 30 + tile.memory;
|
||||||
}
|
}
|
||||||
|
|||||||
@ -1611,6 +1611,7 @@ const EDITOR_PALETTE = [{
|
|||||||
'score_5x',
|
'score_5x',
|
||||||
'spikes',
|
'spikes',
|
||||||
'boulder',
|
'boulder',
|
||||||
|
'logic_gate/diode',
|
||||||
],
|
],
|
||||||
}];
|
}];
|
||||||
|
|
||||||
@ -2107,6 +2108,10 @@ const EDITOR_TILE_DESCRIPTIONS = {
|
|||||||
name: "NOT gate",
|
name: "NOT gate",
|
||||||
desc: "Emits power only when not receiving power.",
|
desc: "Emits power only when not receiving power.",
|
||||||
},
|
},
|
||||||
|
'logic_gate/diode': {
|
||||||
|
name: "Diode",
|
||||||
|
desc: "Emits power only when receiving power. (Effectively, this delays power by one frame.)",
|
||||||
|
},
|
||||||
'logic_gate/and': {
|
'logic_gate/and': {
|
||||||
name: "AND gate",
|
name: "AND gate",
|
||||||
desc: "Emits power while both inputs are receiving power.",
|
desc: "Emits power while both inputs are receiving power.",
|
||||||
@ -2252,6 +2257,7 @@ const SPECIAL_PALETTE_ENTRIES = {
|
|||||||
'railroad/curve': { name: 'railroad', tracks: 1 << 0, track_switch: null, entered_direction: 'north' },
|
'railroad/curve': { name: 'railroad', tracks: 1 << 0, track_switch: null, entered_direction: 'north' },
|
||||||
'railroad/switch': { name: 'railroad', tracks: 0, track_switch: 0, entered_direction: 'north' },
|
'railroad/switch': { name: 'railroad', tracks: 0, track_switch: 0, entered_direction: 'north' },
|
||||||
'logic_gate/not': { name: 'logic_gate', direction: 'north', gate_type: 'not' },
|
'logic_gate/not': { name: 'logic_gate', direction: 'north', gate_type: 'not' },
|
||||||
|
'logic_gate/diode': { name: 'logic_gate', direction: 'north', gate_type: 'diode' },
|
||||||
'logic_gate/and': { name: 'logic_gate', direction: 'north', gate_type: 'and' },
|
'logic_gate/and': { name: 'logic_gate', direction: 'north', gate_type: 'and' },
|
||||||
'logic_gate/or': { name: 'logic_gate', direction: 'north', gate_type: 'or' },
|
'logic_gate/or': { name: 'logic_gate', direction: 'north', gate_type: 'or' },
|
||||||
'logic_gate/xor': { name: 'logic_gate', direction: 'north', gate_type: 'xor' },
|
'logic_gate/xor': { name: 'logic_gate', direction: 'north', gate_type: 'xor' },
|
||||||
|
|||||||
@ -548,6 +548,12 @@ export const CC2_TILESET_LAYOUT = {
|
|||||||
south: [2, 25],
|
south: [2, 25],
|
||||||
west: [3, 25],
|
west: [3, 25],
|
||||||
},
|
},
|
||||||
|
diode: {
|
||||||
|
north: [0, 41],
|
||||||
|
east: [1, 41],
|
||||||
|
south: [2, 41],
|
||||||
|
west: [3, 41],
|
||||||
|
},
|
||||||
and: {
|
and: {
|
||||||
north: [4, 25],
|
north: [4, 25],
|
||||||
east: [5, 25],
|
east: [5, 25],
|
||||||
@ -1507,7 +1513,7 @@ export class Tileset {
|
|||||||
if (tile && tile.cell) {
|
if (tile && tile.cell) {
|
||||||
// What goes on top varies a bit...
|
// What goes on top varies a bit...
|
||||||
let r = this.layout['#wire-width'] / 2;
|
let r = this.layout['#wire-width'] / 2;
|
||||||
if (tile.gate_type === 'not' || tile.gate_type === 'counter') {
|
if (tile.gate_type === 'not' || tile.gate_type === 'counter' || tile.gate_type === 'diode') {
|
||||||
this._draw_fourway_tile_power(tile, 0x0f, packet);
|
this._draw_fourway_tile_power(tile, 0x0f, packet);
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
|
|||||||
@ -2250,6 +2250,7 @@ const TILE_TYPES = {
|
|||||||
// gate_type: not, and, or, xor, nand, latch-cw, latch-ccw, counter, bogus
|
// gate_type: not, and, or, xor, nand, latch-cw, latch-ccw, counter, bogus
|
||||||
_gate_types: {
|
_gate_types: {
|
||||||
not: ['out0', null, 'in0', null],
|
not: ['out0', null, 'in0', null],
|
||||||
|
diode: ['out0', null, 'in0', null],
|
||||||
and: ['out0', 'in0', null, 'in1'],
|
and: ['out0', 'in0', null, 'in1'],
|
||||||
or: ['out0', 'in0', null, 'in1'],
|
or: ['out0', 'in0', null, 'in1'],
|
||||||
xor: ['out0', 'in0', null, 'in1'],
|
xor: ['out0', 'in0', null, 'in1'],
|
||||||
@ -2304,6 +2305,9 @@ const TILE_TYPES = {
|
|||||||
if (me.gate_type === 'not') {
|
if (me.gate_type === 'not') {
|
||||||
output0 = ! input0;
|
output0 = ! input0;
|
||||||
}
|
}
|
||||||
|
else if (me.gate_type === 'diode') {
|
||||||
|
output0 = input0;
|
||||||
|
}
|
||||||
else if (me.gate_type === 'and') {
|
else if (me.gate_type === 'and') {
|
||||||
output0 = input0 && input1;
|
output0 = input0 && input1;
|
||||||
}
|
}
|
||||||
@ -2409,6 +2413,9 @@ const TILE_TYPES = {
|
|||||||
is_block: true,
|
is_block: true,
|
||||||
can_reverse_on_railroad: true,
|
can_reverse_on_railroad: true,
|
||||||
movement_speed: 4,
|
movement_speed: 4,
|
||||||
|
on_clone(me, original) {
|
||||||
|
me.wire_directions = original.wire_directions;
|
||||||
|
}
|
||||||
},
|
},
|
||||||
|
|
||||||
// Time alteration
|
// Time alteration
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user