added Character Setup (#511)
* added Character Setup * whoops * reverted unrelated changes * Made everything work post-rebase * Removed unused PreferencesChanged event * nope, don't need this * HumanoidProfileEditorPanel -> HumanoidProfileEditor * Set initial data for hair pickers * Fixed nullable warning * Renamed LooksComponent -> HumanoidAppearanceComponent * Renamed LooksComponentState -> HumanoidAppearanceComponentState * Final renaming maybe * Use a human-like dummy instead of a real human * Change preferences structs back to classes
This commit is contained in:
committed by
Pieter-Jan Briers
parent
d03da83fda
commit
a4e369e629
@@ -1,11 +1,9 @@
|
||||
using System;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Preferences.Appearance
|
||||
{
|
||||
public enum HumanoidVisualLayers
|
||||
{
|
||||
Hair,
|
||||
FacialHair,
|
||||
Body
|
||||
}
|
||||
}
|
||||
|
||||
@@ -7,24 +7,69 @@ namespace Content.Shared.Preferences
|
||||
[Serializable, NetSerializable]
|
||||
public class HumanoidCharacterAppearance : ICharacterAppearance
|
||||
{
|
||||
public string HairStyleName { get; set; }
|
||||
public Color HairColor { get; set; }
|
||||
public string FacialHairStyleName { get; set; }
|
||||
public Color FacialHairColor { get; set; }
|
||||
public Color EyeColor { get; set; }
|
||||
public Color SkinColor { get; set; }
|
||||
public HumanoidCharacterAppearance(string hairStyleName,
|
||||
Color hairColor,
|
||||
string facialHairStyleName,
|
||||
Color facialHairColor,
|
||||
Color eyeColor,
|
||||
Color skinColor)
|
||||
{
|
||||
HairStyleName = hairStyleName;
|
||||
HairColor = hairColor;
|
||||
FacialHairStyleName = facialHairStyleName;
|
||||
FacialHairColor = facialHairColor;
|
||||
EyeColor = eyeColor;
|
||||
SkinColor = skinColor;
|
||||
}
|
||||
|
||||
public string HairStyleName { get; }
|
||||
public Color HairColor { get; }
|
||||
public string FacialHairStyleName { get; }
|
||||
public Color FacialHairColor { get; }
|
||||
public Color EyeColor { get; }
|
||||
public Color SkinColor { get; }
|
||||
|
||||
public HumanoidCharacterAppearance WithHairStyleName(string newName)
|
||||
{
|
||||
return new HumanoidCharacterAppearance(newName, HairColor, FacialHairStyleName, FacialHairColor, EyeColor, SkinColor);
|
||||
}
|
||||
|
||||
public HumanoidCharacterAppearance WithHairColor(Color newColor)
|
||||
{
|
||||
return new HumanoidCharacterAppearance(HairStyleName, newColor, FacialHairStyleName, FacialHairColor, EyeColor, SkinColor);
|
||||
}
|
||||
|
||||
public HumanoidCharacterAppearance WithFacialHairStyleName(string newName)
|
||||
{
|
||||
return new HumanoidCharacterAppearance(HairStyleName, HairColor, newName, FacialHairColor, EyeColor, SkinColor);
|
||||
}
|
||||
|
||||
public HumanoidCharacterAppearance WithFacialHairColor(Color newColor)
|
||||
{
|
||||
return new HumanoidCharacterAppearance(HairStyleName, HairColor, FacialHairStyleName, newColor, EyeColor, SkinColor);
|
||||
}
|
||||
|
||||
public HumanoidCharacterAppearance WithEyeColor(Color newColor)
|
||||
{
|
||||
return new HumanoidCharacterAppearance(HairStyleName, HairColor, FacialHairStyleName, FacialHairColor, newColor, SkinColor);
|
||||
}
|
||||
|
||||
public HumanoidCharacterAppearance WithSkinColor(Color newColor)
|
||||
{
|
||||
return new HumanoidCharacterAppearance(HairStyleName, HairColor, FacialHairStyleName, FacialHairColor, EyeColor, newColor);
|
||||
}
|
||||
|
||||
public static HumanoidCharacterAppearance Default()
|
||||
{
|
||||
return new HumanoidCharacterAppearance
|
||||
{
|
||||
HairStyleName = "Bald",
|
||||
HairColor = Color.Black,
|
||||
FacialHairStyleName = "Shaved",
|
||||
FacialHairColor = Color.Black,
|
||||
EyeColor = Color.Black,
|
||||
SkinColor = Color.Black
|
||||
};
|
||||
(
|
||||
"Bald",
|
||||
Color.Black,
|
||||
"Shaved",
|
||||
Color.Black,
|
||||
Color.Black,
|
||||
Color.Black
|
||||
);
|
||||
}
|
||||
|
||||
public bool MemberwiseEquals(ICharacterAppearance maybeOther)
|
||||
|
||||
@@ -6,21 +6,49 @@ namespace Content.Shared.Preferences
|
||||
[Serializable, NetSerializable]
|
||||
public class HumanoidCharacterProfile : ICharacterProfile
|
||||
{
|
||||
public static HumanoidCharacterProfile Default()
|
||||
public HumanoidCharacterProfile(string name,
|
||||
int age,
|
||||
Sex sex,
|
||||
HumanoidCharacterAppearance appearance)
|
||||
{
|
||||
return new HumanoidCharacterProfile
|
||||
{
|
||||
Name = "John Doe",
|
||||
Age = 18,
|
||||
Sex = Sex.Male,
|
||||
CharacterAppearance = HumanoidCharacterAppearance.Default()
|
||||
};
|
||||
Name = name;
|
||||
Age = age;
|
||||
Sex = sex;
|
||||
Appearance = appearance;
|
||||
}
|
||||
|
||||
public string Name { get; set; }
|
||||
public int Age { get; set; }
|
||||
public Sex Sex { get; set; }
|
||||
public ICharacterAppearance CharacterAppearance { get; set; }
|
||||
public static HumanoidCharacterProfile Default()
|
||||
{
|
||||
return new HumanoidCharacterProfile("John Doe", 18, Sex.Male, HumanoidCharacterAppearance.Default());
|
||||
}
|
||||
|
||||
public string Name { get; }
|
||||
public int Age { get; }
|
||||
public Sex Sex { get; }
|
||||
public ICharacterAppearance CharacterAppearance => Appearance;
|
||||
public HumanoidCharacterAppearance Appearance { get; }
|
||||
|
||||
public HumanoidCharacterProfile WithName(string name)
|
||||
{
|
||||
return new HumanoidCharacterProfile(name, Age, Sex, Appearance);
|
||||
}
|
||||
|
||||
public HumanoidCharacterProfile WithAge(int age)
|
||||
{
|
||||
return new HumanoidCharacterProfile(Name, age, Sex, Appearance);
|
||||
}
|
||||
|
||||
public HumanoidCharacterProfile WithSex(Sex sex)
|
||||
{
|
||||
return new HumanoidCharacterProfile(Name, Age, sex, Appearance);
|
||||
}
|
||||
|
||||
public HumanoidCharacterProfile WithCharacterAppearance(HumanoidCharacterAppearance appearance)
|
||||
{
|
||||
return new HumanoidCharacterProfile(Name, Age, Sex, appearance);
|
||||
}
|
||||
|
||||
public string Summary => $"{Name}, {Age} years old {Sex.ToString().ToLower()} human.\nOccupation: to be implemented.";
|
||||
|
||||
public bool MemberwiseEquals(ICharacterProfile maybeOther)
|
||||
{
|
||||
@@ -28,9 +56,7 @@ namespace Content.Shared.Preferences
|
||||
if (Name != other.Name) return false;
|
||||
if (Age != other.Age) return false;
|
||||
if (Sex != other.Sex) return false;
|
||||
if (CharacterAppearance is null)
|
||||
return other.CharacterAppearance is null;
|
||||
return CharacterAppearance.MemberwiseEquals(other.CharacterAppearance);
|
||||
return Appearance.MemberwiseEquals(other.Appearance);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -2,6 +2,8 @@ namespace Content.Shared.Preferences
|
||||
{
|
||||
public interface ICharacterProfile
|
||||
{
|
||||
string Name { get; }
|
||||
ICharacterAppearance CharacterAppearance { get; }
|
||||
bool MemberwiseEquals(ICharacterProfile other);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1,54 +1,55 @@
|
||||
using System;
|
||||
using System.Collections.Generic;
|
||||
using System.Linq;
|
||||
using Robust.Shared.Interfaces.Serialization;
|
||||
using Robust.Shared.Serialization;
|
||||
|
||||
namespace Content.Shared.Preferences
|
||||
{
|
||||
/// <summary>
|
||||
/// Contains all player characters and the index of the currently selected character.
|
||||
/// Serialized both over the network and to disk.
|
||||
/// Contains all player characters and the index of the currently selected character.
|
||||
/// Serialized both over the network and to disk.
|
||||
/// </summary>
|
||||
[Serializable, NetSerializable]
|
||||
public class PlayerPreferences
|
||||
[Serializable]
|
||||
[NetSerializable]
|
||||
public sealed class PlayerPreferences
|
||||
{
|
||||
private List<ICharacterProfile> _characters;
|
||||
|
||||
public PlayerPreferences(IEnumerable<ICharacterProfile> characters, int selectedCharacterIndex)
|
||||
{
|
||||
_characters = characters.ToList();
|
||||
SelectedCharacterIndex = selectedCharacterIndex;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// All player characters.
|
||||
/// </summary>
|
||||
public IEnumerable<ICharacterProfile> Characters => _characters.AsEnumerable();
|
||||
|
||||
/// <summary>
|
||||
/// Index of the currently selected character.
|
||||
/// </summary>
|
||||
public int SelectedCharacterIndex { get; }
|
||||
|
||||
/// <summary>
|
||||
/// The currently selected character.
|
||||
/// </summary>
|
||||
public ICharacterProfile SelectedCharacter => Characters.ElementAtOrDefault(SelectedCharacterIndex);
|
||||
|
||||
public int FirstEmptySlot => IndexOfCharacter(null);
|
||||
|
||||
public static PlayerPreferences Default()
|
||||
{
|
||||
return new PlayerPreferences
|
||||
{
|
||||
Characters = new List<ICharacterProfile>
|
||||
return new PlayerPreferences(new List<ICharacterProfile>
|
||||
{
|
||||
HumanoidCharacterProfile.Default()
|
||||
},
|
||||
SelectedCharacterIndex = 0
|
||||
};
|
||||
0);
|
||||
}
|
||||
|
||||
private List<ICharacterProfile> _characters;
|
||||
private int _selectedCharacterIndex;
|
||||
|
||||
/// <summary>
|
||||
/// All player characters.
|
||||
/// </summary>
|
||||
public List<ICharacterProfile> Characters
|
||||
public int IndexOfCharacter(ICharacterProfile profile)
|
||||
{
|
||||
get => _characters;
|
||||
set => _characters = value;
|
||||
return _characters.FindIndex(x => x == profile);
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Index of the currently selected character.
|
||||
/// </summary>
|
||||
public int SelectedCharacterIndex
|
||||
{
|
||||
get => _selectedCharacterIndex;
|
||||
set => _selectedCharacterIndex = value;
|
||||
}
|
||||
|
||||
/// <summary>
|
||||
/// Retrieves the currently selected character.
|
||||
/// </summary>
|
||||
public ICharacterProfile SelectedCharacter => Characters.ElementAtOrDefault(SelectedCharacterIndex);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user