diff --git a/app/actors/LobbieActor.scala b/app/actors/LobbieActor.scala
index 2838783..2ea8240 100644
--- a/app/actors/LobbieActor.scala
+++ b/app/actors/LobbieActor.scala
@@ -20,7 +20,7 @@ case class DeciderMap(map: String, var isBanned: Boolean = false)
* There is one StockActor per stock symbol. The StockActor maintains a list of users watching the stock and the stock
* values. Each StockActor updates a rolling dataset of randomly generated stock values.
*/
-class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging {
+class LobbieActor(hostUser: LobbyUser, deciderName: String) extends Actor with LazyLogging {
val config = ConfigFactory.load()
logger.info(s"Create lobby... host: ${hostUser.actorRef.path.name}")
@@ -46,7 +46,7 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging {
private var isNecrons: Boolean = false
private val mapsLobby: Set[DeciderMap] = {
- val configMaps = config.getStringList("maps").asScala
+ val configMaps = config.getStringList(s"deciders.$deciderName.maps").asScala
configMaps.map(e => {
DeciderMap(e)
}).toSet
@@ -57,6 +57,7 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging {
UserInfo(hostUser.name,firstPlayerReady),
UserInfo("", secondPlayerReady),
self.path.name,
+ deciderName,
status.toString(),
playerTurn,
lobbyType.toString(),
@@ -211,6 +212,7 @@ class LobbieActor(hostUser: LobbyUser) extends Actor with LazyLogging {
UserInfo(host.name, firstPlayerReady),
UserInfo(user2Name, secondPlayerReady),
self.path.name,
+ deciderName,
status.toString(),
playerTurn,
lobbyType.toString(),
@@ -223,7 +225,7 @@ case class BanMap(mapName: String)
case class MapsUpdate(maps: Set[String])
-case class CreateLobby(userName: String)
+case class CreateLobby(userName: String, deciderName: String)
case class JoinLobbyAsPlayer(lobbyUser: LobbyUser)
@@ -250,6 +252,7 @@ case class UserInfo(name: String, isReady: Boolean)
case class LobbyInfo(user1Info: UserInfo,
user2Info: UserInfo,
lobbyActorName: String,
+ deciderName: String,
status: String,
playerTurn: BigDecimal,
selectedType: String,
diff --git a/app/actors/LobbiesActor.scala b/app/actors/LobbiesActor.scala
index 3a2320b..7a50ef8 100644
--- a/app/actors/LobbiesActor.scala
+++ b/app/actors/LobbiesActor.scala
@@ -17,10 +17,10 @@ class LobbiesActor extends Actor with LazyLogging {
val lobbies: ListBuffer[String] = ListBuffer()
def receive: Receive = LoggingReceive {
- case CreateLobby(hostName) =>
+ case CreateLobby(hostName, deciderName) =>
val hostActorRef = sender
logger.info(s"Player ${hostActorRef.path.name} create lobby.")
- val lobbyActor = context.actorOf(Props(new LobbieActor(LobbyUser(hostName, hostActorRef))),
+ val lobbyActor = context.actorOf(Props(new LobbieActor(LobbyUser(hostName, hostActorRef), deciderName)),
s"lobbyActor-${(math.random * 100000000L).toLong}")
lobbyActor.tell(WatchLobby("watchIt"), hostActorRef)
case JoinLobbyByActorName(lobbyName, userName) =>
diff --git a/app/actors/UserActor.scala b/app/actors/UserActor.scala
index 24eca46..b2854ce 100644
--- a/app/actors/UserActor.scala
+++ b/app/actors/UserActor.scala
@@ -35,6 +35,7 @@ class UserActor(out: ActorRef,
"user1Info" -> lobby.user1Info,
"user2Info" -> lobby.user2Info,
"lobbyActorName" -> lobby.lobbyActorName,
+ "deciderName" -> lobby.deciderName,
"status" -> lobby.status,
"playerTurn" -> lobby.playerTurn,
"selectedType" -> lobby.selectedType,
@@ -54,6 +55,7 @@ class UserActor(out: ActorRef,
"user1Info" -> lobby.user1Info,
"user2Info" -> lobby.user2Info,
"lobbyActorName" -> lobby.lobbyActorName,
+ "deciderName" -> lobby.deciderName,
"status" -> lobby.status,
"playerTurn" -> lobby.playerTurn,
"selectedType" -> lobby.selectedType,
@@ -129,7 +131,8 @@ class UserActor(out: ActorRef,
logger.debug(s"Set user name: $name for actor ${this.self}")
case Some("createDecider") =>
- LobbiesActor.actor ! CreateLobby(name)
+ val deciderName = (json \ "deciderName").as[String]
+ LobbiesActor.actor ! CreateLobby(name, deciderName)
case Some("leaveDecider") =>
lobbieActor.foreach(lobby => lobby ! LeaveLobby)
diff --git a/app/assets/javascripts/index.js b/app/assets/javascripts/index.js
index ddffee6..e3e9094 100644
--- a/app/assets/javascripts/index.js
+++ b/app/assets/javascripts/index.js
@@ -37,6 +37,8 @@ window.onload = function() {
var lobbiesAsTableRows = _.reduce(this.lobbies, function (memo, lobby) {
+ if ($("#deciderName").html() !== lobby.deciderName) return memo;
+
var joinButton = (lobby.status === "NotStarted()") ? '' : "";
@@ -77,7 +79,8 @@ window.onload = function() {
$("#createDecider").click(function(event) {
event.preventDefault();
ws.send(JSON.stringify({
- type: "createDecider"
+ type: "createDecider",
+ deciderName: $("#deciderName").html()
}));
});
@@ -312,10 +315,12 @@ function renderPlayersAndStats(lobby) {
if(lobby.user1Info.name !== userName){
disabledText = "disabled";
}
+
+ //TODO: here from config
resHtml += "
";
@@ -324,8 +329,10 @@ function renderPlayersAndStats(lobby) {
}else{
disabledText = "";
}
- resHtml += "
";
+ if($("#necronPresence").html() === "true"){
+ resHtml += "
";
+ }
resHtml += "";
break;
case "Draft()":
diff --git a/app/controllers/HomeController.scala b/app/controllers/HomeController.scala
index 91a2ae2..8db0116 100644
--- a/app/controllers/HomeController.scala
+++ b/app/controllers/HomeController.scala
@@ -9,6 +9,7 @@ import akka.pattern.ask
import akka.stream._
import akka.stream.scaladsl._
import akka.util.Timeout
+import com.typesafe.config.ConfigFactory
import org.reactivestreams.Publisher
import play.api.libs.json._
import play.api.mvc._
@@ -16,6 +17,8 @@ import play.api.mvc._
import scala.concurrent.duration._
import scala.concurrent.{ExecutionContext, Future}
+case class LastMapsSelectConfig(last1: Boolean, last3: Boolean, last5: Boolean, last7: Boolean)
+
/**
* This class creates the actions and the websocket needed.
*/
@@ -25,6 +28,8 @@ class HomeController @Inject()(cc: ControllerComponents) extends AbstractControl
implicit val actorSystem: ActorSystem = ActorSystem()
implicit val ec: ExecutionContext = defaultExecutionContext
+ val config = ConfigFactory.load()
+
// Use a direct reference to SLF4J
private val logger = org.slf4j.LoggerFactory.getLogger("controllers.HomeController")
@@ -32,9 +37,13 @@ class HomeController @Inject()(cc: ControllerComponents) extends AbstractControl
val userParentActor: ActorRef = actorSystem.actorOf(Props(classOf[UserParentActor], actorSystem))
// Home page that renders template
- def index() = Action { implicit request =>
+ def index(deciderName: String) = Action { implicit request =>
logger.info(s"Received request from: ${request.remoteAddress}")
- Ok(views.html.index())
+ val deciderHumanName = config.getString(s"deciders.$deciderName.name")
+ val deciderDescription = config.getString(s"deciders.$deciderName.rules")
+ val necronPresence = config.getBoolean(s"deciders.$deciderName.necronrestrict")
+ val lastmapsSettings = LastMapsSelectConfig(true, true, true, true)
+ Ok(views.html.index(deciderName, deciderHumanName, deciderDescription, necronPresence, lastmapsSettings))
}
/**
diff --git a/app/views/index.scala.html b/app/views/index.scala.html
index 0257df4..9d3806d 100644
--- a/app/views/index.scala.html
+++ b/app/views/index.scala.html
@@ -1,6 +1,14 @@
-@()(implicit r: Request[_])
+@(deciderName: String, deciderHumanName: String, rules: String, necronPresence: Boolean, boSettings: LastMapsSelectConfig)(implicit r: Request[_])
+
+
+
+
+
+
+
+
Выбор карт в БО3 и БО5 осуществляется без лузерпиков, с тремя и пятью десайдерами соответственно. - Игроки вычеркивают по очереди карты из маппула, пока их не останется 3 (для БО3) или 5 (для БО5). На этих картах и проходят все матчи встречи. Затем игроки вычеркивают выбранные карты, пока не останется только одна, на которой и играется первый матч встречи. Тот, кто первым начал вычеркивать из всего маппула, уступает оппоненту право вычеркивания первой карты из оставшихся карт-десайдеров. Во втором и последующем матчах проигравший выбирает карту из числа выбранных 3 (5) десайдеров. - В случае, если один из игроков играет за расу некронов, из маппула исключаются карты MoM и SoE, после чего оба игрока приступают к вычеркиванию карт стандартным образом из 11-картового маппула.
+@rules