/// <summary> /// Constructs user data /// </summary> /// <param name="guid">User GUID</param> /// <param name="gameColor">Current user game color</param> /// <param name="name">Current username</param> /// <param name="lobbyColor">Current user lobby color</param> public UserData(Guid guid, EGameColor gameColor, string name, Color lobbyColor) { if (guid == Guid.Empty) { throw new ArgumentException("User GUID can't be empty.", nameof(guid)); } if (gameColor == EGameColor.Invalid) { throw new ArgumentException("User game color can't be invalid.", nameof(gameColor)); } if (name == null) { throw new ArgumentNullException(nameof(name)); } string new_name = name.Trim(); if ((new_name.Length < Defaults.minimalUsernameLength) || (new_name.Length > Defaults.maximalUsernameLength)) { throw new ArgumentException($"Username must be between { Defaults.minimalUsernameLength } and { Defaults.maximalUsernameLength } characters long.", nameof(name)); } GUID = guid; GameColor = gameColor; Name = new_name; LobbyColor = lobbyColor; }
/// <summary> /// Constructs an entity object /// </summary> /// <param name="guid">Entity GUID</param> /// <param name="entityType">Entity type</param> /// <param name="gameColor">Game color</param> /// <param name="isSpectating">Is spectating</param> /// <param name="position">Position</param> /// <param name="rotation">Rotation</param> /// <param name="velocity">Velocity</param> /// <param name="angularVelocity">Angular velocity</param> /// <param name="actions">Game actions</param> /// <param name="isResyncRequested">Is resynchronization requested</param> public Entity(Guid guid, string entityType, EGameColor gameColor, bool isSpectating, Vector3 position, Quaternion rotation, Vector3 velocity, Vector3 angularVelocity, IEnumerable <string> actions, bool isResyncRequested) { if (guid == Guid.Empty) { throw new ArgumentException("Entity GUID can't be empty.", nameof(guid)); } if (string.IsNullOrWhiteSpace(entityType)) { throw new ArgumentNullException(nameof(entityType)); } if (gameColor == EGameColor.Invalid) { throw new ArgumentException("Game color can't be invalid.", nameof(gameColor)); } if (actions == null) { throw new ArgumentNullException(nameof(actions)); } if (Protection.IsContained(actions, (action) => action == null)) { throw new ArgumentException($"\"{ nameof(actions) }\" contains invalid game actions.", nameof(guid)); } GUID = guid; EntityType = entityType; GameColor = gameColor; IsSpectating = isSpectating; Position = position; Rotation = rotation; Velocity = velocity; AngularVelocity = angularVelocity; this.actions.UnionWith(actions); IsResyncRequested = isResyncRequested; }
/// <summary> /// Sets a new game color internally /// </summary> /// <param name="gameColor">New game color</param> public void SetGameColorInternally(EGameColor gameColor) { if (gameColor == EGameColor.Invalid) { throw new ArgumentException("Game color can't be invalid.", nameof(gameColor)); } GameColor = gameColor; }
/// <summary> /// Sets the new game color of game entity /// </summary> /// <param name="newGameColor">New game entity game color</param> /// <param name="isValueFromClient">Is value from client</param> public void SetGameColor(EGameColor newGameColor, bool isValueFromClient) { if (newGameColor == EGameColor.Invalid) { throw new ArgumentException("Game color can't be invalid.", nameof(newGameColor)); } if (isValueFromClient) { if (IsClientGameColorSet) { SetGameColorInternally(newGameColor); } else { IsClientGameColorSet = GameColor == newGameColor; } } else { IsClientGameColorSet = false; SetGameColorInternally(newGameColor); } }
/// <summary> /// Sets the new game color of game entity /// </summary> /// <param name="newGameColor">New game entity game color</param> /// <param name="isValueFromClient">Is value from client</param> public virtual void SetGameColor(EGameColor newGameColor, bool isValueFromClient) => ServerEntity.SetGameColor(newGameColor, isValueFromClient);
/// <summary> /// Sets the new game color /// </summary> /// <param name="newGameColor">New game color</param> public virtual void SetGameColor(EGameColor newGameColor) => ServerEntity.SetGameColor(newGameColor);
/// <summary> /// Sets the new game color /// </summary> /// <param name="newGameColor">New game color</param> public virtual void SetGameColor(EGameColor newGameColor) => ServerUser.SetGameColor(newGameColor);
/// <summary> /// Constructs a client user /// </summary> /// <param name="guid">Entity GUID</param> /// <param name="gameColor">Entity game color</param> /// <param name="name">Username</param> /// <param name="lobbyColor">User lobby color</param> public ClientUser(Guid guid, EGameColor gameColor, string name, Color lobbyColor) : base(guid, Defaults.playerEntityType, gameColor, false, Vector3.Zero, Quaternion.Identity, Vector3.Zero, Vector3.Zero, Array.Empty <string>(), false) { Name = name ?? throw new ArgumentNullException(nameof(name)); LobbyColor = lobbyColor; }
/// <summary> /// Sets the new game color of game entity /// </summary> /// <param name="newGameColor">New game entity game color</param> public void SetGameColor(EGameColor newGameColor) => SetGameColor(newGameColor, false);
/// <summary> /// Constructs a server entity object /// </summary> /// <param name="guid">Entity GUID</param> /// <param name="entityType">Entity type</param> /// <param name="gameColor">Game color</param> /// <param name="isSpectating">Is spectating</param> /// <param name="position">Position</param> /// <param name="rotation">Rotation</param> /// <param name="velocity">Velocity</param> /// <param name="angularVelocity">Angular velocity</param> /// <param name="actions">Game actions</param> /// <param name="isResyncRequested">Is resynchronization requested</param> public ServerEntity(Guid guid, string entityType, EGameColor gameColor, bool isSpectating, Vector3 position, Quaternion rotation, Vector3 velocity, Vector3 angularVelocity, IEnumerable <string> actions, bool isResyncRequested) : base(guid, entityType, gameColor, isSpectating, position, rotation, velocity, angularVelocity, actions, isResyncRequested) { // ... }