diff --git a/app/actors/LobbieActor.scala b/app/actors/LobbieActor.scala index b0f2e1a..dd5f1f4 100644 --- a/app/actors/LobbieActor.scala +++ b/app/actors/LobbieActor.scala @@ -48,7 +48,6 @@ class LobbieActor(hostUser: LobbyUser, deciderName: String) extends Actor with L private var secondPlayerSelectedRaces: Option[SelectedRaces] = None - private val isSolo: Boolean = Try(config.getBoolean(s"deciders.$deciderName.isSolo")).getOrElse(false) private val mapsLobby: Set[DeciderMap] = { val configMaps = config.getList(s"deciders.$deciderName.maps").asScala configMaps.map(e => { @@ -66,7 +65,6 @@ class LobbieActor(hostUser: LobbyUser, deciderName: String) extends Actor with L status.toString(), playerTurn, lobbyType.toString(), - isSolo, mapsLobby)), this.self) @@ -78,16 +76,6 @@ class LobbieActor(hostUser: LobbyUser, deciderName: String) extends Actor with L // notify watchers logger.info(s"Ban map $mapName by ${sender.path.name}") - if (isSolo) { - mapsLobby.find(p => p.map == mapName).foreach(m => m.isBanned = true) - if (isFinish) { - status = Finish() - } else { - status = Draft() - } - refreshAndBanMap(mapName) - } - if (status == Draft()) { if ((playerTurn == 1 && sender == host.actorRef) || (playerTurn == 2 && secondPlayer.exists(_.actorRef == sender))) { @@ -227,7 +215,6 @@ class LobbieActor(hostUser: LobbyUser, deciderName: String) extends Actor with L status.toString(), playerTurn, lobbyType.toString(), - isSolo, mapsLobby) } @@ -274,7 +261,7 @@ case class ChangeIsNecronSelected(isSelected: Boolean) case object InfoQuery -case class SelectedRaces(firstRace: Int, secondRace: Int, thirdRace: Int, fourthRace: Int) +case class SelectedRaces(mainRaces: List[Int], additionalRaces: List[Int]) case class UserInfo(name: String, isReady: Boolean, selectedRaces: Option[SelectedRaces] = None) @@ -285,7 +272,6 @@ case class LobbyInfo(user1Info: UserInfo, status: String, playerTurn: BigDecimal, selectedType: String, - isSolo: Boolean, maps: Set[DeciderMap]) class LobbyStatus diff --git a/app/actors/UserActor.scala b/app/actors/UserActor.scala index a40b9b3..145729f 100644 --- a/app/actors/UserActor.scala +++ b/app/actors/UserActor.scala @@ -173,11 +173,10 @@ class UserActor(out: ActorRef, lobbieActor.foreach(lobby => lobby ! BanMap(map)) case Some("selectRace") => - val firstRace = (json \ "raceFirst").as[Int] - val secondRace = (json \ "raceSecond").as[Int] - val thirdRace = (json \ "raceThird").as[Int] - val fourthRace = (json \ "raceFourth").as[Int] - lobbieActor.foreach(lobby => lobby ! SelectedRaces(firstRace, secondRace, thirdRace, fourthRace)) + logger.info("RACES: " + json.toString()) + val races = (json \ "mainRaces").as[List[Int]] + val additionalRaces = (json \ "additionalRaces").as[List[Int]] + lobbieActor.foreach(lobby => lobby ! SelectedRaces(races, additionalRaces)) case Some("getLobbies") => logger.debug("Get all lobby request") diff --git a/app/assets/images/maps/6p_gear.jpg b/app/assets/images/maps/6p_gear.jpg new file mode 100644 index 0000000..5bde4e0 Binary files /dev/null and b/app/assets/images/maps/6p_gear.jpg differ diff --git a/app/assets/images/maps/6p_snowblind.jpg b/app/assets/images/maps/6p_snowblind.jpg new file mode 100644 index 0000000..5cb6e9c Binary files /dev/null and b/app/assets/images/maps/6p_snowblind.jpg differ diff --git a/app/assets/images/maps/img.png b/app/assets/images/maps/img.png new file mode 100644 index 0000000..b5d77e0 Binary files /dev/null and b/app/assets/images/maps/img.png differ diff --git a/app/assets/images/maps/img_1.png b/app/assets/images/maps/img_1.png new file mode 100644 index 0000000..b5d77e0 Binary files /dev/null and b/app/assets/images/maps/img_1.png differ diff --git a/app/assets/images/maps/img_2.png b/app/assets/images/maps/img_2.png new file mode 100644 index 0000000..b5d77e0 Binary files /dev/null and b/app/assets/images/maps/img_2.png differ diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js index 3a97e1f..205269a 100644 --- a/app/assets/javascripts/index.js +++ b/app/assets/javascripts/index.js @@ -3,724 +3,638 @@ var ws; var userName = "" var raceCount = $("#raceCount").html() -var isSolo = $("#isSolo").html() === 'true' +var existAdditionalRaces = $("#existAdditionalRaces").html() === "true" var isMuted = false; var isDraftStarted = false; +window.onload = function () { -window.onload = function() { + 'use strict'; - 'use strict'; - - function getRandomInt(max) { - return Math.floor(Math.random() * Math.floor(max)); - } - - var LobbyList = Backbone.View.extend({ - - lobbies: undefined, - - initialize: function () { - this.elCount = 0; - }, - - template: _.template('\n' + - ' \n' + - ' \n' + - ' \n' + - '
HostStatusAction
'), - - events: { - "click .title": "check" // Обработчик клика на кнопке "Проверить" - }, - - joinAsPlayer: function () { - this.elCount = "azaz" + getRandomInt(100000000); - this.render(); - }, - - render: function() { - - var lobbiesAsTableRows = _.reduce(this.lobbies, function (memo, lobby) { - - if ($("#deciderName").html() !== lobby.deciderName) return memo; - - var joinButton = (lobby.status === "NotStarted()") ? '' : ""; - var observerButton = ''; - - return memo + '\n' + - ' '+ lobby.user1Info.name.substring(0, 20) +'\n' + - ' '+ lobby.user2Info.name.substring(0, 20) +'\n' + - ' '+ lobby.status +'\n' + - ' ' + joinButton + ' ' + observerButton + - ' ' + - ''; - }, ""); - - var tableStart = '\n' + - ' \n' + - ' \n' + - ' \n' + - ' \n'; - - var tableEnd = '
Player1Player2StatusAction
'; - - var res = tableStart + lobbiesAsTableRows + tableEnd; - - $("#deciderList tbody", res).append(lobbiesAsTableRows); - console.log(res); - - this.$el.html(res); + function getRandomInt(max) { + return Math.floor(Math.random() * Math.floor(max)); } - }); - var lobbyList = new LobbyList; - $("#lobbiesList").append(lobbyList.$el); - lobbyList.render(); + var LobbyList = Backbone.View.extend({ - $("#createDecider").click(function(event) { - event.preventDefault(); - isObserver = false; - ws.send(JSON.stringify({ - type: "createDecider", - deciderName: $("#deciderName").html() - })); - }); + lobbies: undefined, - $("#submitmsg").click(function(event) { - sendMessage(); - }); - $("#usermsg").on('keyup', function (e) { - if (e.key === 'Enter' || e.keyCode === 13) { - sendMessage() - } - }); + initialize: function () { + this.elCount = 0; + }, - $("#mute").click(function(event) { - if(isMuted){ - isMuted = false; - $("#mute").html("🔊"); - }else{ - isMuted = true; - $("#mute").html("🔈"); - } - }); + template: _.template('\n' + + ' \n' + + ' \n' + + ' \n' + + '
HostStatusAction
'), - $("#exit").click(function(event) { - event.preventDefault(); - ws.send(JSON.stringify({ - type: "leaveDecider" - })); - $("#decider").hide(); - $("#lobbies").show(); - $(".navbar").show(); - }); + events: { + "click .title": "check" // Обработчик клика на кнопке "Проверить" + }, - function requestName(){ - if($.cookie('user') === undefined || $.cookie('user')=== "null"|| $.cookie('user')=== ""){ - var result = prompt("Enter nickname: ", ); - $.cookie('user', result, { expires: 1337 }); - userName = result; - requestName(); - }else{ - userName = $.cookie('user'); - } - } + render: function () { - requestName(); + var lobbiesAsTableRows = _.reduce(this.lobbies, function (memo, lobby) { + if ($("#deciderName").html() !== lobby.deciderName) return memo; - $("#playerName").html(userName); + var joinButton = (lobby.status === "NotStarted()") ? '' : ""; + var observerButton = ''; - ws = new WebSocket($("body").data("ws-url")); - ws.onmessage = function(event) { - var message; - message = JSON.parse(event.data); - switch (message.type) { - case "refreshLobby": - if(message.lobby.status === "SelectRace()" && (!isObserver)){ - isDraftStarted = false; - renderRaces(); - }else { - renderMaps(message.lobby.maps, message.lobby.status); + return memo + '\n' + + ' ' + lobby.user1Info.name.substring(0, 20) + '\n' + + ' ' + lobby.user2Info.name.substring(0, 20) + '\n' + + ' ' + lobby.status + '\n' + + ' ' + joinButton + ' ' + observerButton + + ' ' + + ''; + }, ""); + + var tableStart = '\n' + + ' \n' + + ' \n' + + ' \n' + + ' \n'; + + var tableEnd = '
Player1Player2StatusAction
'; + + var res = tableStart + lobbiesAsTableRows + tableEnd; + + $("#deciderList tbody", res).append(lobbiesAsTableRows); + console.log(res); + + this.$el.html(res); } - renderPlayersAndStats(message.lobby); - break; - case "switchToLobby": - console.log(message); - switchToLobby(message.lobby.maps, message.lobby.status); - if(!isSolo) renderPlayersAndStats(message.lobby); - break; - case "sendMessage": - console.log(message); - addMessageToChat(message.message); - break; - case "sendMapBanMessage": - console.log(message); - handleMapBanEvent(message.message); - break; - case "lobbyError": - console.log(message); - disconnectLobby(message.error); - break; - case "lobbies": - lobbyList.lobbies = message.lobbies; - lobbyList.render(); - return console.log(message); - break; - default: - } - }; - ws.onopen = function () { - ws.send(JSON.stringify({ - type: "userName", - name: $.cookie('user') - })); - ws.send(JSON.stringify({ - type: "getLobbies" - })); - } + }); - var timerId = setInterval(() => - ws.send(JSON.stringify({ - type: "getLobbies" - })), 2000); + var lobbyList = new LobbyList; + $("#lobbiesList").append(lobbyList.$el); + lobbyList.render(); + + $("#createDecider").click(function (event) { + event.preventDefault(); + isObserver = false; + ws.send(JSON.stringify({ + type: "createDecider", + deciderName: $("#deciderName").html() + })); + }); + + $("#submitmsg").click(function (event) { + sendMessage(); + }); + $("#usermsg").on('keyup', function (e) { + if (e.key === 'Enter' || e.keyCode === 13) { + sendMessage() + } + }); + + $("#mute").click(function (event) { + if (isMuted) { + isMuted = false; + $("#mute").html("🔊"); + } else { + isMuted = true; + $("#mute").html("🔈"); + } + }); + + $("#exit").click(function (event) { + event.preventDefault(); + ws.send(JSON.stringify({ + type: "leaveDecider" + })); + $("#decider").hide(); + $("#lobbies").show(); + $(".navbar").show(); + }); + + function requestName() { + if ($.cookie('user') === undefined || $.cookie('user') === "null" || $.cookie('user') === "") { + var result = prompt("Enter nickname: ",); + $.cookie('user', result, {expires: 1337}); + userName = result; + requestName(); + } else { + userName = $.cookie('user'); + } + } + + requestName(); + + + $("#playerName").html(userName); + + ws = new WebSocket($("body").data("ws-url")); + ws.onmessage = function (event) { + var message; + message = JSON.parse(event.data); + switch (message.type) { + case "refreshLobby": + if (message.lobby.status === "SelectRace()" && (!isObserver)) { + isDraftStarted = false; + renderRaces(); + } else { + renderMaps(message.lobby.maps, message.lobby.status); + } + renderPlayersAndStats(message.lobby); + break; + case "switchToLobby": + console.log(message); + switchToLobby(message.lobby.maps, message.lobby.status); + renderPlayersAndStats(message.lobby); + break; + case "sendMessage": + console.log(message); + addMessageToChat(message.message); + break; + case "sendMapBanMessage": + console.log(message); + handleMapBanEvent(message.message); + break; + case "lobbyError": + console.log(message); + disconnectLobby(message.error); + break; + case "lobbies": + lobbyList.lobbies = message.lobbies; + lobbyList.render(); + return console.log(message); + break; + default: + } + }; + + ws.onopen = function () { + ws.send(JSON.stringify({ + type: "userName", + name: $.cookie('user') + })); + ws.send(JSON.stringify({ + type: "getLobbies" + })); + } + + setInterval(() => + ws.send(JSON.stringify({ + type: "getLobbies" + })), 2000); } function changeNick() { - result = prompt("Введите ник", $.cookie('user')); - if(result == null) return; - result = result.substr(0, 20); - $.cookie('user', result, { expires: 7 }); - ws.send(JSON.stringify({ - type: "userName", - name: $.cookie('user') - })); + result = prompt("Введите ник", $.cookie('user')); + if (result == null) return; + result = result.substr(0, 20); + $.cookie('user', result, {expires: 7}); + ws.send(JSON.stringify({ + type: "userName", + name: $.cookie('user') + })); - userName = $.cookie('user'); - $("#playerName").html(userName); + userName = $.cookie('user'); + $("#playerName").html(userName); } - // -----ф-ии прихода с сервера function switchToLobby(maps, status) { - console.log(maps); - renderMaps(maps, status); - $("#lobbies").hide(); - $(".navbar").hide(); - $("#decider").show(); - $("#chatbox").html(""); + console.log(maps); + renderMaps(maps, status); + $("#lobbies").hide(); + $(".navbar").hide(); + $("#decider").show(); + $("#chatbox").html(""); } function disconnectLobby(error) { - $("#decider").hide(); - $(".navbar").show(); - $("#lobbies").show(); - ws.send(JSON.stringify({ - type: "getLobbies" - })); - alert(error); + $("#decider").hide(); + $(".navbar").show(); + $("#lobbies").show(); + ws.send(JSON.stringify({ + type: "getLobbies" + })); + alert(error); } // ---------------Выбор рас -------------- -function getRaceImageByNumber(number){ - switch (number) { - case 1: return "/assets/images/raceIcons/SM.gif"; - case 2: return "/assets/images/raceIcons/Chaos.gif"; - case 3: return "/assets/images/raceIcons/Eldar.gif"; - case 4: return "/assets/images/raceIcons/Orks.gif"; - case 5: return "/assets/images/raceIcons/IG.gif"; - case 6: return "/assets/images/raceIcons/Nec.gif"; - case 7: return "/assets/images/raceIcons/Tau.gif"; - case 8: return "/assets/images/raceIcons/Sob.gif"; - case 9: return "/assets/images/raceIcons/De.gif"; - } +function getRaceImageByNumber(number) { + switch (number) { + case 1: + return "/assets/images/raceIcons/SM.gif"; + case 2: + return "/assets/images/raceIcons/Chaos.gif"; + case 3: + return "/assets/images/raceIcons/Eldar.gif"; + case 4: + return "/assets/images/raceIcons/Orks.gif"; + case 5: + return "/assets/images/raceIcons/IG.gif"; + case 6: + return "/assets/images/raceIcons/Nec.gif"; + case 7: + return "/assets/images/raceIcons/Tau.gif"; + case 8: + return "/assets/images/raceIcons/Sob.gif"; + case 9: + return "/assets/images/raceIcons/De.gif"; + } } -function getRaceVideoByNumber(number){ - switch (number) { - case 1: return "/assets/video/races/SM.mp4"; - case 2: return "/assets/video/races/Chaos.mp4"; - case 3: return "/assets/video/races/Eldar.mp4"; - case 4: return "/assets/video/races/Orks.mp4"; - case 5: return "/assets/video/races/IG.mp4"; - case 6: return "/assets/video/races/Nec.mp4"; - case 7: return "/assets/video/races/Tau.mp4"; - case 8: return "/assets/video/races/Sob.mp4"; - case 9: return "/assets/video/races/SM.mp4"; - } +function getRaceVideoByNumber(number) { + switch (number) { + case 1: + return "/assets/video/races/SM.mp4"; + case 2: + return "/assets/video/races/Chaos.mp4"; + case 3: + return "/assets/video/races/Eldar.mp4"; + case 4: + return "/assets/video/races/Orks.mp4"; + case 5: + return "/assets/video/races/IG.mp4"; + case 6: + return "/assets/video/races/Nec.mp4"; + case 7: + return "/assets/video/races/Tau.mp4"; + case 8: + return "/assets/video/races/Sob.mp4"; + case 9: + return "/assets/video/races/SM.mp4"; + } } function renderRaces() { - var resHtml = ""; - resHtml += "

