runnable
This commit is contained in:
parent
99658a631a
commit
484e5022d1
4 changed files with 29 additions and 7 deletions
|
@ -1,4 +1,4 @@
|
||||||
import { svgNodes } from "..";
|
import { svgNodes, update } from "..";
|
||||||
import { SVGNode } from "../graphics/SVGNode";
|
import { SVGNode } from "../graphics/SVGNode";
|
||||||
import { Positionable } from "../types";
|
import { Positionable } from "../types";
|
||||||
import { Edge } from "./Edge";
|
import { Edge } from "./Edge";
|
||||||
|
@ -20,6 +20,10 @@ export class Node implements Positionable {
|
||||||
this.renderedElement = new SVGNode(this);
|
this.renderedElement = new SVGNode(this);
|
||||||
this.renderedElement.appendIt(svgNodes);
|
this.renderedElement.appendIt(svgNodes);
|
||||||
this.renderedElement.onMove((event) => this.updatePosition(event.x, event.y));
|
this.renderedElement.onMove((event) => this.updatePosition(event.x, event.y));
|
||||||
|
this.renderedElement.onClick((event) => {
|
||||||
|
if (this.marks < this.capacity) this.marks++
|
||||||
|
update();
|
||||||
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
updatePoints() {
|
updatePoints() {
|
||||||
|
|
|
@ -18,7 +18,9 @@ export class Transition implements Positionable {
|
||||||
this.renderedElement.appendIt(svgNodes);
|
this.renderedElement.appendIt(svgNodes);
|
||||||
this.renderedElement.onMove((event) => this.updatePosition(event.x, event.y));
|
this.renderedElement.onMove((event) => this.updatePosition(event.x, event.y));
|
||||||
}
|
}
|
||||||
|
#canFireC = false;
|
||||||
canFire() {
|
canFire() {
|
||||||
|
this.#canFireC = false;
|
||||||
for (const inE of this.inEdges) {
|
for (const inE of this.inEdges) {
|
||||||
if (!inE.canSuck()) {
|
if (!inE.canSuck()) {
|
||||||
this.renderedElement.setCanFire(false);
|
this.renderedElement.setCanFire(false);
|
||||||
|
@ -32,10 +34,15 @@ export class Transition implements Positionable {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
this.renderedElement.setCanFire(true);
|
this.renderedElement.setCanFire(true);
|
||||||
|
this.#canFireC = true;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
fire() {
|
fire() {
|
||||||
if (!this.canFire()) return false;
|
let canFireNow = this.canFire()
|
||||||
|
if(this.#canFireC && !canFireNow){
|
||||||
|
// TODO: koflikt.
|
||||||
|
}
|
||||||
|
if (!this.#canFireC || !canFireNow) return false;
|
||||||
for (const inE of this.inEdges) {
|
for (const inE of this.inEdges) {
|
||||||
inE.suck();
|
inE.suck();
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ export class Tragable {
|
||||||
svg.addEventListener('mouseleave', event => {
|
svg.addEventListener('mouseleave', event => {
|
||||||
selected = false;
|
selected = false;
|
||||||
});
|
});
|
||||||
svg.addEventListener('click', event => {
|
element.addEventListener('click', event => {
|
||||||
if (!selected) this.#clickCB(event);
|
if (!selected) this.#clickCB(event);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
19
js/index.ts
19
js/index.ts
|
@ -15,14 +15,17 @@ svg.appendChild(svgNodes);
|
||||||
let transitions: Transition[] = [];
|
let transitions: Transition[] = [];
|
||||||
let nodes: Node[] = [];
|
let nodes: Node[] = [];
|
||||||
|
|
||||||
function loop() {
|
async function loop() {
|
||||||
|
for (const trans of transitions) {
|
||||||
|
trans.canFire();
|
||||||
|
}
|
||||||
for (const trans of transitions) {
|
for (const trans of transitions) {
|
||||||
console.log(trans.name, trans.fire());
|
console.log(trans.name, trans.fire());
|
||||||
}
|
}
|
||||||
update();
|
update();
|
||||||
}
|
}
|
||||||
|
|
||||||
function update() {
|
export function update() {
|
||||||
for (const nod of nodes) {
|
for (const nod of nodes) {
|
||||||
nod.updatePoints();
|
nod.updatePoints();
|
||||||
}
|
}
|
||||||
|
@ -36,12 +39,20 @@ window.onresize = () => {
|
||||||
}
|
}
|
||||||
window.onresize(null as any);
|
window.onresize(null as any);
|
||||||
|
|
||||||
|
setInterval(loop, 1000);
|
||||||
|
|
||||||
let n1 = new Node("n1", 100, 100);
|
let n1 = new Node("n1", 100, 100);
|
||||||
let n2 = new Node("n2", 100, 300);
|
let n2 = new Node("n2", 100, 300);
|
||||||
|
let n3 = new Node("n3", 200, 200);
|
||||||
let t1 = new Transition("t1", 100, 200);
|
let t1 = new Transition("t1", 100, 200);
|
||||||
|
let t2 = new Transition("t2", 150, 250);
|
||||||
|
let t3 = new Transition("t3", 150, 150);
|
||||||
t1.inEdges.push(new Edge(n1, t1, true))
|
t1.inEdges.push(new Edge(n1, t1, true))
|
||||||
t1.outEdges.push(new Edge(n2, t1, false));
|
t1.outEdges.push(new Edge(n2, t1, false));
|
||||||
|
t2.inEdges.push(new Edge(n2, t2, true))
|
||||||
|
t2.outEdges.push(new Edge(n3, t2, false));
|
||||||
|
t3.inEdges.push(new Edge(n3, t3, true))
|
||||||
|
t3.outEdges.push(new Edge(n1, t3, false));
|
||||||
|
|
||||||
nodes.push(n1, n2);
|
nodes.push(n1, n2, n3);
|
||||||
transitions.push(t1);
|
transitions.push(t1, t2, t3);
|
Loading…
Reference in a new issue