public LSTRFont(LFont font, bool anti, char[] additionalChars) { if (displays == null) { displays = new System.Collections.Generic.Dictionary<string, Loon.Core.Graphics.Opengl.LTextureBatch.GLCache>(totalCharSet); } else { displays.Clear(); } this.useCache = true; this.font = font; this.fontSize = font.GetSize(); this.ascent = font.GetAscent(); this.antiAlias = anti; if (antiAlias) { if (trueFont == null) { trueFont = LFont.GetTrueFont(); } if (additionalChars != null && additionalChars.Length > (textureWidth / trueFont.GetSize())) { this.textureWidth *= 2; this.textureHeight *= 2; } this.fontScale = (float)fontSize / (float)trueFont.GetSize(); this.Make(trueFont, additionalChars); } else { this.Make(this.font, additionalChars); } }
public LSTRFont(LFont font, bool anti, char[] additionalChars) { if (displays == null) { displays = new System.Collections.Generic.Dictionary <string, Loon.Core.Graphics.Opengl.LTextureBatch.GLCache>(totalCharSet); } else { displays.Clear(); } this.useCache = true; this.font = font; this.fontSize = font.GetSize(); this.ascent = font.GetAscent(); this.antiAlias = anti; if (antiAlias) { if (trueFont == null) { trueFont = LFont.GetTrueFont(); } if (additionalChars != null && additionalChars.Length > (textureWidth / trueFont.GetSize())) { this.textureWidth *= 2; this.textureHeight *= 2; } this.fontScale = (float)fontSize / (float)trueFont.GetSize(); this.Make(trueFont, additionalChars); } else { this.Make(this.font, additionalChars); } }
public virtual void CreateUI(GLEx g) { if (visible) { LFont oldFont = g.GetFont(); Color oldColor = g.GetColor(); g.SetFont(font); g.SetColor(color); this.width = font.StringWidth(label); this.height = font.GetSize(); if (alpha > 0 && alpha < 1) { g.SetAlpha(alpha); g.DrawString(label, X(), Y() - font.GetAscent()); g.SetAlpha(1.0F); } else { g.DrawString(label, X(), Y() - font.GetAscent()); } g.SetFont(oldFont); g.SetColor(oldColor); } }
private void DrawMessage(GLEx gl, LColor old) { if (!visible) { return; } if (!running) { return; } if (batch == null) { return; } if (strings.GetSize() > 25) { lock (showMessages) { this.size = showMessages.Length; this.fontSize = (isEnglish) ? strings.GetSize() / 2 : gl.GetFont() .GetSize(); this.fontHeight = strings.GetHeight(); this.tmp_left = (isLeft) ? 0 : (width - (fontSize * messageLength)) / 2 - (int)(fontSize * 1.5f); this.left = tmp_left; this.index = offset = font = tmp_font = 0; this.fontSizeDouble = fontSize * 2; batch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, null, null, gl.View); fontColor = old; for (int i = 0; i < size; i++) { text = showMessages[i]; if (text == '\0') { continue; } if (interceptCount < interceptMaxString) { interceptCount++; continue; } else { interceptMaxString = 0; interceptCount = 0; } if (showMessages[i] == 'n' && showMessages[(i > 0) ? i - 1 : 0] == '\\') { index = 0; left = tmp_left; offset++; continue; } else if (text == '\n') { index = 0; left = tmp_left; offset++; continue; } else if (text == '<') { LColor color = GetColor(showMessages[(i < size - 1) ? i + 1 : i]); if (color != null) { interceptMaxString = 1; fontColor = color; } continue; } else if (showMessages[(i > 0) ? i - 1 : i] == '<' && GetColor(text) != null) { continue; } else if (text == '/') { if (showMessages[(i < size - 1) ? i + 1 : i] == '>') { interceptMaxString = 1; fontColor = old; } continue; } else if (index > messageLength) { index = 0; left = tmp_left; offset++; newLine = false; } else if (text == '\\') { continue; } tmp_font = strings.CharWidth(text); if (System.Char.IsLetter(text)) { if (tmp_font < fontSize) { font = fontSize; } else { font = tmp_font; } } else { font = fontSize; } left += font; if (font <= 10 && StringUtils.IsSingle(text)) { left += 12; } if (i != size - 1) { pos.X = vector.x + left + leftOffset; pos.Y = (offset * fontHeight) + vector.y + fontSizeDouble + topOffset; batch.DrawString(strings.Font, Convert.ToString(text), pos, fontColor.Color); } else if (!newLine) { pos.X = vector.x + left + leftOffset + iconWidth; pos.Y = (offset * fontHeight) + vector.y + fontSize + topOffset + strings.GetAscent(); batch.Draw(creeseIcon.Texture, pos, Microsoft.Xna.Framework.Color.White); } index++; } batch.End(); if (messageCount == next) { onComplete = true; } } } else { lock (showMessages) { this.size = showMessages.Length; this.fontSize = (isEnglish) ? ((int)(strings.GetSize() * 1.4f)) / 2 : (int)(gl.GetFont() .GetSize() * 1.4f); this.fontHeight = strings.GetHeight() + 10; this.tmp_left = isLeft ? 0 : (int)(((width - (fontSize * messageLength)) / 2 + (int)(fontSize * 4))); this.left = tmp_left; this.index = offset = font = tmp_font = 0; this.fontSizeDouble = (int)(fontSize * 2 * 1.2f); batch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend); fontColor = old; for (int i = 0; i < size; i++) { text = showMessages[i]; if (text == '\0') { continue; } if (interceptCount < interceptMaxString) { interceptCount++; continue; } else { interceptMaxString = 0; interceptCount = 0; } if (showMessages[i] == 'n' && showMessages[(i > 0) ? i - 1 : 0] == '\\') { index = 0; left = tmp_left; offset++; continue; } else if (text == '\n') { index = 0; left = tmp_left; offset++; continue; } else if (text == '<') { LColor color = GetColor(showMessages[(i < size - 1) ? i + 1 : i]); if (color != null) { interceptMaxString = 1; fontColor = color; } continue; } else if (showMessages[(i > 0) ? i - 1 : i] == '<' && GetColor(text) != null) { continue; } else if (text == '/') { if (showMessages[(i < size - 1) ? i + 1 : i] == '>') { interceptMaxString = 1; fontColor = old; } continue; } else if (index > messageLength) { index = 0; left = tmp_left; offset++; newLine = false; } else if (text == '\\') { continue; } tmp_font = strings.CharWidth(text); font = tmp_font; if (System.Char.IsLetter(text)) { if (tmp_font < fontSize) { font = fontSize; } else { font = tmp_font; } } else { font = fontSize; } left += font; if (font <= 10 && StringUtils.IsSingle(text)) { left += 12; } if (i != size - 1) { pos.X = vector.x + left + leftOffset; pos.Y = ((offset * fontHeight) + vector.y + fontSizeDouble + topOffset + strings.GetAscent() * 2.2f); batch.DrawString(strings.Font, Convert.ToString(text), pos, fontColor.Color); } else if (!newLine) { pos.X = vector.x + left + leftOffset + iconWidth; pos.Y = (offset * fontHeight) + vector.y + fontSize + topOffset + (strings.GetAscent() * 2.2f) + iconWidth; batch.Draw(creeseIcon.Texture, pos, Microsoft.Xna.Framework.Color.White); } index++; } batch.End(); if (messageCount == next) { onComplete = true; } } } }
protected override void CreateCustomUI(GLEx g, int x, int y, int w, int h) { if (!visible) { return; } if (batch == null) { return; } sizeFont = messageFont.GetSize(); if (sizeFont > 25) { sizeFont = messageFont.GetSize(); doubleSizeFont = sizeFont * 2; if (doubleSizeFont == 0) { doubleSizeFont = 20; } messageLeft = (x + doubleSizeFont + sizeFont / 2) + tmpOffset + left + doubleSizeFont; batch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend, null, null, GLEx.Device.RasterizerState, null, GLEx.cemera.viewMatrix); if (message != null) { messageTop = y + doubleSizeFont + top - 10; batch.DrawString(messageFont.Font, message, new Vector2(messageLeft, messageTop), fontColor.Color); } else { messageTop = y + top; } nTop = messageTop; if (selects != null) { nLeft = messageLeft - sizeFont / 4; for (int i = 0; i < selects.Length; i++) { nTop += messageFont.GetHeight(); type = i + 1; isSelect = (type == ((selectFlag > 0) ? selectFlag : 1)); if ((buoyage != null) && isSelect) { g.SetAlpha(autoAlpha); g.DrawTexture(buoyage, nLeft, nTop - (int)(buoyage.GetHeight() / 1.5f)); g.SetAlpha(1.0F); } batch.DrawString(messageFont.Font, selects[i], new Vector2(messageLeft, nTop), fontColor.Color); if ((cursor != null) && isSelect) { batch.Draw(cursor.Texture, new Vector2(nLeft, nTop - cursor.GetHeight() / 4), Color.White); } } batch.End(); } } else { doubleSizeFont = (int)(sizeFont * 1.4f * 2); if (doubleSizeFont == 0) { doubleSizeFont = 20; } messageLeft = (x + doubleSizeFont + sizeFont / 2) + tmpOffset + left + doubleSizeFont; batch.Begin(SpriteSortMode.Deferred, BlendState.AlphaBlend); if (message != null) { messageTop = y + doubleSizeFont + top + (int)(messageFont.GetAscent() * 2) + 10; batch.DrawString(messageFont.Font, message, new Vector2(messageLeft, messageTop), fontColor.Color); } else { messageTop = y + top + (int)(messageFont.GetAscent() * 2) + 10; } nTop = messageTop; if (selects != null) { nLeft = messageLeft - sizeFont / 4; for (int i = 0; i < selects.Length; i++) { nTop += (int)((messageFont.GetHeight() + messageFont.GetAscent()) * 1.2f); type = i + 1; isSelect = (type == ((selectFlag > 0) ? selectFlag : 1)); if ((buoyage != null) && isSelect) { g.SetAlpha(autoAlpha); g.DrawTexture(buoyage, nLeft, nTop - (int)(buoyage.GetHeight() / 1.5f)); g.SetAlpha(1.0F); } batch.DrawString(messageFont.Font, selects[i], new Vector2(messageLeft, nTop), fontColor.Color); if ((cursor != null) && isSelect) { batch.Draw(cursor.Texture, new Vector2(nLeft, (nTop - cursor.GetHeight() / 4)), Color.White); } } batch.End(); } } }