First race

"; - for(var i = 1; i <= 9; i++){ - var selected = "raceNotSelected"; - if($.cookie("race1") == i){ - selected = "raceSelected"; - selectedMainRace = i; + + function getRaceSelectHtml(raceType, raceArray) { + var resHtml = ""; + for(var raceNum = 1; raceNum <= raceCount; raceNum++){ + resHtml += "

" + raceType + " race " + raceNum + "

"; + for (var i = 1; i <= 9; i++) { + var selected = "raceNotSelected"; + if ($.cookie("race-" + raceType + "-" + raceNum) == i) { + selected = "raceSelected"; + console.log("setted: " + i); + raceArray[raceNum] = i; + } + let raceIconClass = "raceIcon-" + raceNum + "-" + raceType; + resHtml += ' '; + } + resHtml += "
"; + } + return resHtml; } - resHtml += ' '; - } - resHtml += "
"; - if(raceCount >= 2){ - resHtml += "

Second race

"; - for(var i = 1; i <= 9; i++){ - var selected = "raceNotSelected"; - if($.cookie("race2") == i){ - selected = "raceSelected"; - selectedSecondRace = i; - } - resHtml += ' '; + var resHtml = ""; + resHtml += getRaceSelectHtml("main", selectedRaces); + if(existAdditionalRaces) resHtml += getRaceSelectHtml("additional", selectedAdditionalRaces); + resHtml += "

