Background sprites spawn at the correct position and rotation in mirrored levels.
This commit is contained in:
@@ -136,9 +136,8 @@ namespace Barotrauma
|
|||||||
for (int i = 0 ; i < amount; i++)
|
for (int i = 0 ; i < amount; i++)
|
||||||
{
|
{
|
||||||
BackgroundSpritePrefab prefab = GetRandomPrefab(level.GenerationParams.Name);
|
BackgroundSpritePrefab prefab = GetRandomPrefab(level.GenerationParams.Name);
|
||||||
GraphEdge selectedEdge = null;
|
|
||||||
Vector2 edgeNormal = Vector2.One;
|
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;
|
if (pos == null) continue;
|
||||||
|
|
||||||
@@ -148,7 +147,8 @@ namespace Barotrauma
|
|||||||
rotation = MathUtils.VectorToAngle(new Vector2(edgeNormal.Y, edgeNormal.X));
|
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,
|
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);
|
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];
|
edgeNormal = normals[index];
|
||||||
|
|
||||||
float length = Vector2.Distance(closestEdge.point1, closestEdge.point2);
|
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)
|
public void Update(float deltaTime)
|
||||||
|
|||||||
Reference in New Issue
Block a user