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); }
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); } }
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); }