"; + + resHtml += "
" + $("#mapList").html(resHtml); + checkRaceSelectFinish(); +} + + +var selectedRaces = []; +var selectedAdditionalRaces = []; + +function selectRace(button, race, raceNum, raceType) { + if(raceType === "main"){ + selectedRaces[raceNum] = race; + }else{ + selectedAdditionalRaces[raceNum] = race; } - resHtml += "
"; - } - if(raceCount >= 3){ - resHtml += "

Third race

"; - for(var i = 1; i <= 9; i++){ - var selected = "raceNotSelected"; - var banned = ""; - if($.cookie("race3") == i){ - selected = "raceSelected"; - banned = "bannedRace"; - selectedThirdRace = i; - } - resHtml += ' '; + $.cookie("race-" + raceType + "-" + raceNum, race, {expires: 1}); + _.each($(".raceIcon-" + raceNum + "-" + raceType), function (el) { + $(el).removeClass("raceSelected"); + $(el).addClass("raceNotSelected"); + }); + $(button).removeClass("raceNotSelected"); + $(button).addClass("raceSelected"); + checkRaceSelectFinish(); +} + +function checkRaceSelectFinish() { + if(selectedRaces.filter(x => x).length >= raceCount){ + $("#selectRace").removeAttr("disabled"); } - resHtml += "
"; - } - if(raceCount >= 4){ - resHtml += "

