Пример #1
0
        private void drawPartyMemberUi(PartyMember partyMember, Vector2 position, Vector2 headPadding, Vector2 barPadding, Vector2 barSize, Renderer renderer)
        {
            Vector2 screenScaleFactor = Game1.ScreenScaleFactor;
            Vector2 minScale          = new Vector2(MathHelper.Min(screenScaleFactor.X, screenScaleFactor.Y));
            Vector2 shadowOffset      = new Vector2(-5.0f, 5.0f) * minScale;
            Color   shadowColor       = Color.Black * 0.4f;

            TextureData textureData         = CharacterClassHeadTextureData[partyMember.CharacterClass];
            bool        partyMemberThinking = partyMemberIsThinking(partyMember);

            if (partyMemberThinking)
            {
                renderer.Draw(textureData, position + (shadowOffset * 2.0f), shadowColor, 0.0f, minScale, false);
            }
            renderer.Draw(textureData, position, Color.White, 0.0f, minScale, false);

            if (partyMemberIsSelected(partyMember))
            {
                renderer.Draw(arrowTextureData, position + new Vector2((textureData.Width / 2) - (arrowTextureData.Width / 2), -arrowTextureData.Height), Color.White, 0.0f, minScale, false);
            }

            position.X += (textureData.Width * screenScaleFactor.X) + headPadding.X;

            Vector2 partyMemberNameSize     = renderer.Font.MeasureString(partyMember.Name, Font.DefaultSize * minScale.Y);
            Vector2 partyMemberNamePosition = position + new Vector2(barSize.X / 2.0f, 20.0f * minScale.Y);

            if (partyMemberThinking)
            {
                renderer.DrawText(partyMember.Name, partyMemberNamePosition + shadowOffset, shadowColor, 0.0f, partyMemberNameSize / 2.0f, minScale);
            }
            renderer.DrawText(partyMember.Name, partyMemberNamePosition, Color.White, 0.0f, partyMemberNameSize / 2.0f, minScale);

            position.Y += partyMemberNameSize.Y + (20.0f * minScale.Y);
            float percentageHealth = partyMember.Health / (float)partyMember.MaxHealth;
            Color healthBarColor   = percentageHealth > 0.5f ? Color.Lerp(Color.Yellow, Color.Green, (percentageHealth - 0.5f) / 0.5f) : Color.Lerp(Color.Red, Color.Yellow, percentageHealth / 0.5f);

            if (partyMemberThinking)
            {
                drawBar(position + shadowOffset, barSize, 1.0f, shadowColor, false, renderer);
            }
            drawBar(position, barSize, percentageHealth, healthBarColor, true, renderer);
            string  barText     = "HP: " + partyMember.Health.ToString() + "/" + partyMember.MaxHealth;
            Vector2 barTextSize = renderer.Font.MeasureString(barText, Font.DefaultSize * minScale.Y);

            renderer.DrawText(barText, position + (barSize / 2.0f), Color.White, 0.0f, barTextSize / 2.0f, minScale);

            position.Y += barSize.Y * 1.5f;
            partyMember.ForEachStatusEffect((statusEffect) => {
                float widthWithPadding = barSize.Y * 1.1f;
                Vector2 scale          = new Vector2((1.0f / statusEffect.TextureData.Height) * barSize.Y);
                Vector2 nudge          = new Vector2((widthWithPadding - (statusEffect.TextureData.Width * scale.X)) / 2.0f, 0.0f);
                renderer.Draw(statusEffect.TextureData, position + (statusEffect.TextureData.Origin * scale) + nudge, Color.White, 0.0f, scale, false);
                position.X += barSize.Y * 1.1f;
            });
        }
