Skip to content

Commit

Permalink
Merge pull request #227 from bittiez/dev
Browse files Browse the repository at this point in the history
v3.23.0
  • Loading branch information
bittiez committed Apr 10, 2024
2 parents 05e2944 + a337074 commit 08440bd
Show file tree
Hide file tree
Showing 8 changed files with 237 additions and 46 deletions.
1 change: 1 addition & 0 deletions src/ClassicUO.Client/Configuration/Language.cs
Original file line number Diff line number Diff line change
Expand Up @@ -128,6 +128,7 @@ public class General

#region General->Mobiles
public string ShowMobileHP { get; set; } = "Show mobile's HP";
public string ShowTargetIndicator { get; set; } = "Show Target Indicator";
public string MobileHPType { get; set; } = "Type";
public string HPTypePerc { get; set; } = "Percentage";
public string HPTypeBar { get; set; } = "Bar";
Expand Down
1 change: 1 addition & 0 deletions src/ClassicUO.Client/Configuration/Profile.cs
Original file line number Diff line number Diff line change
Expand Up @@ -142,6 +142,7 @@ public sealed class Profile
public bool HighlightMobilesByPoisoned { get; set; } = true;
public bool HighlightMobilesByInvul { get; set; } = true;
public bool ShowMobilesHP { get; set; }
public bool ShowTargetIndicator { get; set; }
public int MobileHPType { get; set; } // 0 = %, 1 = line, 2 = both
public int MobileHPShowWhen { get; set; } // 0 = Always, 1 - <100%
public bool DrawRoofs { get; set; } = true;
Expand Down
38 changes: 36 additions & 2 deletions src/ClassicUO.Client/Game/Managers/HealthLinesManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -33,10 +33,8 @@
using ClassicUO.Configuration;
using ClassicUO.Game.Data;
using ClassicUO.Game.GameObjects;
using ClassicUO.Assets;
using ClassicUO.Renderer;
using Microsoft.Xna.Framework;
using FontStashSharp;

namespace ClassicUO.Game.Managers
{
Expand Down Expand Up @@ -65,6 +63,7 @@ public void Draw(UltimaBatcher2D batcher)
camera.Bounds.Width,
camera.Bounds.Height
);
DrawTargetIndicator(batcher, TargetManager.LastTargetInfo.Serial);
}

if (SerialHelper.IsMobile(TargetManager.SelectedTarget))
Expand All @@ -75,6 +74,7 @@ public void Draw(UltimaBatcher2D batcher)
camera.Bounds.Width,
camera.Bounds.Height
);
DrawTargetIndicator(batcher, TargetManager.SelectedTarget);
}

if (SerialHelper.IsMobile(TargetManager.LastAttack))
Expand All @@ -85,6 +85,7 @@ public void Draw(UltimaBatcher2D batcher)
camera.Bounds.Width,
camera.Bounds.Height
);
DrawTargetIndicator(batcher, TargetManager.LastAttack);
}

if (!IsEnabled)
Expand Down Expand Up @@ -214,6 +215,39 @@ public void Draw(UltimaBatcher2D batcher)
}
}