Fourth race

"; - for(var i = 1; i <= 9; i++){ - var selected = "raceNotSelected"; - var banned = ""; - if($.cookie("race4") == i){ - selected = "raceSelected"; - banned = "bannedRace"; - selectedFourthRace = i; - } - resHtml += ' '; - } - resHtml += "
"; - } - resHtml += "
"; - resHtml += "

"; - - resHtml += "
" - $("#mapList").html(resHtml); - checkRaceSelectFinish(); } -var selectedMainRace = 0; -var selectedSecondRace = 0; -var selectedThirdRace = 0; -var selectedFourthRace = 0; - -function selectMainRace(button, race){ - selectedMainRace = race; - $.cookie("race1", race, { expires: 1 }); - _.each($(".mainRaceIcon"), function (el){ - $(el).removeClass("raceSelected"); - $(el).addClass("raceNotSelected"); - }); - $(button).removeClass("raceNotSelected"); - $(button).addClass("raceSelected"); - checkRaceSelectFinish(); - -} - -function selectSecondRace(button, race){ - selectedSecondRace = race; - $.cookie("race2", race, { expires: 1 }); - _.each($(".additionalRaceIcon"), function (el){ - $(el).removeClass("raceSelected"); - $(el).addClass("raceNotSelected"); - }); - $(button).removeClass("raceNotSelected"); - $(button).addClass("raceSelected"); - checkRaceSelectFinish(); -} - -function selectThirdRace(button, race){ - selectedThirdRace = race; - $.cookie("race3", race, { expires: 1 }); - _.each($(".thirdRaceIcon"), function (el){ - $(el).removeClass("raceSelected"); - $(el).addClass("raceNotSelected"); - }); - $(button).removeClass("raceNotSelected"); - $(button).addClass("raceSelected"); - checkRaceSelectFinish(); -} - -function selectFourthRace(button, race){ - selectedFourthRace = race; - $.cookie("race4", race, { expires: 1 }); - _.each($(".fourthRaceIcon"), function (el){ - $(el).removeClass("raceSelected"); - $(el).addClass("raceNotSelected"); - }); - $(button).removeClass("raceNotSelected"); - $(button).addClass("raceSelected"); - checkRaceSelectFinish(); -} - -function checkRaceSelectFinish(){ - - if(selectedMainRace !== 0 && (raceCount < 2 || selectedSecondRace !== 0) && (raceCount < 3 || selectedThirdRace !== 0) && (raceCount < 4 || selectedFourthRace !== 0)){ - $("#selectRace").removeAttr("disabled") - } -} - -function sendSelectedRacesToServer(){ - ws.send(JSON.stringify({ - type: "selectRace", - raceFirst: selectedMainRace, - raceSecond: selectedSecondRace, - raceThird: selectedThirdRace, - raceFourth: selectedFourthRace - })); - $("#mapList").html("
Waiting another player...
"); +function sendSelectedRacesToServer() { + console.log(selectedRaces); + ws.send(JSON.stringify({ + type: "selectRace", + mainRaces: selectedRaces.filter(x => x), + additionalRaces: selectedAdditionalRaces.filter(x => x) + })); + $("#mapList").html("
Waiting another player...
"); } // --------------------------------------------- function renderMaps(maps, lobbyStatus) { - var resHtml = ""; + var resHtml = ""; - _.each(maps, function (map) { + _.each(maps, function (map) { - var banHtml = ""; - var banClass = ""; - if(map.isBanned){ - banHtml = "
"; - banClass = "bannedMap"; - } - if(lobbyStatus === "NotStarted()" && !isSolo){ - banClass = "bannedMap"; - } + var banHtml = ""; + var banClass = ""; + if (map.isBanned) { + banHtml = "
"; + banClass = "bannedMap"; + } - var title = "" + var title = "" - if(map.description != null){ - title = "title='"+map.description+"'"; - } + if (map.description != null) { + title = "title='" + map.description + "'"; + } - resHtml = resHtml + '
'; - }) - $("#mapList").html(resHtml); + resHtml = resHtml + '
'; + }) + $("#mapList").html(resHtml); } var isObserver = false; function renderFinish(maps, firstPlayerInfo, secondPlayerInfo) { - var resHtml = "
"; + var resHtml = "
"; - _.each(maps, function (map) { - if(!map.isBanned){ - resHtml = resHtml + '
'; - } - }) + _.each(maps, function (map) { + if (!map.isBanned) { + resHtml = resHtml + '
'; + } + }) - resHtml += "
"; + resHtml += "
"; + resHtml += getRenderRaces(firstPlayerInfo.selectedRaces, secondPlayerInfo.selectedRaces); + resHtml += "
"; - if(!isSolo){ - resHtml += "

