예제 #1
0
        public override void UpdateBadLifeRegen()
        {
            if (player.whoAmI != Main.LocalPlayer.whoAmI)
            {
                return;
            }

            TransformationDefinition transformation = GetCurrentTransformation();

            if (transformation == null)
            {
                return;
            }

            base.UpdateBadLifeRegen();

            float negativeLifeRegen = transformation.GetHealthDrainRate(this);

            if (negativeLifeRegen > 0)
            {
                if (player.lifeRegen > 0)
                {
                    player.lifeRegen = 0;
                }

                player.lifeRegenTime = 0;
                player.lifeRegen    -= (int)Math.Ceiling(negativeLifeRegen);
            }
        }
예제 #2
0
        private void DrawTransformation(UIPanel panel, TransformationDefinition transformation, Texture2D icon, int left, int top)
        {
            UIImageButton transformationButton = null;
            UIImage
                unknownImage     = null,
                unknownGrayImage = null,
                lockedImage      = null;

            transformationButton = InitializeButton(icon, new MouseEvent((evt, element) => TrySelectingTransformation(transformation, evt, element)), left, top, panel);

            unknownImage            = InitializeImage(UnknownImageTexture, 0, 0, transformationButton);
            unknownImage.ImageScale = 0f;
            unknownImage.Width.Set(1, 0f);
            unknownImage.Height.Set(1, 0f);

            unknownGrayImage            = InitializeImage(UnknownGrayImageTexture, 0, 0, unknownImage);
            unknownGrayImage.ImageScale = 0f;
            unknownGrayImage.Width.Set(1, 0f);
            unknownGrayImage.Height.Set(1, 0f);

            lockedImage            = InitializeImage(LockedImageTexture, 0, 0, unknownGrayImage);
            lockedImage.ImageScale = 0f;
            lockedImage.Width.Set(1, 0f);
            lockedImage.Height.Set(1, 0f);

            if (!_transformationImagePairs.ContainsKey(transformation))
            {
                _transformationImagePairs.Add(transformation, new UIImagePair(new Point(left, top), transformationButton, unknownImage, unknownGrayImage, lockedImage));
            }
        }
예제 #3
0
        private void RecursiveInitializeTransformation(Node <TransformationDefinition> node, ref int yOffset)
        {
            TransformationDefinition transformation = node.Current;
            Texture2D texture = transformation.BuffType.GetTexture();

            if (!CheckIfDraw(transformation))
            {
                return;                               // Needs edge-case check.
            }
            int xOffset = PADDING_X;

            if (node.Parents.Length > 0 && _transformationImagePairs.ContainsKey(node.Parents[0].Current))
            {
                Node <TransformationDefinition> previousNode = node.Parents[0];
                UIImagePair previousPair = _transformationImagePairs[previousNode.Current];

                xOffset = _transformationImagePairs[previousNode.Current].position.X  + (int)previousPair.button.Width.Pixels + SMALL_SPACE * 2;
            }

            DrawTransformation(transformation, texture, xOffset, yOffset);

            for (int i = 0; i < node.Children.Count; i++)
            {
                Node <TransformationDefinition> child = node.Children[i];
                RecursiveInitializeTransformation(child, ref yOffset);

                if (node.Children.Count > 1 && CheckIfDraw(child) && node.Children[node.Children.Count - 1] != child)
                {
                    yOffset += texture.Height + SMALL_SPACE * 2;
                }
            }
        }
예제 #4
0
        /// <summary>
        ///     Return the aura effect currently active on the player.
        /// </summary>
        /// <param name="modPlayer">The player being checked</param>
        public static AuraAnimationInfo GetAuraEffectOnPlayer(this MyPlayer modPlayer)
        {
            TransformationDefinition transformation = modPlayer.GetCurrentTransformation();

            if (modPlayer.ActiveTransformations.Count == 0)
            {
                return(null);
            }

            if (modPlayer.player.dead)
            {
                return(null);
            }

            if (transformation != null)
            {
                return(transformation.Appearance.auraAnimation);
            }

            if (modPlayer.isCharging)
            {
                return(AuraAnimations.createChargeAura);
            }

            return(null);
        }