Пример #2
0
        public Vector2 DrawButtonWithText(InputButton button, string text, Vector2 position, Color color, Renderer renderer, bool flip = false)
        {
            if (text != null && text.Length == 0)
            {
                text = null;
            }

            TextureData textureData     = Input.GamePadUsedLast ? gamepadButtonTextureData[button] : keyboardButtonTextureData;
            Vector2     minScale        = Game1.MinScreenScaleFactor;
            Vector2     textSize        = renderer.Font.MeasureString(text ?? "I", Font.DefaultSize * minScale.Y);
            Vector2     buttonScale     = new Vector2((textSize.Y * 1.1f) / textureData.Height);
            float       halfButtonWidth = textureData.Width * 0.5f * buttonScale.X;
            Vector2     flipScale       = flip ? new Vector2(-1.0f, 1.0f) : Vector2.One;

            if (text != null)
            {
                float buttonHeight = textureData.Height * buttonScale.Y;
                if (!Input.GamePadUsedLast)
                {
                    buttonHeight -= buttonScale.Y;
                }
                Vector2 backingSize     = new Vector2((textSize.X * 1.1f) + (halfButtonWidth * 2.0f), buttonHeight);
                Vector2 backingPosition = position + new Vector2(halfButtonWidth, 0.0f);
                if (flip)
                {
                    backingPosition.X -= backingSize.X;
                }
                renderer.Draw(whitePixelTextureData, backingPosition, UiColor, 0.0f, backingSize * flipScale, false);
                const float borderScale  = 0.2f;
                Vector2     borderScaleX = new Vector2(backingSize.X / BorderTextureData[N].Width, borderScale * minScale.Y);
                renderer.Draw(BorderTextureData[N], backingPosition, Color.White, 0.0f, borderScaleX * flipScale, false);
                renderer.Draw(BorderTextureData[S], backingPosition + new Vector2(0.0f, backingSize.Y - (BorderTextureData[S].Height * borderScaleX.Y)), Color.White, 0.0f, borderScaleX * flipScale, false);
                Vector2 cornerScale = borderScale * minScale;
                float   cornerX     = flip ? -BorderTextureData[NE].Width * cornerScale.X : backingSize.X;
                renderer.Draw(BorderTextureData[flip ? NW : NE], backingPosition + new Vector2(cornerX, 0.0f), Color.White, 0.0f, cornerScale, false);
                renderer.Draw(BorderTextureData[flip ? SW : SE], backingPosition + new Vector2(cornerX, backingSize.Y - (BorderTextureData[SE].Height * cornerScale.Y)), Color.White, 0.0f, cornerScale, false);
                Vector2 borderScaleY = new Vector2(borderScale * minScale.X, (backingSize.Y - (BorderTextureData[NE].Height * cornerScale.Y * 2.0f)) / BorderTextureData[E].Height);
                renderer.Draw(BorderTextureData[flip ? W : E], backingPosition + new Vector2(cornerX, BorderTextureData[NE].Height * cornerScale.Y), Color.White, 0.0f, borderScaleY, false);
                Vector2 textPosition = backingPosition + (flip ? Vector2.Zero : new Vector2(halfButtonWidth, 0.0f)) + ((backingSize - new Vector2(halfButtonWidth, 0.0f) - textSize) / 2.0f) + new Vector2(0.0f, minScale.Y);
                renderer.DrawText(text, textPosition, color, 0.0f, Vector2.Zero, minScale);
            }

            renderer.Draw(textureData, position, color, 0.0f, buttonScale, false);
            if (!Input.GamePadUsedLast)
            {
                text     = Input.KeyboardMapping[button].ToString();
                textSize = renderer.Font.MeasureString(text, Font.DefaultSize);
                renderer.DrawText(text, new Vector2(position.X + (((halfButtonWidth * 2.0f) - textSize.X) / 2.0f), position.Y), Color.White, 0.0f, Vector2.Zero, minScale);
            }
            return(textureData.Size * buttonScale);
        }
 public override void Draw(Renderer renderer)
 {
     if (textOrigin.X < 0.0f)
     {
         calculateTextOrigin(renderer);
     }
     renderer.DrawText(text, Position, new Color(Tint.R, Tint.G, Tint.B, (byte)(255 * (1.0f - (time / floatTimeInSeconds)))), 0.0f, textOrigin, scale, true);
 }
 protected override void draw(Renderer renderer)
 {
     base.draw(renderer);
     renderer.Draw(whitePixelTextureData, Vector2.Zero, Color.Black, 0.0f, Game1.ScreenSize, false);
     Vector2 minScale = Game1.MinScreenScaleFactor;
     Vector2 fontScale = 4f * minScale;
     Vector2 textSize = renderer.Font.MeasureString(gameOverText, fontScale.Y * Font.DefaultSize);
     float alpha = gameOverAlphaTimer / gameOverAlphaTime;
     renderer.DrawText(gameOverText, Game1.ScreenSize / 2.0f, new Color(1.0f, 1.0f, 1.0f, alpha), 0.0f, textSize / 2.0f, fontScale);
 }
