From a54f9eac5f0a340167e2dcb1b56419d113a9d8d0 Mon Sep 17 00:00:00 2001 From: Jason Rohrer Date: Tue, 30 Jul 2019 18:40:42 -0700 Subject: [PATCH] Disabled plane flying over rift. People escaping early makes it impossible to test properly. --- documentation/changeLog.txt | 3 +++ server/map.cpp | 32 +++++++++++++++++++++++++++++++- server/map.h | 5 ++++- server/server.cpp | 15 ++++++++++++++- 4 files changed, 52 insertions(+), 3 deletions(-) diff --git a/documentation/changeLog.txt b/documentation/changeLog.txt index 46f4d240f..1dde8fe79 100644 --- a/documentation/changeLog.txt +++ b/documentation/changeLog.txt @@ -87,6 +87,9 @@ Server Fixes surrounded by desert surrounded by jungle. Every grassy area is a good settlement spot, because it's always next to a swamp. +--Disabled plane flying over rift. People escaping early makes it impossible + to test properly. + diff --git a/server/map.cpp b/server/map.cpp index 4c786fb26..0962b9710 100644 --- a/server/map.cpp +++ b/server/map.cpp @@ -8279,16 +8279,34 @@ GridPos getNextCloseLandingPos( GridPos inCurPos, GridPos getNextFlightLandingPos( int inCurrentX, int inCurrentY, - doublePair inDir ) { + doublePair inDir, + int inRadiusLimit ) { int closestIndex = -1; GridPos closestPos; double closestDist = DBL_MAX; GridPos curPos = { inCurrentX, inCurrentY }; + char useLimit = false; + + if( abs( inCurrentX ) <= inRadiusLimit && + abs( inCurrentY ) <= inRadiusLimit ) { + useLimit = true; + } + + + for( int i=0; i inRadiusLimit || + abs( thisPos.x ) > inRadiusLimit ) ) { + // out of bounds destination + continue; + } + + double dist = distSquared( curPos, thisPos ); if( dist < closestDist ) { @@ -8346,6 +8364,18 @@ GridPos getNextFlightLandingPos( int inCurrentX, int inCurrentY, GridPos returnVal = { eveX, eveY }; + if( inRadiusLimit > 0 && + ( abs( eveX ) >= inRadiusLimit || + abs( eveY ) >= inRadiusLimit ) ) { + // even Eve pos is out of bounds + // stick them in center + returnVal.x = 0; + returnVal.y = 0; + } + + + + return returnVal; } diff --git a/server/map.h b/server/map.h index 2d5d6f9e9..2971e40de 100644 --- a/server/map.h +++ b/server/map.h @@ -291,8 +291,11 @@ int getMapObjectRaw( int inX, int inY ); // next landing strip in line, in round-the-world circuit across all // landing positions +// radius limit limits flights from inside that square radius +// from leaving (though flights from outside are unrestriced) GridPos getNextFlightLandingPos( int inCurrentX, int inCurrentY, - doublePair inDir ); + doublePair inDir, + int inRadiusLimit = -1 ); // get and set player ID for grave on map diff --git a/server/server.cpp b/server/server.cpp index 5e7388c66..11306aacb 100644 --- a/server/server.cpp +++ b/server/server.cpp @@ -16003,11 +16003,24 @@ int main() { doublePair takeOffDir = { xDir, yDir }; + int radiusLimit = -1; + + int barrierRadius = + SettingsManager::getIntSetting( + "barrierRadius", 250 ); + int barrierOn = SettingsManager::getIntSetting( + "barrierOn", 1 ); + + if( barrierOn ) { + radiusLimit = barrierRadius; + } + GridPos destPos = getNextFlightLandingPos( nextPlayer->xs, nextPlayer->ys, - takeOffDir ); + takeOffDir, + radiusLimit ); AppLog::infoF( "Player %d flight taking off from (%d,%d), "