From 1c1a1eb80e507c08df22b04dfed837c19d3a47f5 Mon Sep 17 00:00:00 2001 From: Joonas Rikkonen Date: Wed, 8 Aug 2018 15:12:24 +0300 Subject: [PATCH] Background sprites spawn at the correct position and rotation in mirrored levels. --- .../Source/Map/Levels/BackgroundSpriteManager.cs | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/Barotrauma/BarotraumaShared/Source/Map/Levels/BackgroundSpriteManager.cs b/Barotrauma/BarotraumaShared/Source/Map/Levels/BackgroundSpriteManager.cs index 8d90ae775..5b657bab6 100644 --- a/Barotrauma/BarotraumaShared/Source/Map/Levels/BackgroundSpriteManager.cs +++ b/Barotrauma/BarotraumaShared/Source/Map/Levels/BackgroundSpriteManager.cs @@ -136,9 +136,8 @@ namespace Barotrauma for (int i = 0 ; i < amount; i++) { BackgroundSpritePrefab prefab = GetRandomPrefab(level.GenerationParams.Name); - GraphEdge selectedEdge = null; Vector2 edgeNormal = Vector2.One; - Vector2? pos = FindSpritePosition(level, prefab, out selectedEdge, out edgeNormal); + Vector2? pos = FindSpritePosition(level, prefab, out GraphEdge selectedEdge, out edgeNormal); if (pos == null) continue; @@ -148,7 +147,8 @@ namespace Barotrauma rotation = MathUtils.VectorToAngle(new Vector2(edgeNormal.Y, edgeNormal.X)); } - rotation += Rand.Range(prefab.RandomRotation.X, prefab.RandomRotation.Y, Rand.RandSync.Server); + float randomRot = Rand.Range(prefab.RandomRotation.X, prefab.RandomRotation.Y, Rand.RandSync.Server); + rotation += level.Mirrored ? -randomRot : randomRot; var newSprite = new BackgroundSprite(prefab, new Vector3((Vector2)pos, Rand.Range(prefab.DepthRange.X, prefab.DepthRange.Y, Rand.RandSync.Server)), Rand.Range(prefab.Scale.X, prefab.Scale.Y, Rand.RandSync.Server), rotation); @@ -313,10 +313,12 @@ namespace Barotrauma edgeNormal = normals[index]; float length = Vector2.Distance(closestEdge.point1, closestEdge.point2); - Vector2 dir = (closestEdge.point1 - closestEdge.point2) / length; - Vector2 pos = closestEdge.point2 + dir * Rand.Range(prefab.Sprite.size.X / 2.0f, length - prefab.Sprite.size.X / 2.0f, Rand.RandSync.Server); - return pos; + Vector2 dir = (closestEdge.point1 - closestEdge.point2) / length; + float normalizedPos = Rand.Range(0.0f, 1.0f, Rand.RandSync.Server); + if (level.Mirrored) normalizedPos = 1.0f - normalizedPos; + + return Vector2.Lerp(closestEdge.point2 + dir * prefab.Sprite.size.X / 2.0f, closestEdge.point1 - dir * prefab.Sprite.size.X / 2.0f, normalizedPos); } public void Update(float deltaTime)