- Improved auto added system positioning, reduces overlapping, closed #845

This commit is contained in:
Mark Friedrich
2019-10-05 14:23:20 +02:00
parent 3f724f66ce
commit 74cbbec328
20 changed files with 721 additions and 227 deletions

View File

@@ -878,6 +878,7 @@ class Map extends Controller\AccessController {
$getMapUserData = (bool)$postData['getMapUserData'];
$mapTracking = (bool)$postData['mapTracking'];
$systemData = (array)$postData['systemData'];
$newSystemPositions = (array)$postData['newSystemPositions'];
$activeCharacter = $this->getCharacter();
$return = (object)[];
@@ -893,7 +894,7 @@ class Map extends Controller\AccessController {
if( !is_null($map = $activeCharacter->getMap($mapId)) ){
// check character log (current system) and manipulate map (e.g. add new system)
if($mapTracking){
$map = $this->updateMapByCharacter($map, $activeCharacter);
$map = $this->updateMapByCharacter($map, $activeCharacter, $newSystemPositions);
}
// mapUserData ----------------------------------------------------------------------------------------
@@ -938,10 +939,11 @@ class Map extends Controller\AccessController {
* update map connections/systems based on $character´s location logs
* @param Pathfinder\MapModel $map
* @param Pathfinder\CharacterModel $character
* @param array $newSystemPositions
* @return Pathfinder\MapModel
* @throws Exception
*/
protected function updateMapByCharacter(Pathfinder\MapModel $map, Pathfinder\CharacterModel $character) : Pathfinder\MapModel {
protected function updateMapByCharacter(Pathfinder\MapModel $map, Pathfinder\CharacterModel $character, array $newSystemPositions = []) : Pathfinder\MapModel {
// map changed. update cache (system/connection) changed
$mapDataChanged = false;
@@ -958,6 +960,9 @@ class Map extends Controller\AccessController {
$sourceSystemId = (int)$sourceLog->systemId;
if($sourceSystemId){
$defaultPositions = (array)$newSystemPositions['defaults'];
$currentPosition = (array)$newSystemPositions['location'];
$sourceSystem = null;
$targetSystem = null;
@@ -969,8 +974,8 @@ class Map extends Controller\AccessController {
// system coordinates for system tha might be added next
$systemOffsetX = 130;
$systemOffsetY = 0;
$systemPosX = 0;
$systemPosY = 30;
$systemPosX = ((int)$defaultPositions[0]['x']) ? : 0;
$systemPosY = ((int)$defaultPositions[0]['y']) ? : 30;
// check if previous (solo) system is already on the map ----------------------------------------------
$sourceSystem = $map->getSystemByCCPId($sourceSystemId, [AbstractModel::getFilter('active', true)]);
@@ -978,12 +983,10 @@ class Map extends Controller\AccessController {
// if systems don´t already exists on map -> get "blank" system
// -> required for system type check (e.g. wormhole, k-space)
if($sourceSystem){
// system exists
$sourceExists = true;
// system exists -> add target to the "right"
$systemPosX = $sourceSystem->posX + $systemOffsetX;
$systemPosY = $sourceSystem->posY + $systemOffsetY;
}else{
// system not exists -> get"blank" system
$sourceSystem = $map->getNewSystem($sourceSystemId);
}
@@ -998,6 +1001,11 @@ class Map extends Controller\AccessController {
if($targetSystem){
$targetExists = true;
if($targetSystemId === (int)$currentPosition['systemId']){
$systemPosX = (int)$currentPosition['position']['x'];
$systemPosY = (int)$currentPosition['position']['y'];
}
}else{
$targetSystem = $map->getNewSystem($targetSystemId);
}
@@ -1098,9 +1106,15 @@ class Map extends Controller\AccessController {
$map = $sourceSystem->mapId;
$sourceExists = true;
$mapDataChanged = true;
// increase system position (prevent overlapping)
$systemPosX = $sourceSystem->posX + $systemOffsetX;
$systemPosY = $sourceSystem->posY + $systemOffsetY;
if(!empty($defaultPositions[1])){
$systemPosX = (int)$defaultPositions[1]['x'];
$systemPosY = (int)$defaultPositions[1]['y'];
}else{
// increase system position (prevent overlapping)
$systemPosX = $sourceSystem->posX + $systemOffsetX;
$systemPosY = $sourceSystem->posY + $systemOffsetY;
}
}
}