From 5fafaad691f5f895d819096167af1dd565de9945 Mon Sep 17 00:00:00 2001 From: excitedneon Date: Sun, 14 May 2017 01:39:10 +0300 Subject: [PATCH] Add newlines to text rendering and display item info --- Assets/Prefabs/PC.prefab | 129 +++++++++--------- Assets/Scripts/Console/DebugConsole.cs | 6 +- Assets/Scripts/Controls/InventoryInterface.cs | 26 +++- Assets/Scripts/Util/FontUtil.cs | 12 ++ Assets/Scripts/Util/FontUtil.cs.meta | 12 ++ Assets/Scripts/Util/TextTextureRenderer.cs | 36 ++++- 6 files changed, 148 insertions(+), 73 deletions(-) create mode 100644 Assets/Scripts/Util/FontUtil.cs create mode 100644 Assets/Scripts/Util/FontUtil.cs.meta diff --git a/Assets/Prefabs/PC.prefab b/Assets/Prefabs/PC.prefab index f43867a..85ad27f 100644 --- a/Assets/Prefabs/PC.prefab +++ b/Assets/Prefabs/PC.prefab @@ -2211,8 +2211,8 @@ Transform: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1292364954462330} m_LocalRotation: {x: 0.5, y: -0.5, z: 0.5, w: 0.5} - m_LocalPosition: {x: -0.03500003, y: 0.564, z: -0.5200002} - m_LocalScale: {x: 0.04500006, y: 0.010000011, z: 0.040000014} + m_LocalPosition: {x: -0.03500003, y: 0.564, z: -0.54} + m_LocalScale: {x: 0.05, y: 0.01, z: 0.04} m_Children: [] m_Father: {fileID: 4236387573765288} m_RootOrder: 9 @@ -2448,8 +2448,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1491104319836832} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2480,8 +2480,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1883316003296622} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2512,8 +2512,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1173974356424114} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2576,8 +2576,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1169828016369232} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2608,8 +2608,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1763859699079746} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2640,8 +2640,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1798430208900394} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2672,8 +2672,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1161476972701840} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2704,8 +2704,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1423050520125662} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2736,8 +2736,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1138410146323874} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2768,8 +2768,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1099916689909070} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2832,8 +2832,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1312791058985896} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2896,8 +2896,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1073554920665706} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2960,8 +2960,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1847434687487808} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -2992,8 +2992,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1025623427266330} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3024,8 +3024,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1467080138821004} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3056,8 +3056,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1296316799000626} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3120,8 +3120,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1750284427022208} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3152,8 +3152,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1248976874401108} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3216,8 +3216,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1603012649709942} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3248,8 +3248,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1509849257957848} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3376,8 +3376,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1611770961802438} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3408,8 +3408,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1371998637789986} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3440,8 +3440,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1008365958193210} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3472,8 +3472,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1966794789270002} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3536,8 +3536,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1631952559203138} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3568,8 +3568,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1614693744922738} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3635,8 +3635,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1848307522325432} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3699,8 +3699,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1585839934909782} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -3731,8 +3731,8 @@ MeshRenderer: m_PrefabInternal: {fileID: 100100000} m_GameObject: {fileID: 1318315545082708} m_Enabled: 1 - m_CastShadows: 1 - m_ReceiveShadows: 1 + m_CastShadows: 0 + m_ReceiveShadows: 0 m_MotionVectors: 1 m_LightProbeUsage: 1 m_ReflectionProbeUsage: 1 @@ -4649,6 +4649,8 @@ MonoBehaviour: Inventory: {fileID: 114702404122310282} Camera: {fileID: 20678872378488080} Hologram: {fileID: 114633016952828368} + ItemNameText: {fileID: 114883821079952200} + ItemDescriptionText: {fileID: 114599527678381310} ItemPreviewMesh: {fileID: 33585471952367662} ItemPreviewSpinner: {fileID: 114807753601238226} IconInventory: {fileID: 23114746529417128} @@ -4796,15 +4798,14 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: TextProperties: - Text: This item is a rare\npiece of the "way\ntoo long of a name"\ntechnology, - invented\nby space goblins in\nancient times. + Text: OffsetX: 5 OffsetY: 0 Centered: 0 Background: {r: 0, g: 0, b: 0, a: 0} FontSize: 32 Width: 256 - Height: 228 + Height: 204 Mesh: {fileID: 23667304044291600} MaterialIndex: 0 Emissive: 0 @@ -5002,7 +5003,7 @@ MonoBehaviour: m_Name: m_EditorClassIdentifier: TextProperties: - Text: Very Long Item\nName + Text: OffsetX: 5 OffsetY: 0 Centered: 0 diff --git a/Assets/Scripts/Console/DebugConsole.cs b/Assets/Scripts/Console/DebugConsole.cs index 81a7b93..8d0cc41 100644 --- a/Assets/Scripts/Console/DebugConsole.cs +++ b/Assets/Scripts/Console/DebugConsole.cs @@ -199,12 +199,8 @@ namespace Cyber.Console { // Set an accurate row length (if the panel is set) if (Panel != null && Panel.GetComponent() != null) { - CharacterInfo CharInfo; - TextField.font.RequestCharactersInTexture("W", TextField.fontSize, - TextField.fontStyle); - TextField.font.GetCharacterInfo('W', out CharInfo, + float CharacterWidth = FontUtil.GetCharacterWidth(TextField.font, TextField.fontSize, TextField.fontStyle); - float CharacterWidth = CharInfo.glyphWidth - 1; float PanelWidth = Panel.GetComponent().rect.width; RowLength = (int) (PanelWidth / CharacterWidth); } diff --git a/Assets/Scripts/Controls/InventoryInterface.cs b/Assets/Scripts/Controls/InventoryInterface.cs index 98e7dbf..71d9110 100644 --- a/Assets/Scripts/Controls/InventoryInterface.cs +++ b/Assets/Scripts/Controls/InventoryInterface.cs @@ -28,6 +28,16 @@ namespace Cyber.Controls { /// public Hologram Hologram; + /// + /// The text texture that shows the selected item's name. + /// + public TextTextureApplier ItemNameText; + + /// + /// The text texture that shows the selected item's description. + /// + public TextTextureApplier ItemDescriptionText; + /// /// The item preview mesh. /// @@ -197,7 +207,21 @@ namespace Cyber.Controls { Spinning = true; } if (ItemGridSelectedIndex == i) { - SetPreviewMesh(ItemGridCellMeshes[i].mesh); + // Set preview information + SetPreviewMesh(Mesh); + TextTextureProperties NameProps = ItemNameText.TextProperties; + TextTextureProperties DescriptionProps = ItemDescriptionText.TextProperties; + if (Item != null) { + NameProps.Text = Item.Name; + DescriptionProps.Text = Item.Description; + } else { + NameProps.Text = "NULL NAME"; + DescriptionProps.Text = "NULL DESC"; + } + ItemNameText.SetTextProperties(NameProps); + ItemDescriptionText.SetTextProperties(DescriptionProps); + + // Move selector if ((ItemGridSelector.position - ItemGridCells[i].position).magnitude < 0.01f) { ItemGridSelector.position = ItemGridCells[i].position; } else { diff --git a/Assets/Scripts/Util/FontUtil.cs b/Assets/Scripts/Util/FontUtil.cs new file mode 100644 index 0000000..06c10df --- /dev/null +++ b/Assets/Scripts/Util/FontUtil.cs @@ -0,0 +1,12 @@ +using System.Collections; +using System.Collections.Generic; +using UnityEngine; + +public class FontUtil : MonoBehaviour { + public static float GetCharacterWidth(Font font, int fontSize, FontStyle fontStyle) { + CharacterInfo CharInfo; + font.RequestCharactersInTexture("W", fontSize, fontStyle); + font.GetCharacterInfo('W', out CharInfo, fontSize, fontStyle); + return CharInfo.glyphWidth - 1; + } +} diff --git a/Assets/Scripts/Util/FontUtil.cs.meta b/Assets/Scripts/Util/FontUtil.cs.meta new file mode 100644 index 0000000..505d6da --- /dev/null +++ b/Assets/Scripts/Util/FontUtil.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 0ab6dbfbebe4b4e11bde0d78e6b3de79 +timeCreated: 1494711505 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/Util/TextTextureRenderer.cs b/Assets/Scripts/Util/TextTextureRenderer.cs index 1c165f7..3cacebd 100644 --- a/Assets/Scripts/Util/TextTextureRenderer.cs +++ b/Assets/Scripts/Util/TextTextureRenderer.cs @@ -31,14 +31,38 @@ namespace Cyber.Util { } private Texture2D RenderText(TextTextureProperties text) { + // Set scales float Scale = 2.0f / text.Width; - Text.text = text.Text.Replace("\\n", "\n"); Text.fontSize = text.FontSize; Text.characterSize = text.FontSize * Scale * 0.25f; + // Fix newlines + Text.text = text.Text.Replace("\\n", "\n"); + float CharacterWidth = FontUtil.GetCharacterWidth(Text.font, + Text.fontSize, Text.fontStyle); + string FixedText = ""; + int CutAmount = 0; + for (int i = 0; i < Text.text.Length; i++) { + int RowLength = i - CutAmount; + string Line = Text.text.Substring(CutAmount, RowLength).Trim() + "\n"; + int NextWordLength = 0; + if (Text.text[i] == ' ' && i + 1 < Text.text.Length) { + NextWordLength = Text.text.Substring(i + 1).Split(' ')[0].Length; + } + if ((Line.Length + NextWordLength) * CharacterWidth > text.Width - text.OffsetX || + Text.text[i] == '\n') { + FixedText += Line; + CutAmount = i; + } + } + FixedText += Text.text.Substring(CutAmount).Trim(); + Text.text = FixedText; + + // Setup render textures RenderTexture TextTexture = RenderTexture.GetTemporary(text.Width, text.Height); RenderTexture OldRT = Camera.targetTexture; + // Calculate positions float OffsetX = -text.Width / 2f; float OffsetY = -text.Height / 2f; if (text.Centered) { @@ -48,20 +72,26 @@ namespace Cyber.Util { Text.anchor = TextAnchor.UpperLeft; } Camera.orthographicSize = 1.0f * text.Height / text.Width; - Camera.targetTexture = TextTexture; - Camera.backgroundColor = text.Background; Camera.transform.localPosition = new Vector3( -(text.OffsetX + OffsetX) * Scale, (text.OffsetY + OffsetY) * Scale); + + // Setup camera + Camera.targetTexture = TextTexture; + Camera.backgroundColor = text.Background; + + // *click* Camera.Render(); Camera.targetTexture = OldRT; + // Copy the result to a Texture2D OldRT = RenderTexture.active; Texture2D Result = new Texture2D(text.Width, text.Height); RenderTexture.active = TextTexture; Result.ReadPixels(new Rect(0, 0, Result.width, Result.height), 0, 0); Result.Apply(); + // Clean up RenderTexture.active = OldRT; RenderTexture.ReleaseTemporary(TextTexture);