Add current turn highlight; fix join on challenge answer.

This commit is contained in:
yukirij 2024-08-27 00:18:04 -07:00
parent adfa367153
commit 86b5f96092
8 changed files with 56 additions and 18 deletions

View File

@ -134,10 +134,10 @@ async fn main()
cache.cache_whitespace_minimize("/.html").ok();
cache.cache_file_group("text/css", "/.css", &[
"www/css/main.css",
"www/css/util.css",
"www/css/ui.css",
"www/css/form.css",
"www/css/game.css",
"www/css/util.css",
]).ok();
cache.cache_file_group("text/javascript", "/.js", &[
"www/js/const.js",

View File

@ -298,6 +298,7 @@ pub async fn thread_system(mut app:App, bus:Bus<protocol::QRPacket>)
if valid {
let is_player = user_id.is_some() && (session.p_dawn.user == user_id || session.p_dusk.user == user_id);
let is_turn = is_player && ((session.p_dawn.user == user_id && (session.game.turn & 1) == 0) || ((session.p_dusk.user == user_id && (session.game.turn & 1) == 1)));
let dawn_handle = if let Some(uid) = session.p_dawn.user {
if let Some(user) = app.get_user_by_id(uid) {
@ -320,7 +321,8 @@ pub async fn thread_system(mut app:App, bus:Bus<protocol::QRPacket>)
turn:session.game.turn,
last_move:[0; 3],
viewers:session.connections.len() as u32,
player:is_player,
is_player,
is_turn,
});
count += 1;

View File

@ -59,7 +59,8 @@ pub struct PacketSessionListResponseRecord {
pub turn:u16,
pub last_move:[u8; 3],
pub viewers:u32,
pub player:bool,
pub is_player:bool,
pub is_turn:bool,
}
#[derive(Clone)]
@ -84,6 +85,13 @@ impl Packet for PacketSessionListResponse {
for record in &self.records {
let mut chunk = record.token.to_vec();
let mut flags = 0u32;
flags |= record.is_player as u32;
flags |= (record.is_turn as u32) << 1;
// Flags
chunk.append(&mut pack_u32(flags));
// Dawn handle
let mut bytes = record.handles[0].as_bytes().to_vec();
chunk.append(&mut pack_u16(bytes.len() as u16));
@ -104,7 +112,7 @@ impl Packet for PacketSessionListResponse {
chunk.append(&mut pack_u32(record.viewers));
// User is player
chunk.append(&mut vec![record.player as u8]);
//chunk.append(&mut vec![record.player as u8]);
result.append(&mut chunk);
}

View File

@ -49,6 +49,9 @@ main>table.list td:last-child>button{
border:0;
outline:0;
}
main>table.list td:last-child>button.highlight {
background-color:#772d43;
}
main>table.list td:last-child>button:hover{
background-color:#343434;
}
@ -129,7 +132,3 @@ input#turn-slider{
accent-color:#702e2e;
}
button#button-resign.warn {
background-color:#471414;
color:#e0e0e0;
}

View File

@ -1 +1,7 @@
span.text-system{color:#909090;}
button#button-resign.warn {
background-color:#471414;
color:#e0e0e0;
}

View File

@ -633,6 +633,8 @@ const SCENES = {
Challenge:{
load() {
if(sessionStorage.getItem("auth") === null) return false;
CONTEXT.Data = {
page:0,
records:[],
@ -708,6 +710,8 @@ const SCENES = {
ChallengeList:{
load() {
if(sessionStorage.getItem("auth") === null) return false;
CONTEXT.Data = {
page:0,
records:[],
@ -788,6 +792,7 @@ const SCENES = {
token:data.token,
mode:INTERFACE.Mode.Player,
});
MESSAGE_SESSION_VIEW(data.token, true);
} else {
SCENE.refresh();
}

View File

@ -138,9 +138,11 @@ function MESSAGE(event) {
turn: 0,
move: "",
viewers: 0,
player: false,
is_player: false,
is_turn: false,
};
// Token
if(index <= bytes.length + 8) {
for(let i = 0; i < 8; ++i) {
record.token[i] = bytes[index];
@ -148,18 +150,30 @@ function MESSAGE(event) {
}
}
// Flags
result = UNPACK.u32(bytes, index);
index = result.index;
let flags = result.data;
record.is_player = (flags & 1) != 0;
record.is_turn = ((flags >> 1) & 1) != 0;
// Dawn handle
result = UNPACK.string(bytes, index);
index = result.index;
record.dawn = result.data;
// Dusk handle
result = UNPACK.string(bytes, index);
index = result.index;
record.dusk = result.data;
// Turn number
result = UNPACK.u16(bytes, index);
index = result.index;
record.turn = result.data;
// Last move
if(index <= bytes.length + 3) {
let move = new Uint8Array(3);
for(let i = 0; i < 3; ++i) {
@ -169,12 +183,11 @@ function MESSAGE(event) {
record.move = UNPACK.move(move);
}
// Reviewer count
result = UNPACK.u32(bytes, index);
index = result.index;
record.viewers = result.data;
record.player = bytes[index++] != 0;
data.records.push(record);
}
}
@ -355,6 +368,7 @@ function MESSAGE(event) {
return;
}
console.log(data);
if(SCENE.message !== undefined) { SCENE.message(code, data) };
}
@ -405,8 +419,6 @@ function MESSAGE_CHALLENGE(handle) {
}
function MESSAGE_CHALLENGE_ANSWER(handle, answer) {
console.log(handle + " " + answer);
MESSAGE_COMPOSE([
PACK.u16(OpCode.ChallengeAnswer),
PACK.u8(+answer),

View File

@ -189,8 +189,14 @@ const UI = {
};
spectate_callback = spectate_callback.bind({token: records[r].token});
if(records[r].player) {
buttons.push(UI.button("Resume", join_callback));
if(records[r].is_player) {
let button_resume = UI.button("Resume", join_callback);
if(records[r].is_turn) {
console.log("HERE");
button_resume.setAttribute("class", "highlight");
}
buttons.push(button_resume);
buttons.push(UI.button("Review", spectate_callback));
} else {
if(sessionStorage.getItem("auth") !== null && (records[r].dawn == "" || records[r].dusk == "")) {
@ -222,7 +228,7 @@ const UI = {
return tbody;
},
session_table_join(records) {
/*session_table_join(records) {
let rows = [ ];
for(let r = 0; r < records.length; ++r) {
@ -257,7 +263,7 @@ const UI = {
);
return tbody;
},
},*/
session_table_history(records) {
let rows = [ ];