public static void OnRender() { if (Offset != 0) { int consoleHeight = AllodsWindow.Height / 2; QMesh.SetVertex(0, 0f, 0f, 0f, 0f, 0f, 64, 64, 64, 192); QMesh.SetVertex(1, (float)AllodsWindow.Width, 0f, 0f, 0f, 0f, 64, 64, 64, 192); QMesh.SetVertex(2, (float)AllodsWindow.Width, (float)consoleHeight, 0f, 0f, 0f, 16, 16, 16, 192); QMesh.SetVertex(3, 0f, (float)consoleHeight, 0f, 0f, 0f, 16, 16, 16, 192); QMesh.SetVertex(4, 0f, (float)consoleHeight, 0f, 0f, 0f, 255, 120, 0, 255); QMesh.SetVertex(5, (float)AllodsWindow.Width, (float)consoleHeight, 0f, 0f, 0f, 150, 72, 0, 255); QMesh.SetVertex(6, (float)AllodsWindow.Width, (float)(consoleHeight + 2), 0f, 0f, 0f, 73, 33, 0, 255); QMesh.SetVertex(7, 0f, (float)(consoleHeight + 2), 0f, 0f, 0f, 73, 33, 0, 255); QMesh.SetVertex(8, 0f, (float)(consoleHeight + 2), 0f, 0f, 0f, 0, 0, 0, 255); QMesh.SetVertex(9, (float)AllodsWindow.Width, (float)(consoleHeight + 2), 0f, 0f, 0f, 0, 0, 0, 255); QMesh.SetVertex(10, (float)AllodsWindow.Width, (float)(consoleHeight + 8), 0f, 0f, 0f, 0, 0, 0, 0); QMesh.SetVertex(11, 0f, (float)(consoleHeight + 8), 0f, 0f, 0f, 0, 0, 0, 0); AllodsWindow.SetTranslation(0f, (float)(Offset - consoleHeight), 0f); QMesh.Render("notex"); // now draw last messages. starts with consoleHeight-Fonts.Font2.LineHeight*2 int textY = Offset - Fonts.Font2.LineHeight * 2; int textX = 3; // draw text field if (LineEditLeft == null) { LineEditLeft = Fonts.Font2.Render(">", Font.Align.Left, 0, 0, false); } LineEditLeft.Render(textX, textY + 6, 1, 255, 255, 255, 255); LineEdit.Resize(12, textY + 4, AllodsWindow.Width - 16, Fonts.Font2.LineHeight + 4); LineEdit.SetFont(Fonts.Font2); LineEdit.TreeRender(); for (int i = Messages.Count - 1; i >= 0; i--) { ClientConsoleMessage msg = Messages[i]; if (msg.Text.Length > 0) { msg.UpdateMesh(); if (textY + msg.Mesh.MeshHeight < 0) { break; } textY -= msg.Mesh.MeshHeight; msg.Mesh.Render(textX, textY, 1, 255, 255, 255, 255); } } } }
public static void OnTick() { int targetOffset = 0; if (Enabled) { targetOffset = AllodsWindow.Height / 2; } if (targetOffset != Offset) { int delay = 5; int step = 5; long tL = Core.GetTickCount() - LastTicks; if (tL > delay) { while (tL > 0 && targetOffset != Offset) { if (targetOffset < Offset) { Offset -= step; if (Offset < targetOffset) { Offset = targetOffset; } } else if (targetOffset > Offset) { Offset += step; if (Offset > targetOffset) { Offset = targetOffset; } } tL -= delay; LastTicks += delay; } } } // process all buffered messages. these are to be added into the ingame console. if (BufferedMessages.Length > 0) { string lines = BufferedMessages.ToString(); if (ConsoleWriter != null) { ConsoleWriter.Write(lines); } bool hasNewline = lines.EndsWith("\n"); string[] linesp = lines.Split('\n'); if (hasNewline) { linesp = linesp.Take(linesp.Length - 1).ToArray(); } // first line has special handling. int start = 0; if (Messages.Count > 0 && !Messages[Messages.Count - 1].Text.EndsWith("\n")) { ClientConsoleMessage lastMsg = Messages[Messages.Count - 1]; lastMsg.Text += linesp[0]; lastMsg.LastWidth = 0; // force update start = 1; } for (int i = start; i < linesp.Length; i++) { ClientConsoleMessage msg = new ClientConsoleMessage(); msg.Text = linesp[i] + ((i != linesp.Length - 1 || hasNewline) ? "\n" : ""); msg.LastWidth = 0; msg.Mesh = null; Messages.Add(msg); } BufferedMessages.Clear(); } if (Enabled) { LineEdit.TreeTick(); } }