1
- using HamstarHelpers . Helpers . DotNET . Extensions ;
2
- using HamstarHelpers . Classes . Tiles . TilePattern ;
3
- using Microsoft . Xna . Framework ;
4
- using System ;
1
+ using System ;
5
2
using System . Collections . Generic ;
3
+ using Microsoft . Xna . Framework ;
6
4
using Terraria ;
7
5
using Terraria . ModLoader ;
8
6
using Terraria . World . Generation ;
9
- using MountedMagicMirrors . Tiles ;
7
+ using HamstarHelpers . Classes . Tiles . TilePattern ;
10
8
using HamstarHelpers . Helpers . Debug ;
9
+ using HamstarHelpers . Helpers . DotNET . Extensions ;
10
+ using MountedMagicMirrors . Tiles ;
11
11
12
12
13
13
namespace MountedMagicMirrors {
14
14
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
+
15
37
private TilePattern MirrorSpacePattern ;
16
38
private int NeededMirrors ;
17
39
@@ -44,16 +66,22 @@ public override void Apply( GenerationProgress progress ) {
44
66
progress . Message = "Pre-placing Mounted Magic Mirrors: %" ;
45
67
}
46
68
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
+ }
49
74
75
+ for ( int i = 0 ; i < this . NeededMirrors ; i ++ ) {
50
76
if ( ! this . GetRandomOpenMirrorableCenterTile ( out randCenterTile , 1000 ) ) {
51
77
break ;
52
78
}
53
79
54
80
this . MirrorPositions . Set2D ( randCenterTile . TileX , randCenterTile . TileY ) ;
55
81
56
82
this . SpawnMirror ( randCenterTile . TileX , randCenterTile . TileY ) ;
83
+
84
+ progress ? . Set ( stepWeight * ( float ) ( i + 1 ) ) ;
57
85
}
58
86
}
59
87
@@ -78,12 +106,13 @@ private bool GetRandomOpenMirrorableCenterTile( out (int TileX, int TileY) randT
78
106
private ( int TileX , int TileY ) GetRandomMirrorableCenterTile ( int maxAttempts ) {
79
107
int attempts = 0 ;
80
108
int randTileX , randTileY ;
109
+ var bounds = MountedMirrorsGenPass . GetTileBoundsForWorld ( ) ;
81
110
82
111
do {
83
112
WorldGen . genRand . Next ( ) ; // Desyncs this from Wormholes?
84
113
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 ) ;
87
116
88
117
if ( this . MirrorSpacePattern . Check ( randTileX , randTileY ) ) {
89
118
break ;
0 commit comments