Fade out names and health bars when the cursor is not hovered over the character. Closes #218
This commit is contained in:
@@ -15,8 +15,8 @@ namespace Barotrauma
|
|||||||
{
|
{
|
||||||
protected float soundTimer;
|
protected float soundTimer;
|
||||||
protected float soundInterval;
|
protected float soundInterval;
|
||||||
protected float nameTimer;
|
protected float hudInfoTimer;
|
||||||
protected bool nameVisible;
|
protected bool hudInfoVisible;
|
||||||
|
|
||||||
private List<CharacterSound> sounds;
|
private List<CharacterSound> sounds;
|
||||||
|
|
||||||
@@ -212,28 +212,28 @@ namespace Barotrauma
|
|||||||
|
|
||||||
partial void UpdateProjSpecific(float deltaTime, Camera cam)
|
partial void UpdateProjSpecific(float deltaTime, Camera cam)
|
||||||
{
|
{
|
||||||
if (info != null)
|
if (info != null || health < maxHealth * 0.98f)
|
||||||
{
|
{
|
||||||
nameTimer -= deltaTime;
|
hudInfoTimer -= deltaTime;
|
||||||
if (nameTimer <= 0.0f)
|
if (hudInfoTimer <= 0.0f)
|
||||||
{
|
{
|
||||||
if (controlled == null)
|
if (controlled == null)
|
||||||
{
|
{
|
||||||
nameVisible = true;
|
hudInfoVisible = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
//if the character is not in the camera view, the name can't be visible and we can avoid the expensive visibility checks
|
//if the character is not in the camera view, the name can't be visible and we can avoid the expensive visibility checks
|
||||||
else if (WorldPosition.X < cam.WorldView.X || WorldPosition.X > cam.WorldView.Right ||
|
else if (WorldPosition.X < cam.WorldView.X || WorldPosition.X > cam.WorldView.Right ||
|
||||||
WorldPosition.Y > cam.WorldView.Y || WorldPosition.Y < cam.WorldView.Y - cam.WorldView.Height)
|
WorldPosition.Y > cam.WorldView.Y || WorldPosition.Y < cam.WorldView.Y - cam.WorldView.Height)
|
||||||
{
|
{
|
||||||
nameVisible = false;
|
hudInfoVisible = false;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
//Ideally it shouldn't send the character entirely if we can't see them but /shrug, this isn't the most hacker-proof game atm
|
//Ideally it shouldn't send the character entirely if we can't see them but /shrug, this isn't the most hacker-proof game atm
|
||||||
nameVisible = controlled.CanSeeCharacter(this);
|
hudInfoVisible = controlled.CanSeeCharacter(this);
|
||||||
}
|
}
|
||||||
nameTimer = Rand.Range(0.5f, 1.0f);
|
hudInfoTimer = Rand.Range(0.5f, 1.0f);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -291,13 +291,19 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (this == controlled) return;
|
if (this == controlled) return;
|
||||||
|
|
||||||
if (nameVisible && info != null)
|
float hoverRange = 300.0f;
|
||||||
|
float fadeOutRange = 200.0f;
|
||||||
|
float cursorDist = Vector2.Distance(WorldPosition, cam.ScreenToWorld(PlayerInput.MousePosition));
|
||||||
|
float hudInfoAlpha = MathHelper.Clamp(1.0f - (cursorDist - (hoverRange - fadeOutRange)) / fadeOutRange, 0.2f, 1.0f);
|
||||||
|
|
||||||
|
if (hudInfoVisible && info != null)
|
||||||
{
|
{
|
||||||
string name = Info.DisplayName;
|
string name = Info.DisplayName;
|
||||||
if (controlled == null && name != Info.Name) name += " " + TextManager.Get("Disguised");
|
if (controlled == null && name != Info.Name) name += " " + TextManager.Get("Disguised");
|
||||||
|
|
||||||
Vector2 namePos = new Vector2(pos.X, pos.Y - 110.0f - (5.0f / cam.Zoom)) - GUI.Font.MeasureString(Info.Name) * 0.5f / cam.Zoom;
|
Vector2 namePos = new Vector2(pos.X, pos.Y - 110.0f - (5.0f / cam.Zoom)) - GUI.Font.MeasureString(Info.Name) * 0.5f / cam.Zoom;
|
||||||
Vector2 screenSize = new Vector2(GameMain.GraphicsWidth, GameMain.GraphicsHeight);
|
|
||||||
|
Vector2 screenSize = new Vector2(GameMain.GraphicsWidth, GameMain.GraphicsHeight);
|
||||||
Vector2 viewportSize = new Vector2(cam.WorldView.Width, cam.WorldView.Height);
|
Vector2 viewportSize = new Vector2(cam.WorldView.Width, cam.WorldView.Height);
|
||||||
namePos.X -= cam.WorldView.X; namePos.Y += cam.WorldView.Y;
|
namePos.X -= cam.WorldView.X; namePos.Y += cam.WorldView.Y;
|
||||||
namePos *= screenSize / viewportSize;
|
namePos *= screenSize / viewportSize;
|
||||||
@@ -306,13 +312,12 @@ namespace Barotrauma
|
|||||||
namePos.X += cam.WorldView.X; namePos.Y -= cam.WorldView.Y;
|
namePos.X += cam.WorldView.X; namePos.Y -= cam.WorldView.Y;
|
||||||
|
|
||||||
Color nameColor = Color.White;
|
Color nameColor = Color.White;
|
||||||
|
|
||||||
if (Controlled != null && TeamID != Controlled.TeamID)
|
if (Controlled != null && TeamID != Controlled.TeamID)
|
||||||
{
|
{
|
||||||
nameColor = Color.Red;
|
nameColor = Color.Red;
|
||||||
}
|
}
|
||||||
GUI.Font.DrawString(spriteBatch, name, namePos + new Vector2(1.0f / cam.Zoom, 1.0f / cam.Zoom), Color.Black, 0.0f, Vector2.Zero, 1.0f / cam.Zoom, SpriteEffects.None, 0.001f);
|
GUI.Font.DrawString(spriteBatch, name, namePos + new Vector2(1.0f / cam.Zoom, 1.0f / cam.Zoom), Color.Black, 0.0f, Vector2.Zero, 1.0f / cam.Zoom, SpriteEffects.None, 0.001f);
|
||||||
GUI.Font.DrawString(spriteBatch, name, namePos, nameColor, 0.0f, Vector2.Zero, 1.0f / cam.Zoom, SpriteEffects.None, 0.0f);
|
GUI.Font.DrawString(spriteBatch, name, namePos, nameColor * hudInfoAlpha, 0.0f, Vector2.Zero, 1.0f / cam.Zoom, SpriteEffects.None, 0.0f);
|
||||||
|
|
||||||
if (GameMain.DebugDraw)
|
if (GameMain.DebugDraw)
|
||||||
{
|
{
|
||||||
@@ -322,11 +327,13 @@ namespace Barotrauma
|
|||||||
|
|
||||||
if (isDead) return;
|
if (isDead) return;
|
||||||
|
|
||||||
if (health < maxHealth * 0.98f)
|
if (health < maxHealth * 0.98f && hudInfoVisible)
|
||||||
{
|
{
|
||||||
Vector2 healthBarPos = new Vector2(pos.X - 50, DrawPosition.Y + 100.0f);
|
Vector2 healthBarPos = new Vector2(pos.X - 50, DrawPosition.Y + 100.0f);
|
||||||
|
GUI.DrawProgressBar(spriteBatch, healthBarPos, new Vector2(100.0f, 15.0f),
|
||||||
GUI.DrawProgressBar(spriteBatch, healthBarPos, new Vector2(100.0f, 15.0f), health / maxHealth, Color.Lerp(Color.Red, Color.Green, health / maxHealth) * 0.8f);
|
health / maxHealth,
|
||||||
|
Color.Lerp(Color.Red, Color.Green, health / maxHealth) * 0.8f * hudInfoAlpha,
|
||||||
|
new Color(0.5f, 0.57f, 0.6f, 1.0f) * hudInfoAlpha);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user