Adds basic lucker stats component holding score, removes unused client input fixes up lucker entity setting to properly set owner on the target entity

This commit is contained in:
gamer147
2023-08-03 21:31:47 -04:00
parent 8650c75f2b
commit 5f804f5c24
4 changed files with 78 additions and 17 deletions

View File

@@ -1,4 +1,5 @@
using LuckerGame.Components.Lucker.Cameras; using LuckerGame.Components.Lucker.Cameras;
using LuckerGame.EntityComponents.Lucker;
using LuckerGame.Events; using LuckerGame.Events;
using Sandbox; using Sandbox;
@@ -11,9 +12,22 @@ namespace LuckerGame.Entities;
public partial class Lucker : Entity public partial class Lucker : Entity
{ {
/// <summary> /// <summary>
/// The entity this Player currently controls /// The entity this player controls. This value is networked and should be accessed through <see cref="Pawn"/>.
/// </summary> /// </summary>
public Entity Pawn { get; set; } [Net] private Entity InternalPawn { get; set; }
/// <summary>
/// Accesses or sets the entity this player current controls
/// </summary>
public Entity Pawn
{
get => InternalPawn;
set
{
InternalPawn = value;
value.Owner = this;
}
}
/// <summary> /// <summary>
/// Before the round has started, this player indicated they were ready /// Before the round has started, this player indicated they were ready
@@ -24,6 +38,8 @@ public partial class Lucker : Entity
/// This Lucker's camera /// This Lucker's camera
/// </summary> /// </summary>
[BindComponent] public AbstractCamera Camera { get; } [BindComponent] public AbstractCamera Camera { get; }
[BindComponent] public LuckerStats Stats { get; }
/// <summary> /// <summary>
/// Creates and properly sets up a Player entity for a given client /// Creates and properly sets up a Player entity for a given client
@@ -37,6 +53,7 @@ public partial class Lucker : Entity
player.Owner = client as Entity; player.Owner = client as Entity;
player.Name = client.Name; player.Name = client.Name;
var camera = player.Components.Create<RTSCamera>(); var camera = player.Components.Create<RTSCamera>();
var stats = player.Components.Create<LuckerStats>();
return player; return player;
} }

View File

@@ -12,8 +12,19 @@ namespace LuckerGame.Entities;
/// </summary> /// </summary>
public partial class MinigameManager : Entity public partial class MinigameManager : Entity
{ {
/// <summary>
/// The currently loaded minigame
/// </summary>
[Net] public Minigame LoadedMinigame { get; private set; } [Net] public Minigame LoadedMinigame { get; private set; }
/// <summary>
/// A cached list of available minigames. Gets reloaded on a hotreload
/// </summary>
private List<TypeDescription> AvailableMinigames { get; set; } private List<TypeDescription> AvailableMinigames { get; set; }
/// <summary>
/// The players involved in the current minigame
/// </summary>
private List<Lucker> InvolvedPlayers { get; set; } private List<Lucker> InvolvedPlayers { get; set; }
public override void Spawn() public override void Spawn()

View File

@@ -1,15 +0,0 @@
using Sandbox;
namespace LuckerGame.EntityComponents.Lucker;
/// <summary>
/// A component for capturing and passing around a client's input for an attached Lucker
/// </summary>
public class LuckerClientInput : EntityComponent<Entities.Lucker>
{
[ClientInput]
public Vector3 InputDirection { get; set; }
[ClientInput]
public Angles ViewAngles { get; set; }
}

View File

@@ -0,0 +1,48 @@
using Sandbox;
using Sandbox.UI;
namespace LuckerGame.EntityComponents.Lucker;
/// <summary>
/// Handles the stats associated with a lucker during a lobby.
/// </summary>
public partial class LuckerStats : EntityComponent<Entities.Lucker>, ISingletonComponent
{
/// <summary>
/// The lucker's current score.
/// </summary>
[Net] private long Score { get; set; }
/// <summary>
/// Adds points to this lucker's score
/// </summary>
/// <param name="points">points to add (or remove if negative)</param>
public void AddScore( long points )
{
Score += points;
if ( points == 0 )
{
return;
}
var message = $"{Entity.Name} {(points > 0 ? "gained" : "lost")} {points} points!";
ChatBox.AddInformation( To.Everyone, message );
}
/// <summary>
/// Resets this lucker's score to zero
/// </summary>
public void ResetScore()
{
Score = 0;
}
/// <summary>
/// Gets this lucker's current score
/// </summary>
/// <returns>this lucker's current score</returns>
public long GetScore()
{
return Score;
}
}