@ -1,4 +1,4 @@
function createEtLogique ( x , y , id ) {
function createEtLogique ( x , y , id , type ) {
var imageObj = new Image ( ) ;
var imageObj = new Image ( ) ;
imageObj . onload = function ( ) {
imageObj . onload = function ( ) {
var et = new Konva . Image ( {
var et = new Konva . Image ( {
@ -21,7 +21,7 @@ function createEtLogique(x, y, id) {
name : id ,
name : id ,
x : x ,
x : x ,
y : y ,
y : y ,
type : "et" ,
type : type ,
id1 : null ,
id1 : null ,
id2 : null ,
id2 : null ,
id3 : null ,
id3 : null ,
@ -54,7 +54,7 @@ function setLine(logiqueElement, lineId, lineName) {
} ) ;
} ) ;
}
}
function createLink ( entre , sortie ) {
function createLink ( entre , sortie ,lineId ) {
//entre est une porte logique
//entre est une porte logique
switch ( whatIsElement ( entre ) ) {
switch ( whatIsElement ( entre ) ) {
case "switch" :
case "switch" :
@ -67,18 +67,94 @@ function createLink(entre, sortie) {
let logiqueMidX = sortie . x ;
let logiqueMidX = sortie . x ;
let logiqueMidY = sortie . y + ( 50 / 3 ) ;
let logiqueMidY = sortie . y + ( 50 / 3 ) ;
createLine ( [ switchMidX , switchMidY , logiqueMidX , logiqueMidY ] , "line1" ) ;
createLine ( [ switchMidX , switchMidY , logiqueMidX , logiqueMidY ] , "line" + lineId ) ;
setLine ( sortie , "id1" , "line1" ) ;
setLine ( sortie , "id1" , "line" + lineId ) ;
entre . id3 = "line" + lineId ;
break ;
break ;
case "id2" :
case "id2" :
createLine ( [ entre . getX ( ) + entre . getWidth ( ) , entre . getY ( ) + entre . getHeight ( ) / 2 , sortie . x , sortie . y + ( 50 / 3 ) * 2 ] , "line2" ) ;
createLine ( [ entre . getX ( ) + entre . getWidth ( ) , entre . getY ( ) + entre . getHeight ( ) / 2 , sortie . x , sortie . y + ( 50 / 3 ) * 2 ] , "line" + lineId ) ;
setLine ( sortie , "id2" , "line2" ) ;
setLine ( sortie , "id2" , "line" + lineId ) ;
entre . id3 = "line" + lineId ;
break ;
break ;
}
}
}
}
break ;
case "logique" :
switch ( whatIsElement ( sortie ) ) {
case "logique" :
switch ( giveLineId ( sortie . name ) ) {
case "id1" :
let switchMidX = entre . x + 100 ;
let switchMidY = entre . y + 50 / 2 ;
let logiqueMidX = sortie . x ;
let logiqueMidY = sortie . y + ( 50 / 3 ) ;
createLine ( [ switchMidX , switchMidY , logiqueMidX , logiqueMidY ] , "line" + lineId ) ;
setLine ( sortie , "id1" , "line" + lineId ) ;
setLine ( entre , "id3" , "line" + lineId ) ;
break ;
case "id2" :
createLine ( [ entre . x + 100 , entre . y + 50 / 2 , sortie . x , sortie . y + ( 50 / 3 ) * 2 ] , "line" + lineId ) ;
setLine ( sortie , "id2" , "line" + lineId ) ;
setLine ( entre , "id3" , "line" + lineId ) ;
break ;
}
}
break ;
}
}
}
}
function changeLineColor ( idLine ) {
let line = stage . findOne ( "#" + idLine ) ;
var colorline = line . stroke ( ) == '#f6cd61' ? 'black' : '#f6cd61' ;
line . stroke ( colorline ) ;
}
function changeLineColorBlack ( idLine ) {
let line = stage . findOne ( "#" + idLine ) ;
line . stroke ( "black" ) ;
}
function changeLineColorYellow ( idLine ) {
let line = stage . findOne ( "#" + idLine ) ;
line . stroke ( "#f6cd61" ) ;
}
function checkAllSortieLogique ( ) {
logiques . forEach ( function ( element ) {
checkSortieLogique ( element . name ) ;
} ) ;
}
function checkSortieLogique ( logiqueId ) {
let logique = findLogique ( logiqueId ) ;
logiques . forEach ( function ( element , index ) {
if ( element . name === logique . name ) {
let line1State , line2State ;
let id1Color = stage . findOne ( "#" + element . id1 ) . stroke ( ) ;
let id2Color = stage . findOne ( "#" + element . id2 ) . stroke ( ) ;
if ( id1Color == "black" ) {
line1State = false ;
} else {
line1State = true ;
}
if ( id2Color == "black" ) {
line2State = false ;
} else {
line2State = true ;
}
switch ( logique . type ) {
case "et" :
if ( line1State == true && line2State == true ) {
changeLineColorYellow ( element . id3 ) ;
}
else {
changeLineColorBlack ( element . id3 ) ;
}
break ;
}
}
} ) ;
}
function createLine ( points , id ) {
function createLine ( points , id ) {
let line = new Konva . Line ( {
let line = new Konva . Line ( {
@ -92,7 +168,10 @@ function createLine(points, id) {
layer . add ( line ) ;
layer . add ( line ) ;
}
}
function createSwitch ( num , id , x , y ) {
function createSwitch ( id , x , y ) {
switchs . push ( id ) ;
var num = lineCount . length ;
lineCount . push ( 1 ) ;
var rect1 = new Konva . Rect ( {
var rect1 = new Konva . Rect ( {
x : x ,
x : x ,
y : y ,
y : y ,
@ -101,6 +180,7 @@ function createSwitch(num, id, x, y) {
stroke : 'black' ,
stroke : 'black' ,
strokeWidth : 4 ,
strokeWidth : 4 ,
id : id ,
id : id ,
id3 : null ,
} ) ;
} ) ;
layer . add ( rect1 ) ;
layer . add ( rect1 ) ;
@ -111,21 +191,24 @@ function createSwitch(num, id, x, y) {
fontSize : 30 ,
fontSize : 30 ,
fontFamily : 'Calibri' ,
fontFamily : 'Calibri' ,
fill : 'black' ,
fill : 'black' ,
id : "text" + num ,
id : "text" + id ,
} ) ;
} ) ;
layer . add ( simpleText ) ;
layer . add ( simpleText ) ;
rect1 . on ( 'click' , function ( ) {
var et = stage . findOne ( "#text" + num ) ;
var line = stage . findOne ( "#line" + num ) ;
console . log ( "#line" + num ) ;
var text = et . text ( ) == '1' ? '0' : '1' ;
var colorline = et . text ( ) == '1' ? 'black' : '#f6cd61' ;
line . stroke ( colorline ) ;
et . text ( text ) ;
layer . draw ( ) ;
} ) ;
}
function initAllSwitch ( ) {
switchs . forEach ( function ( element ) {
let switche = stage . findOne ( "#" + element ) ;
switche . on ( 'click' , function ( ) {
changeLineColor ( switche . id3 ) ;
checkSortieLogique ( "logique1" ) ;
layer . draw ( ) ;
} ) ;
} ) ;
}
}
function isElementExisting ( elementId ) {
function isElementExisting ( elementId ) {