Esempio n. 1
0
        public void DrawTooltip(GameTime gameTime, RenderEnv env, StringLinker stringLinker)
        {
            if (tooltipTarget == null)
            {
                return;
            }

            StringResult     sr;
            List <TextBlock> blocks = new List <TextBlock>();
            Vector2          size   = Vector2.Zero;

            switch (tooltipTarget.ObjectType)
            {
            case RenderObjectType.Mob:
            {
                LifePatch p = tooltipTarget as LifePatch;
                stringLinker.StringMob.TryGetValue(p.LifeID, out sr);
                Vector2 current = Vector2.Zero;

                PrepareTextBlock(blocks, env.Fonts.TooltipTitleFont, sr == null ? "(null)" : sr.Name, ref current, Color.White);
                current += new Vector2(4, 4);
                PrepareTextBlock(blocks, env.Fonts.TooltipContentFont, "id:" + p.LifeID.ToString("d7"), ref current, Color.White);
                size.X  = Math.Max(size.X, current.X);
                current = new Vector2(0, current.Y + 16);

                LifeInfo info = p.LifeInfo;

                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "Level: " + info.level + (info.boss ? " (Boss)" : null), ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "HP/MP: " + info.maxHP + " / " + info.maxMP, ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "PAD/MAD: " + info.PADamage + " / " + info.MADamage, ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "PDr/MDr: " + info.PDRate + "% / " + info.MDRate + "%", ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "Acc/Eva: " + info.acc + " / " + info.eva, ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "KB: " + info.pushed, ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "Exp: " + info.exp, ref current, Color.White, ref size.X);
                if (info.undead)
                {
                    PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "undead: 1", ref current, Color.White, ref size.X);
                }
                StringBuilder sb;
                if ((sb = GetLifeElemAttrString(ref info.elemAttr)).Length > 0)
                {
                    PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "elem: " + sb.ToString(), ref current, Color.White, ref size.X);
                }
                size.Y = current.Y;
            }
            break;

            case RenderObjectType.Npc:
            {
                LifePatch p = tooltipTarget as LifePatch;
                stringLinker.StringNpc.TryGetValue(p.LifeID, out sr);
                Vector2 current = Vector2.Zero;

                PrepareTextBlock(blocks, env.Fonts.TooltipTitleFont, sr == null ? "(null)" : sr.Name, ref current, Color.White);
                current += new Vector2(4, 4);
                PrepareTextBlock(blocks, env.Fonts.TooltipContentFont, "id:" + p.LifeID.ToString("d7"), ref current, Color.White);
                size.X  = Math.Max(size.X, current.X);
                current = new Vector2(0, current.Y + 16);

                foreach (var kv in p.Actions)
                {
                    if (kv.Value == p.Frames)
                    {
                        PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "action: " + kv.Key, ref current, Color.White, ref size.X);
                    }
                }
                size.Y = current.Y;
            }
            break;

            case RenderObjectType.Portal:
            {
                PortalPatch p       = tooltipTarget as PortalPatch;
                Vector2     current = Vector2.Zero;
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "pName: " + p.PortalName, ref current, Color.White, ref size.X);
                string pTypeName = GetPortalTypeString(p.PortalType);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "pType: " + p.PortalType + (pTypeName == null ? null : (" (" + pTypeName + ")")), ref current, Color.White, ref size.X);
                stringLinker.StringMap.TryGetValue(p.ToMap, out sr);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "toMap: " + (sr == null ? "(null)" : sr.Name) + "(" + p.ToMap + ")", ref current, Color.White, ref size.X);
                PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "toName: " + p.ToName, ref current, Color.White, ref size.X);
                if (!string.IsNullOrEmpty(p.Script))
                {
                    PrepareTextLine(blocks, env.Fonts.TooltipContentFont, "script: " + p.Script, ref current, Color.White, ref size.X);
                }
                size.Y = current.Y;
            }
            break;
            }

            if (blocks.Count > 0)
            {
                size += new Vector2(26, 26);
                Vector2 origin = new Vector2(env.Input.MousePosition.X, env.Input.MousePosition.Y);
                origin.X = MathHelper.Clamp(origin.X, 0, Math.Max(0, env.Camera.Width - size.X));
                origin.Y = MathHelper.Clamp(origin.Y, 0, Math.Max(0, env.Camera.Height - size.Y));
                this.DrawFrame(env, origin, size);

                origin += new Vector2(13, 13);
                foreach (TextBlock block in blocks)
                {
                    env.Sprite.DrawStringEx(block.Font, block.Text, block.Position, block.ForeColor, -origin);
                }
            }
        }
