Add alternative Draft

This commit is contained in:
Anibus 2020-11-29 04:56:32 +03:00
parent 460e95c824
commit 23f566af51
5 changed files with 101 additions and 9 deletions

View File

@ -41,6 +41,8 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging {
private var status: LobbyStatus = NotStarted()
private var lobbyType: LobbyType = Last3()
private val mapsLobby: Set[DeciderMap] = {
val configMaps = config.getStringList("maps").asScala
configMaps.map(e => {
@ -55,6 +57,7 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging {
self.path.name,
status.toString(),
playerTurn,
lobbyType.toString(),
mapsLobby)),
this.self)
@ -74,7 +77,9 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging {
if(!map.isBanned){
map.isBanned = true
if (playerTurn== 1) playerTurn = 2 else playerTurn = 1
if(mapsLobby.count(_.isBanned == false) == 1){
if(mapsLobby.count(_.isBanned == false) == 3 && lobbyType == Last3() ||
mapsLobby.count(_.isBanned == false) == 4 && lobbyType == Last4() ||
mapsLobby.count(_.isBanned == false) == 1 && lobbyType == LooserPick()){
status = Finish()
}
users.foreach(_ ! RefreshLobbyInfo(getLobbyInfoResponse))
@ -120,6 +125,17 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging {
}
users.foreach(_ ! RefreshLobbyInfo(getLobbyInfoResponse))
case ChangeLobbyType(lobbyTypeNew) =>
lobbyTypeNew match {
case "last3" =>
lobbyType = Last3()
case "last4" =>
lobbyType = Last4()
case "looserpick" =>
lobbyType = LooserPick()
}
users.foreach(_ ! RefreshLobbyInfo(getLobbyInfoResponse))
case KickSecondPlayer =>
if (sender() == host.actorRef) {
secondPlayer.foreach(player => player.actorRef ! LobbyFatal("You were kicked from lobby!"))
@ -177,6 +193,7 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging {
self.path.name,
status.toString(),
playerTurn,
lobbyType.toString(),
mapsLobby)
}
}
@ -201,6 +218,8 @@ case object SetNotReady
case class MessageForLobby(message: String)
case class ChangeLobbyType(lobbyType: String)
case object InfoQuery
case class UserInfo(name: String, isReady: Boolean)
@ -210,6 +229,7 @@ case class LobbyInfo(user1Info: UserInfo,
lobbyActorName: String,
status: String,
playerTurn: BigDecimal,
selectedType: String,
maps: Set[DeciderMap])
class LobbyStatus
@ -217,3 +237,9 @@ class LobbyStatus
sealed case class NotStarted() extends LobbyStatus
sealed case class Draft() extends LobbyStatus
sealed case class Finish() extends LobbyStatus
class LobbyType
sealed case class Last3() extends LobbyType
sealed case class Last4() extends LobbyType
sealed case class LooserPick() extends LobbyType

View File

@ -31,7 +31,17 @@ class UserActor(out: ActorRef,
implicit val userInfoWrites: OWrites[UserInfo] = Json.writes[UserInfo]
implicit val lobbyWrites: OWrites[LobbyInfo] = Json.writes[LobbyInfo]
implicit val lobbyWrites: Writes[LobbyInfo] = new Writes[LobbyInfo]{
override def writes(lobby: LobbyInfo) = Json.obj(
"user1Info" -> lobby.user1Info,
"user2Info" -> lobby.user2Info,
"lobbyActorName" -> lobby.lobbyActorName,
"status" -> lobby.status,
"playerTurn" -> lobby.playerTurn,
"selectedType" -> lobby.selectedType,
"maps" -> Json.toJson(lobby.maps)
)
}
implicit val messageWrites: OWrites[Message] = Json.writes[Message]
@ -40,7 +50,15 @@ class UserActor(out: ActorRef,
implicit val lobbyResponseWrites: Writes[List[LobbyInfo]] = new Writes[List[LobbyInfo]] {
override def writes(o: List[LobbyInfo]): JsValue = {
JsArray(o.map(lobby => Json.toJson(lobby)))
JsArray(o.map(lobby => Json.obj(
"user1Info" -> lobby.user1Info,
"user2Info" -> lobby.user2Info,
"lobbyActorName" -> lobby.lobbyActorName,
"status" -> lobby.status,
"playerTurn" -> lobby.playerTurn,
"selectedType" -> lobby.selectedType,
"maps" -> Json.toJson(lobby.maps)
)))
}
}
@ -135,6 +153,10 @@ class UserActor(out: ActorRef,
val message = (json \ "message").as[String]
lobbieActor.foreach(lobby => lobby ! MessageForLobby(message))
case Some("changeLobbyType") =>
val lobbyType = (json \ "lobbyType").as[String]
lobbieActor.foreach(lobby => lobby ! ChangeLobbyType(lobbyType))
case Some("kickSecondPlayer") =>
lobbieActor.foreach(lobby => lobby ! KickSecondPlayer)

Binary file not shown.

After

Width:  |  Height:  |  Size: 6.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -263,7 +263,26 @@ function renderPlayersAndStats(lobby) {
$("#inputMsg").hide();
}
switch (lobby.status){
var lobbyTypeText = "";
var last3Selected = "";
var last4Selected = "";
var looserPickSelected = "";
switch (lobby.selectedType) {
case "Last3()":
last3Selected = "selected";
lobbyTypeText = "Play on last 3 maps";
break;
case "Last4()":
last4Selected = "selected";
lobbyTypeText = "Play on last 4 maps";
break;
case "LooserPick()":
looserPickSelected = "selected";
lobbyTypeText = "Decide first, then looserpick";
break;
}
switch (lobby.status) {
case "NotStarted()":
resHtml = "<div style='float: left; padding-top: 10px;'> <div>" + lobby.user1Info.name + ": " + player1ReadyBtn +"</div><br/>"
if(lobby.user2Info.name !== ""){
@ -273,19 +292,36 @@ function renderPlayersAndStats(lobby) {
}
resHtml += "<div>" + lobby.user2Info.name + ": " + player2ReadyBtn + kickBtn + "</div>"
}else{
resHtml += "<div>waiting 2-nd player...</div></div>"
resHtml += "<div>waiting 2-nd player...</div>"
}
var disabledText = "";
if(lobby.user1Info.name !== userName){
disabledText = "disabled";
}
resHtml += "<br/><select class=\"form-control\" id = 'deciderOption' onChange='changeLobbyType()' "+disabledText+" >" +
"<option "+last3Selected+" value = 'last3'>Play on last 3 maps</option>" +
"<option "+last4Selected+" value = 'last4'>Play on last 4 maps</option>" +
"<option "+looserPickSelected+" value = 'looserpick'>Decide first, then looserpick</option>" +
"</select>"
resHtml += "</div>";
break;
case "Draft()":
console.log(lobby.turn);
var playerTurn = (lobby.playerTurn === 1) ? lobby.user1Info.name : lobby.user2Info.name
resHtml = "<center>"+lobby.user1Info.name + " vs " + lobby.user2Info.name +"<br/><b>" + playerTurn +"</b> turn</center>";
resHtml = "<center>"+lobby.user1Info.name + " vs " + lobby.user2Info.name + " - " +lobbyTypeText+ "<br/><b>" + playerTurn +"</b> turn</center>";
break;
case "Finish()":
var lastMap = _.find(lobby.maps, function (map){
var lastMaps = _.filter(lobby.maps, function (map){
return map.isBanned === false;
}).map;
resHtml = "<center><b>"+convertMapName(lastMap)+"</b></center>";
});
resHtml = "<center><b>";
_.forEach(lastMaps,function (map){
resHtml += convertMapName(map.map) + "; "
})
resHtml += "</b></center>";
}
resHtml = resHtml + "</center>"
@ -326,6 +362,14 @@ function setNotReady(){
}));
}
function changeLobbyType(){
var lobbyType = $("#deciderOption").val();
ws.send(JSON.stringify({
type: "changeLobbyType",
lobbyType: lobbyType
}));
}
function joinDecider(actorName){
ws.send(JSON.stringify({
type: "joinDecider",