UNPKG

newlogic

Version:

Circuit Builder Desktop Application (like mmlogic) made with Electron + React Typescript. Compatible with Windows, Mac and Linux.

77 lines (61 loc) 2.1 kB
import * as canvas from '../interfaces/canvas'; import Gates from './Gates'; import GateNode from './Node'; let img = require('../img/led.svg') let imgOn = require('../img/ledOn.svg') export default class LED extends Gates<LED> { public state: canvas.InState<LED> public static SVG: HTMLImageElement public static SVGON: HTMLImageElement public static LOAD = (ctx: CanvasRenderingContext2D): Promise<boolean> => new Promise<boolean>((resolve) => { const listen = (_: Event): void => resolve(true); LED.SVG = new Image(); LED.SVG.src = img; ctx.drawImage(LED.SVG, 0, 0, 0, 0); // Load SVGON LED.SVGON = new Image(); LED.SVGON.src = imgOn; ctx.drawImage(LED.SVG, 0, 0, 0, 0); LED.SVG.addEventListener("load", listen); }) public constructor(ctx: CanvasRenderingContext2D) { super(); this.ctx = ctx; this.svg = LED.SVG; this.nodeOffsetEnd = [{ x: 0, y: 20.5 }] } public add = (c: canvas.GateCoords, s: canvas.GateSize, id?: number, invert = false): canvas.Nodes<any> => { const c1: canvas.GateCoords = { x: c.x + this.nodeOffsetEnd[0].x, y: c.y + this.nodeOffsetEnd[0].y } this.state = { coords: { x: c.x, y: c.y }, size: s, nodes: { start: [], end: [new GateNode<LED>(this, c1, "end")] }, connected: false, input: false, gateIn: new Array(), gateOut: new Array(), id: !!id ? id : Gates.INCID(), type: "led" } this.render(); return this.state.nodes; } private setInput = (): void => { this.state.input = this.state.nodes.end[0].getVal(); if (this.state.input) { this.svg = LED.SVGON; } else { this.svg = LED.SVG; } this.render(); } public evaluate = (): void => { this.upEval(); // Set Val this.setInput(); console.log(this.state.input); } }