Skip to content

Commit

Permalink
Update character renderers to take into account destination coordinat…
Browse files Browse the repository at this point in the history
…es when walking. Fixes display bug where weapon would render underneath wall when walking.
  • Loading branch information
ethanmoffat committed Mar 8, 2022
1 parent fdc848d commit a37ecfd
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 19 deletions.
20 changes: 18 additions & 2 deletions EOLib/Domain/Map/MapCoordinate.cs
@@ -1,6 +1,8 @@
namespace EOLib.Domain.Map
using System;

namespace EOLib.Domain.Map
{
public struct MapCoordinate
public struct MapCoordinate : IComparable<MapCoordinate>
{
public int X { get; }

Expand Down Expand Up @@ -44,5 +46,19 @@ public override int GetHashCode()
hash = (hash * 397) ^ Y.GetHashCode();
return hash;
}

public int CompareTo(MapCoordinate other)
{
if (other == null)
return -1;

if (other.X < X || other.Y < Y)
return -1;

if (other.X > X || other.Y > Y)
return 1;

return 0;
}
}
}
14 changes: 6 additions & 8 deletions EndlessClient/Rendering/Map/MapRenderer.cs
Expand Up @@ -210,7 +210,7 @@ private void DrawMapToRenderTarget()
GraphicsDevice.SetRenderTarget(_mapObjectTarget);
GraphicsDevice.Clear(ClearOptions.Target, Color.Transparent, 0, 0);

var gfxToRenderLast = new SortedList<Point, List<MapRenderLayer>>(new PointComparer());
var gfxToRenderLast = new SortedList<MapCoordinate, List<IMapEntityRenderer>>();

_sb.Begin();

Expand All @@ -228,11 +228,11 @@ private void DrawMapToRenderTarget()

if (renderer.ShouldRenderLast)
{
var renderLaterKey = new Point(col, row);
var renderLaterKey = new MapCoordinate(col, row);
if (gfxToRenderLast.ContainsKey(renderLaterKey))
gfxToRenderLast[renderLaterKey].Add(renderer.RenderLayer);
gfxToRenderLast[renderLaterKey].Add(renderer);
else
gfxToRenderLast.Add(renderLaterKey, new List<MapRenderLayer> { renderer.RenderLayer });
gfxToRenderLast.Add(renderLaterKey, new List<IMapEntityRenderer> { renderer });
}
else
renderer.RenderElementAt(_sb, row, col, alpha);
Expand All @@ -245,11 +245,9 @@ private void DrawMapToRenderTarget()
var pointKey = kvp.Key;
var alpha = GetAlphaForCoordinates(pointKey.X, pointKey.Y, immutableCharacter);

foreach (var layer in kvp.Value)
foreach (var renderer in kvp.Value)
{
_mapEntityRendererProvider.MapEntityRenderers
.Single(x => x.RenderLayer == layer)
.RenderElementAt(_sb, pointKey.Y, pointKey.X, alpha);
renderer.RenderElementAt(_sb, pointKey.Y, pointKey.X, alpha);
}
}

Expand Down
@@ -1,8 +1,8 @@
using System;
using EndlessClient.Rendering.Character;
using EndlessClient.Rendering.Character;
using EndlessClient.Rendering.Chat;
using EndlessClient.Rendering.Map;
using EOLib.Domain.Character;
using EOLib.Domain.Extensions;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

Expand Down Expand Up @@ -33,8 +33,15 @@ public class MainCharacterEntityRenderer : BaseMapEntityRenderer

protected override bool ElementExistsAt(int row, int col)
{
return row == _characterProvider.MainCharacter.RenderProperties.MapY &&
col == _characterProvider.MainCharacter.RenderProperties.MapX;
var rp = _characterProvider.MainCharacter.RenderProperties;
if (!rp.IsActing(CharacterActionState.Walking))
{
return row == rp.MapY && col == rp.MapX;
}
else
{
return row == rp.GetDestinationY() && col == rp.GetDestinationX();
}
}

public override void RenderElementAt(SpriteBatch spriteBatch, int row, int col, int alpha, Vector2 additionalOffset = default)
Expand Down
@@ -1,9 +1,9 @@
using System;
using System.Linq;
using System.Linq;
using EndlessClient.Rendering.Character;
using EndlessClient.Rendering.Chat;
using EndlessClient.Rendering.Map;
using EOLib.Domain.Character;
using EOLib.Domain.Extensions;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Graphics;

Expand Down Expand Up @@ -40,9 +40,7 @@ protected override bool ElementExistsAt(int row, int col)

public override void RenderElementAt(SpriteBatch spriteBatch, int row, int col, int alpha, Vector2 additionalOffset = default)
{
var idsToRender = _characterStateCache.OtherCharacters.Keys.Where(
key => _characterStateCache.OtherCharacters[key].RenderProperties.MapX == col &&
_characterStateCache.OtherCharacters[key].RenderProperties.MapY == row);
var idsToRender = _characterStateCache.OtherCharacters.Keys.Where(k => IsAtPosition(k, row, col));

foreach (var id in idsToRender)
{
Expand All @@ -58,5 +56,17 @@ public override void RenderElementAt(SpriteBatch spriteBatch, int row, int col,
bubble.DrawToSpriteBatch(spriteBatch);
}
}
private bool IsAtPosition(int characterId, int row, int col)
{
var rp = _characterStateCache.OtherCharacters[characterId].RenderProperties;
if (!rp.IsActing(CharacterActionState.Walking))
{
return row == rp.MapY && col == rp.MapX;
}
else
{
return row == rp.GetDestinationY() && col == rp.GetDestinationX();
}
}
}
}

0 comments on commit a37ecfd

Please sign in to comment.