" + firstPlayerInfo.name + "

"; - resHtml += " "; - if(raceCount >= 2){ - resHtml += " "; - } - if(raceCount >= 3){ - resHtml += " "; - } - if(raceCount >= 4){ - resHtml += " "; - } - - resHtml += "

" + secondPlayerInfo.name + "

"; - resHtml += " "; - if(raceCount >= 2){ - resHtml += " "; - } - if(raceCount >= 3){ - resHtml += " "; - } - if(raceCount >= 4){ - resHtml += " "; - } - } - - resHtml += "
" - - $("#mapList").html(resHtml); + $("#mapList").html(resHtml); } function renderPlayersAndStats(lobby) { - var resHtml = "
"; - var player1ReadyBtn = ""; - var player2ReadyBtn = ""; - var readyImg = ""; - var notReadyImg = ""; - var warningClass = (lobby.user2Info.name !== "") ? "warningButton" : ""; + var resHtml = "
"; + var player1ReadyBtn = ""; + var player2ReadyBtn = ""; + var readyImg = ""; + var notReadyImg = ""; + var warningClass = (lobby.user2Info.name !== "") ? "warningButton" : ""; - if(lobby.user1Info.name === userName){ - if(lobby.user1Info.isReady){ - player1ReadyBtn = "" - }else{ - player1ReadyBtn = "" + if (lobby.user1Info.name === userName) { + if (lobby.user1Info.isReady) { + player1ReadyBtn = "" + } else { + player1ReadyBtn = "" + } + } else { + if (lobby.user1Info.isReady) { + player1ReadyBtn = readyImg + } else { + player1ReadyBtn = notReadyImg + } } - }else{ - if(lobby.user1Info.isReady){ - player1ReadyBtn = readyImg - }else{ - player1ReadyBtn = notReadyImg + + if (lobby.user2Info.name === userName) { + if (lobby.user2Info.isReady) { + player2ReadyBtn = "" + } else { + player2ReadyBtn = "" + } + } else { + if (lobby.user2Info.isReady) { + player2ReadyBtn = readyImg + } else { + player2ReadyBtn = notReadyImg + } } - } - if(lobby.user2Info.name === userName){ - if(lobby.user2Info.isReady){ - player2ReadyBtn = "" - }else{ - player2ReadyBtn = "" + if (lobby.user1Info.name === userName || lobby.user2Info.name === userName) { + $("#inputMsg").show(); + } else { + $("#inputMsg").hide(); } - } else { - if(lobby.user2Info.isReady){ - player2ReadyBtn = readyImg - }else{ - player2ReadyBtn = notReadyImg + + var lobbyTypeText = ""; + var last1Selected = ""; + var last3Selected = ""; + var last5Selected = ""; + var last7Selected = ""; + + var isNecronsSelected = ""; + if (lobby.isNecrons) isNecronsSelected = "checked"; + + switch (lobby.selectedType) { + case "Last1()": + looserPickSelected = "selected"; + lobbyTypeText = "Play on last map"; + break; + case "Last3()": + last3Selected = "selected"; + lobbyTypeText = "Play on last 3 maps"; + break; + case "Last5()": + last5Selected = "selected"; + lobbyTypeText = "Play on last 5 maps"; + break; + case "Last7()": + last7Selected = "selected"; + lobbyTypeText = "Play on last 7 maps"; + break; } - } - if (lobby.user1Info.name === userName || lobby.user2Info.name === userName) { - $("#inputMsg").show(); - } else { - $("#inputMsg").hide(); - } + console.log(lobby.status); + switch (lobby.status) { + case "NotStarted()": + resHtml = "
" + lobby.user1Info.name + ": " + player1ReadyBtn + "

