2016-02-14 15 views
1

Je suis très nouveau pour le codage, et je ne sais pas trop comment écrire ces questions. J'incorpore la fonctionnalité CS: GO Game State Integration ajoutée récemment pour changer Hue Lights en fonction de ce qui se passe dans le jeu. La partie actuelle sur laquelle je travaille est un script simple qui changera la première lumière en bleu si je fais partie de l'équipe 'CT'. Ça fonctionne bien, en plus du fait que ça ne cesse de me dire que je suis encore et encore à l'écoute de la tomodensitométrie. Y a-t-il un moyen de changer mon script pour ne le mettre à jour que si la première instruction If devient fausse?Comment puis-je exécuter le script une fois jusqu'à ce que if devienne faux? (Node.JS)

code:

setInterval(checkTeam, 250); 

function checkTeam() { 
    fs.readFile('player_team', 'utf8', function(err, teamStatus) { 
    if (err) throw err; 

    if(teamStatus === 'CT') { 
     console.log('CT Side'); 
     if (currentStatus !== 'CT') { 
     changeLight(1, noLights()); 
     currentStatus = 'CT'; 
     } 
     if (currentStatus === 'CT') { 
     changeLight(1, blueLights()); 
     currentStatus = 'CT'; 
     } 
    } 
    if (teamStatus === 'T'){ 
     console.log('T Side'); 
     if (currentStatus !== 'T Side') { 
     changeLight(3, noLights()); 
     } 
     if (currentStatus === 'T Side') { 
     changeLight(3, orangeLights()); 
     currentStatus = 'T'; 
     } 
     if (currentStatus === null) { 
     changeLight(1, noLights()); 
     } 
    } 
    }); 
} 

function changeLight(light, lightType) { 
    var jsonString = JSON.stringify(lightType); 
    http.request({ 
    host: HUE_BRIDGE_IP, 
    path: HUE_PATH + 'lights/' + light + '/state', 
    method: 'PUT', 
    headers: { 
     'Content-Type': 'application/json', 
     'Content-Length': jsonString.length 
    } 
    }, function() { 

    }).write(jsonString); 
} 

function redLights() { 
    return { 
    'on': true, 
    'sat': 254, 
    'bri': 254, 
    'hue': 0, 
    'transitiontime': 0 
    } 
} 

function blueLights() { 
    return { 
    'on': true, 
    'sat': 254, 
    'bri': 254, 
    'hue': 45000, 
    'transitiontime': 0 
    } 
} 

function explodeLights() { 
    return { 
    'on': true, 
    'sat': 254, 
    'bri': 254, 
    'hue': 10000, 
    'transitiontime': 0 
    } 
} 

function whiteLights() { 
    return { 
    'on': true, 
    'sat': 0, 
    'bri': 254, 
    'hue': 10000 
    } 
} 

function noLights() { 
    return { 
    'on': false, 
    'transitiontime': 0 
    } 
} 

function orangeLights() { 
    return { 
    'on': false, 
    'transitiontime': 0 
    } 
} 

Je devine que la seule partie que vous avez vraiment besoin est le top, mais juste au cas où vous aviez besoin de la fonction changeLight, j'inclus plus. Fondamentalement, je veux que le if(teamStatus === 'CT') { ne s'exécute qu'une seule fois jusqu'à ce qu'il change ou devienne nul. Si ce n'est pas possible, y a-t-il un compromis?

Merci à toute personne qui tente d'aider,
Appréciez-le!

Edit:
Je ne pense pas que j'ai donné assez d'informations est donc ici le code pour le serveur d'obtenir l'information de l'état du jeu:

var bodyParser = require('body-parser'); 
var express = require('express'); 
var fs = require('fs'); 
var app = express(); 

app.use(bodyParser.json()); // for parsing application/json 

app.post('/', function(req, res) { 
    fs.readFile('player_team', 'utf8', function(err, teamStatus) { 
    var player = 'player' in req.body ? req.body.player : null; 
    if (player && player.team !== teamStatus) { 
     var newTeamStatus = req.body.player.team; 
     if (!newTeamStatus) { 
     newTeamStatus = ''; 
     } 
     fs.writeFile('player_team', newTeamStatus); 
     console.log(newTeamStatus); 
    } 
    }); 
}); 

var PORT = 8080; 
var HOST = '127.0.0.1'; 
app.listen(PORT, HOST); 
console.log('Server is running on ' + HOST + ':' + PORT); 
+0

La logique dans 'checkTeam' n'est pas très claire, en particulier dans le bloc' if (teamStatus === 'T') {'. Vous semblez avoir une logique très différente si teamStatus est T comparé à teamStatus == CT - je ne sais pas exactement quel est le résultat requis pour être honnête –

+0

Je vais éditer le post avec le code du serveur qui tire l'état du jeu depuis le jeu. – pmaheras18

+0

pourquoi? cela n'explique pas la logique que vous * tentez d'atteindre. –

Répondre

0

de ce que je peux deviner la logique, vous pouvez faire:

var currentStatus = ''; 
function checkTeam() { 
    fs.readFile('player_team', 'utf8', function (err, teamStatus) { 
     if (err) throw err; 
     if (teamStatus !== currentStatus) { // only change lights if status has changed 
      if (teamStatus === 'CT') { 
       console.log('CT Side'); 
       changeLight(3, noLights()); // turn off 3? 
       changeLight(1, blueLights()); 
      } 
      else if (teamStatus === 'T') { 
       console.log('T Side'); 
       changeLight(1, noLights()); // turn off 1? 
       changeLight(3, orangeLights()); 
      } 
      else { 
       changeLight(1, noLights()); 
       changeLight(3, noLights()); // 1 and 3? 
      } 
      currentStatus = teamStatus; // update the current status 
     } 
    }); 
} 

la seule chose que je ne peux pas comprendre est ce que le 1 ou 3 dans changeLight fait, et donc ce code peut être incomplet, mais je crois qu'il fait ce que votre code original fait sans scintiller les lumières ou console.log quelle équipe vous êtes sur chaque 250ms

J'ai ajouté quelques commentaires aux lignes que je pense peut être nécessaire s'il y a deux lumières différentes l'un devient bleu ou l'autre devient orange

+0

1 et 3 sont les lumières, cela a fonctionné! Je vous remercie! – pmaheras18