OSDN Git Service

* Hookup our own appearance changes
authorLatif Khalifa <latifer@streamgrid.net>
Wed, 20 Jul 2011 15:21:25 +0000 (15:21 +0000)
committerLatif Khalifa <latifer@streamgrid.net>
Wed, 20 Jul 2011 15:21:25 +0000 (15:21 +0000)
* Attempt to draw text of only visible objects
* Expand text rectangle a bit to avoid clipping of the last letter

git-svn-id: https://radegast.googlecode.com/svn/trunk@994 f7a694da-4d33-11de-9ad6-1127a62b9fcd

Radegast/GUI/Rendering/Rendering.cs

index 24893be..24e6dca 100644 (file)
@@ -192,11 +192,11 @@ namespace Radegast.Rendering
             Client.Terrain.LandPatchReceived += new EventHandler<LandPatchReceivedEventArgs>(Terrain_LandPatchReceived);\r
             Client.Avatars.AvatarAnimation += new EventHandler<AvatarAnimationEventArgs>(AvatarAnimationChanged);\r
             Client.Avatars.AvatarAppearance += new EventHandler<AvatarAppearanceEventArgs>(Avatars_AvatarAppearance);\r
+            Client.Appearance.AppearanceSet += new EventHandler<AppearanceSetEventArgs>(Appearance_AppearanceSet);\r
             Instance.Netcom.ClientDisconnected += new EventHandler<DisconnectedEventArgs>(Netcom_ClientDisconnected);\r
             Application.Idle += new EventHandler(Application_Idle);\r
         }\r
 \r
-\r
         void frmPrimWorkshop_Disposed(object sender, EventArgs e)\r
         {\r
             RenderingEnabled = false;\r
@@ -213,6 +213,7 @@ namespace Radegast.Rendering
             Client.Terrain.LandPatchReceived -= new EventHandler<LandPatchReceivedEventArgs>(Terrain_LandPatchReceived);\r
             Client.Avatars.AvatarAnimation -= new EventHandler<AvatarAnimationEventArgs>(AvatarAnimationChanged);\r
             Client.Avatars.AvatarAppearance -= new EventHandler<AvatarAppearanceEventArgs>(Avatars_AvatarAppearance);\r
+            Client.Appearance.AppearanceSet -= new EventHandler<AppearanceSetEventArgs>(Appearance_AppearanceSet);\r
 \r
             if (instance.Netcom != null)\r
             {\r
@@ -388,6 +389,17 @@ namespace Radegast.Rendering
             }\r
         }\r
 \r
+        void Appearance_AppearanceSet(object sender, AppearanceSetEventArgs e)\r
+        {\r
+            if (e.Success)\r
+            {\r
+                RenderAvatar me;\r
+                if (Avatars.TryGetValue(Client.Self.LocalID, out me))\r
+                {\r
+                    me.glavatar.morph(me.avatar);\r
+                }\r
+            }\r
+        }\r
 \r
         #endregion Network messaage handlers\r
 \r
@@ -1133,31 +1145,32 @@ namespace Radegast.Rendering
                     {\r
                         Printer.Begin();\r
                         Printer.Print(tagText, AvatarTagFont, Color.Orange,\r
-                            new RectangleF(screenPos.X, screenPos.Y, tSize.BoundingBox.Width, tSize.BoundingBox.Height),\r
+                            new RectangleF(screenPos.X, screenPos.Y, tSize.BoundingBox.Width + 2, tSize.BoundingBox.Height + 2),\r
                             OpenTK.Graphics.TextPrinterOptions.Default, OpenTK.Graphics.TextAlignment.Center);\r
                         Printer.End();\r
                     }\r
                 }\r
             }\r
 \r
