Skip to content

Commit d7d04f9

Browse files
author
hamstar0
committed
v1.1.3.6 - Added better failsafes against invalid world sizes
1 parent 00ccbfe commit d7d04f9

File tree

2 files changed

+39
-10
lines changed

2 files changed

+39
-10
lines changed

MountedMagicMirrors/MyWorldGen.cs

Lines changed: 38 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,39 @@
1-
using HamstarHelpers.Helpers.DotNET.Extensions;
2-
using HamstarHelpers.Classes.Tiles.TilePattern;
3-
using Microsoft.Xna.Framework;
4-
using System;
1+
using System;
52
using System.Collections.Generic;
3+
using Microsoft.Xna.Framework;
64
using Terraria;
75
using Terraria.ModLoader;
86
using Terraria.World.Generation;
9-
using MountedMagicMirrors.Tiles;
7+
using HamstarHelpers.Classes.Tiles.TilePattern;
108
using HamstarHelpers.Helpers.Debug;
9+
using HamstarHelpers.Helpers.DotNET.Extensions;
10+
using MountedMagicMirrors.Tiles;
1111

1212

1313
namespace MountedMagicMirrors {
1414
class MountedMirrorsGenPass : GenPass {
15+
public static (int minTileX, int maxTileX, int minTileY, int maxTileY) GetTileBoundsForWorld() {
16+
int minTileX = 64;
17+
int maxTileX = Main.maxTilesX - minTileX;
18+
if( Main.maxTilesX < 64 || maxTileX <= minTileX ) {
19+
minTileX = 0;
20+
maxTileX = Main.maxTilesX;
21+
}
22+
23+
int minTileY = (int)Main.worldSurface;
24+
int maxTileY = Main.maxTilesY - 220;
25+
if( Main.maxTilesY <= 220 || maxTileY <= minTileY ) {
26+
minTileY = 0;
27+
maxTileY = Main.maxTilesY;
28+
}
29+
30+
return (minTileX, maxTileX, minTileY, maxTileY);
31+
}
32+
33+
34+
35+
////////////////
36+
1537
private TilePattern MirrorSpacePattern;
1638
private int NeededMirrors;
1739

@@ -44,16 +66,22 @@ public override void Apply( GenerationProgress progress ) {
4466
progress.Message = "Pre-placing Mounted Magic Mirrors: %";
4567
}
4668

47-
for( int i = 0; i < this.NeededMirrors; i++ ) {
48-
progress?.Set( stepWeight * (float)i );
69+
int minTileDist = MMMConfig.Instance.MinimumMirrorTileSpacing;
70+
if( Main.maxTilesX <= (minTileDist + 4) || Main.maxTilesY <= (minTileDist + 4) ) {
71+
LogHelpers.Warn( "Invalid world size." );
72+
return;
73+
}
4974

75+
for( int i = 0; i < this.NeededMirrors; i++ ) {
5076
if( !this.GetRandomOpenMirrorableCenterTile(out randCenterTile, 1000) ) {
5177
break;
5278
}
5379

5480
this.MirrorPositions.Set2D( randCenterTile.TileX, randCenterTile.TileY );
5581

5682
this.SpawnMirror( randCenterTile.TileX, randCenterTile.TileY );
83+
84+
progress?.Set( stepWeight * (float)(i+1) );
5785
}
5886
}
5987

@@ -78,12 +106,13 @@ private bool GetRandomOpenMirrorableCenterTile( out (int TileX, int TileY) randT
78106
private (int TileX, int TileY) GetRandomMirrorableCenterTile( int maxAttempts ) {
79107
int attempts = 0;
80108
int randTileX, randTileY;
109+
var bounds = MountedMirrorsGenPass.GetTileBoundsForWorld();
81110

82111
do {
83112
WorldGen.genRand.Next(); // Desyncs this from Wormholes?
84113
WorldGen.genRand.Next();
85-
randTileX = WorldGen.genRand.Next( 64, Main.maxTilesX - 64 );
86-
randTileY = WorldGen.genRand.Next( (int)Main.worldSurface, Main.maxTilesY - 220 );
114+
randTileX = WorldGen.genRand.Next( bounds.minTileX, bounds.maxTileX );
115+
randTileY = WorldGen.genRand.Next( bounds.minTileY, bounds.maxTileY );
87116

88117
if( this.MirrorSpacePattern.Check( randTileX, randTileY ) ) {
89118
break;

MountedMagicMirrors/build.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
displayName = Mounted Magic Mirrors
22
author = hamstar
3-
version = 1.1.3.5
3+
version = 1.1.3.6
44
modReferences = HamstarHelpers@5.6.1.1
55
buildIgnore = *.csproj, *.user, *.bat, obj\*, bin\*, .vs\*, .git\*
66
homepage = https://forums.terraria.org/index.php?threads/mounted-magic-mirrors-fast-travel.83296/

0 commit comments

Comments
 (0)