diff options
| author | Leonardo Bishop <me@leonardobishop.com> | 2023-07-31 02:37:57 +0100 |
|---|---|---|
| committer | Leonardo Bishop <me@leonardobishop.com> | 2023-07-31 02:42:42 +0100 |
| commit | 6d38a73a43db7eec57cecf980eebe6e610df4de4 (patch) | |
| tree | fe4aa66a7ab1a27b4488b5bf8f7334019ba4cf29 /code/phase | |
| parent | fcca74deba166218deaf1e906acc0c206d96d27e (diff) | |
Add character names
Diffstat (limited to 'code/phase')
| -rw-r--r-- | code/phase/AssignPhase.cs | 114 | ||||
| -rw-r--r-- | code/phase/PlayPhase.cs | 38 | ||||
| -rw-r--r-- | code/phase/WaitPhase.cs | 2 |
3 files changed, 116 insertions, 38 deletions
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<string> 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<string> 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<DroppedWeapon>())
{
entity.Delete();
}
+ // cleanup -- end
var detectivesNeeded = 1;
var murderersNeeded = 1;
-
+
Random random = new();
- List<SpawnPoint> spawnpoints = Entity.All.OfType<SpawnPoint>().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<SpawnPoint>().OrderBy( _ => random.Next() ).ToList();
+ var clients = Game.Clients.ToList().OrderBy( _ => random.Next() );
+ var natoNamesRemaining = new List<string>(NatoNames.OrderBy( _ => random.Next() ));
+ var coloursRemaining = new List<string>(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<string>(NatoNames);
+ }
+ if (coloursRemaining.Count == 0)
+ {
+ coloursRemaining = new List<string>(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();
}
}
diff --git a/code/phase/PlayPhase.cs b/code/phase/PlayPhase.cs index 2a28fda..682cfe7 100644 --- a/code/phase/PlayPhase.cs +++ b/code/phase/PlayPhase.cs @@ -20,16 +20,15 @@ public class PlayPhase : BasePhase Event.Register(this);
foreach ( var client in Game.Clients )
{
- if ( client.Pawn is Player pawn )
+ if ( client.Pawn is not Player pawn || pawn.Team == Team.Spectator )
{
- if (pawn.CurrentTeam != Team.Spectator)
- {
- pawn.Respawn();
- TeamCapabilities.GiveLoadouts( pawn );
- }
+ continue;
}
+
+ pawn.Respawn();
+ TeamCapabilities.GiveLoadouts( pawn );
}
- MurdererNames = string.Join( ',', Game.Clients.Where( c => ((Player)c.Pawn).CurrentTeam == Team.Murderer ).Select(c => c.Name));
+ MurdererNames = string.Join( ',', Game.Clients.Where( c => ((Player)c.Pawn).Team == Team.Murderer ).Select(c => c.Name));
}
public override void Deactivate()
@@ -48,12 +47,14 @@ public class PlayPhase : BasePhase Log.Info( "Removing blind from " + entity.Name );
BlindedOverlay.Hide( To.Single( entity ) );
DeathOverlay.Hide( To.Single( entity ) );
- if (entity is Player pawn && pawn.IsValid() )
+ if ( entity is not Player pawn || !pawn.IsValid() )
{
- if (pawn.Controller is WalkControllerComponent controller) controller.SpeedMultiplier = 1;
- if (pawn.Inventory!= null) pawn.Inventory.AllowPickup = true;
+ return;
}
+ if (pawn.Controller is WalkControllerComponent controller) controller.SpeedMultiplier = 1;
+ if (pawn.Inventory!= null) pawn.Inventory.AllowPickup = true;
+
}
public override void Tick()
@@ -64,8 +65,8 @@ public class PlayPhase : BasePhase TriggerEndOfGame();
return;
}
- bool bystandersAlive = Game.Clients.Any(c =>((Player)c.Pawn).CurrentTeam == Team.Bystander || ((Player)c.Pawn).CurrentTeam == Team.Detective);
- bool murderersAlive = Game.Clients.Any(c =>((Player)c.Pawn).CurrentTeam == Team.Murderer);
+ var bystandersAlive = Game.Clients.Any(c =>((Player)c.Pawn).Team == Team.Bystander || ((Player)c.Pawn).Team == Team.Detective);
+ var murderersAlive = Game.Clients.Any(c =>((Player)c.Pawn).Team == Team.Murderer);
if (!bystandersAlive || !murderersAlive)
{
TriggerEndOfGame();
@@ -89,7 +90,7 @@ public class PlayPhase : BasePhase public void TriggerEndOfGame()
{
- bool bystandersWin = Game.Clients.Any(c =>((Player)c.Pawn).CurrentTeam == Team.Bystander || ((Player)c.Pawn).CurrentTeam == Team.Detective);
+ var bystandersWin = Game.Clients.Any(c =>((Player)c.Pawn).Team is Team.Bystander or Team.Detective);
ChatBox.Say( (bystandersWin ? "Bystanders" : "Murderers") +" win! The murderers were: " + MurdererNames );
base.NextPhase = new EndPhase();
base.IsFinished = true;
@@ -102,9 +103,9 @@ public class PlayPhase : BasePhase {
return;
}
- Player victimPlayer = (Player)victim;
- Team victimTeam = victimPlayer.CurrentTeam;
- victimPlayer.CurrentTeam = Team.Spectator;
+ var victimPlayer = (Player)victim;
+ var victimTeam = victimPlayer.Team;
+ victimPlayer.Team = Team.Spectator;
if (killer == null)
{
@@ -112,9 +113,8 @@ public class PlayPhase : BasePhase return;
}
-
- Player killerPlayer = (Player)killer;
- Team killerTeam = killerPlayer.CurrentTeam;
+ var killerPlayer = (Player)killer;
+ var killerTeam = killerPlayer.Team;
Log.Info( victimPlayer + " died to " + killerPlayer );
diff --git a/code/phase/WaitPhase.cs b/code/phase/WaitPhase.cs index c3d0e16..e52c91c 100644 --- a/code/phase/WaitPhase.cs +++ b/code/phase/WaitPhase.cs @@ -67,7 +67,7 @@ public class WaitPhase : BasePhase private void RespawnPlayer(Player pawn)
{
- pawn.CurrentTeam = Team.Spectator;
+ pawn.Team = Team.Spectator;
pawn.DressFromClient( pawn.Client );
pawn.Respawn();
}
|
