| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152 |
- /*
- 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 <https://www.gnu.org/licenses/>.
- */
- // 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;x<max;x++)
- {
- for(y=0;y<max;y++)
- {
- int height=0;
- if (TRUE) {
- height = Map->GetHeightAt(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;
- }
-
|