-
Notifications
You must be signed in to change notification settings - Fork 16
/
FaceRenderer.cs
43 lines (37 loc) · 1.84 KB
/
FaceRenderer.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
using EndlessClient.Rendering.Sprites;
using EOLib;
using EOLib.Domain.Character;
using EOLib.Domain.Extensions;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;
namespace EndlessClient.Rendering.CharacterProperties
{
public class FaceRenderer : BaseCharacterPropertyRenderer
{
private readonly ISpriteSheet _faceSheet;
private readonly ISpriteSheet _skinSheet;
private readonly SkinRenderLocationCalculator _skinRenderLocationCalculator;
public override bool CanRender => _renderProperties.IsActing(CharacterActionState.Emote) &&
_renderProperties.EmoteFrame > 0 &&
_renderProperties.Emote != Emote.Trade &&
_renderProperties.Emote != Emote.LevelUp;
public FaceRenderer(ICharacterRenderProperties renderProperties,
ISpriteSheet faceSheet,
ISpriteSheet skinSheet)
: base(renderProperties)
{
_faceSheet = faceSheet;
_skinSheet = skinSheet;
_skinRenderLocationCalculator = new SkinRenderLocationCalculator(_renderProperties);
}
public override void Render(SpriteBatch spriteBatch, Rectangle parentCharacterDrawArea)
{
if (!_renderProperties.IsFacing(EODirection.Down, EODirection.Right))
return;
var skinLoc = _skinRenderLocationCalculator.CalculateDrawLocationOfCharacterSkin(_skinSheet.SourceRectangle, parentCharacterDrawArea);
var facePos = new Vector2(skinLoc.X + (_renderProperties.IsFacing(EODirection.Down) ? 2 : 3),
skinLoc.Y + (_renderProperties.Gender == 0 ? 2 : 0));
Render(spriteBatch, _faceSheet, facePos);
}
}
}