-            lock (Prims)\r
+            lock (SortedObjects)\r
             {\r
                 int primNr = 0;\r
-                foreach (RenderPrimitive mesh in Prims.Values)\r
+                foreach (SceneObject obj in SortedObjects)\r
                 {\r
+                    if (!(obj is RenderPrimitive)) continue;\r
+\r
+                    RenderPrimitive prim = (RenderPrimitive)obj;\r
                     primNr++;\r
-                    Primitive prim = mesh.Prim;\r
-                    if (!string.IsNullOrEmpty(prim.Text))\r
+\r
+                    if (!string.IsNullOrEmpty(prim.BasePrim.Text))\r
                     {\r
-                        string text = System.Text.RegularExpressions.Regex.Replace(prim.Text, "(\r?\n)+", "\n");\r
-                        var newPrimPos = PrimPos(prim);\r
-                        OpenTK.Vector3 primPos = new OpenTK.Vector3(newPrimPos.X, newPrimPos.Y, newPrimPos.Z);\r
-                        var distance = Vector3.Distance(newPrimPos, Camera.Position);\r
+                        string text = System.Text.RegularExpressions.Regex.Replace(prim.BasePrim.Text, "(\r?\n)+", "\n");\r
+                        OpenTK.Vector3 primPos = RHelp.TKVector3(prim.RenderPosition);\r
 \r
                         // Display hovertext only on objects that are withing 12m of the camera\r
-                        if (distance > 12) continue;\r
+                        if (prim.DistanceSquared > (12 * 12)) continue;\r
 \r
-                        primPos.Z += prim.Scale.Z * 0.8f;\r
+                        primPos.Z += prim.BasePrim.Scale.Z * 0.8f;\r
 \r
                         // Convert objects world position to 2D screen position in pixels\r
                         OpenTK.Vector3 screenPos;\r
@@ -1166,7 +1179,7 @@ namespace Radegast.Rendering
 \r
                         Printer.Begin();\r
 \r
-                        Color color = Color.FromArgb((int)(prim.TextColor.A * 255), (int)(prim.TextColor.R * 255), (int)(prim.TextColor.G * 255), (int)(prim.TextColor.B * 255));\r
+                        Color color = Color.FromArgb((int)(prim.BasePrim.TextColor.A * 255), (int)(prim.BasePrim.TextColor.R * 255), (int)(prim.BasePrim.TextColor.G * 255), (int)(prim.BasePrim.TextColor.B * 255));\r
 \r
                         var size = Printer.Measure(text, HoverTextFont);\r
                         screenPos.X -= size.BoundingBox.Width / 2;\r
@@ -1178,10 +1191,10 @@ namespace Radegast.Rendering
                             // Shadow\r
                             if (color != Color.Black)\r
                             {\r
-                                Printer.Print(text, HoverTextFont, Color.Black, new RectangleF(screenPos.X + 1, screenPos.Y + 1, size.BoundingBox.Width, size.BoundingBox.Height), OpenTK.Graphics.TextPrinterOptions.Default, OpenTK.Graphics.TextAlignment.Center);\r
+                                Printer.Print(text, HoverTextFont, Color.Black, new RectangleF(screenPos.X + 1, screenPos.Y + 1, size.BoundingBox.Width + 2, size.BoundingBox.Height + 2), OpenTK.Graphics.TextPrinterOptions.Default, OpenTK.Graphics.TextAlignment.Center);\r
                             }\r
                             // Text\r
-                            Printer.Print(text, HoverTextFont, color, new RectangleF(screenPos.X, screenPos.Y, size.BoundingBox.Width, size.BoundingBox.Height), OpenTK.Graphics.TextPrinterOptions.Default, OpenTK.Graphics.TextAlignment.Center);\r
+                            Printer.Print(text, HoverTextFont, color, new RectangleF(screenPos.X, screenPos.Y, size.BoundingBox.Width + 2, size.BoundingBox.Height + 2), OpenTK.Graphics.TextPrinterOptions.Default, OpenTK.Graphics.TextAlignment.Center);\r
                         }\r
 \r
                         Printer.End();\r