/* FinalSun/FinalAlert 2 Mission Editor Copyright (C) 1999-2024 Electronic Arts, Inc. Authored by Matthias Wagner This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see . */ // This code determines the cell values for // StartX, StartY, Width & Height for the [Header] section #include "stdafx.h" #include "MapCode.h" #include "mapdata.h" #include "defines.h" int calcXPos(int x, int y) { int x1=x*256+128; int y1 = y*256 + 128; int x2 = (x1 - y1) * 30; int y2 = (x1 + y1) * 15; int x3 = (x2/256 + 512*30) / 60; int y3 = (y2/256) / 30; return x3; } int calcYPos(int x, int y) { int x1=x*256+128; int y1 = y*256 + 128; int x2 = (x1 - y1) * 30; int y2 = (x1 + y1) * 15; int x3 = (x2/256 + 512*30) / 60; int y3 = (y2/256) / 30; return y3; } struct MRECT { int X; int Y; int Width; int Height; }; void MC_GetHeaderRect(int& startx, int& starty, int& width, int& height) { int leastx=10000; int leasty=10000; int mostx=0; int mosty=0; MRECT LocalRect, PlayRect; RECT r; Map->GetLocalSize(&r); LocalRect.X=r.left; LocalRect.Y=r.top; LocalRect.Width=r.right; LocalRect.Height=r.bottom; CIniFile& ini=Map->GetIniFile(); PlayRect.X=0; PlayRect.Y=0; PlayRect.Width=Map->GetWidth(); PlayRect.Height=Map->GetHeight(); char c[50]; char d[50]; itoa(LocalRect.Width, c, 10); int x,y; int max=Map->GetIsoSize(); for(x=0;xGetHeightAt(y+x*max); // remember: x/y switched here, WS coordinate system // fudge ramps at the top of the map so that they end up considered not in the local rect //if (cell->ramp && x + y < PlayRect.Width + 2*LocalRect.Y + 4 + height) { //height++; //} } if ((x + y > PlayRect.Width + 2*LocalRect.Y + height) && (x + y <= PlayRect.Width + 2*(LocalRect.Y + LocalRect.Height + 1) + height) && (x - y < 2*(LocalRect.X + LocalRect.Width) - PlayRect.Width) && (y - x < PlayRect.Width - 2*LocalRect.X)) //if ((x + y > PlayRect.Width) && (x - y < PlayRect.Width) && (y - x < PlayRect.Width) && (x + y <= PlayRect.Width + 2 * PlayRect.Height)) { int rx=calcXPos(x,y); int ry=calcYPos(x,y); if (rx < leastx) leastx = rx; if (rx > mostx) mostx = rx; if (ry < leasty) leasty = ry; if (ry > mosty) mosty = ry; } } } startx=leastx; starty=leasty; width=mostx-leastx; height=mosty-leasty; }