blob: c284e10e854a332b21d4fdb6ec28a5d8137de316 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
using System;
using System.Linq;
using Sandbox;
namespace MurderGame;
public class WaitPhase : BasePhase
{
public override string Title => "Waiting for players";
public bool CountIn { get; set; }
public int TicksElapsed { get; set; }
private bool _isCountDown { get; set; }
public override void Tick()
{
if ( Game.Clients.Count >= MurderGame.MinPlayers )
{
if ( !CountIn || (_isCountDown && ++TicksElapsed % Game.TickRate == 0 && --TimeLeft == 0) )
{
NextPhase = new AssignPhase();
IsFinished = true;
return;
}
if ( CountIn && !_isCountDown )
{
_isCountDown = true;
TimeLeft = 10;
}
}
else if ( CountIn && _isCountDown )
{
_isCountDown = false;
TimeLeft = -1;
}
foreach ( var client in Game.Clients )
{
if ( client.Pawn == null )
{
var pawn = new Player();
client.Pawn = pawn;
var spawnpoints = Entity.All.OfType<SpawnPoint>();
var randomSpawnPoint = spawnpoints.OrderBy( x => Guid.NewGuid() ).FirstOrDefault();
if ( randomSpawnPoint != null )
{
var tx = randomSpawnPoint.Transform;
tx.Position = tx.Position + Vector3.Up * 50.0f;
pawn.Transform = tx;
}
pawn.Spawn();
RespawnPlayer( pawn );
}
else
{
var pawn = (Player)client.Pawn;
if ( pawn.LifeState == LifeState.Dead && pawn.TimeSinceDeath > 5 )
{
RespawnPlayer( pawn );
}
}
}
}
private void RespawnPlayer( Player pawn )
{
pawn.Team = Team.Spectator;
pawn.DressFromClient( pawn.Client );
pawn.Respawn();
}
public override void HandleClientJoin( ClientJoinedEvent e )
{
}
}
|