private void DrawTargetIndicator(UltimaBatcher2D batcher, uint serial)
{
Entity entity = World.Get(serial);

if (entity == null)
{
return;
}
if (ProfileManager.CurrentProfile == null || !ProfileManager.CurrentProfile.ShowTargetIndicator)
{
return;
}
ref readonly var indicatorInfo = ref Client.Game.Gumps.GetGump(0x756F);
if (indicatorInfo.Texture != null)
{
Point p = entity.RealScreenPosition;
p.Y += (int)(entity.Offset.Y - entity.Offset.Z) + 22 + 5;

p = Client.Game.Scene.Camera.WorldToScreen(p);
p.Y -= entity.FrameInfo.Height + 25;

batcher.Draw(
indicatorInfo.Texture,
new Rectangle(p.X - 24, p.Y, indicatorInfo.UV.Width, indicatorInfo.UV.Height),
indicatorInfo.UV,
ShaderHueTranslator.GetHueVector(0, false, 1.0f)
);
}
else
{
ProfileManager.CurrentProfile.ShowTargetIndicator = false; //This sprite doesn't exist for this client, lets avoid checking for it every frame.
}
}
private void DrawHealthLineWithMath(
UltimaBatcher2D batcher,
uint serial,
Expand Down
37 changes: 25 additions & 12 deletions src/ClassicUO.Client/Game/Managers/SkillsGroupManager.cs
Original file line number Diff line number Diff line change
Expand Up @@ -30,17 +30,16 @@

#endregion

using ClassicUO.Assets;
using ClassicUO.Configuration;
using ClassicUO.Game.UI.Gumps;
using ClassicUO.Resources;
using ClassicUO.Utility.Logging;
using System;
using System.Collections.Generic;
using System.IO;
using System.Text;
using System.Xml;
using ClassicUO.Configuration;
using ClassicUO.Game.UI.Gumps;
using ClassicUO.IO;
using ClassicUO.Assets;
using ClassicUO.Resources;
using ClassicUO.Utility.Logging;

namespace ClassicUO.Game.Managers
{
Expand Down Expand Up @@ -165,6 +164,7 @@ public void Save(XmlTextWriter xml)
{
xml.WriteStartElement("group");
xml.WriteAttributeString("name", Name);
xml.WriteAttributeString("isMaximized", IsMaximized.ToString());
xml.WriteStartElement("skillids");

for (int i = 0; i < Count; i++)
Expand All @@ -186,8 +186,16 @@ public void Save(XmlTextWriter xml)

internal static class SkillsGroupManager
{
private static bool _isActive;
public static readonly List<SkillsGroup> Groups = new List<SkillsGroup>();

public static bool IsActive
{
get { return _isActive; }
set
{
_isActive = value;
}
}

public static void Add(SkillsGroup g)
{
Expand Down Expand Up @@ -226,7 +234,7 @@ public static void Load()
if (!File.Exists(path))
{
Log.Trace("No skillsgroups.xml file. Creating a default file.");

MakeDefault();

return;
Expand All @@ -241,21 +249,25 @@ public static void Load()
catch (Exception ex)
{
MakeDefault();

Log.Error(ex.ToString());

return;
}

XmlElement root = doc["skillsgroups"];


XmlElement root = doc["skillsgroups"];
if (root != null)
{
Boolean.TryParse(root.GetAttribute("isActive"), out _isActive);
foreach (XmlElement xml in root.GetElementsByTagName("group"))
{
SkillsGroup g = new SkillsGroup();
g.Name = xml.GetAttribute("name");

Boolean.TryParse(xml.GetAttribute("isMaximized"), out g.IsMaximized);

XmlElement xmlIdsRoot = xml["skillids"];

if (xmlIdsRoot != null)
Expand Down Expand Up @@ -286,6 +298,7 @@ public static void Save()
{
xml.WriteStartDocument(true);
xml.WriteStartElement("skillsgroups");
xml.WriteAttributeString("isActive", IsActive.ToString());

foreach (SkillsGroup k in Groups)
{
Expand Down Expand Up @@ -525,14 +538,14 @@ private static bool LoadMULFile(string path)
{
while ((strbuild = bin.ReadInt16()) != 0)
{
sb.Append((char) strbuild);
sb.Append((char)strbuild);
}
}
else
{
while ((strbuild = bin.ReadByte()) != 0)
{
sb.Append((char) strbuild);
sb.Append((char)strbuild);
}
}

Expand Down
3 changes: 3 additions & 0 deletions src/ClassicUO.Client/Game/UI/Gumps/ModernOptionsGump.cs
Original file line number Diff line number Diff line change
Expand Up @@ -2249,6 +2249,7 @@ private void BuildTazUO()
{
profile.DisableAutoFollowAlt = i;
}), true, page);
content.RemoveIndent();
content.BlankLine();
content.AddToRight(c = new CheckboxWithLabel(lang.GetTazUO.DisableMouseInteractionsForOverheadText, 0, profile.DisableMouseInteractionOverheadText, (b) =>
{
Expand All @@ -2259,6 +2260,8 @@ private void BuildTazUO()
{
profile.OverridePartyAndGuildHue = b;
}), true, page);
content.BlankLine();
content.AddToRight(new CheckboxWithLabel(lang.GetGeneral.ShowTargetIndicator, isChecked: profile.ShowTargetIndicator, valueChanged: (b) => { profile.ShowTargetIndicator = b; }), true, page);
#endregion

#region Misc
Expand Down
96 changes: 84 additions & 12 deletions src/ClassicUO.Client/Game/UI/Gumps/NameOverheadGump.cs
Original file line number Diff line number Diff line change
Expand Up @@ -187,7 +187,7 @@ private void BuildGump()
_background = new AlphaBlendControl(ProfileManager.CurrentProfile.NamePlateOpacity / 100f)
{
WantUpdateSize = false,
Hue = entity is Mobile m ? Notoriety.GetHue(m.NotorietyFlag) : (ushort)0x0481
Hue = entity is Mobile m ? Notoriety.GetHue(m.NotorietyFlag) : Notoriety.GetHue(NotorietyFlag.Gray)
}
);
}
Expand Down Expand Up @@ -734,29 +734,101 @@ public override bool Draw(UltimaBatcher2D batcher, int x, int y)
batcher.DrawRectangle
(
_borderColor,
x - 1,
y - 1,
Width + 1,
Height + 1,
x,
y,
Width,
Height,
hueVector
);

base.Draw(batcher, x, y);

if (ProfileManager.CurrentProfile.NamePlateHealthBar && _isMobile)
{
batcher.Draw
(
SolidColorTextureCache.GetTexture(Color.White),
new Vector2(x, y),
new Rectangle(x, y, Math.Min((int)(Width * _hpPercent), Width), Height),
ShaderHueTranslator.GetHueVector(_background.Hue, false, ProfileManager.CurrentProfile.NamePlateHealthBarOpacity / 100f)
);
Mobile m = World.Mobiles.Get(LocalSerial);
var isPlayer = m is PlayerMobile;
var isInParty = World.Party.Contains(m.Serial);

var _alpha = ProfileManager.CurrentProfile.NamePlateHealthBarOpacity / 100f;
DrawResourceBar(batcher, m, x, y, Height / (isPlayer || isInParty ? 3 : 1), m =>
{
var hpPercent = (double)m.Hits / (double)m.HitsMax;
var _baseHue = hpPercent switch
{
1 => (m is PlayerMobile || World.Party.Contains(m.Serial)) ? 0x0058 : Notoriety.GetHue(m.NotorietyFlag),
> .8 => 0x0058,
> .4 => 0x0030,
_ => 0x0021
};
Vector3 hueVec = ShaderHueTranslator.GetHueVector(_baseHue, false, _alpha);
if (m.IsPoisoned)
{
hueVec = ShaderHueTranslator.GetHueVector(63, false, _alpha);
}
else if (m.IsYellowHits || m.IsParalyzed)
{
hueVec = ShaderHueTranslator.GetHueVector(353, false, _alpha);
}
return (hueVec, hpPercent);
}, out var nY);

if (m is PlayerMobile || isInParty)
{
DrawResourceBar(batcher, m, x, nY, Height / 3, m =>
{
var mpPercent = (double)m.Mana / (double)m.ManaMax;
var _baseHue = mpPercent switch
{
> .6 => 0x0058,
> .2 => 0x0030,
_ => 0x0021
};
Vector3 hueVec = ShaderHueTranslator.GetHueVector(_baseHue, false, _alpha);
return (hueVec, mpPercent);
}, out nY);

DrawResourceBar(batcher, m, x, nY, Height / 3, m =>
{
var spPercent = (double)m.Stamina / (double)m.StaminaMax;
var _baseHue = spPercent switch
{
> .8 => 0x0058,
> .5 => 0x0030,
_ => 0x0021
};
Vector3 hueVec = ShaderHueTranslator.GetHueVector(_baseHue, false, _alpha);
return (hueVec, spPercent);
}, out nY);
y += 20;
}
}

return _text.Draw(batcher, (int)(x + 2 + _textDrawOffset.X), (int)(y + 2 + _textDrawOffset.Y));
}

private void DrawResourceBar(UltimaBatcher2D batcher, Mobile m, int x, int y, int height, Func<Mobile, (Vector3, double)> getHueVector, out int nY)
{
var data = getHueVector == null ? (ShaderHueTranslator.GetHueVector(0x0058), 0) : getHueVector(m);
batcher.DrawRectangle
(
_borderColor,
x,
y,
Width,
height,
ShaderHueTranslator.GetHueVector(0)
);
batcher.Draw
(
SolidColorTextureCache.GetTexture(Color.White),
new Vector2(x + 1, y + 1),
new Rectangle(x, y, Math.Min((int)((Width - 1) * data.Item2), Width - 1), height - 1),
data.Item1
);
nY = y + height;
}

public override void Dispose()
{
_text.Dispose();
Expand Down

0 comments on commit 08440bd

Please sign in to comment.