Z Reduxa korzystam, ale dopiero go zaczynam i chyba nie będę wskakiwał na tak głęboką wodę jak mówisz, że to wygląda groźnie. Już i tak pracuję z prawie 30 plikami a robię dopiero pierwszy poziom i jest on krótki, to się rozrośnie do monstrualnych rozmiarów, zwłaszcza, że napotykam następne problemy i widze, że niektóre style też będe musiał trzymać w storze i zaraz czuję, że się pogubie.
Ten duży projekt już mi w sumie sporo dał i chciałbym go skończyć, ale jak dołożę sobie jeszcze więcej to skończyć się to może różnie.
Prześpię się z problemem, sprobouje rozwiazac inne, jak na nic nie wpadnę to albo zmodyfikuję Twój pomysł albo zerknę na bibliotekę co zaproponowałeś.
Ogólnie ten problem w czystym JS rozwiązałem i widać go tutaj jak ktoś chciałby się pobawić, zajmie mu to pewnie pol minuty:
http://crowstorm.pl/nohome/dead/dead.html
Szukasz przecinaka, przecinak aktywujesz, podswietla sie, jak klikniesz gdy jest aktywny w nieodpowiednie miejsce dezaktywuje się. Ale kod, który powoduje, że to działa to robota frankesteina(dlatego staram sie po pol roku i poznaniu Reacta to przenieść i wprowadzić sensowny kod):
// chain mechanics
var last_clicked = null;
var count=0;
window.onclick = function (e) {
last_clicked = e.target;
if(boltcutters_used == true){
count++;
}
if(boltcutters_used == true && last_clicked !== document.getElementById("chain") && count >1){
alert("Can't use it here");
boltcutters_used = false;
document.getElementById('item_boltcutters').style.color = "white";
document.getElementById('item_boltcutters').style.border = "1px solid white";
count=0;
}
}
var boltcutters_used = false;
document.getElementById('item_boltcutters').onmousedown = function(){
boltcutters_used = true;
document.getElementById('item_boltcutters').style.color = "red";
document.getElementById('item_boltcutters').style.border = "1px solid red";
}
function newPage(){
location.href = "../freedom/freedom.html";
}
var boltcutters_found = false;
document.getElementById("chain").onmousedown = function(){
if(boltcutters_used){
chainBroken.play();
setTimeout(function() {
newPage();
}, 2500);
} else if(!boltcutters_found){
alert("I need to find something to break this chain...")
} else {
alert("Boltcutters could do the trick")
}
}