From 6d38a73a43db7eec57cecf980eebe6e610df4de4 Mon Sep 17 00:00:00 2001 From: Leonardo Bishop Date: Mon, 31 Jul 2023 02:37:57 +0100 Subject: Add character names --- code/phase/AssignPhase.cs | 114 ++++++++++++++++++++++++++++++++++++++-------- 1 file changed, 96 insertions(+), 18 deletions(-) (limited to 'code/phase/AssignPhase.cs') diff --git a/code/phase/AssignPhase.cs b/code/phase/AssignPhase.cs index 0ae6bd2..04ebdb0 100644 --- a/code/phase/AssignPhase.cs +++ b/code/phase/AssignPhase.cs @@ -3,6 +3,7 @@ using Sandbox.UI; using System; using System.Collections.Generic; using System.Linq; +using System.Net.Http.Headers; namespace MurderGame; @@ -10,59 +11,134 @@ public class AssignPhase : BasePhase { public override string Title => "Assigning teams"; public int TicksElapsed; + + private List NatoNames = new() + { + "Alpha", + "Bravo", + "Charlie", + "Delta", + "Echo", + "Foxtrot", + "Golf", + "Hotel", + "India", + "Juliet", + "Kilo", + "Lima", + "Mike", + "November", + "Oscar", + "Papa", + "Quebec", + "Romeo", + "Sierra", + "Tango", + "Uniform", + "Victor", + "Whiskey", + "X-Ray", + "Yankee", + "Zulu" + }; + + private List HexColours = new() + { + "#0074D9", // blue + "#7FDBFF", // aqua + "#39CCCC", // teal + "#B10DC9", // purple + "#F012BE", // fuchsia + "#85144B", // maroon + "#FF4136", // red + "#FF851B", // orange + "#FFDC00", // yellow + "#3D9970", // olive + "#2ECC40", // lime + "#01FF70" // green + }; public override void Activate() { + // cleanup -- start foreach (var entity in Entity.All.OfType()) { entity.Delete(); } + // cleanup -- end var detectivesNeeded = 1; var murderersNeeded = 1; - + Random random = new(); - List spawnpoints = Entity.All.OfType().OrderBy( _ => random.Next() ).ToList(); - var clients = Game.Clients.ToList(); - foreach ( int i in Enumerable.Range( 0, clients.Count ).OrderBy( _ => random.Next() ) ) + + var spawnPoints = Entity.All.OfType().OrderBy( _ => random.Next() ).ToList(); + var clients = Game.Clients.ToList().OrderBy( _ => random.Next() ); + var natoNamesRemaining = new List(NatoNames.OrderBy( _ => random.Next() )); + var coloursRemaining = new List(HexColours.OrderBy( _ => random.Next() )); + + foreach ( var client in clients ) { - var client = clients[i]; if (client.Pawn != null) { ((Player) client.Pawn).Cleanup(); client.Pawn.Delete(); } + Player pawn = new(); client.Pawn = pawn; - if (spawnpoints.Count == 0) + + if (spawnPoints.Count == 0) { ChatBox.Say( "Could not spawn " + client.Name + " as there are not enough spawn points." ); - pawn.CurrentTeam = Team.Spectator; + pawn.Team = Team.Spectator; continue; } pawn.DressFromClient( client ); + + // re-use names and colours if needed + if (natoNamesRemaining.Count == 0) + { + natoNamesRemaining = new List(NatoNames); + } + if (coloursRemaining.Count == 0) + { + coloursRemaining = new List(HexColours); + } + // assign team if (murderersNeeded > 0) { - pawn.CurrentTeam = Team.Murderer; + pawn.Team = Team.Murderer; --murderersNeeded; } else if (detectivesNeeded > 0) { - pawn.CurrentTeam = Team.Detective; + pawn.Team = Team.Detective; --detectivesNeeded; } else { - pawn.CurrentTeam = Team.Bystander; + pawn.Team = Team.Bystander; } - Log.Info( "Assigning " + client.Name + " to team " + TeamOperations.GetTeamName( pawn.CurrentTeam ) ); + Log.Info( "Assigning " + client.Name + " to team " + pawn.GetTeamName() ); - var spawnpoint = spawnpoints[0]; - spawnpoints.RemoveAt( 0 ); - var tx = spawnpoint.Transform; - tx.Position = tx.Position + Vector3.Up * 10.0f; + // position pawn + var spawnPoint = spawnPoints[0]; + spawnPoints.RemoveAt( 0 ); + var tx = spawnPoint.Transform; + tx.Position += Vector3.Up * 10.0f; pawn.Transform = tx; + + // assign nato name + var natoName = natoNamesRemaining[0]; + natoNamesRemaining.RemoveAt( 0 ); + pawn.CharacterName = natoName; + + // assign nato name + var hexColour = coloursRemaining[0]; + coloursRemaining.RemoveAt( 0 ); + pawn.HexColor = hexColour; RoleOverlay.Show( To.Single( client ) ); } @@ -80,11 +156,13 @@ public class AssignPhase : BasePhase public override void Tick() { ++TicksElapsed; - if ( base.TimeLeft != -1 && TicksElapsed % Game.TickRate == 0 && --base.TimeLeft == 0 ) + if ( TimeLeft == -1 || TicksElapsed % Game.TickRate != 0 || --base.TimeLeft != 0 ) { - base.IsFinished = true; - base.NextPhase = new PlayPhase(); + return; } + + IsFinished = true; + NextPhase = new PlayPhase(); } } -- cgit v1.2.3-70-g09d2