summaryrefslogtreecommitdiff
path: root/views
diff options
context:
space:
mode:
authorTor Andersson <tor@ccxvii.net>2023-09-21 22:16:31 +0200
committerTor Andersson <tor@ccxvii.net>2023-10-05 15:18:36 +0200
commit12a5afcf439e4879bab5a7bf5a92b6834a619c48 (patch)
tree02697e1cb870b94c9bdbccebbd637775f8763ec3 /views
parent6c5df51ed4d6cd0adbab53df277102738fccc70d (diff)
downloadserver-12a5afcf439e4879bab5a7bf5a92b6834a619c48.tar.gz
Add match making.
Diffstat (limited to 'views')
-rw-r--r--views/about.pug20
-rw-r--r--views/admin_match.pug53
-rw-r--r--views/header.pug2
-rw-r--r--views/match.pug71
4 files changed, 146 insertions, 0 deletions
diff --git a/views/about.pug b/views/about.pug
index dd12772..85522df 100644
--- a/views/about.pug
+++ b/views/about.pug
@@ -74,6 +74,26 @@ html
If you want to play with friends, check the "private" checkbox and invite your friends
from the join page after you have created the game.
+ h2 Matchmaking
+
+ p.
+ The match maker will match players up and start games automatically
+ once there are enough people waiting for the same game.
+ Players will be matched with opponents of similar Elo ratings when possible.
+
+ p.
+ Live tickets expire after 3 hours if you don't get a match.
+ All of your other Live tickets are removed when you get matched for a Live game.
+
+ p.
+ Fast tickets take the time of day into account.
+ Queue up when you want to start playing for the best results.
+
+ p.
+ <i>Don't queue up for too many games!</i>
+ It can take a while for the matches to start,
+ so you may end up with more games than you can handle.
+
h2 Privacy statement
p When you create an account we collect the following personal information:
diff --git a/views/admin_match.pug b/views/admin_match.pug
new file mode 100644
index 0000000..11a6c54
--- /dev/null
+++ b/views/admin_match.pug
@@ -0,0 +1,53 @@
+//- vim:ts=4:sw=4:
+
+mixin show_ticket(ticket)
+ - var setup = SETUP_TABLE[ticket.setup_id]
+ tr
+ td= ticket.name
+ td= ticket.rating
+ td= setup.setup_name
+ td #{ticket.time} UTC
+
+mixin show_ticket_list(list)
+ table
+ thead
+ tr
+ th User
+ th Rating
+ th Title
+ th Age
+ tbody
+ each ticket in list
+ +show_ticket(ticket)
+
+doctype html
+html
+ head
+ include head
+ title Matches
+ style.
+ div.buttons { margin-top: 8px }
+ body
+ include header
+ article
+ h1 Waiting Room - Admin
+
+ p Time is #{new Date().toISOString()}
+
+ h2 Live Tickets
+ if live_tickets.length > 0
+ +show_ticket_list(live_tickets)
+ else
+ p No live tickets.
+
+ h2 Fast Tickets
+ if fast_tickets.length > 0
+ +show_ticket_list(fast_tickets)
+ else
+ p No fast tickets.
+
+ h2 Slow Tickets
+ if slow_tickets.length > 0
+ +show_ticket_list(slow_tickets)
+ else
+ p No slow tickets.
diff --git a/views/header.pug b/views/header.pug
index 454c35a..dfeef5c 100644
--- a/views/header.pug
+++ b/views/header.pug
@@ -6,6 +6,8 @@ header
if user
if ENABLE_FORUM
a(href="/forum") Forum
+ if ENABLE_MATCHES
+ a(href="/games/match") Match
a(href="/games/public") Public
if user.waiting > 0
a(href="/games/active") Games (#{user.waiting})
diff --git a/views/match.pug b/views/match.pug
new file mode 100644
index 0000000..504cef5
--- /dev/null
+++ b/views/match.pug
@@ -0,0 +1,71 @@
+//- vim:ts=4:sw=4:
+
+mixin show_ticket(ticket)
+ - var setup = SETUP_TABLE[ticket.setup_id]
+ label
+ input(type="checkbox" name="tickets" value=ticket.ticket_id)
+ case ticket.pace
+ when 1
+ | #{EMOJI_LIVE} #{setup.setup_name}
+ when 2
+ | #{EMOJI_FAST} #{setup.setup_name}
+ when 3
+ | #{EMOJI_SLOW} #{setup.setup_name}
+
+mixin show_setup(setup)
+ label
+ input(type="checkbox" name="setups" value=setup.setup_id)
+ | #{setup.setup_name}
+
+mixin show_setup_list(list)
+ each setup in list
+ +show_setup(setup)
+
+doctype html
+html
+ head
+ include head
+ title Matches
+ style.
+ label { display: block; margin: 2px 0; user-select: none }
+ div.group, details { margin: 6px 0 }
+ details > summary { user-select: none }
+ details > label { margin-left: 24px }
+ body
+ include header
+ article
+ h1 The Miraculous Match-making Machine
+
+ p People go in one end; games come out the other.
+
+ h2 Tickets
+ if tickets.length > 0
+ form(method="post" action="/api/match/unqueue")
+ each ticket in tickets
+ +show_ticket(ticket)
+ if tickets.length > 7
+ p
+ i Don't sign up for more games than you will be able to handle!
+ p
+ button(name="submit") &#x274c; Delete
+ else
+ p You are not queued for any matches.
+
+ h2 Register
+ if limit
+ p.error= limit
+ else
+ form(method="post" action="/api/match/queue")
+ each title in TITLE_LIST
+ if title.setups.length > 2
+ details
+ summary
+ u= title.title_name
+ +show_setup_list(title.setups)
+ else
+ div.group
+ +show_setup_list(title.setups)
+ p
+ button(name="pace" value=1) #{EMOJI_LIVE} Play Live
+ button(name="pace" value=2) #{EMOJI_FAST} Play Fast
+ button(name="pace" value=3) #{EMOJI_SLOW} Play Slow