public ModClient(ClientData data) { name = data.Item1; SendMsgAction = data.Item2; ReloadAction = data.Item3; apiVersionID = data.Item4; hudClient = new HudMain.TreeClient(apiVersionID); bindClient = new BindManager.Client(this); menuData = RichHudTerminal.GetClientData(name); Registered = true; SendData(MsgTypes.RegistrationSuccessful, new ServerData(Unregister, GetApiData, apiVersionID)); ExceptionHandler.WriteToLogAndConsole($"[RHF] Successfully registered {name} with the API."); ClientSubtype = ClientSubtypes.Full; VersionString = $"1.0.3.0- ({apiVersionID})"; }
private static void GetHudStats(HudMain.TreeClient client, StringBuilder statsBuilder) { statsBuilder.Append($"\t\tHudMain:\n"); statsBuilder.Append($"\t\t\tEnable Cursor: {client.EnableCursor}\n"); statsBuilder.Append($"\t\t\tElements Updating: {client.UpdateAccessors.Count}\n\n"); }
public override void Draw() { pageCategory.Enabled = EnableDebug; if (EnableDebug && (statsText.Element.Visible || enableOverlay) && updateTimer.ElapsedMilliseconds > 100) { IReadOnlyList <RichHudMaster.ModClient> modClients = RichHudMaster.Clients; IReadOnlyList <IFont> fonts = FontManager.Fonts; HudMain.TreeClient masterHud = HudMain.TreeManager.MainClient; BindManager.Client masterInput = BindManager.MainClient; stats.Update(); statsBuilder.Clear(); var vID = RichHudMaster.versionID; statsBuilder.Append($"Rich HUD Master (v {vID.X}.{vID.Y}.{vID.Z}.{vID.W})\n"); statsBuilder.Append($"Summary:\n"); statsBuilder.Append($"\tSE Input Blacklist: {BindManager.CurrentBlacklistMode}\n"); statsBuilder.Append($"\tInput Mode: {HudMain.InputMode}\n"); statsBuilder.Append($"\tCursor Visible: {HudMain.Cursor.Visible}\n"); statsBuilder.Append($"\tClient Mods: {modClients.Count}\n"); foreach (RichHudMaster.ModClient client in modClients) { statsBuilder.Append($"\t\t{client.name}\t\t|\tVersion: {client.VersionString}\t\t|\tSubtype: {client.ClientSubtype}\n"); } statsBuilder.Append($"\n\tHudMain:\n"); statsBuilder.Append($"\t\tHUD Spaces Updating: {HudMain.TreeManager.HudSpacesRegistered}\n"); statsBuilder.Append($"\t\tElements Updating: {HudMain.TreeManager.ElementRegistered}\n"); statsBuilder.Append($"\t\tClients Registered: {HudMain.TreeManager.Clients.Count}\n"); statsBuilder.Append($"\t\tUpdate Timers (IsHighResolution: {Stopwatch.IsHighResolution}):\n"); AddGrid(statsBuilder, new string[, ] { { "Name", "Avg", "50th", "99th" }, { "Draw", $"{stats.AvgDrawTime:F2}ms", $"{stats.Draw50th:F2}ms", $"{stats.Draw99th:F2}ms" }, { "Input", $"{stats.AvgInputTime:F2}ms", $"{stats.Input50th:F2}ms", $"{stats.Input99th:F2}ms" }, { "Total", $"{stats.AvgTotalTime:F2}ms", $"{stats.Total50th:F2}ms", $"{stats.Total99th:F2}ms" }, { "Tree*", $"{stats.AvgTreeTime:F2}ms", $"{stats.Tree50th:F2}ms", $"{stats.Tree99th:F2}ms" }, }, 3, 4); overlay.SetText(statsBuilder); if (statsText.Element.Visible) { var cursor = HudMain.Cursor as HudMain.HudCursor; statsBuilder.Append($"\n\tCursor:\n"); statsBuilder.Append($"\t\tVisible: {cursor.Visible}\n"); statsBuilder.Append($"\t\tCaptured: {cursor.IsCaptured}\n"); if (cursor.IsCaptured) { statsBuilder.Append($"\t\tPosition: {cursor.ScreenPos}\n"); var modName = cursor.CapturedElement(null, (int)HudElementAccessors.ModName) as string ?? "None"; var type = cursor.CapturedElement(null, (int)HudElementAccessors.GetType) as Type; var ZOffset = (sbyte)cursor.CapturedElement(null, (int)HudElementAccessors.ZOffset); var fullZOffset = (ushort)cursor.CapturedElement(null, (int)HudElementAccessors.FullZOffset); var pos = (Vector2)cursor.CapturedElement(null, (int)HudElementAccessors.Position); var size = (Vector2)cursor.CapturedElement(null, (int)HudElementAccessors.Size); statsBuilder.Append($"\t\t\tMod: {modName}\n"); statsBuilder.Append($"\t\t\tType: {type}\n"); statsBuilder.Append($"\t\t\tZOffset: {ZOffset}\n"); statsBuilder.Append($"\t\t\tFullZOffset: {fullZOffset}\n"); statsBuilder.Append($"\t\t\tPosition: {pos}\n"); statsBuilder.Append($"\t\t\tSize: {size}\n"); } statsBuilder.Append($"\n\tBindManager:\n"); statsBuilder.Append($"\t\tControls Registered: {BindManager.Controls.Count}\n"); statsBuilder.Append($"\t\tClients Registered: {BindManager.Clients.Count}\n"); statsBuilder.Append($"\t\tCandidate Bind: "); int i = 0, bindLength = BindManager.CandidateBindSet.Count; foreach (int conIndex in BindManager.CandidateBindSet) { statsBuilder.Append(BindManager.Controls[conIndex].DisplayName); i++; if (i != bindLength) { statsBuilder.Append(", "); } } statsBuilder.Append($"\n\n\tFontManager:\n"); statsBuilder.Append($"\t\tFonts Registered: {fonts.Count}\n\n"); foreach (IFont font in fonts) { FontStyles supportedStyles = FontStyles.Italic | FontStyles.Underline; if (font.IsStyleDefined(FontStyles.Bold)) { supportedStyles |= FontStyles.Bold; } statsBuilder.Append($"\t\t{font.Name}\n"); statsBuilder.Append($"\t\t\tAtlas PtSize: {font.PtSize}\n"); statsBuilder.Append($"\t\t\tStyles: Regular, {supportedStyles}\n\n"); } statsBuilder.Append($"Details:\n"); statsBuilder.Append($"\tMaster:\n"); GetHudStats(masterHud, statsBuilder); GetBindStats(masterInput, statsBuilder); foreach (RichHudMaster.ModClient modClient in modClients) { statsBuilder.Append($"\n\t{modClient.name}:\n"); GetHudStats(modClient.hudClient, statsBuilder); GetBindStats(modClient.bindClient, statsBuilder); } statsText.Text = statsBuilder; } updateTimer.Restart(); } if (EnableDebug && enableOverlay) { var offset = HudMain.GetPixelVector(overlayPos) / HudMain.ResScale; if (offset.X < 0f) { offset.X += overlay.Size.X * .5f; } else { offset.X -= overlay.Size.X * .5f; } if (offset.Y < 0f) { offset.Y += overlay.Size.Y * .5f; } else { offset.Y -= overlay.Size.Y * .5f; } overlay.Draw(offset, MatrixD.CreateScale(HudMain.ResScale, HudMain.ResScale, 1d) * HudMain.PixelToWorld); } }