var DURATION = 60; var WordFighter = { id: null, word: "", started: false, activeKeypress: false, level: 'E', answers: null, letters: null, score: 0, combo: 0, opponentCombo: 0, first: true, opponentLevel: null, startDate: null, toggle_howto: function() { $('#howto').slideToggle(); }, change_level: function( chosenLevel ) { WordFighter.level = chosenLevel; switch( chosenLevel ) { case 'E' : $("#valid3header").show(); $("#valid3column").show(); $("#valid7header").show(); $("#valid7column").show(); break; case 'M' : $("#valid3header").show(); $("#valid3column").show(); $("#valid7header").hide(); $("#valid7column").hide(); break; case 'H' : $("#valid3header").hide(); $("#valid3column").hide(); $("#valid7header").show(); $("#valid7column").show(); break; case 'X' : $("#valid3header").show(); $("#valid3column").show(); $("#valid7header").hide(); $("#valid7column").hide(); break; } }, notify_dual: function() { $.ajax({ url: '/wordFighter/levelChoice', data: { level: WordFighter.level }, success: function(data){ $("#waitingGame").load('/wordFighter/get_ready', function() { console.log( "Current opponent : " + WordFighter.opponentLevel ); console.log( data ); display_text('versus', '#howToPlay', 1, false); $("#fighter1portrait").addClass( WordFighter.level ); $("#fighter1portrait").css( "visibility", "visible"); addFighter( WordFighter.get_fighter( WordFighter.level) ); addScoreBoard(); WordFighter.opponentLevel = WordFighter.get_random_fighter(); setTimeout( function() { WordFighter.start_game(); }, 3000 ); WordFighter.set_opponent(); }); } }); }, get_fighter : function(level) { switch( level ) { case 'E' : return new Sakura(); case 'M' : return new Ryu(); case 'H' : return new Felicia(); case 'X' : return new Akuma(); } }, get_random_fighter : function() { var levels = new Array(); levels[ 0 ] = 'E'; levels[ 1 ] = 'M'; levels[ 2 ] = 'H'; levels[ 3 ] = 'X'; return levels[ Math.floor(Math.random() * 4) ]; }, set_opponent: function() { var fighter2Div = $("#fighter2portrait"); if( fighter2Div != "undefined" && WordFighter.opponentLevel != null ){ fighter2Div.addClass(WordFighter.opponentLevel); fighter2Div.css( "visibility", "visible"); addFighter2( WordFighter.get_fighter( WordFighter.opponentLevel ) ); } }, hit_opponent: function( hit ) { fighter2.ouch(); fighter2.health = fighter2.health - hit; }, start_game: function() { $("#waitingGame").hide(); $("#gamePanel").show(); $("#start").attr("disabled","disabled"); $("#level").attr("disabled","disabled"); fighter1.start(); fighter2.start(); display_text(game_waiting_ready); WordFighter.activeKeypress = false; WordFighter.clean(); WordFighter.first = true; WordFighter.init_score(); COUNTDOWN.init(0, DURATION); SCOREBOARD.init(); setTimeout( function() { WordFighter.new_word(); COUNTDOWN.callback = function() { $('#start').removeAttr('disabled'); $('#level').removeAttr('disabled'); WordFighter.game_over(); }; }, 3000) }, setLetter: function( index, character ) { $( "#letter" + index ).removeClass(); $( "#letter" + index ).addClass( "letter" ); $( "#letter" + index ).addClass( character ); }, keypressedHandler: function( event ) { if( WordFighter.activeKeypress ) return false; WordFighter.activeKeypress = true; if( event.which == 32 && WordFighter.level != 'X' ) { // space while( WordFighter.erase() ); WordFighter.started = false; WordFighter.new_word(); WordFighter.activeKeypress = false; return true; } if( event.which == 13 ) { // enter WordFighter.check_word(); WordFighter.activeKeypress = false; return true; } if( event.which == 8 && !$.browser.safari) { // backspace if( WordFighter.word.length > 0 ) { WordFighter.erase(); WordFighter.activeKeypress = false; } return false; } var character = String.fromCharCode(event.which); for( var index = 1; index < 8; index++ ) { if( WordFighter.process( index, character, "hide" ) ) { $( "#typed" + (WordFighter.word.length + 1) ).show(); $( "#typed" + (WordFighter.word.length + 1) ).addClass( character ); WordFighter.word += character; WordFighter.activeKeypress = false; return true; } } WordFighter.activeKeypress = false; return true; }, // Hack for Chrome prevent_backspace: function( event ) { if( event.which == 8 ) { // backspace if( WordFighter.word.length > 0 ) { WordFighter.erase(); WordFighter.activeKeypress = false; } return false; } }, clean: function() { for( var index = 1; index < 8; index++ ) { var character = WordFighter.word.charAt( index ); $( "#typed" + WordFighter.word.length ).removeClass( character ); $( "#letter" + index ).removeClass(); $( "#letter" + index ).addClass( "letter" ); } }, erase: function() { var character = WordFighter.word.charAt( WordFighter.word.length - 1); for( var index = 1; index < 8; index++ ) { if( WordFighter.process( index, character, "show" ) ) { $( "#typed" + WordFighter.word.length ).hide(); $( "#typed" + WordFighter.word.length ).removeClass( character ); WordFighter.word = WordFighter.word.substring(0, WordFighter.word.length - 1); return true; } } return false; }, process: function( index, character, visibility ) { if( $( "#letter" + index ).hasClass( character ) ) { if( ( visibility === "hide" && $( "#letter" + index ).hasClass( "hideLetter" ) ) || ( visibility === "show" && $( "#letter" + index ).hasClass( "showLetter" ) ) ) { return false; } $( "#letter" + index ).addClass( visibility + "Letter"); $( "#letter" + index ).removeClass( visibility === "show" ? "hideLetter" : "showLetter" ); return true; } return false; }, new_word: function() { if( WordFighter.started ) { return false; } WordFighter.combo = 0; $.ajax({ url: '/wordFighter/newEnigma', data: {level: WordFighter.level}, success: function(data){ console.log("Ajax : "); console.log(data); WordFighter.letters = data.letters; for( i = 1; i < WordFighter.letters.length + 1; i++ ) { WordFighter.setLetter( i, data.letters[ i - 1 ] ) } WordFighter.answers = data.words; var rest = 0; var total = 0; for( var i = 3; i < 8; i++ ) { total += $( "#valid" + i).length; rest += $( "#valid" + i).find( ":empty" ).length; } if( !WordFighter.first ) { if( rest == 0) { COUNTDOWN.add( total * 5 ); WordFighter.change_score( WordFighter.score + total * 5 ); } else { if( rest / total < 0.5 ) fighter2.kick(); else fighter2.punch(); fighter1.ouch(); WordFighter.change_score( Math.max( 0, WordFighter.score -5 * rest ) ); } } for( i = data.minLength; i < data.maxLength +1; i++ ) { $( "#valid" + i ).empty(); var obj = data.words[i]; var count = 0; if( obj != undefined ) count = obj.length; for( j = 0; j < count; j++ ) { $( "#valid" + i ).append( "
"); } } WordFighter.started = true; if( WordFighter.first ) { WordFighter.startDate = new Date(); COUNTDOWN.start(); display_text( game_start ); setTimeout( function() { hide_text(); }, 1500); WordFighter.first = false; } } }); }, check_word: function() { var lAnswers = WordFighter.answers[ WordFighter.word.length ]; var position = -1; if( lAnswers ) position = lAnswers.indexOf( WordFighter.word ); if( position == -1 ) { WordFighter.combo = 0; WordFighter.activeKeypress = true; while(WordFighter.erase()); WordFighter.activeKeypress = false; return false; } else { WordFighter.activeKeypress = true; if( $("#valid" + WordFighter.word.length + "-" + position).text().length == 0 ) { WordFighter.combo++; if( ( WordFighter.combo % 3 ) == 0 ) fighter1.kick(); else fighter1.punch(); WordFighter.hit_opponent( WordFighter.word.length ); $("#valid" + WordFighter.word.length + "-" + position).append( WordFighter.word ); WordFighter.change_score( WordFighter.score + 10 * WordFighter.word.length ); WordFighter.check_validated(); } } while(WordFighter.erase()); WordFighter.activeKeypress = false; }, check_validated: function() { var rest = 0; for( var i = 3; i < 8; i++ ) { rest += $( "#valid" + i).find( ":empty" ).length; } if( rest == 0 ) { while( WordFighter.erase() ); WordFighter.started = false; WordFighter.new_word(); WordFighter.activeKeypress = false; } }, game_over: function() { COUNTDOWN.stop(); WordFighter.show_game_over(); WordFighter.activeKeypress = true; var highscore = true; var win = WordFighter.score > 0; for( i = 3; i < 8; i++ ) { var words = WordFighter.answers[i]; if( words != undefined ) { for( j = 0; j < words.length; j++ ) { var id = "#valid" + ( words[ j ].length ) + "-" + j; $( id ).empty(); $( id ).append( words[ j ] ); } } } WordFighter.started = false; }, show_game_over: function() { $('.button').show(); /* $.ajax({ url: "/wordFighter/gameOver", data: {level: WordFighter.level}, success: function(data){ $("#modalDialog").prepend(data).modal({backdrop: false, show: true}); $(".replayButton").bind( "click", function() { if( WordFighter.mode!="dual") window.location.href = "/wordFighter/game"; else window.location.href = "/wordFighter/invite/" + opponent; } ); } }); */ }, init_score: function() { WordFighter.score = 0; SCOREBOARD.init(); }, change_score: function(score) { WordFighter.score = score; SCOREBOARD.set_score( WordFighter.score ); } }; function drawText( divHTML, message ) { var html = ""; for( var i = 0; i < message.length; i++ ) { var letter = message[i]; var x = ((97 - message.charCodeAt(i)) * 16); if( letter == " " ) html += ""; else if( letter == "!" ) html += ""; else html += ""; } divHTML.css( "width", (message.length * 16) + "px"); divHTML.css( "margin-left", "-" + (message.length * 8) + "px"); divHTML.css( "margin-top", "20px"); divHTML.css( "position", "relative"); divHTML.css( "left", "50%"); divHTML.css( "top", "50%"); divHTML.append( html ); };