Пример #5
0
        protected override void draw(Renderer renderer)
        {
            base.draw(renderer);
            renderer.Draw(whitePixelTextureData, Vector2.Zero, Color.Black, 0.0f, Game1.ScreenSize, false);
            Vector2 minScale  = Game1.MinScreenScaleFactor;
            Vector2 fontScale = 4f * minScale;
            Vector2 textSize  = renderer.Font.MeasureString(gameOverText, fontScale.Y * Font.DefaultSize);
            float   alpha     = gameOverAlphaTimer / gameOverAlphaTime;

            renderer.DrawText(gameOverText, Game1.ScreenSize / 2.0f, new Color(1.0f, 1.0f, 1.0f, alpha), 0.0f, textSize / 2.0f, fontScale);
        }
        protected override void draw(Renderer renderer)
        {
            sceneStack.Pop();
            Scene.DrawCurrent(renderer);
            sceneStack.Push(this);

            const float overlayAlpha = 0.7f;
            renderer.Draw(pixelTextureData, Vector2.Zero, Color.Black * overlayAlpha, 0.0f, Game1.ScreenSize);

            for (int i = 0; i < options.Count; ++i)
            {
                Color color = currentOptionIndex == i ? Color.Blue : Color.White;
                renderer.DrawText(options[i], new Vector2(200.0f, 200.0f + (i * 50.0f)), color, 0.0f, Vector2.Zero, Game1.ScreenScaleFactor);
            }
        }