" + if (lobby.user2Info.name !== "") { + var kickBtn = "" + if (lobby.user1Info.name === userName) { + kickBtn = " - "; + } + resHtml += "
" + lobby.user2Info.name + ": " + player2ReadyBtn + kickBtn + "
" + } else { + resHtml += "
waiting 2-nd player...
" + } - var lobbyTypeText = ""; - var last1Selected = ""; - var last3Selected = ""; - var last5Selected = ""; - var last7Selected = ""; - - var isNecronsSelected = ""; - if(lobby.isNecrons) isNecronsSelected = "checked"; - - switch (lobby.selectedType) { - case "Last1()": - looserPickSelected = "selected"; - lobbyTypeText = "Play on last map"; - break; - case "Last3()": - last3Selected = "selected"; - lobbyTypeText = "Play on last 3 maps"; - break; - case "Last5()": - last5Selected = "selected"; - lobbyTypeText = "Play on last 5 maps"; - break; - case "Last7()": - last7Selected = "selected"; - lobbyTypeText = "Play on last 7 maps"; - break; - } - - console.log(lobby.status); - switch (lobby.status) { - case "NotStarted()": - resHtml = "
" + lobby.user1Info.name + ": " + player1ReadyBtn +"

" - if(lobby.user2Info.name !== ""){ - var kickBtn = "" - if(lobby.user1Info.name === userName){ - kickBtn = " - "; - } - resHtml += "
" + lobby.user2Info.name + ": " + player2ReadyBtn + kickBtn + "
" - }else{ - resHtml += "
waiting 2-nd player...
" - } - - var disabledText = ""; + var disabledText = ""; - if(lobby.user1Info.name !== userName){ - disabledText = "disabled"; - } + if (lobby.user1Info.name !== userName) { + disabledText = "disabled"; + } - //TODO: here from config - resHtml += "
"; + //TODO: here from config + resHtml += "
"; - if(lobby.user1Info.name !== userName && lobby.user2Info.name !== userName){ - disabledText = "disabled"; - }else{ - disabledText = ""; - } - /*for(var i = 1; i <= 9; i++){ - resHtml += ' '; - }*/ - resHtml += "
"; - break; - case "SelectRace()": + if (lobby.user1Info.name !== userName && lobby.user2Info.name !== userName) { + disabledText = "disabled"; + } else { + disabledText = ""; + } + resHtml += "
"; + break; + case "SelectRace()": - resHtml = "
"+lobby.user1Info.name + " vs " + lobby.user2Info.name + " - " +lobbyTypeText+ "
players select races
"; - break; - case "Draft()": - if(!isDraftStarted){ - isDraftStarted = true; - } + resHtml = "
" + lobby.user1Info.name + " vs " + lobby.user2Info.name + " - " + lobbyTypeText + "
players select races
"; + break; + case "Draft()": + if (!isDraftStarted) { + isDraftStarted = true; + } - if(!isSolo){ - var playerTurn = (lobby.playerTurn === 1) ? lobby.user1Info.name : lobby.user2Info.name - resHtml = "
"+lobby.user1Info.name + " vs " + lobby.user2Info.name + " - " +lobbyTypeText+ "
" + playerTurn +" turn
"; - resHtml += "
"; - if(raceCount > 1){ - resHtml += " "; - } - if(raceCount > 2){ - resHtml += " "; - } - if(raceCount > 3){ - resHtml += " "; - } - resHtml += " VS "; - resHtml += ""; - if(raceCount > 1){ - resHtml += " "; - } - if(raceCount > 2){ - resHtml += " "; - } - if(raceCount > 3){ - resHtml += " "; - } + var playerTurn = (lobby.playerTurn === 1) ? lobby.user1Info.name : lobby.user2Info.name + resHtml = "

