Пример #1
0
        /// <summary>
        /// Create a new Avatar based on randomness and this Crew Member's best skill or load the existing Avatar for this Crew Member
        /// </summary>
        private void CreateAvatar(CrewMember crewMember)
        {
            //Get Best Skill
            var currentBestSkill = crewMember.LoadBelief(NPCBelief.AvatarBestSkill);

            _bestSkill = Enum.TryParse <Skill>(currentBestSkill, out var loadedBestSkill) ? loadedBestSkill : GetBestSkill(crewMember);
            _bodyType  = GetBodyType();

            //Set Skin Color
            var loadedMouthColor = crewMember.LoadBelief(NPCBelief.AvatarMouthColor);

            if (loadedMouthColor != null &&
                byte.TryParse(crewMember.LoadBelief(NPCBelief.AvatarSkinColorRed), out var skinColorRed) &&
                byte.TryParse(crewMember.LoadBelief(NPCBelief.AvatarSkinColorGreen), out var skinColorGreen) &&
                byte.TryParse(crewMember.LoadBelief(NPCBelief.AvatarSkinColorBlue), out var skinColorBlue))
            {
                SkinColor  = new Color(skinColorRed, skinColorGreen, skinColorBlue);
                MouthColor = loadedMouthColor;
            }
            else
            {
                SkinColor = GetRandomSkinColor();
            }

            //Set Hair Color
            if (byte.TryParse(crewMember.LoadBelief(NPCBelief.AvatarHairColorRed), out var hairColorRed) &&
                byte.TryParse(crewMember.LoadBelief(NPCBelief.AvatarHairColorGreen), out var hairColorGreen) &&
                byte.TryParse(crewMember.LoadBelief(NPCBelief.AvatarHairColorBlue), out var hairColorBlue))
            {
                HairColor = new Color(hairColorRed, hairColorGreen, hairColorBlue);
            }
            else
            {
                HairColor = Config.RandomHairColor ? GetRandomHairColor() : GetHairColorForSkin(SkinColor);
            }

            //Set Body Type
            BodyType = crewMember.LoadBelief(NPCBelief.AvatarBodyType) ?? $"Body{_gender}_{_bodyType}";

            //Set Hair Type
            HairType = crewMember.LoadBelief(NPCBelief.AvatarHairType) ?? $"Hair{StaticRandom.Int(1, Config.HairTypesCount + 1):00}{_gender}";

            //Set Eye Type
            EyeType = crewMember.LoadBelief(NPCBelief.AvatarEyeType) ?? $"Eye{_gender}_{_bestSkill}";

            //Set Eye Color
            var textEyeColor = crewMember.LoadBelief(NPCBelief.AvatarEyeColor);

            if (textEyeColor != null)
            {
                EyeColor = GetEyeColorFromText(textEyeColor);
            }
            else
            {
                if (byte.TryParse(crewMember.LoadBelief(NPCBelief.AvatarEyeColorRed), out var eyeColorRed) &&
                    byte.TryParse(crewMember.LoadBelief(NPCBelief.AvatarEyeColorGreen), out var eyeColorGreen) &&
                    byte.TryParse(crewMember.LoadBelief(NPCBelief.AvatarEyeColorBlue), out var eyeColorBlue))
                {
                    EyeColor = new Color(eyeColorRed, eyeColorGreen, eyeColorBlue);
                }
                else
                {
                    EyeColor = GetRandomEyeColor();
                }
            }

            //Set Face type
            EyebrowType = crewMember.LoadBelief(NPCBelief.AvatarEyebrowType) ?? $"Face{_gender}_{_bestSkill}_Eyebrows";
            NoseType    = crewMember.LoadBelief(NPCBelief.AvatarNoseType) ?? $"Face{_gender}_{_bestSkill}_Nose";

            //Specify the teeth for male avatars
            if (IsMale)
            {
                TeethType = crewMember.LoadBelief(NPCBelief.AvatarTeethType) ?? $"Face{_gender}_{_bestSkill}_Teeth";
            }

            //Set Mouth Type
            MouthType = crewMember.LoadBelief(NPCBelief.AvatarMouthType) ?? $"Face{_gender}_{_bestSkill}_Mouth";

            // Set Height and Width (Weight)
            if (float.TryParse(crewMember.LoadBelief(NPCBelief.AvatarHeight), out var loadedHeight))
            {
                Height = loadedHeight;
            }
            else
            {
                Height = 1 + StaticRandom.Float(-0.075f, 0.075f);
            }

            if (float.TryParse(crewMember.LoadBelief(NPCBelief.AvatarWeight), out var loadedWeight))
            {
                Weight = loadedWeight;
            }
            else
            {
                Weight = 1 + StaticRandom.Float(-0.075f, 0.075f);
            }

            //Save attributes
            UpdateAvatarBeliefs(crewMember);
        }