예제 #5
0
        public override void PreUpdate()
        {
            TransformationDefinition transformation = GetCurrentTransformation();

            if (transformation != null)
            {
                if (!player.armor[10].vanity && player.armor[10].headSlot == -1)
                {
                    if (transformation.Appearance.hair != null && transformation.Appearance.hair.hairTexture != null)
                    {
                        hair = mod.GetTexture(transformation.Appearance.hair.hairTexture);
                    }
                    else
                    {
                        hair = null;
                    }
                }
            }
            else
            {
                hair = null;
            }
            if (player.dead)
            {
                hair = null;
            }
        }
예제 #6
0
 // TODO Remove this and make it unlock correctly.
 public override void OnPlayerUnlockTransformation(MyPlayer player, TransformationDefinition transformation)
 {
     if (transformation == player.TransformationDefinitionManager.SSJ3Definition)
     {
         TryUnlock(player);
     }
 }
예제 #7
0
        private static void TrySelectingTransformation(TransformationDefinition def, UIMouseEvent evt, UIElement listeningElement)
        {
            DBTPlayer dbtPlayer = Main.LocalPlayer.GetModPlayer <DBTPlayer>();

            if (dbtPlayer.HasAcquiredTransformation(def) && def.DoesDisplayInCharacterMenu(dbtPlayer))
            {
                // TODO Add sounds.
                //SoundHelper.PlayVanillaSound(SoundID.MenuTick);

                if (!dbtPlayer.SelectedTransformations.Contains(def))
                {
                    dbtPlayer.SelectTransformation(def);
                    Main.NewText($"Selected {def.DisplayName}, Mastery: {Math.Round(def.GetMaxMastery(dbtPlayer) * def.GetCurrentMastery(dbtPlayer), 2)}%");
                }
                else
                {
                    Main.NewText($"{def.DisplayName} Mastery: {Math.Round(100f * def.GetCurrentMastery(dbtPlayer), 2)}%");
                }
            }

            /*else if (def.SelectionRequirementsFailed.Invoke(player, def))
             * {
             *  SoundHelper.PlayVanillaSound(SoundID.MenuClose);
             *
             *  if (def.FailureText == null) return;
             *  Main.NewText(def.FailureText);
             * }*/
        }
예제 #8
0
        private static void TrySelectingTransformation(TransformationDefinition def, UIMouseEvent evt, UIElement listeningElement)
        {
            MyPlayer player = Main.LocalPlayer.GetModPlayer <MyPlayer>();

            if (def.DoesShowInMenu(player) && player.PlayerTransformations.ContainsKey(def) && def.MeetsSelectionRequirements(player))
            {
                SoundHelper.PlayVanillaSound(SoundID.MenuTick);

                if (player.SelectedTransformation != def)
                {
                    player.SelectedTransformation = def;
                    Main.NewText($"Selected {def.Text}, Mastery: {Math.Round(100f * def.GetPlayerMastery(player), 2)}%");
                }
                else
                {
                    Main.NewText($"{def.Text} Mastery: {Math.Round(100f * def.GetPlayerMastery(player), 2)}%");
                }
            }
            else if (def.SelectionRequirementsFailed.Invoke(player, def))
            {
                SoundHelper.PlayVanillaSound(SoundID.MenuClose);

                if (def.FailureText == null)
                {
                    return;
                }
                Main.NewText(def.FailureText);
            }
        }
