-
Notifications
You must be signed in to change notification settings - Fork 0
/
HealthLossDisplay.cs
86 lines (59 loc) · 2.26 KB
/
HealthLossDisplay.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
using HamstarHelpers.Helpers.HUD;
using HamstarHelpers.Helpers.TModLoader;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
using Terraria;
using Terraria.ModLoader;
namespace Injury {
class HealthLossDisplay {
public Texture2D HeartTex { get; private set; }
public bool IsAnimatingHeartDrop { get; private set; }
private int HeartDropAnimation = 0;
////////////////
public HealthLossDisplay() {
this.IsAnimatingHeartDrop = false;
if( Main.netMode != 2 ) { // Not server
this.HeartTex = ModContent.GetTexture( "Terraria/Heart" );
}
}
////////////////
public void DrawSubHealth( InjuryMod mymod, SpriteBatch sb ) {
var myplayer = (InjuryPlayer)TmlHelpers.SafelyGetModPlayer( Main.LocalPlayer, mymod, "InjuryPlayer" );
float percent = myplayer.Logic.ComputeHarmBufferPercent( Main.LocalPlayer );
this.DrawSubHealthAtPercent( sb, percent );
}
public void DrawCurrentHeartDropAnimation( InjuryMod mymod, SpriteBatch sb ) {
if( !this.IsAnimatingHeartDrop ) { return; }
this.DrawHeartDropAnimationFrame( sb, this.HeartDropAnimation++, 32 );
if( this.HeartDropAnimation > 16 ) {
this.HeartDropAnimation = 0;
this.IsAnimatingHeartDrop = false;
}
}
////////////////
private void DrawSubHealthAtPercent( SpriteBatch sb, float percent ) {
int width = this.HeartTex.Width;
int height = (int)( (float)this.HeartTex.Height * percent );
var srcRect = new Rectangle( 0, 0, width, height );
int x = 0;
int y = 0;
HUDHealthBarHelpers.GetTopHeartPosition( Main.LocalPlayer.statLife, ref x, ref y );
var destRect = new Rectangle( x, y, width, height );
sb.Draw( this.HeartTex, destRect, srcRect, Color.Black * 0.5f );
}
private void DrawHeartDropAnimationFrame( SpriteBatch sb, int frame, int maxFrames ) {
int x = 0;
int y = 0;
HUDHealthBarHelpers.GetTopHeartPosition( Main.LocalPlayer.statLife, ref x, ref y );
y += frame * 2;
var rect = new Rectangle( x, y, this.HeartTex.Width, this.HeartTex.Height );
float percentProgress = frame / maxFrames;
float alpha = 0.5f - (percentProgress * 0.5f);
sb.Draw( this.HeartTex, rect, Color.White * alpha );
}
////////////////
public void AnimateHeartDrop() {
this.IsAnimatingHeartDrop = true;
}
}
}