Esempio n. 2
0
        public void DrawTooltip(GameTime gameTime, RenderEnv env, StringLinker stringLinker)
        {
            if (tooltipTarget == null)
            {
                return;
            }

            StringResult     sr;
            List <TextBlock> blocks = new List <TextBlock>();
            Vector2          size   = Vector2.Zero;

            switch (tooltipTarget.ObjectType)
            {
            case RenderObjectType.Mob:
            {
                LifePatch p = tooltipTarget as LifePatch;
                stringLinker.StringMob.TryGetValue(p.LifeID, out sr);
                Vector2 current = Vector2.Zero;

                blocks.Add(PrepareTextBlock(env.Fonts.TooltipTitleFont, sr == null ? "(null)" : sr.Name, ref current, Color.White));
                current += new Vector2(4, 4);
                blocks.Add(PrepareTextBlock(env.Fonts.TooltipContentFont, "id:" + p.LifeID.ToString("d7"), ref current, Color.White));
                size.X  = Math.Max(size.X, current.X);
                current = new Vector2(0, current.Y + 16);

                LifeInfo info = p.LifeInfo;
                Vector2  size2;
                var      blocks2 = TooltipHelper.Prepare(info, env.Fonts, out size2);
                for (int i = 0; i < blocks2.Length; i++)
                {
                    blocks2[i].Position.Y += current.Y;
                    blocks.Add(blocks2[i]);
                }
                size.X = Math.Max(size.X, size2.X);
                size.Y = current.Y + size2.Y;
            }
            break;

            case RenderObjectType.Npc:
            {
                LifePatch p = tooltipTarget as LifePatch;
                stringLinker.StringNpc.TryGetValue(p.LifeID, out sr);
                Vector2 current = Vector2.Zero;

                blocks.Add(PrepareTextBlock(env.Fonts.TooltipTitleFont, sr == null ? "(null)" : sr.Name, ref current, Color.White));
                current += new Vector2(4, 4);
                blocks.Add(PrepareTextBlock(env.Fonts.TooltipContentFont, "id:" + p.LifeID.ToString("d7"), ref current, Color.White));
                size.X  = Math.Max(size.X, current.X);
                current = new Vector2(0, current.Y + 16);

                foreach (var kv in p.Actions)
                {
                    if (kv.Value == p.Frames)
                    {
                        blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "action: " + kv.Key, ref current, Color.White, ref size.X));
                    }
                }
                size.Y = current.Y;
            }
            break;

            case RenderObjectType.Portal:
            {
                PortalPatch p       = tooltipTarget as PortalPatch;
                Vector2     current = Vector2.Zero;
                blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "pName: " + p.PortalName, ref current, Color.White, ref size.X));
                string pTypeName = GetPortalTypeString(p.PortalType);
                blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "pType: " + p.PortalType + (pTypeName == null ? null : (" (" + pTypeName + ")")), ref current, Color.White, ref size.X));
                stringLinker.StringMap.TryGetValue(p.ToMap, out sr);
                blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "toMap: " + (sr == null ? "(null)" : sr.Name) + "(" + p.ToMap + ")", ref current, Color.White, ref size.X));
                blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "toName: " + p.ToName, ref current, Color.White, ref size.X));
                if (!string.IsNullOrEmpty(p.Script))
                {
                    blocks.Add(PrepareTextLine(env.Fonts.TooltipContentFont, "script: " + p.Script, ref current, Color.White, ref size.X));
                }
                size.Y = current.Y;
            }
            break;
            }

            if (blocks.Count > 0)
            {
                size += new Vector2(26, 26);
                Vector2 origin = new Vector2(env.Input.MousePosition.X, env.Input.MousePosition.Y);
                origin.X = MathHelper.Clamp(origin.X, 0, Math.Max(0, env.Camera.Width - size.X));
                origin.Y = MathHelper.Clamp(origin.Y, 0, Math.Max(0, env.Camera.Height - size.Y));
                this.DrawFrame(env, origin, size);

                origin += new Vector2(13, 13);
                foreach (TextBlock block in blocks)
                {
                    env.Sprite.DrawStringEx(block.Font, block.Text, block.Position, block.ForeColor, -origin);
                }
            }
        }