Updates the Mafia UI (#79856)

## About The Pull Request

The player currently on the stand has a yellow color behind their name.
Players who have had their roles revealed now has that stated in the
player list
Votes no longer show up to people who are on trial


![image](https://github.com/tgstation/tgstation/assets/53777086/7b3b6128-4aa0-4a83-b7f6-54c9e9cde4d9)

Minor edit: It no longer says 'ON STAND', it instead has their name in
yellow background

![image](https://github.com/tgstation/tgstation/assets/53777086/d149a881-04ab-4a75-91e1-1e5f53dd1c7f)


## Why It's Good For The Game

Mafia UI's a little better now.

## Changelog

🆑
qol: Mafia panel no longer shows vote buttons if you're on stand, shows
the roles of revealed players, and list out who is on the stand, if any.
/🆑

---------

Co-authored-by: Jeremiah <42397676+jlsnow301@users.noreply.github.com>
This commit is contained in:
John Willard
2023-11-23 10:12:33 -08:00
committed by GitHub
co-authored by Jeremiah
parent 6d7239f9c9
commit a6b42398b9
2 changed files with 29 additions and 10 deletions
+7
View File
@@ -29,6 +29,8 @@
if(turn)
data["turn"] = " - Day [turn]"
if(phase == MAFIA_PHASE_JUDGEMENT)
data["person_voted_up_ref"] = REF(on_trial)
if(phase == MAFIA_PHASE_SETUP)
data["lobbydata"] = list()
for(var/key in GLOB.mafia_signup + GLOB.mafia_bad_signup + GLOB.pda_mafia_signup)
@@ -41,8 +43,10 @@
data["timeleft"] = next_phase_timer ? timeleft(next_phase_timer) : 0
var/datum/mafia_role/user_role = get_role_player(user)
if(user_role)
data["user_notes"] = user_role.written_notes
data["player_voted_up"] = (user_role == on_trial)
var/list/ui_messages = list()
for(var/i = user_role.role_messages.len to 1 step -1)
ui_messages.Add(list(list(
@@ -56,6 +60,9 @@
player_info["name"] = role.body.real_name
player_info["ref"] = REF(role)
player_info["alive"] = role.game_status == MAFIA_ALIVE
player_info["role_revealed"] = FALSE
if(role.role_flags & ROLE_REVEALED)
player_info["role_revealed"] = role.name
player_info["possible_actions"] = list()
if(user_role) //not observer
+22 -10
View File
@@ -16,6 +16,7 @@ type RoleInfo = {
type PlayerInfo = {
name: string;
role_revealed: string;
is_you: BooleanLike;
ref: string;
alive: string;
@@ -49,11 +50,13 @@ type MafiaData = {
is_observer: boolean;
all_roles: string[];
admin_controls: boolean;
person_voted_up_ref: string;
player_voted_up: BooleanLike;
};
export const MafiaPanelData = (props, context) => {
const { act, data } = useBackend<MafiaData>(context);
const { phase, roleinfo, admin_controls, messages } = data;
const { phase, roleinfo, admin_controls, messages, player_voted_up } = data;
const [mafia_tab, setMafiaMode] = useLocalState(
context,
'mafia_tab',
@@ -90,7 +93,7 @@ export const MafiaPanelData = (props, context) => {
<Stack.Item>
<MafiaRole />
</Stack.Item>
{phase === 'Judgment' && (
{phase === 'Judgment' && !player_voted_up && (
<Stack.Item>
<MafiaJudgement />
</Stack.Item>
@@ -401,17 +404,20 @@ const MafiaJudgement = (props, context) => {
const { act, data } = useBackend(context);
return (
<Section title="Judgement">
<Flex justify="space-around">
<Flex>
<Button
icon="smile-beam"
content="INNOCENT!"
content="Innocent"
color="good"
onClick={() => act('vote_innocent')}
/>
<Box>It is now time to vote, vote the accused innocent or guilty!</Box>
<Button icon="angry" color="bad" onClick={() => act('vote_guilty')}>
GUILTY!
</Button>
<Button
icon="angry"
content="Guilty"
color="bad"
onClick={() => act('vote_guilty')}
/>
</Flex>
<Flex justify="center">
<Button icon="meh" color="white" onClick={() => act('vote_abstain')}>
@@ -424,16 +430,22 @@ const MafiaJudgement = (props, context) => {
const MafiaPlayers = (props, context) => {
const { act, data } = useBackend<MafiaData>(context);
const { players } = data;
const { players = [], person_voted_up_ref } = data;
return (
<Section fill scrollable title="Players">
<Flex direction="column" fill justify="space-around">
{players?.map((player) => (
<Flex.Item className="Section__title candystripe" key={player.ref}>
<Stack align="center">
<Stack.Item grow color={!player.alive && 'red'}>
<Stack.Item
grow
color={!player.alive && 'red'}
backgroundColor={
player.ref === person_voted_up_ref ? 'yellow' : null
}>
{player.name}
{player.is_you && ' (YOU)'} {!player.alive && '(DEAD)'}
{(!!player.is_you && ' (YOU)') ||
(!!player.role_revealed && ' - ' + player.role_revealed)}
</Stack.Item>
<Stack.Item>
{player.votes !== undefined &&