예제 #9
0
        private void DrawInfoPanel(TransformationDefinition def)
        {
            DBTPlayer dbtPlayer = Main.LocalPlayer.GetModPlayer <DBTPlayer>();


            bool hasOverload = false;

            if (!InfoPanelOpened)
            {
                InfoPanelOpened = true;
                InfoPanel       = InitializeImage(InfoPanelTexture, -12, 294, BackPanel);
                InfoPanel.Width.Set(InfoPanelTexture.Width, 0f);
                InfoPanel.Height.Set(InfoPanelTexture.Height, 0f);

                if (def.GetUnmasteredOverloadGrowthRate(dbtPlayer) > 0)
                {
                    hasOverload = true;
                }

                formName = InitializeText(def.DisplayName, 12, 8, 0.8f, def.Appearance.GeneralColor.Value, InfoPanel);

                if (def.GetMasteredKiDrain(dbtPlayer) <= 0 && def.GetUnmasteredKiDrain(dbtPlayer) != 0)
                {
                    formStats = InitializeText("Stats: \nDamage: " + (def.GetDamageMultiplier(dbtPlayer) - 1f) * 100 + "% \nSpeed: "
                                               + (def.GetSpeedMultiplier(dbtPlayer) - 1f) * 100 + "% \nKi Drain: " + def.GetUnmasteredKiDrain(dbtPlayer) * 60 + "/s"
                                               + (hasOverload ? "\nOverload: While Unmastered = " + def.GetUnmasteredOverloadGrowthRate(dbtPlayer) * 60
                                                  + "/s + While Mastered = " + def.GetMasteredOverloadGrowthRate(dbtPlayer) * 60 + "/s" : null), 12, 28, 0.6f, Color.White, InfoPanel);
                }
                else
                {
                    if (def.GetUnmasteredKiDrain(dbtPlayer) <= 0)
                    {
                        formStats = InitializeText("Stats: \nDamage: " + (def.GetDamageMultiplier(dbtPlayer) - 1f) * 100 + "% \nSpeed: " +
                                                   (def.GetSpeedMultiplier(dbtPlayer) - 1f) * 100 + "%" + (hasOverload ? "\nOverload: While Unmastered = " +
                                                                                                           def.GetUnmasteredOverloadGrowthRate(dbtPlayer) * 60 + "/s + While Mastered = " +
                                                                                                           def.GetMasteredOverloadGrowthRate(dbtPlayer) * 60 + "/s" : null), 12, 28, 0.6f, Color.White, InfoPanel);
                    }
                    else
                    {
                        formStats = InitializeText("Stats: \nDamage: " + (def.GetDamageMultiplier(dbtPlayer) - 1f) * 100 + "% \nSpeed: "
                                                   + (def.GetSpeedMultiplier(dbtPlayer) - 1f) * 100 + "% \nKi Drain: While Unmastered = " + def.GetUnmasteredKiDrain(dbtPlayer) * 60
                                                   + "/s + While Mastered = " + def.GetMasteredKiDrain(dbtPlayer) * 60 + "/s" + (hasOverload ? "\nOverload: While Unmastered = "
                                                                                                                                 + def.GetUnmasteredOverloadGrowthRate(dbtPlayer) * 60 + "/s + While Mastered = " + def.GetMasteredOverloadGrowthRate(dbtPlayer) * 60
                                                                                                                                 + "/s" : null), 12, 28, 0.6f, Color.White, InfoPanel);
                    }
                }
                formUnlock = InitializeText(def.DisplayName, 30, 16, 0f, Color.White, InfoPanel);
            }
            else
            {
                InfoPanel  = null;
                formName   = null;
                formStats  = null;
                formUnlock = null;

                InfoPanelOpened = false;
                DrawInfoPanel(def);
            }
        }
예제 #10
0
        public bool CanTransform(TransformationDefinition transformation)
        {
            if (transformation == null || IsTransformBlocked() || IsExhaustedFromTransformation() || IsTransformedInto(transformation))
            {
                return(false);
            }

            return(transformation.CanTransformInto(this));
        }
예제 #11
0
        public void RemoveTransformation(TransformationDefinition transformation)
        {
            player.ClearBuff(transformation.GetBuffId());

            if (!Main.dedServ && Main.netMode == NetmodeID.MultiplayerClient && player.whoAmI == Main.myPlayer)
            {
                NetworkHelper.formSync.SendFormChanges(256, player.whoAmI, player.whoAmI, transformation.UnlocalizedName, 0);
            }
        }
