Made checks of map connections go through a single method, which can be used to modify connections on the fly

This commit is contained in:
Maruno17
2022-03-05 23:49:53 +00:00
parent a20a1775c0
commit bcb31c7a56

View File

@@ -67,26 +67,23 @@ class PokemonMapFactory
def getNewMap(playerX, playerY) def getNewMap(playerX, playerY)
id = $game_map.map_id id = $game_map.map_id
conns = MapFactoryHelper.getMapConnections MapFactoryHelper.eachConnectionForMap(id) do |conn|
if conns[id] mapidB = nil
conns[id].each do |conn| newx = 0
mapidB = nil newy = 0
newx = 0 if conn[0] == id
newy = 0 mapidB = conn[3]
if conn[0] == id mapB = MapFactoryHelper.getMapDims(conn[3])
mapidB = conn[3] newx = conn[4] - conn[1] + playerX
mapB = MapFactoryHelper.getMapDims(conn[3]) newy = conn[5] - conn[2] + playerY
newx = conn[4] - conn[1] + playerX else
newy = conn[5] - conn[2] + playerY mapidB = conn[0]
else mapB = MapFactoryHelper.getMapDims(conn[0])
mapidB = conn[0] newx = conn[1] - conn[4] + playerX
mapB = MapFactoryHelper.getMapDims(conn[0]) newy = conn[2] - conn[5] + playerY
newx = conn[1] - conn[4] + playerX end
newy = conn[2] - conn[5] + playerY if newx >= 0 && newx < mapB[0] && newy >= 0 && newy < mapB[1]
end return [getMap(mapidB), newx, newy]
if newx >= 0 && newx < mapB[0] && newy >= 0 && newy < mapB[1]
return [getMap(mapidB), newx, newy]
end
end end
end end
return nil return nil
@@ -117,27 +114,24 @@ class PokemonMapFactory
return if @fixup return if @fixup
@fixup = true @fixup = true
id = $game_map.map_id id = $game_map.map_id
conns = MapFactoryHelper.getMapConnections MapFactoryHelper.eachConnectionForMap(id) do |conn|
if conns[id] if conn[0] == id
conns[id].each do |conn| mapA = getMap(conn[0])
if conn[0] == id newdispx = ((conn[4] - conn[1]) * Game_Map::REAL_RES_X) + mapA.display_x
mapA = getMap(conn[0]) newdispy = ((conn[5] - conn[2]) * Game_Map::REAL_RES_Y) + mapA.display_y
newdispx = ((conn[4] - conn[1]) * Game_Map::REAL_RES_X) + mapA.display_x if hasMap?(conn[3]) || MapFactoryHelper.mapInRangeById?(conn[3], newdispx, newdispy)
newdispy = ((conn[5] - conn[2]) * Game_Map::REAL_RES_Y) + mapA.display_y mapB = getMap(conn[3])
if hasMap?(conn[3]) || MapFactoryHelper.mapInRangeById?(conn[3], newdispx, newdispy) mapB.display_x = newdispx if mapB.display_x != newdispx
mapB = getMap(conn[3]) mapB.display_y = newdispy if mapB.display_y != newdispy
mapB.display_x = newdispx if mapB.display_x != newdispx end
mapB.display_y = newdispy if mapB.display_y != newdispy else
end mapA = getMap(conn[3])
else newdispx = ((conn[1] - conn[4]) * Game_Map::REAL_RES_X) + mapA.display_x
mapA = getMap(conn[3]) newdispy = ((conn[2] - conn[5]) * Game_Map::REAL_RES_Y) + mapA.display_y
newdispx = ((conn[1] - conn[4]) * Game_Map::REAL_RES_X) + mapA.display_x if hasMap?(conn[0]) || MapFactoryHelper.mapInRangeById?(conn[0], newdispx, newdispy)
newdispy = ((conn[2] - conn[5]) * Game_Map::REAL_RES_Y) + mapA.display_y mapB = getMap(conn[0])
if hasMap?(conn[0]) || MapFactoryHelper.mapInRangeById?(conn[0], newdispx, newdispy) mapB.display_x = newdispx if mapB.display_x != newdispx
mapB = getMap(conn[0]) mapB.display_y = newdispy if mapB.display_y != newdispy
mapB.display_x = newdispx if mapB.display_x != newdispx
mapB.display_y = newdispy if mapB.display_y != newdispy
end
end end
end end
end end
@@ -234,11 +228,8 @@ class PokemonMapFactory
def areConnected?(mapID1, mapID2) def areConnected?(mapID1, mapID2)
return true if mapID1 == mapID2 return true if mapID1 == mapID2
conns = MapFactoryHelper.getMapConnections MapFactoryHelper.eachConnectionForMap(mapID1) do |conn|
if conns[mapID1] return true if conn[0] == mapID2 || conn[3] == mapID2
conns[mapID1].each do |conn|
return true if conn[0] == mapID2 || conn[3] == mapID2
end
end end
return false return false
end end
@@ -248,18 +239,15 @@ class PokemonMapFactory
if thisMapID == otherMapID # Both events share the same map if thisMapID == otherMapID # Both events share the same map
return [otherX - thisX, otherY - thisY] return [otherX - thisX, otherY - thisY]
end end
conns = MapFactoryHelper.getMapConnections MapFactoryHelper.eachConnectionForMap(thisMapID) do |conn|
if conns[thisMapID] if conn[0] == otherMapID
conns[thisMapID].each do |conn| posX = conn[4] - conn[1] + otherX - thisX
if conn[0] == otherMapID posY = conn[5] - conn[2] + otherY - thisY
posX = conn[4] - conn[1] + otherX - thisX return [posX, posY]
posY = conn[5] - conn[2] + otherY - thisY elsif conn[3] == otherMapID
return [posX, posY] posX = conn[1] - conn[4] + otherX - thisX
elsif conn[3] == otherMapID posY = conn[2] - conn[5] + otherY - thisY
posX = conn[1] - conn[4] + otherX - thisX return [posX, posY]
posY = conn[2] - conn[5] + otherY - thisY
return [posX, posY]
end
end end
end end
return [0, 0] return [0, 0]
@@ -330,24 +318,21 @@ class PokemonMapFactory
def getRealTilePos(mapID, x, y) def getRealTilePos(mapID, x, y)
id = mapID id = mapID
return [id, x, y] if getMapNoAdd(id).valid?(x, y) return [id, x, y] if getMapNoAdd(id).valid?(x, y)
conns = MapFactoryHelper.getMapConnections MapFactoryHelper.eachConnectionForMap(id) do |conn|
if conns[id] if conn[0] == id
conns[id].each do |conn| newX = x + conn[4] - conn[1]
if conn[0] == id newY = y + conn[5] - conn[2]
newX = x + conn[4] - conn[1] next if newX < 0 || newY < 0
newY = y + conn[5] - conn[2] dims = MapFactoryHelper.getMapDims(conn[3])
next if newX < 0 || newY < 0 next if newX >= dims[0] || newY >= dims[1]
dims = MapFactoryHelper.getMapDims(conn[3]) return [conn[3], newX, newY]
next if newX >= dims[0] || newY >= dims[1] else
return [conn[3], newX, newY] newX = x + conn[1] - conn[4]
else newY = y + conn[2] - conn[5]
newX = x + conn[1] - conn[4] next if newX < 0 || newY < 0
newY = y + conn[2] - conn[5] dims = MapFactoryHelper.getMapDims(conn[0])
next if newX < 0 || newY < 0 next if newX >= dims[0] || newY >= dims[1]
dims = MapFactoryHelper.getMapDims(conn[0]) return [conn[0], newX, newY]
next if newX >= dims[0] || newY >= dims[1]
return [conn[0], newX, newY]
end
end end
end end
return nil return nil
@@ -455,6 +440,12 @@ module MapFactoryHelper
return conns[id] ? true : false return conns[id] ? true : false
end end
def self.eachConnectionForMap(id)
conns = MapFactoryHelper.getMapConnections
return if !conns[id]
conns[id].each { |conn| yield conn }
end
# Gets the height and width of the map with id # Gets the height and width of the map with id
def self.getMapDims(id) def self.getMapDims(id)
# Create cache if doesn't exist # Create cache if doesn't exist