/// <summary> /// Initializes character renderers with selected sprites. /// </summary> private void TryInitialize() { //if (Expressions.All(i => i.Name != "Default") || Expressions.All(i => i.Name != "Angry") || Expressions.All(i => i.Name != "Dead")) // throw new Exception("Character must have at least 3 basic expressions: Default, Angry and Dead."); //HeadRenderer.sprite = Head; HairRenderer.sprite = Helmet == null || Hair == null ? Hair : HairCut; //HairRenderer.maskInteraction = Helmet == null || Helmet.name.Contains("[FullHair]") ? SpriteMaskInteraction.None : SpriteMaskInteraction.VisibleInsideMask; //EarsRenderers.ForEach(i => i.sprite = Ears); SetExpression(Expression); //BeardRenderer.sprite = Beard; MapSprites(BodyRenderers, Body); HelmetRenderer.sprite = Helmet; //GlassesRenderer.sprite = Glasses; //MaskRenderer.sprite = Mask; //EarringsRenderer.sprite = Earrings; MapSprites(ArmorRenderers, Armor); //CapeRenderer.sprite = Cape; //BackRenderer.sprite = Back; PrimaryMeleeWeaponRenderer.sprite = PrimaryMeleeWeapon; //SecondaryMeleeWeaponRenderer.sprite = SecondaryMeleeWeapon; MapSprites(BowRenderers, CompositeWeapon); //FirearmsRenderers.ForEach(i => i.sprite = Firearms.SingleOrDefault(j => j != null && i.name.Contains(j.name))); ShieldRenderer.sprite = Shield; PrimaryMeleeWeaponRenderer.enabled = WeaponType != WeaponType.Bow; SecondaryMeleeWeaponRenderer.enabled = WeaponType == WeaponType.MeleePaired; BowRenderers.ForEach(i => i.enabled = WeaponType == WeaponType.Bow); if (WeaponType == WeaponType.Crossbow) { MapSprites(new List <SpriteRenderer> { PrimaryMeleeWeaponRenderer }, CompositeWeapon); } if (Hair != null && Hair.name.Contains("[HideEars]")) { EarsRenderers.ForEach(i => i.sprite = null); } if (Helmet != null && !Helmet.name.Contains("[ShowEars]")) { EarsRenderers.ForEach(i => i.sprite = null); } }
/// <summary> /// Initializes character renderers with selected sprites. /// </summary> private void TryInitialize() { //if (Expressions.All(i => i.Name != "Default") || Expressions.All(i => i.Name != "Angry") || Expressions.All(i => i.Name != "Dead")) // throw new Exception("Character must have at least 3 basic expressions: Default, Angry and Dead."); //HeadRenderer.sprite = Head; HairRenderer.sprite = Hair == null ? null : CropHair ? HairCropped : Hair; MapSprites(EarsRenderers, Ears); EarsRenderers.ForEach(i => i.enabled = !HideEars); SetExpression(Expression); //BeardRenderer.sprite = Beard; MapSprites(BodyRenderers, Body); HelmetRenderer.sprite = Helmet; //GlassesRenderer.sprite = Glasses; //MaskRenderer.sprite = Mask; //EarringsRenderer.sprite = Earrings; MapSprites(ArmorRenderers, Armor); //CapeRenderer.sprite = Cape; //BackRenderer.sprite = Back; PrimaryMeleeWeaponRenderer.sprite = PrimaryMeleeWeapon; SecondaryMeleeWeaponRenderer.sprite = SecondaryMeleeWeapon; MapSprites(BowRenderers, CompositeWeapon); //FirearmsRenderers.ForEach(i => i.sprite = Firearms.SingleOrDefault(j => j != null && i.name.Contains(j.name))); MapSprites(ShieldRenderers, Shield); PrimaryMeleeWeaponRenderer.enabled = WeaponType != WeaponType.Bow; SecondaryMeleeWeaponRenderer.enabled = WeaponType == WeaponType.MeleePaired; BowRenderers.ForEach(i => i.enabled = WeaponType == WeaponType.Bow); if (WeaponType == WeaponType.Crossbow) { var quiver = BowRenderers.Single(i => i.name == "Quiver"); quiver.enabled = true; MapSprites(new List <SpriteRenderer> { PrimaryMeleeWeaponRenderer, quiver }, CompositeWeapon); } }
public override void LoadFromJson(string serialized) { var description = JsonUtility.FromJson <SerializableDictionary <string, string> >(serialized); var sc = SpriteCollection.Instance; if (sc == null) { throw new Exception("SpriteCollection is missed on scene!"); } RestoreFromString(ref Body, BodyRenderers, sc.Body, description["Body"]); EarsRenderers.ForEach(i => RestoreFromString(ref Ears, i, sc.Ears, description["Ears"])); RestoreFromString(ref Hair, HairRenderer, sc.Hair, description["Hair"]); RestoreFromString(ref Beard, BeardRenderer, sc.Beard, description["Beard"]); RestoreFromString(ref Helmet, HelmetRenderer, sc.Armor, description["Helmet"]); RestoreFromString(ref Glasses, GlassesRenderer, sc.Glasses, description["Glasses"]); RestoreFromString(ref Mask, MaskRenderer, sc.Mask, description["Mask"]); RestoreFromString(ref Armor, ArmorRenderers, sc.Armor, description["Armor"]); WeaponType = (WeaponType)Enum.Parse(typeof(WeaponType), description["WeaponType"]); RestoreFromString(ref PrimaryMeleeWeapon, PrimaryMeleeWeaponRenderer, GetWeaponCollection(WeaponType), description["PrimaryMeleeWeapon"]); RestoreFromString(ref SecondaryMeleeWeapon, SecondaryMeleeWeaponRenderer, GetWeaponCollection(WeaponType), description["SecondaryMeleeWeapon"]); RestoreFromString(ref Cape, CapeRenderer, sc.Cape, description["Cape"]); RestoreFromString(ref Back, BackRenderer, sc.Back, description["Back"]); RestoreFromString(ref Shield, ShieldRenderer, sc.Shield, description["Shield"]); RestoreFromString(ref CompositeWeapon, BowRenderers, sc.Bow, description["Bow"]); Expression = description["Expression"]; Expressions = new List <Expression>(); foreach (var key in description.Keys) { if (key.Contains("Expression.")) { var parts = key.Split('.'); var expressionName = parts[1]; var expressionPart = parts[2]; var expression = Expressions.SingleOrDefault(i => i.Name == expressionName); if (expression == null) { expression = new Expression { Name = expressionName }; Expressions.Add(expression); } switch (expressionPart) { case "Eyebrows": RestoreFromString(ref expression.Eyebrows, EyebrowsRenderer, sc.Eyebrows, description[key]); break; case "Eyes": RestoreFromString(ref expression.Eyes, EyesRenderer, sc.Eyes, description[key]); break; case "Mouth": RestoreFromString(ref expression.Mouth, MouthRenderer, sc.Mouth, description[key]); break; default: throw new NotSupportedException(expressionPart); } } } Initialize(); UpdateAnimation(); }
/// <summary> /// Set character's body parts. /// </summary> public override void SetBody(SpriteGroupEntry item, BodyPart part, Color?color) { switch (part) { case BodyPart.Body: Body = item?.Sprites; BodyRenderers.ForEach(i => i.color = color ?? i.color); Head = HeadRenderer.GetComponent <SpriteMapping>().FindSprite(item?.Sprites); HeadRenderer.color = color ?? HeadRenderer.color; break; case BodyPart.Head: Head = HeadRenderer.GetComponent <SpriteMapping>().FindSprite(item?.Sprites); HeadRenderer.color = color ?? HeadRenderer.color; break; case BodyPart.Hair: Hair = HairRenderer.GetComponent <SpriteMapping>().FindSprite(item?.Sprites); HairRenderer.color = color ?? HairRenderer.color; HideEars = item != null && item.Tags.Contains("HideEars"); if (item != null && item.Tags.Contains("NoPaint")) { HairRenderer.color = Color.white; HairRenderer.material = new Material(Shader.Find("Sprites/Default")); } break; case BodyPart.Ears: Ears = item?.Sprites; EarsRenderers.ForEach(i => i.color = color ?? i.color); break; case BodyPart.Eyebrows: if (EyebrowsRenderer) { Expressions[0].Eyebrows = EyebrowsRenderer.GetComponent <SpriteMapping>().FindSprite(item?.Sprites); } break; case BodyPart.Eyes: if (EyesRenderer) { Expressions[0].Eyes = EyesRenderer.GetComponent <SpriteMapping>().FindSprite(item?.Sprites); Expressions.Where(i => i.Name != "Dead").ToList().ForEach(i => i.EyesColor = color ?? EyesRenderer.color); EyesRenderer.color = color ?? EyesRenderer.color; } break; case BodyPart.Mouth: if (MouthRenderer) { Expressions[0].Mouth = MouthRenderer.GetComponent <SpriteMapping>().FindSprite(item?.Sprites); } break; case BodyPart.Beard: if (BeardRenderer) { Beard = BeardRenderer.GetComponent <SpriteMapping>().FindSprite(item?.Sprites); BeardRenderer.color = color ?? BeardRenderer.color; } break; case BodyPart.Makeup: if (MakeupRenderer) { Makeup = MakeupRenderer.GetComponent <SpriteMapping>().FindSprite(item?.Sprites); MakeupRenderer.color = color ?? MakeupRenderer.color; } break; default: throw new NotImplementedException($"Unsupported part: {part}."); } Initialize(); }
/// <summary> /// Initializes character renderers with selected sprites. /// </summary> private void TryInitialize() { if (Expressions.All(i => i.Name != "Default") || Expressions.All(i => i.Name != "Angry") || Expressions.All(i => i.Name != "Dead")) { throw new Exception("Character must have at least 3 basic expressions: Default, Angry and Dead."); } if (ShowHelmet) { HairRenderer.sprite = Hair == null ? null : CropHair ? HairCropped : Hair; EarsRenderers.ForEach(i => i.enabled = !HideEars); HelmetRenderer.sprite = Helmet; } else { HairRenderer.sprite = Hair; EarsRenderers.ForEach(i => i.enabled = true); HelmetRenderer.sprite = null; } MapSprites(EarsRenderers, Ears); SetExpression(Expression); if (BeardRenderer != null) { BeardRenderer.sprite = Beard; } MapSprites(BodyRenderers, Body); MapSprite(HeadRenderer, Body); MapSprites(ArmorRenderers, Armor); //CapeRenderer.sprite = Cape; //BackRenderer.sprite = Back; PrimaryWeaponRenderer.sprite = PrimaryWeapon; PrimaryWeaponRenderer.enabled = WeaponType == WeaponType.Melee1H || WeaponType == WeaponType.Melee2H || WeaponType == WeaponType.Paired || WeaponType == WeaponType.Crossbow || WeaponType == WeaponType.Throwable; SecondaryWeaponRenderer.sprite = SecondaryWeapon; SecondaryWeaponRenderer.enabled = WeaponType == WeaponType.Paired; MapSprites(BowRenderers, CompositeWeapon); BowRenderers.ForEach(i => i.enabled = WeaponType == WeaponType.Bow); MapSprites(ShieldRenderers, Shield); ShieldRenderers.ForEach(i => i.enabled = WeaponType == WeaponType.Melee1H); if (MakeupRenderer != null) { MakeupRenderer.sprite = Makeup; } if (MaskRenderer != null) { MaskRenderer.sprite = Mask; } MapSprites(EarringsRenderers, Earrings); if (WeaponType == WeaponType.Crossbow) { var quiver = BowRenderers.Single(i => i.name == "Quiver"); quiver.enabled = true; MapSprites(new List <SpriteRenderer> { PrimaryWeaponRenderer, quiver }, CompositeWeapon); } ApplyMaterials(); }