protected SizeF MeasureText(DialogFont f, string text) { Font font = new Font(f.FamilyName, f.Size); StringFormat format = new StringFormat(StringFormat.GenericDefault); RectangleF rectangle = new RectangleF(0, 0, 2000, 1000); CharacterRange[] ranges = { new CharacterRange(0, text.Length) }; Region[] regions = new Region[1]; try { format.SetMeasurableCharacterRanges(ranges); format.FormatFlags = StringFormatFlags.MeasureTrailingSpaces; using (Bitmap b = new Bitmap(2000, 1000)) { using (Graphics g = Graphics.FromImage(b)) { regions = g.MeasureCharacterRanges(text, font, rectangle, format); rectangle = regions[0].GetBounds(g); } } } catch (Exception ex) { System.Console.WriteLine(ex.ToString()); } return(rectangle.Size); }
private void OnEntityUse(int player, ServerEntityId id) { ServerEntity e = m.EntityGet(id); if (e.sign == null) { return; } // TODO: Check permissions Dialog d = new Dialog(); d.Width = 400; d.Height = 200; d.IsModal = true; d.Widgets = new Widget[4]; int widgetCount = 0; var font = new DialogFont("Verdana", 11f, DialogFontStyle.Bold); d.Widgets[widgetCount++] = Widget.MakeSolid(0, 0, 300, 200, Color.FromArgb(255, 50, 50, 50).ToArgb()); d.Widgets[widgetCount++] = Widget.MakeTextBox(e.sign.text, font, 50, 50, 200, 50, Color.FromArgb(255, 0, 0, 0).ToArgb()); Widget okHandler = Widget.MakeSolid(100, 100, 100, 50, Color.FromArgb(255, 100, 100, 100).ToArgb()); okHandler.ClickKey = (char)13; okHandler.Id = "UseSign_OK"; d.Widgets[widgetCount++] = okHandler; d.Widgets[widgetCount++] = Widget.MakeText("OK", font, 100, 100, Color.FromArgb(255, 0, 0, 0).ToArgb()); editingSign[player] = id; m.SendDialog(player, "UseSign", d); }
private string cutText(string text, DialogFont font, float maxWidth) { while (textWidth(text, font) > maxWidth && text.Length > 3) { text = text.Remove(text.Length - 1); } return text; }
private string cutText(string text, DialogFont font, float maxWidth) { while (textWidth(text, font) > maxWidth && text.Length > 3) { text = text.Remove(text.Length - 1); } return(text); }
/// <summary> /// Dispose resources /// </summary> public static void Dispose() { if (MenuFont != null) { MenuFont.Dispose(); } MenuFont = null; if (DialogFont != null) { DialogFont.Dispose(); } DialogFont = null; }
void OnUseEntity(int player, int chunkx, int chunky, int chunkz, int id) { ServerEntity e = server.GetEntity(chunkx, chunky, chunkz, id); if (e.permissionSign == null) { return; } if (!server.PlayerHasPrivilege(player, ServerClientMisc.Privilege.area_add)) { server.SendMessage(player, server.colorError + server.language.Get("Server_CommandInsufficientPrivileges")); return; } ManicDigger.Dialog d = new ManicDigger.Dialog(); d.Width = 400; d.Height = 400; d.IsModal = true; d.Widgets = new ManicDigger.Widget[4 + server.serverClient.Groups.Count * 2]; int widgetCount = 0; var font = new DialogFont("Verdana", 11f, DialogFontStyle.Bold); d.Widgets[widgetCount++] = Widget.MakeSolid(0, 0, 400, 400, Game.ColorFromArgb(255, 50, 50, 50)); d.Widgets[widgetCount++] = Widget.MakeTextBox(e.permissionSign.name, font, 50, 50, 200, 50, Game.ColorFromArgb(255, 0, 0, 0)); for (int i = 0; i < server.serverClient.Groups.Count; i++) { Group g = server.serverClient.Groups[i]; Widget button = Widget.MakeSolid(50, 150 + i * 50, 100, 40, Game.ColorFromArgb(255, 100, 100, 100)); button.ClickKey = (char)13; button.Id = "PermissionSignGroup" + g.Name; d.Widgets[widgetCount++] = button; d.Widgets[widgetCount++] = Widget.MakeText(g.Name, font, 50, 150 + i * 50, Game.ColorFromArgb(255, 0, 0, 0)); } Widget okHandler = Widget.MakeSolid(200, 50, 100, 50, Game.ColorFromArgb(255, 100, 100, 100)); okHandler.ClickKey = (char)13; okHandler.Id = "UsePermissionSign_OK"; d.Widgets[widgetCount++] = okHandler; d.Widgets[widgetCount++] = Widget.MakeText("Set player", font, 200, 50, Game.ColorFromArgb(255, 0, 0, 0)); ServerEntityId id_ = new ServerEntityId(); id_.chunkx = chunkx; id_.chunky = chunky; id_.chunkz = chunkz; id_.id = id; server.clients[player].editingSign = id_; server.SendDialog(player, "UseSign", d); }
void UpdateRespawnTimer() { int[] allplayers = m.AllPlayers(); int secondsToRespawn = (int)((CurrentRespawnTime + RespawnTime) - DateTime.UtcNow).TotalSeconds; if (secondsToRespawn <= 0) { for (int i = 0; i < allplayers.Length; i++) { int p = allplayers[i]; if (!players.ContainsKey(p)) { //Skip this player as he hasn't joined yet continue; } if (players[p].isdead) { m.SendDialog(p, "RespawnCountdown" + p, null); m.FollowPlayer(p, -1, false); Respawn(p); players[p].isdead = false; UpdatePlayerModel(p); } } CurrentRespawnTime = DateTime.UtcNow; } for (int i = 0; i < allplayers.Length; i++) { int p = allplayers[i]; if (!players.ContainsKey(p)) { //Skip this player as he hasn't joined yet continue; } if (players[p].isdead) { Dialog d = new Dialog(); d.IsModal = false; string text = secondsToRespawn.ToString(); DialogFont f = new DialogFont("Verdana", 60f, DialogFontStyle.Regular); Widget w = Widget.MakeText(text, f, -m.MeasureTextSize(text, f)[0] / 2, -200, Color.Red.ToArgb()); d.Widgets = new Widget[1]; d.Widgets[0] = w; m.SendDialog(p, "RespawnCountdown" + p, d); } } }
public float[] MeasureTextSize(string text, DialogFont font) { if (IsArm) { // fixes crash return(new float[] { text.Length * 1f *font.Size, 1.7f *font.Size }); } using (Bitmap bmp = new Bitmap(1, 1)) { using (Graphics g = Graphics.FromImage(bmp)) { g.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias; Font tmpFont = new Font(font.FamilyName, font.Size, (FontStyle)font.FontStyle); StringFormat tmpFormat = new StringFormat(StringFormatFlags.MeasureTrailingSpaces); SizeF size = g.MeasureString(StripColorCodes(text), tmpFont, new PointF(0, 0), tmpFormat); return(new float[] { size.Width, size.Height }); } } }
void OnUseEntity(int player, int chunkx, int chunky, int chunkz, int id) { ServerEntity e = server.GetEntity(chunkx, chunky, chunkz, id); if (e.sign == null) { return; } if (!server.CheckBuildPrivileges(player, (int)e.position.x, (int)e.position.z, (int)e.position.y)) { return; } ManicDigger.Dialog d = new ManicDigger.Dialog(); d.Width = 400; d.Height = 200; d.IsModal = true; d.Widgets = new ManicDigger.Widget[4]; int widgetCount = 0; var font = new DialogFont("Verdana", 11f, DialogFontStyle.Bold); d.Widgets[widgetCount++] = Widget.MakeSolid(0, 0, 300, 200, Game.ColorFromArgb(255, 50, 50, 50)); d.Widgets[widgetCount++] = Widget.MakeTextBox(e.sign.text, font, 50, 50, 200, 50, Game.ColorFromArgb(255, 0, 0, 0)); Widget okHandler = Widget.MakeSolid(100, 100, 100, 50, Game.ColorFromArgb(255, 100, 100, 100)); okHandler.ClickKey = (char)13; okHandler.Id = "UseSign_OK"; d.Widgets[widgetCount++] = okHandler; d.Widgets[widgetCount++] = Widget.MakeText("OK", font, 100, 100, Game.ColorFromArgb(255, 0, 0, 0)); ServerEntityId id_ = new ServerEntityId(); id_.chunkx = chunkx; id_.chunky = chunky; id_.chunkz = chunkz; id_.id = id; server.clients[player].editingSign = id_; server.SendDialog(player, "UseSign", d); }
private float textWidth(string text, DialogFont font) { return m.MeasureTextSize(text, font)[0]; }
private float textHeight(string text, DialogFont font) { return m.MeasureTextSize(text, font)[1]; }
private float textHeight(string text, DialogFont font) { return(m.MeasureTextSize(text, font)[1]); }
private float textWidth(string text, DialogFont font) { return(m.MeasureTextSize(text, font)[0]); }