Add parallaxFactor in rendering logic.

This commit is contained in:
Gandifil
2023-03-08 19:46:37 +01:00
parent c7568b1b54
commit b1e2451813
@@ -131,17 +131,18 @@ namespace MonoGame.Extended.Tiled.Renderers
if (layer is TiledMapObjectLayer)
return;
Draw(layer, Vector2.Zero, ref viewMatrix, ref projectionMatrix, effect, depth);
Draw(layer, Vector2.Zero, Vector2.One, ref viewMatrix, ref projectionMatrix, effect, depth);
}
private void Draw(TiledMapLayer layer, Vector2 parentOffset, ref Matrix viewMatrix, ref Matrix projectionMatrix, Effect effect, float depth)
{
private void Draw(TiledMapLayer layer, Vector2 parentOffset, Vector2 parentParallaxFactor, ref Matrix viewMatrix, ref Matrix projectionMatrix, Effect effect, float depth)
{
var offset = parentOffset + layer.Offset;
var parallaxFactor = parentParallaxFactor * layer.ParallaxFactor;
if (layer is TiledMapGroupLayer groupLayer)
{
foreach (var subLayer in groupLayer.Layers)
Draw(subLayer, offset, ref viewMatrix, ref projectionMatrix, effect, depth);
Draw(subLayer, offset, parallaxFactor, ref viewMatrix, ref projectionMatrix, effect, depth);
}
else
{
@@ -152,9 +153,9 @@ namespace MonoGame.Extended.Tiled.Renderers
if (tiledMapEffect == null)
return;
// model-to-world transform
tiledMapEffect.World = _worldMatrix;
tiledMapEffect.View = viewMatrix;
// model-to-world transform
tiledMapEffect.World = _worldMatrix;
tiledMapEffect.View = parallaxFactor == Vector2.One ? viewMatrix : IncludeParallax(viewMatrix, parallaxFactor);
tiledMapEffect.Projection = projectionMatrix;
foreach (var layerModel in _mapModel.LayersOfLayerModels[layer])
@@ -181,5 +182,11 @@ namespace MonoGame.Extended.Tiled.Renderers
}
}
}
private Matrix IncludeParallax(Matrix viewMatrix, Vector2 parallaxFactor)
{
viewMatrix.Translation *=new Vector3(parallaxFactor, 1f);
return viewMatrix;
}
}
}
}