예제 #12
0
        public void Acquire(TransformationDefinition definition)
        {
            if (AcquiredTransformations.ContainsKey(definition))
            {
                return;
            }

            AcquiredTransformations.Add(definition, new PlayerTransformation(definition));
            definition.OnPlayerAcquiredTransformation(this);
        }
예제 #13
0
 public void SelectTransformation(TransformationDefinition transformation)
 {
     if (!TryCombiningTransformations(transformation))
     {
         SelectedTransformations.Clear();
         SelectedTransformations.Add(transformation);
     }
     else
     {
         SelectedTransformations.Add(transformation);
     }
 }
예제 #14
0
        public bool HasAcquiredTransformation(TransformationDefinition definition)
        {
            for (int i = 0; i < AcquiredTransformations.Count; i++)
            {
                if (AcquiredTransformations.ContainsKey(definition))
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #15
0
        public bool IsTransformed(TransformationDefinition definition)
        {
            for (int i = 0; i < ActiveTransformations.Count; i++)
            {
                if (ActiveTransformations.Contains(definition))
                {
                    return(true);
                }
            }

            return(false);
        }
예제 #16
0
        public void Untransform(TransformationDefinition definition)
        {
            for (int i = ActiveTransformations.Count - 1; i >= 0; i--)
            {
                TransformationDefinition transformation = ActiveTransformations[i];

                if (transformation == definition)
                {
                    ActiveTransformations.Remove(transformation);
                    player.ClearBuff(mod.GetBuff(definition.BuffType.Name).Type);
                }
            }
        }
예제 #17
0
        internal void LoadMasteryEntry(KeyValuePair <string, object> kvp)
        {
            if (kvp.Key.StartsWith(PlayerTransformation.MASTERY_PREFIX))
            {
                TransformationDefinition transformation = TransformationDefinitionManager.Instance[kvp.Key.Substring(PlayerTransformation.MASTERY_PREFIX.Length)];

                if (AcquiredTransformations.ContainsKey(transformation))
                {
                    return;
                }
                AcquiredTransformations.Add(transformation, new PlayerTransformation(transformation, float.Parse(kvp.Value.ToString())));
            }
        }
예제 #18
0
        public static void DrawLayer(PlayerDrawInfo drawInfo)
        {
            if (Main.netMode == NetmodeID.Server)
            {
                return;
            }

            DBTPlayer modPlayer = drawInfo.drawPlayer.GetModPlayer <DBTPlayer>();
            TransformationDefinition transformation = modPlayer.ActiveTransformations.FirstOrDefault();

            int           frame     = modPlayer.TailFrameTimer / 8;
            Color         tailColor = Color.White;
            float         XOffset;
            SpriteEffects spriteEffects;

            if (drawInfo.drawPlayer.direction == 1)
            {
                spriteEffects = SpriteEffects.None;
                XOffset       = 3f;
            }
            else
            {
                spriteEffects = SpriteEffects.FlipHorizontally;
                XOffset       = 1.8f;
            }
            if (transformation != null)
            {
                if (modPlayer.IsTransformed(TransformationDefinitionManager.Instance.SSJ4) || modPlayer.IsTransformed(TransformationDefinitionManager.Instance.SSJ4FP))
                {
                    tailColor = new Color(224, 51, 66);
                }
                else
                {
                    tailColor = transformation.Appearance.Hair.Color.Value;
                }
            }
            else
            {
                tailColor = drawInfo.drawPlayer.hairColor;
            }

            Color color = Lighting.GetColor((int)drawInfo.drawPlayer.position.X / 16, (int)drawInfo.drawPlayer.position.Y / 16, tailColor);
            //Color trueTailColor = new Color(tailColor.R, tailColor.G, tailColor.B, alpha.A);
            Texture2D texture   = DBTMod.Instance.GetTexture("Effects/PrimalTail");
            int       frameSize = texture.Height / 14;
            float     drawX     = (drawInfo.position.X + drawInfo.drawPlayer.width / XOffset - Main.screenPosition.X);
            float     drawY     = (drawInfo.position.Y + drawInfo.drawPlayer.height / 0.11f - Main.screenPosition.Y);

            Main.spriteBatch.Draw(texture, new Vector2(drawX, drawY), new Rectangle(0, frameSize * frame, texture.Width, frameSize), color, drawInfo.drawPlayer.bodyRotation, new Vector2(texture.Width / 2f, texture.Height / 2f), 1f, spriteEffects, 0);
        }
예제 #19
0
        /*private float overloadHealthChange = 1f;
         * public void HandleOverloadHealthChange()
         * {
         *  if (IsOverloading())
         *  {
         *      overloadHealthChange = Main.rand.NextFloat(0.3f, 1.5f);
         *      player.statLifeMax2 = (int)Math.Ceiling(player.statLifeMax2 * overloadHealthChange);
         *  }
         * }*/

        public override void PreUpdate()
        {
            TransformationDefinition transformation = GetCurrentTransformation();

            if (transformation != null)
            {
                if (!player.armor[10].vanity && player.armor[10].headSlot == -1)
                {
                    if (!IsPlayerTransformed())
                    {
                        hair = mod.GetTexture("Hairs/Base/BaseHair" + ssjHairStyles[HairAppearance.BASE_HAIRSTYLE_KEY]);
                    }
                    else
                    {
                        if (transformation.Appearance.hair != null && transformation.Appearance.hair.hairTexture != null && transformation.Appearance.hair.hairName != null)
                        {
                            int hairStyleId = 1;

                            if (ssjHairStyles.ContainsKey(transformation.Appearance.hair.hairName))
                            {
                                hairStyleId = ssjHairStyles[transformation.Appearance.hair.hairName];
                            }

                            hair = mod.GetTexture(transformation.Appearance.hair.hairTexture + hairStyleId);
                        }
                        else
                        {
                            hair = null;
                        }
                    }
                }
            }
            else
            {
                hair = mod.GetTexture("Hairs/Base/BaseHair" + ssjHairStyles[HairAppearance.BASE_HAIRSTYLE_KEY]);
            }
            if (player.dead)
            {
                hair = mod.GetTexture("Hairs/Base/BaseHair" + ssjHairStyles[HairAppearance.BASE_HAIRSTYLE_KEY]);
            }
            if (transformation == null || player.dead)
            {
                hairColor = player.hairColor;
            }
            else
            {
                hairColor = Color.White;
            }
        }
예제 #20
0
        public void Transform(TransformationDefinition definition)
        {
            for (int i = 0; i < ActiveTransformations.Count; i++)
            {
                if (ActiveTransformations[i] == definition)
                {
                    return;
                }
            }

            ActiveTransformations.Add(definition);
            player.AddBuff(mod.GetBuff(definition.BuffType.Name).Type, definition.Duration);

            if (Main.netMode == NetmodeID.MultiplayerClient && player.whoAmI == Main.myPlayer)
            {
                NetworkPacketManager.Instance.PlayerTransformedPacket.SendPacketToServer(player.whoAmI, (byte)player.whoAmI, definition.UnlocalizedName);
            }
        }
예제 #21
0
        public void Transform(TransformationDefinition definition)
        {
            for (int i = 0; i < ActiveTransformations.Count; i++)
            {
                if (ActiveTransformations[i] == definition)
                {
                    return;
                }
            }

            ActiveTransformations.Add(definition);
            player.AddBuff(mod.GetBuff(definition.BuffType.Name).Type, definition.Duration);

            if (player.whoAmI == Main.myPlayer)
            {
                new PlayerTransformedPacket(definition).Send();
            }
        }
예제 #22
0
        public void AddTransformation(TransformationDefinition transformation, int duration)
        {
            player.AddBuff(transformation.GetBuffId(), duration, false);
            ActiveTransformations.Add(transformation);

            transformation.OnPlayerTransformed(this);

            if (!string.IsNullOrWhiteSpace(transformation.Text))
            {
                CombatText.NewText(player.Hitbox, transformation.TextColor, transformation.Text, false, false);
            }

            if (!Main.dedServ && Main.netMode == NetmodeID.MultiplayerClient && player.whoAmI == Main.myPlayer)
            {
                NetworkHelper.formSync.SendFormChanges(256, player.whoAmI, player.whoAmI, transformation.UnlocalizedName, duration);
            }

            isTransformationAnimationPlaying = true;
        }
예제 #23
0
        public void Untransform(TransformationDefinition definition)
        {
            for (int i = ActiveTransformations.Count - 1; i >= 0; i--)
            {
                TransformationDefinition transformation = ActiveTransformations[i];

                if (transformation == definition)
                {
                    ActiveTransformations.Remove(transformation);

                    if (player.whoAmI == Main.myPlayer)
                    {
                        new PlayerUntransformedPacket(transformation).Send();
                    }

                    player.ClearBuff(mod.GetBuff(definition.BuffType.Name).Type);
                }
            }
        }
예제 #24
0
        private static void TrySelectingTransformation(TransformationDefinition def, UIMouseEvent evt, UIElement listeningElement)
        {
            DBTPlayer dbtPlayer = Main.LocalPlayer.GetModPlayer <DBTPlayer>();

            if (def.CheckPrePlayerConditions() && dbtPlayer.HasAcquiredTransformation(def) && def.BaseConditions(dbtPlayer))
            {
                // TODO Add sounds.
                //SoundHelper.PlayVanillaSound(SoundID.MenuTick);

                if (!dbtPlayer.SelectedTransformations.Contains(def))
                {
                    dbtPlayer.SelectTransformation(def);
                    Main.NewText($"Selected {def.DisplayName}, Mastery: {Math.Round(def.GetMaxMastery(dbtPlayer) * def.GetCurrentMastery(dbtPlayer), 2)}%");
                }
                else
                {
                    Main.NewText($"{def.DisplayName} Mastery: {Math.Round(100f * def.GetCurrentMastery(dbtPlayer), 2)}%");
                }
            }
        }
예제 #25
0
        private void DrawTransformation(TransformationDefinition transformation, Texture2D icon, int left, int top)
        {
            UIImageButton transformationButton = null;
            UIImage
                unknownImage     = null,
                unknownGrayImage = null,
                lockedImage      = null;

            transformationButton = InitializeButton(icon, new MouseEvent((evt, element) => TrySelectingTransformation(transformation, evt, element)), left, top, BackPanelImage);

            unknownImage            = InitializeImage(_unknownImageTexture, 0, 0, transformationButton);
            unknownImage.ImageScale = 0f;

            unknownGrayImage            = InitializeImage(_unknownGrayImageTexture, 0, 0, unknownImage);
            unknownGrayImage.ImageScale = 0f;

            lockedImage            = InitializeImage(_lockedImageTexture, 0, 0, unknownGrayImage);
            lockedImage.ImageScale = 0f;

            _transformationImagePairs.Add(transformation, new UIImagePair(new Point(left, top), transformationButton, unknownImage, unknownGrayImage, lockedImage));
        }
예제 #26
0
        public void DoTransform(TransformationDefinition transformation)
        {
            // don't.. try to apply the same transformation. This just stacks projectile auras and looks dumb.
            if (IsTransformedInto(transformation))
            {
                return;
            }

            // make sure to swap kaioken with super kaioken when appropriate.
            if (transformation == TransformationDefinitionManager.SuperKaiokenDefinition)
            {
                RemoveTransformation(TransformationDefinitionManager.KaiokenDefinition);
            }

            // remove all *transformation* buffs from the player.
            // this needs to know we're powering down a step or not
            EndTransformations();

            // add whatever buff it is for a really long time.
            AddTransformation(transformation, transformation.Duration);
        }
예제 #27
0
        public void ChangeMastery(TransformationDefinition definition, float change)
        {
            PlayerTransformation playerTransformation = AcquiredTransformations[definition];
            float maxMastery = playerTransformation.Definition.GetMaxMastery(this);

            if (playerTransformation.CurrentMastery >= maxMastery)
            {
                return;
            }

            if (playerTransformation.CurrentMastery + change > maxMastery)
            {
                change = maxMastery - playerTransformation.CurrentMastery;
            }

            if (Trait != null)
            {
                Trait.OnPlayerMasteryGained(this, ref change, playerTransformation.CurrentMastery);
            }

            playerTransformation.ChangeMastery(this, change);
            definition.OnPlayerMasteryChanged(this, change, playerTransformation.CurrentMastery);
        }
예제 #28
0
        public void GainMastery(TransformationDefinition definition, float gain)
        {
            PlayerTransformation playerTransformation = AcquiredTransformations[definition];
            float maxMastery = playerTransformation.Definition.GetMaxMastery(this);

            if (playerTransformation.CurrentMastery >= maxMastery)
            {
                return;
            }

            if (playerTransformation.CurrentMastery + gain > maxMastery)
            {
                gain = maxMastery - playerTransformation.CurrentMastery;
            }

            if (Trait != null)
            {
                Trait.OnPlayerMasteryGained(this, ref gain, playerTransformation.CurrentMastery);
            }

            playerTransformation.CurrentMastery += gain;
            definition.OnPlayerMasteryGain(this, gain, playerTransformation.CurrentMastery);
        }
예제 #29
0
        public override void ModifyDrawInfo(ref PlayerDrawInfo drawInfo)
        {
            // TODO Add logistics into TransformationDefinition class.
            TransformationDefinition transformation = GetCurrentTransformation();

            if (transformation == null)
            {
                if (originalEyeColor.HasValue && player.eyeColor != originalEyeColor.Value)
                {
                    player.eyeColor = originalEyeColor.Value;
                }

                return;
            }

            if (transformation.Appearance.hair == null)
            {
                return;
            }

            ReadOnlyColor hairColor = transformation.Appearance.hair.hairColor;

            if (hairColor != null)
            {
                drawInfo.hairColor = hairColor;
            }

            if (transformation.Appearance.hair.hairShader.HasValue)
            {
                drawInfo.hairShader = 1;
            }

            if (transformation.Appearance.eyeColor != null)
            {
                ChangeEyeColor(transformation.Appearance.eyeColor.Value);
            }
        }
예제 #30
0
        public override void Update(GameTime gameTime)
        {
            base.Update(gameTime);

            DBTPlayer dbtPlayer = Main.LocalPlayer.GetModPlayer <DBTPlayer>();

            foreach (KeyValuePair <TransformationDefinition, UIImagePair> kvp in _transformationImagePairs)
            {
                TransformationDefinition definition = kvp.Key;

                bool canAcquire          = definition.CheckPrePlayerConditions() && definition.BaseConditions(dbtPlayer);
                bool currentlyUnlockable = kvp.Key.CanUnlock(dbtPlayer);
                bool visible             = kvp.Key.DoesDisplayInCharacterMenu(dbtPlayer);
                bool unlocked            = dbtPlayer.HasAcquiredTransformation(kvp.Key);

                if (!canAcquire || !visible)
                {
                    kvp.Value.button.Width  = StyleDimension.Empty;
                    kvp.Value.button.Height = StyleDimension.Empty;
                    kvp.Value.button.SetVisibility(0f, 0f);
                }

                if (canAcquire)
                {
                    kvp.Value.unknownImage.ImageScale     = !visible ? 0f : (!currentlyUnlockable ? 0f : (unlocked ? 0f : 1f));
                    kvp.Value.unknownImageGray.ImageScale = !visible ? 0f : currentlyUnlockable && dbtPlayer.HasAcquiredTransformation(kvp.Key) ? 0f : 1f;
                    kvp.Value.lockedImage.ImageScale      = !visible ? 0f : unlocked || currentlyUnlockable ? 0f : 1f;
                }
            }

            // Disabled as it crashes with SpriteBatch.

            /*for (int i = 0; i < _polyLinesToDraw.Count; i++)
             *  if (_polyLinesToDraw[i].Length > 1)
             *      Main.spriteBatch.DrawPolyLine(_polyLinesToDraw[i], Color.White);*/
        }