CharacterAppearance.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  1. using System;
  2. using System.Linq;
  3. using Assets.HeroEditor4D.Common.Scripts.Common;
  4. using Assets.HeroEditor4D.Common.Scripts.Data;
  5. using UnityEngine;
  6. namespace Assets.HeroEditor4D.Common.Scripts.CharacterScripts
  7. {
  8. [Serializable]
  9. public class CharacterAppearance
  10. {
  11. public string Hair = "Common.Basic.Hair.BuzzCut";
  12. public string Beard = null;
  13. public string Ears = "Common.Basic.Ears.Human";
  14. public string Eyebrows = "Common.Basic.Eyebrows.Default";
  15. public string Eyes = "Common.Basic.Eyes.Boy";
  16. public string Mouth = "Common.Basic.Mouth.Default";
  17. public string Body = "Common.Basic.Body.HumanPants";
  18. public string Underwear = "Common.Underwear.Armor.MaleUnderwear";
  19. public Color32 HairColor = new Color32(150, 50, 0, 255);
  20. public Color32 BeardColor = new Color32(150, 50, 0, 255);
  21. public Color32 EyesColor = new Color32(0, 200, 255, 255);
  22. public Color32 BodyColor = new Color32(255, 200, 120, 255);
  23. public Color32 UnderwearColor = new Color32(120, 100, 80, 255);
  24. public bool ShowHelmet = true;
  25. public int Type;
  26. public void Setup(Character4D character)
  27. {
  28. character.Parts.ForEach(i => Setup(i));
  29. }
  30. public void Setup(Character character, bool initialize = true)
  31. {
  32. var hair = Hair.IsEmpty() ? null : character.SpriteCollection.Hair.Single(i => i.Id == Hair);
  33. character.Hair = hair == null ? null : character.HairRenderer.GetComponent<SpriteMapping>().FindSprite(hair.Sprites);
  34. character.HairRenderer.color = hair != null && hair.Tags.Contains("NoPaint") ? (Color32) Color.white : HairColor;
  35. if (character.BeardRenderer)
  36. {
  37. var beard = Beard.IsEmpty() ? null : character.SpriteCollection.Beard.Single(i => i.Id == Beard);
  38. character.Beard = beard == null ? null : character.BeardRenderer.GetComponent<SpriteMapping>().FindSprite(beard.Sprites);
  39. character.BeardRenderer.color = BeardColor;
  40. }
  41. character.Ears = Ears.IsEmpty() ? null : character.SpriteCollection.Ears.FindSprites(Ears);
  42. character.EarsRenderers.ForEach(i => i.color = BodyColor);
  43. if (character.Expressions.Count > 0)
  44. {
  45. character.Expressions[0] = new Expression { Name = "Default" };
  46. if (character.name != "Back")
  47. {
  48. character.Expressions[0].Eyebrows = Eyebrows.IsEmpty() ? null : character.EyebrowsRenderer.GetComponent<SpriteMapping>().FindSprite(character.SpriteCollection.Eyebrows.FindSprites(Eyebrows));
  49. character.Expressions[0].Eyes = character.EyesRenderer.GetComponent<SpriteMapping>().FindSprite(character.SpriteCollection.Eyes.FindSprites(Eyes));
  50. character.Expressions[0].Mouth = character.MouthRenderer.GetComponent<SpriteMapping>().FindSprite(character.SpriteCollection.Mouth.FindSprites(Mouth));
  51. }
  52. foreach (var expression in character.Expressions)
  53. {
  54. if (expression.Name != "Dead") expression.EyesColor = EyesColor;
  55. }
  56. }
  57. if (character.EyesRenderer != null)
  58. {
  59. character.EyesRenderer.color = EyesColor;
  60. }
  61. var body = character.SpriteCollection.Body.Single(i => i.Id == Body);
  62. character.Body = body.Sprites.ToList();
  63. character.BodyRenderers.ForEach(i => i.color = BodyColor);
  64. character.Head = character.HeadRenderer.GetComponent<SpriteMapping>().FindSprite(body.Sprites);
  65. character.HeadRenderer.color = BodyColor;
  66. if (body.Tags.Contains("NoMouth"))
  67. {
  68. character.Expressions.ForEach(i => i.Mouth = null);
  69. }
  70. if (initialize) character.Initialize();
  71. }
  72. public string ToJson()
  73. {
  74. return JsonUtility.ToJson(this);
  75. }
  76. public static CharacterAppearance FromJson(string json)
  77. {
  78. return JsonUtility.FromJson<CharacterAppearance>(json);
  79. }
  80. }
  81. }