Mirroring background sprite positions partially working. They spawn at the correct edge, but not at the correct position or rotation.
This commit is contained in:
@@ -244,6 +244,12 @@ namespace Barotrauma
|
|||||||
if (prefab.SpawnPos.HasFlag(BackgroundSpritePrefab.SpawnPosType.Wall)) cells.AddRange(level.GetCells(randomPos));
|
if (prefab.SpawnPos.HasFlag(BackgroundSpritePrefab.SpawnPosType.Wall)) cells.AddRange(level.GetCells(randomPos));
|
||||||
if (prefab.SpawnPos.HasFlag(BackgroundSpritePrefab.SpawnPosType.SeaFloor)) cells.AddRange(level.ExtraWalls[0].Cells);
|
if (prefab.SpawnPos.HasFlag(BackgroundSpritePrefab.SpawnPosType.SeaFloor)) cells.AddRange(level.ExtraWalls[0].Cells);
|
||||||
|
|
||||||
|
//make sure the cells are in the same order regardless of whether the level is mirrored or not
|
||||||
|
cells.Sort((c1, c2) => { return level.Mirrored ? Math.Sign(c1.Center.X - c2.Center.X) : -Math.Sign(c1.Center.X - c2.Center.X); });
|
||||||
|
|
||||||
|
/*System.Diagnostics.Debug.WriteLine("FindSpritePosition - prefab: "+System.IO.Path.GetFileNameWithoutExtension(prefab.Sprite.FilePath)+" cells: "+cells.Count+" spawnpos: "+ prefab.SpawnPos+" randompos: "+ randomPos);
|
||||||
|
System.Diagnostics.Debug.WriteLine(string.Join(", ",cells.Select(c => level.cells.IndexOf(c))));*/
|
||||||
|
|
||||||
if (cells.Any())
|
if (cells.Any())
|
||||||
{
|
{
|
||||||
VoronoiCell cell = cells[Rand.Int(cells.Count, Rand.RandSync.Server)];
|
VoronoiCell cell = cells[Rand.Int(cells.Count, Rand.RandSync.Server)];
|
||||||
|
|||||||
@@ -55,7 +55,8 @@ namespace Barotrauma
|
|||||||
//private float shaftHeight;
|
//private float shaftHeight;
|
||||||
|
|
||||||
//List<Body> bodies;
|
//List<Body> bodies;
|
||||||
private List<VoronoiCell> cells;
|
//TODO: change back to private
|
||||||
|
public List<VoronoiCell> cells;
|
||||||
|
|
||||||
//private VertexBuffer vertexBuffer;
|
//private VertexBuffer vertexBuffer;
|
||||||
|
|
||||||
@@ -452,11 +453,16 @@ namespace Barotrauma
|
|||||||
edge.point2.X = borders.Width - edge.point2.X;
|
edge.point2.X = borders.Width - edge.point2.X;
|
||||||
if (!mirroredSites.Contains(edge.site1))
|
if (!mirroredSites.Contains(edge.site1))
|
||||||
{
|
{
|
||||||
|
//make sure that sites right at the edge of a grid cell end up in the same cell as in the non-mirrored level
|
||||||
|
if (edge.site1.coord.x % GridCellSize < 1.0f &&
|
||||||
|
edge.site1.coord.x % GridCellSize >= 0.0f) edge.site1.coord.x += 1.0f;
|
||||||
edge.site1.coord.x = borders.Width - edge.site1.coord.x;
|
edge.site1.coord.x = borders.Width - edge.site1.coord.x;
|
||||||
mirroredSites.Add(edge.site1);
|
mirroredSites.Add(edge.site1);
|
||||||
}
|
}
|
||||||
if (!mirroredSites.Contains(edge.site2))
|
if (!mirroredSites.Contains(edge.site2))
|
||||||
{
|
{
|
||||||
|
if (edge.site2.coord.x % GridCellSize < 1.0f &&
|
||||||
|
edge.site2.coord.x % GridCellSize >= 0.0f) edge.site2.coord.x += 1.0f;
|
||||||
edge.site2.coord.x = borders.Width - edge.site2.coord.x;
|
edge.site2.coord.x = borders.Width - edge.site2.coord.x;
|
||||||
mirroredSites.Add(edge.site2);
|
mirroredSites.Add(edge.site2);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user