private readonly Image _errorImage;
private readonly IEntityManager _sEntityManager;
+ private readonly SpriteSystem _sprite;
public EntityPainter(ClientIntegrationInstance client, ServerIntegrationInstance server)
{
_resManager = client.ResolveDependency<IResourceManager>();
_sEntityManager = server.ResolveDependency<IEntityManager>();
+ _sprite = client.ResolveDependency<IEntityManager>().System<SpriteSystem>();
_images = new Dictionary<(string path, string state), Image>();
_errorImage = Image.Load<Rgba32>(_resManager.ContentFileRead("/Textures/error.rsi/error.png"));
foreach (var entity in entities)
{
- Run(canvas, entity, xformSystem, customOffset);;
+ Run(canvas, entity, xformSystem, customOffset);
}
- Console.WriteLine($"{nameof(EntityPainter)} painted {entities.Count} entities in {(int) stopwatch.Elapsed.TotalMilliseconds} ms");
+ Console.WriteLine($"{nameof(EntityPainter)} painted {entities.Count} entities in {(int)stopwatch.Elapsed.TotalMilliseconds} ms");
}
public void Run(Image canvas, EntityData entity, SharedTransformSystem xformSystem, Vector2 customOffset = default)
image = image.CloneAs<Rgba32>();
- static (int, int, int, int) GetRsiFrame(RSI? rsi, Image image, EntityData entity, ISpriteLayer layer, int direction)
+ (int, int, int, int) GetRsiFrame(RSI? rsi, Image image, EntityData entity, ISpriteLayer layer, int direction)
{
if (rsi is null)
return (0, 0, EyeManager.PixelsPerMeter, EyeManager.PixelsPerMeter);
var statesX = image.Width / rsi.Size.X;
var statesY = image.Height / rsi.Size.Y;
var stateCount = statesX * statesY;
- var frames = stateCount / entity.Sprite.GetLayerDirectionCount(layer);
+ var frames = stateCount / _sprite.LayerGetDirectionCount((SpriteComponent.Layer)layer);
var target = direction * frames;
var targetY = target / statesX;
var targetX = target % statesX;
return (targetX * rsi.Size.X, targetY * rsi.Size.Y, rsi.Size.X, rsi.Size.Y);
}
- var dir = entity.Sprite.GetLayerDirectionCount(layer) switch
+ var dir = _sprite.LayerGetDirectionCount((SpriteComponent.Layer)layer) switch
{
0 => 0,
- _ => (int) layer.EffectiveDirection(worldRotation)
+ _ => (int)layer.EffectiveDirection(worldRotation)
};
var (x, y, width, height) = GetRsiFrame(rsi, image, entity, layer, dir);
image.Mutate(o => o.Crop(rect));
var spriteRotation = 0f;
- if (!entity.Sprite.NoRotation && !entity.Sprite.SnapCardinals && entity.Sprite.GetLayerDirectionCount(layer) == 1)
+ if (!entity.Sprite.NoRotation && !entity.Sprite.SnapCardinals && _sprite.LayerGetDirectionCount((SpriteComponent.Layer)layer) == 1)
{
- spriteRotation = (float) worldRotation.Degrees;
+ spriteRotation = (float)worldRotation.Degrees;
}
var colorMix = entity.Sprite.Color * layer.Color;
coloredImage.Mutate(o => o.BackgroundColor(imageColor));
var (imgX, imgY) = rsi?.Size ?? (EyeManager.PixelsPerMeter, EyeManager.PixelsPerMeter);
- var offsetX = (int) (entity.Sprite.Offset.X + customOffset.X) * EyeManager.PixelsPerMeter;
- var offsetY = (int) (entity.Sprite.Offset.Y + customOffset.X) * EyeManager.PixelsPerMeter;
+ var offsetX = (int)(entity.Sprite.Offset.X + customOffset.X) * EyeManager.PixelsPerMeter;
+ var offsetY = (int)(entity.Sprite.Offset.Y + customOffset.X) * EyeManager.PixelsPerMeter;
image.Mutate(o => o
.DrawImage(coloredImage, PixelColorBlendingMode.Multiply, PixelAlphaCompositionMode.SrcAtop, 1)
.Resize(imgX, imgY)
.Flip(FlipMode.Vertical)
.Rotate(spriteRotation));
- var pointX = (int) entity.X + offsetX - imgX / 2;
- var pointY = (int) entity.Y + offsetY - imgY / 2;
+ var pointX = (int)entity.X + offsetX - imgX / 2;
+ var pointY = (int)entity.Y + offsetY - imgY / 2;
canvas.Mutate(o => o.DrawImage(image, new Point(pointX, pointY), 1));
}
}