public static void RenderObject(object o, Rectangle bounds, SpriteBatch spriteBatch, ScrollableSectionedPanel panel, Color TitleColor) { List <ReflectiveRenderer.RenderableField> fields = ReflectiveRenderer.GetRenderablesFromType(o.GetType(), o, 0); int entryLineHeight = ReflectiveRenderer.GetEntryLineHeight(); panel.PanelHeight = entryLineHeight; panel.NumberOfPanels = fields.Count; int pixelsPerIndentLevel = 20; panel.Draw((Action <int, Rectangle, SpriteBatch>)((i, dest, sb) => { int num = fields[i].IndentLevel * pixelsPerIndentLevel; dest.X += num; dest.Width -= num; if (fields[i].IsTitle) { TextItem.doFontLabelToSize(dest, fields[i].RenderedValue, GuiData.font, TitleColor, true, true); Rectangle destinationRectangle = new Rectangle(dest.X, dest.Y + dest.Height - 1, dest.Width, 1); sb.Draw(Utils.white, destinationRectangle, TitleColor); } else { string text1 = fields[i].VariableName + " :"; Vector2 vector2_1 = GuiData.smallfont.MeasureString(text1); sb.DrawString(GuiData.smallfont, text1, new Vector2((float)dest.X, (float)dest.Y), Color.Gray); string text2 = fields[i].RenderedValue; Vector2 vector2_2 = GuiData.smallfont.MeasureString(text2); if ((double)vector2_2.X > (double)(dest.Width - 20) || (double)vector2_2.Y > (double)dest.Height) { text2.Replace("\n", " "); text2 = text2.Substring(0, Math.Min(text2.Length, (int)((double)dest.Width / ((double)GuiData.ActiveFontConfig.tinyFontCharHeight + 2.0)))) + "..."; } Vector2 position = new Vector2((float)((double)dest.X + (double)vector2_1.X + 6.0), (float)dest.Y); if (ReflectiveRenderer.PreRenderForObject != null && sb.Name != "AltRTBatch") { ReflectiveRenderer.PreRenderForObject(position, fields[i].t, fields[i].RenderedValue); } sb.DrawString(GuiData.smallfont, text2, position, Color.White); } }), spriteBatch, bounds); ReflectiveRenderer.PreRenderForObject = (Action <Vector2, Type, string>)null; }
private void DrawEntry(Rectangle dest, SpriteBatch spriteBatch) { if (this.DeserializedFile == null) { try { this.DeserializedFile = ObjectSerializer.DeserializeObject(Utils.GenerateStreamFromString(this.DeCleanXMLForFile(this.ActiveFile.data)), this.DataType); } catch (Exception ex) { this.State = DatabaseDaemon.DatabaseState.Error; this.errorMessage = LocaleTerms.Loc("Error De-serializing Entry") + " : " + this.ActiveFile.name + "\n" + Utils.GenerateReportFromException(ex).Replace("Hacknet", "Database"); return; } } Rectangle drawRectForRow = this.GetDrawRectForRow(0, 0); drawRectForRow.Height = drawRectForRow.Height / 2; TextItem.doFontLabelToSize(drawRectForRow, string.Format(LocaleTerms.Loc("Entry for {0}"), (object)this.GetAnnounceNameForFileName(this.ActiveFile.name)), GuiData.font, Color.White, true, true); drawRectForRow.Y += drawRectForRow.Height; if (Button.doButton(7301991, drawRectForRow.X, drawRectForRow.Y, drawRectForRow.Width / 2, drawRectForRow.Height, LocaleTerms.Loc("Back"), new Color?(Color.Gray))) { this.State = DatabaseDaemon.DatabaseState.Browse; this.ActiveFile = (FileEntry)null; this.DeserializedFile = (object)null; } else { Rectangle bounds = new Rectangle((int)this.BlockStartTopLeft.X, (int)this.BlockStartTopLeft.Y + (int)this.blockSize, (int)((double)this.blockSize * (double)(this.blocksWide - 1)), (int)((double)this.blockSize * (double)(this.blocksHigh - 2))); if (this.HasSpecialCaseDraw) { ReflectiveRenderer.PreRenderForObject += (Action <Vector2, Type, string>)((pos, targetType, targetValue) => this.DrawSpecialCase(pos, bounds, targetType, targetValue, spriteBatch)); } ReflectiveRenderer.RenderObject(this.DeserializedFile, bounds, spriteBatch, this.ScrollPanel, this.ThemeColor); if (this.HasSpecialCaseDraw) { ReflectiveRenderer.PreRenderForObject = (Action <Vector2, Type, string>)null; } } }
public void DrawSpecialCase(Vector2 currentPos, Rectangle totalArea, Type objType, string drawnValue, SpriteBatch sb) { if (!(sb.Name != "AltRTBatch") || !(objType == typeof(Neopal.PetType))) { return; } int num1 = Math.Min(ReflectiveRenderer.GetEntryLineHeight() * 6, totalArea.Width / 4); Texture2D sprite = this.PlaceholderSprite; Neopal.PetType petType = (Neopal.PetType)Enum.Parse(objType, drawnValue); if (this.WildcardAssets.ContainsKey((object)petType)) { sprite = this.WildcardAssets[(object)petType]; } Rectangle petDrawPos = new Rectangle(totalArea.X + totalArea.Width - num1 - 10, (int)currentPos.Y + 4, num1, num1); double num2 = (double)sprite.Height / (double)petDrawPos.Height; int val2 = totalArea.Y + totalArea.Height - petDrawPos.Y; int height = Math.Min(sprite.Height, (int)(num2 * (double)val2)); Rectangle?clip = new Rectangle?(new Rectangle(0, 0, sprite.Width, height)); petDrawPos.Height = Math.Min(petDrawPos.Height, val2); this.os.postFXDrawActions += (Action)(() => sb.Draw(sprite, petDrawPos, clip, Color.White)); }
private static List <ReflectiveRenderer.RenderableField> GetRenderablesFromType(Type type, object o, int indentLevel = 0) { List <ReflectiveRenderer.RenderableField> renderableFieldList = new List <ReflectiveRenderer.RenderableField>(); if (ObjectSerializer.IsSimple(type)) { renderableFieldList.Add(new ReflectiveRenderer.RenderableField() { VariableName = "Data", RenderedValue = o.ToString(), IsTitle = false, IndentLevel = indentLevel, t = type }); } else if (ObjectSerializer.TypeInstanceOfInterface(type, typeof(ICollection))) { foreach (object o1 in (IEnumerable)(o as ICollection)) { renderableFieldList.AddRange((IEnumerable <ReflectiveRenderer.RenderableField>)ReflectiveRenderer.GetRenderablesFromType(o1.GetType(), o1, indentLevel + 1)); } } else { renderableFieldList.Add(new ReflectiveRenderer.RenderableField() { IsTitle = true, RenderedValue = ReflectiveRenderer.FilterTypeName(type.Name), IndentLevel = indentLevel }); FieldInfo[] fields = type.GetFields(); for (int index = 0; index < fields.Length; ++index) { if (ObjectSerializer.IsSimple(fields[index].FieldType)) { renderableFieldList.Add(new ReflectiveRenderer.RenderableField() { VariableName = fields[index].Name, RenderedValue = fields[index].GetValue(o).ToString(), IsTitle = false, IndentLevel = indentLevel, t = fields[index].FieldType }); } else { renderableFieldList.AddRange((IEnumerable <ReflectiveRenderer.RenderableField>)ReflectiveRenderer.GetRenderablesFromType(fields[index].FieldType, fields[index].GetValue(o), indentLevel + 1)); } } PropertyInfo[] properties = type.GetProperties(); for (int index = 0; index < properties.Length; ++index) { if (ObjectSerializer.IsSimple(properties[index].PropertyType)) { renderableFieldList.Add(new ReflectiveRenderer.RenderableField() { VariableName = properties[index].Name, RenderedValue = properties[index].GetValue(o, (object[])null).ToString(), IsTitle = false, IndentLevel = indentLevel, t = properties[index].PropertyType }); } else { renderableFieldList.AddRange((IEnumerable <ReflectiveRenderer.RenderableField>)ReflectiveRenderer.GetRenderablesFromType(properties[index].PropertyType, properties[index].GetValue(o, (object[])null), indentLevel + 1)); } } } return(renderableFieldList); }