mmorpg/Assets/HeroEditor4D/Common/Scripts/CharacterScripts/AvatarSetup.cs
2024-01-30 19:56:12 +05:30

86 lines
3.8 KiB
C#
Executable File

using System.Collections.Generic;
using System.Linq;
using Assets.HeroEditor4D.Common.Scripts.Collections;
using UnityEngine;
namespace Assets.HeroEditor4D.Common.Scripts.CharacterScripts
{
public class AvatarSetup : MonoBehaviour
{
public List<SpriteCollection> SpriteCollections;
public SpriteRenderer Head;
public SpriteRenderer Hair;
public List<SpriteRenderer> Ears;
public SpriteRenderer Eyes;
public SpriteRenderer Eyebrows;
public SpriteRenderer Mouth;
public SpriteRenderer Beard;
public SpriteRenderer Helmet;
public void Initialize(CharacterAppearance appearance, string helmetId, string spriteCollectionName)
{
var humanoid = spriteCollectionName == "FantasyHeroes" || spriteCollectionName == "MilitaryHeroes" || spriteCollectionName == "UndeadHeroes";
var ear = SpriteCollections.SelectMany(i => i.Ears).Single(i => i.Id == appearance.Ears).Sprites[1];
Head.sprite = SpriteCollections.SelectMany(i => i.Body).Single(i => i.Id == appearance.Body).Sprites.Single(i => i.name == "FrontHead");
Head.color = Ears[0].color = Ears[1].color = appearance.BodyColor;
if (string.IsNullOrEmpty(appearance.Hair))
{
Hair.enabled = false;
}
else
{
var hair = SpriteCollections.SelectMany(i => i.Hair).Single(i => i.Id == appearance.Hair);
Hair.enabled = true;
Hair.sprite = hair.Sprites[1];
Hair.color = hair.Tags.Contains("NoPaint") ? (Color32) Color.white : appearance.HairColor;
}
Beard.sprite = string.IsNullOrEmpty(appearance.Beard) ? null : SpriteCollections.SelectMany(i => i.Beard).Single(i => i.Id == appearance.Beard).Sprite;
Beard.color = appearance.BeardColor;
Eyes.sprite = SpriteCollections.SelectMany(i => i.Eyes).Single(i => i.Id == appearance.Eyes).Sprite;
Eyes.color = appearance.EyesColor;
if (string.IsNullOrEmpty(appearance.Eyebrows))
{
Eyebrows.enabled = false;
}
else
{
Eyebrows.enabled = true;
Eyebrows.sprite = SpriteCollections.SelectMany(i => i.Eyebrows).Single(i => i.Id == appearance.Eyebrows).Sprite;
}
Mouth.sprite = SpriteCollections.SelectMany(i => i.Mouth).Single(i => i.Id == appearance.Mouth).Sprite;
Mouth.transform.localPosition = new Vector3(0, humanoid ? -0.1f : 0.25f);
if (helmetId == null)
{
Helmet.enabled = false;
Ears.ForEach(j => { j.sprite = ear; j.enabled = true; });
}
else
{
Helmet.enabled = true;
var entry = SpriteCollections.SelectMany(i => i.Armor).Single(i => i.Id == helmetId);
var showEars = entry.Tags.Contains("ShowEars");
var fullHair = entry.Tags.Contains("FullHair");
Helmet.sprite = entry.Sprites.Single(i => i.name == "FrontHead");
Ears.ForEach(j => { j.sprite = ear; j.enabled = showEars; });
if (!fullHair)
{
Hair.sprite = SpriteCollections.SelectMany(i => i.Hair).SingleOrDefault(i => i.Id == "Common.Basic.Hair.Default")?.Sprites[1];
Hair.enabled = Hair.sprite != null;
}
}
Ears[0].transform.localPosition = humanoid ? new Vector3(-1f, 0.5f) : new Vector3(-0.9f, 0.7f);
Ears[1].transform.localPosition = humanoid ? new Vector3(1f, 0.5f) : new Vector3(0.9f, 0.7f);
}
}
}