Пример #7
0
        protected override void draw(Renderer renderer)
        {
            sceneStack.Pop();
            Scene.DrawCurrent(renderer);
            sceneStack.Push(this);

            const float overlayAlpha = 0.7f;

            renderer.Draw(pixelTextureData, Vector2.Zero, Color.Black * overlayAlpha, 0.0f, Game1.ScreenSize);

            for (int i = 0; i < options.Count; ++i)
            {
                Color color = currentOptionIndex == i ? Color.Blue : Color.White;
                renderer.DrawText(options[i], new Vector2(200.0f, 200.0f + (i * 50.0f)), color, 0.0f, Vector2.Zero, Game1.ScreenScaleFactor);
            }
        }
        private void drawPartyMemberUi(PartyMember partyMember, Vector2 position, Vector2 headPadding, Vector2 barPadding, Vector2 barSize, Renderer renderer)
        {
            Vector2 screenScaleFactor = Game1.ScreenScaleFactor;
            Vector2 minScale = new Vector2(MathHelper.Min(screenScaleFactor.X, screenScaleFactor.Y));
            Vector2 shadowOffset = new Vector2(-5.0f, 5.0f) * minScale;
            Color shadowColor = Color.Black * 0.4f;

            TextureData textureData = CharacterClassHeadTextureData[partyMember.CharacterClass];
            bool partyMemberThinking = partyMemberIsThinking(partyMember);

            if (partyMemberThinking)
            {
                renderer.Draw(textureData, position + (shadowOffset * 2.0f), shadowColor, 0.0f, minScale, false);
            }
            renderer.Draw(textureData, position, Color.White, 0.0f, minScale, false);

            if (partyMemberIsSelected(partyMember))
                renderer.Draw(arrowTextureData, position + new Vector2((textureData.Width / 2) - (arrowTextureData.Width / 2), -arrowTextureData.Height), Color.White, 0.0f, minScale, false);

            position.X += (textureData.Width * screenScaleFactor.X) + headPadding.X;

            Vector2 partyMemberNameSize = renderer.Font.MeasureString(partyMember.Name, Font.DefaultSize * minScale.Y);
            Vector2 partyMemberNamePosition = position + new Vector2(barSize.X / 2.0f, 20.0f * minScale.Y);
            if (partyMemberThinking)
                renderer.DrawText(partyMember.Name, partyMemberNamePosition + shadowOffset, shadowColor, 0.0f, partyMemberNameSize / 2.0f, minScale);
            renderer.DrawText(partyMember.Name, partyMemberNamePosition, Color.White, 0.0f, partyMemberNameSize / 2.0f, minScale);

            position.Y += partyMemberNameSize.Y + (20.0f * minScale.Y);
            float percentageHealth = partyMember.Health / (float)partyMember.MaxHealth;
            Color healthBarColor = percentageHealth > 0.5f ? Color.Lerp(Color.Yellow, Color.Green, (percentageHealth - 0.5f) / 0.5f) : Color.Lerp(Color.Red, Color.Yellow, percentageHealth / 0.5f);
            if (partyMemberThinking)
                drawBar(position + shadowOffset, barSize, 1.0f, shadowColor, false, renderer);
            drawBar(position, barSize, percentageHealth, healthBarColor, true, renderer);
            string barText = "HP: " + partyMember.Health.ToString() + "/" + partyMember.MaxHealth;
            Vector2 barTextSize = renderer.Font.MeasureString(barText, Font.DefaultSize * minScale.Y);
            renderer.DrawText(barText, position + (barSize / 2.0f), Color.White, 0.0f, barTextSize / 2.0f, minScale);

            position.Y += barSize.Y * 1.5f;
            partyMember.ForEachStatusEffect((statusEffect) => {
                float widthWithPadding = barSize.Y * 1.1f;
                Vector2 scale = new Vector2((1.0f / statusEffect.TextureData.Height) * barSize.Y);
                Vector2 nudge = new Vector2((widthWithPadding - (statusEffect.TextureData.Width * scale.X)) / 2.0f, 0.0f);
                renderer.Draw(statusEffect.TextureData, position + (statusEffect.TextureData.Origin * scale) + nudge, Color.White, 0.0f, scale, false);
                position.X += barSize.Y * 1.1f;
            });
        }
        public Vector2 DrawButtonWithText(InputButton button, string text, Vector2 position, Color color, Renderer renderer, bool flip = false)
        {
            if (text != null && text.Length == 0)
                text = null;

            TextureData textureData = Input.GamePadUsedLast ? gamepadButtonTextureData[button] : keyboardButtonTextureData;
            Vector2 minScale = Game1.MinScreenScaleFactor;
            Vector2 textSize = renderer.Font.MeasureString(text ?? "I", Font.DefaultSize * minScale.Y);
            Vector2 buttonScale = new Vector2((textSize.Y * 1.1f) / textureData.Height);
            float halfButtonWidth = textureData.Width * 0.5f * buttonScale.X;
            Vector2 flipScale = flip ? new Vector2(-1.0f, 1.0f) : Vector2.One;

            if (text != null)
            {
                float buttonHeight = textureData.Height * buttonScale.Y;
                if (!Input.GamePadUsedLast)
                    buttonHeight -= buttonScale.Y;
                Vector2 backingSize = new Vector2((textSize.X * 1.1f) + (halfButtonWidth * 2.0f), buttonHeight);
                Vector2 backingPosition = position + new Vector2(halfButtonWidth, 0.0f);
                if (flip)
                    backingPosition.X -= backingSize.X;
                renderer.Draw(whitePixelTextureData, backingPosition, UiColor, 0.0f, backingSize * flipScale, false);
                const float borderScale = 0.2f;
                Vector2 borderScaleX = new Vector2(backingSize.X / BorderTextureData[N].Width, borderScale * minScale.Y);
                renderer.Draw(BorderTextureData[N], backingPosition, Color.White, 0.0f, borderScaleX * flipScale, false);
                renderer.Draw(BorderTextureData[S], backingPosition + new Vector2(0.0f, backingSize.Y - (BorderTextureData[S].Height * borderScaleX.Y)), Color.White, 0.0f, borderScaleX * flipScale, false);
                Vector2 cornerScale = borderScale * minScale;
                float cornerX = flip ? -BorderTextureData[NE].Width * cornerScale.X : backingSize.X;
                renderer.Draw(BorderTextureData[flip ? NW : NE], backingPosition + new Vector2(cornerX, 0.0f), Color.White, 0.0f, cornerScale, false);
                renderer.Draw(BorderTextureData[flip ? SW : SE], backingPosition + new Vector2(cornerX, backingSize.Y - (BorderTextureData[SE].Height * cornerScale.Y)), Color.White, 0.0f, cornerScale, false);
                Vector2 borderScaleY = new Vector2(borderScale * minScale.X, (backingSize.Y - (BorderTextureData[NE].Height * cornerScale.Y * 2.0f)) / BorderTextureData[E].Height);
                renderer.Draw(BorderTextureData[flip ? W : E], backingPosition + new Vector2(cornerX, BorderTextureData[NE].Height * cornerScale.Y), Color.White, 0.0f, borderScaleY, false);
                Vector2 textPosition = backingPosition + (flip ? Vector2.Zero : new Vector2(halfButtonWidth, 0.0f)) + ((backingSize - new Vector2(halfButtonWidth, 0.0f) - textSize) / 2.0f) + new Vector2(0.0f, minScale.Y);
                renderer.DrawText(text, textPosition, color, 0.0f, Vector2.Zero, minScale);
            }

            renderer.Draw(textureData, position, color, 0.0f, buttonScale, false);
            if (!Input.GamePadUsedLast)
            {
                text = Input.KeyboardMapping[button].ToString();
                textSize = renderer.Font.MeasureString(text, Font.DefaultSize);
                renderer.DrawText(text, new Vector2(position.X + (((halfButtonWidth * 2.0f) - textSize.X) / 2.0f), position.Y), Color.White, 0.0f, Vector2.Zero, minScale);
            }
            return textureData.Size * buttonScale;
        }
 public override void Draw(Renderer renderer)
 {
     if (textOrigin.X < 0.0f)
         calculateTextOrigin(renderer);
     renderer.DrawText(text, Position, new Color(Tint.R, Tint.G, Tint.B, (byte)(255 * (1.0f - (time / floatTimeInSeconds)))), 0.0f, textOrigin, scale, true);
 }