"; + resHtml += getRenderRaces(lobby.user1Info, lobby.user2Info); + resHtml += "
" + playerTurn + " turn" + "
"; + break; + case "Finish()": + renderFinish(lobby.maps, lobby.user1Info, lobby.user2Info); + break; + } - } - break; - case "Finish()": - renderFinish(lobby.maps, lobby.user1Info, lobby.user2Info); - break; - } + resHtml = resHtml + "
" - resHtml = resHtml + "
" - - $("#playersStatsList").html(resHtml); + $("#playersStatsList").html(resHtml); } -function addMessageToChat(message){ - var messageHtml = "
" + message.userName + ": " + message.message + "
"; - var chatBox = $("#chatbox"); - chatBox.append(messageHtml); - chatBox.scrollTop(40000); +function getRenderRaces(userInfo1, userInfo2) { + + function getRacesBlock(playerRaces, name){ + let resHtml = "
" + "

" + name + "

"; + resHtml += "main:"; + playerRaces.mainRaces.forEach((raceId) => + resHtml += " "); + resHtml += "
addt:"; + playerRaces.additionalRaces.forEach((raceId) => + resHtml += " "); + resHtml += "
"; + return resHtml; + } + + let resHtml = ""; + resHtml += getRacesBlock(userInfo1.selectedRaces, userInfo1.name); + resHtml += "
VS
"; + resHtml += getRacesBlock(userInfo2.selectedRaces, userInfo2.name); + return resHtml; } -function handleMapBanEvent(message){ - if(!isMuted){ - var audioPick = new Audio('/assets/sound/pick.mp3.mpeg'); - audioPick.volume = 0.1; - audioPick.play(); - } - - var messageHtml = "
" + convertMapName(message.mapTechName) + " banned by " + message.user + "
"; - var chatBox = $("#chatbox"); - chatBox.append(messageHtml); - chatBox.scrollTop(40000); +function addMessageToChat(message) { + var messageHtml = "
" + message.userName + ": " + message.message + "
"; + var chatBox = $("#chatbox"); + chatBox.append(messageHtml); + chatBox.scrollTop(40000); } -function banMap(map){ - ws.send(JSON.stringify({ - type: "banMap", - map: map - })); +function handleMapBanEvent(message) { + if (!isMuted) { + var audioPick = new Audio('/assets/sound/pick.mp3.mpeg'); + audioPick.volume = 0.1; + audioPick.play(); + } + + var messageHtml = "
" + convertMapName(message.mapTechName) + " banned by " + message.user + "
"; + var chatBox = $("#chatbox"); + chatBox.append(messageHtml); + chatBox.scrollTop(40000); } -function setReady(){ - ws.send(JSON.stringify({ - type: "setReady" - })); -} - -function setNotReady(){ - ws.send(JSON.stringify({ - type: "setNotReady" - })); -} - -function changeLobbyType(){ - var lobbyType = $("#deciderOption").val(); - ws.send(JSON.stringify({ - type: "changeLobbyType", - lobbyType: lobbyType - })); -} - -function changeIsNecronSelected(){ - var isNecronSelected = $("#isNecron").is(':checked'); - ws.send(JSON.stringify({ - type: "changeIsNecronSelected", - isNecronSelected: isNecronSelected - })); -} - -function joinDecider(actorName){ - isObserver = false; - ws.send(JSON.stringify({ - type: "joinDecider", - lobbyActorName: actorName - })); -} - -function observerDecider(actorName){ - isObserver = true; - ws.send(JSON.stringify({ - type: "observerDecider", - lobbyActorName: actorName - })); -} - -function sendMessage(){ - var userInput = $("#usermsg"); - var message = userInput.val(); - userInput.val(""); - if(message !== ""){ +function banMap(map) { ws.send(JSON.stringify({ - type: "sendMessage", - message: message + type: "banMap", + map: map })); - } } -function kickSecondPlayer(){ - ws.send(JSON.stringify({ - type: "kickSecondPlayer" - })); +function setReady() { + ws.send(JSON.stringify({ + type: "setReady" + })); } -function convertMapName (techMapName) { - var mapPlayerSize = techMapName.charAt(0); - var mapName = techMapName.replace(mapPlayerSize + "p_", "").replaceAll("_", " ") + - " ("+mapPlayerSize+")"; - - - return mapName.charAt(0).toUpperCase() + mapName.slice(1); +function setNotReady() { + ws.send(JSON.stringify({ + type: "setNotReady" + })); +} + +function changeLobbyType() { + var lobbyType = $("#deciderOption").val(); + ws.send(JSON.stringify({ + type: "changeLobbyType", + lobbyType: lobbyType + })); +} + +function changeIsNecronSelected() { + var isNecronSelected = $("#isNecron").is(':checked'); + ws.send(JSON.stringify({ + type: "changeIsNecronSelected", + isNecronSelected: isNecronSelected + })); +} + +function joinDecider(actorName) { + isObserver = false; + ws.send(JSON.stringify({ + type: "joinDecider", + lobbyActorName: actorName + })); +} + +function observerDecider(actorName) { + isObserver = true; + ws.send(JSON.stringify({ + type: "observerDecider", + lobbyActorName: actorName + })); +} + +function sendMessage() { + var userInput = $("#usermsg"); + var message = userInput.val(); + userInput.val(""); + if (message !== "") { + ws.send(JSON.stringify({ + type: "sendMessage", + message: message + })); + } +} + +function kickSecondPlayer() { + ws.send(JSON.stringify({ + type: "kickSecondPlayer" + })); +} + +function convertMapName(techMapName) { + var mapPlayerSize = techMapName.charAt(0); + var mapName = techMapName.replace(mapPlayerSize + "p_", "").replaceAll("_", " ") + + " (" + mapPlayerSize + ")"; + + + return mapName.charAt(0).toUpperCase() + mapName.slice(1); } diff --git a/app/assets/sound/4playersDraft.mp3 b/app/assets/sound/4playersDraft.mp3 new file mode 100644 index 0000000..091c544 Binary files /dev/null and b/app/assets/sound/4playersDraft.mp3 differ diff --git a/app/assets/stylesheets/main.css b/app/assets/stylesheets/main.css index e8b66f7..bbb5054 100644 --- a/app/assets/stylesheets/main.css +++ b/app/assets/stylesheets/main.css @@ -37,7 +37,7 @@ } .raceIcon{ - width: 90px; + width: 60px; border-radius: 5px; margin: 3px; border: 1px solid; diff --git a/app/controllers/HomeController.scala b/app/controllers/HomeController.scala index 14ee5d0..c1896b1 100644 --- a/app/controllers/HomeController.scala +++ b/app/controllers/HomeController.scala @@ -43,11 +43,11 @@ class HomeController @Inject()(cc: ControllerComponents) extends AbstractControl logger.info(s"Received request from: ${request.remoteAddress}") val deciderHumanName = config.getString(s"deciders.$deciderName.name") val deciderDescription = config.getString(s"deciders.$deciderName.rules") - val isSolo = Try(config.getBoolean(s"deciders.$deciderName.isSolo")).getOrElse(false) + val existAdditionalRaces = Try(config.getBoolean(s"deciders.$deciderName.existAdditionalRaces")).getOrElse(false) val raceCount = Try(config.getInt(s"deciders.$deciderName.raceCount")).getOrElse(1) val lastmapsSettings = LastMapsSelectConfig(true, true, true, true) val raceSelect = RaceSelect(true, false) - Ok(views.html.index(deciderName, deciderHumanName, raceCount, deciderDescription, raceSelect, lastmapsSettings, isSolo)) + Ok(views.html.index(deciderName, deciderHumanName, raceCount, deciderDescription, raceSelect, lastmapsSettings, existAdditionalRaces)) } /** diff --git a/app/views/index.scala.html b/app/views/index.scala.html index aa4575b..b30534e 100644 --- a/app/views/index.scala.html +++ b/app/views/index.scala.html @@ -1,14 +1,13 @@ -@(deciderName: String, deciderHumanName: String, raceCount: Int, rules: String, raceSelect: RaceSelect, boSettings: LastMapsSelectConfig, isSolo: Boolean)(implicit r: Request[_]) +@(deciderName: String, deciderHumanName: String, raceCount: Int, rules: String, raceSelect: RaceSelect, boSettings: LastMapsSelectConfig, existAdditionalRaces: Boolean)(implicit r: Request[_]) + - - @@ -21,7 +20,7 @@ - +