mirror of
https://github.com/electronicarts/CNC_TS_and_RA2_Mission_Editor.git
synced 2025-07-17 19:56:38 -04:00
split out some big functions from MapData .
This commit is contained in:
parent
98079e43d0
commit
6e0eb71f29
8 changed files with 689 additions and 601 deletions
173
MissionEditor/MapOperationSlopes.cpp
Normal file
173
MissionEditor/MapOperationSlopes.cpp
Normal file
|
@ -0,0 +1,173 @@
|
|||
#include "stdafx.h"
|
||||
#include "MapData.h"
|
||||
|
||||
void CMapData::CreateSlopesAt(DWORD dwPos)
|
||||
{
|
||||
//OutputDebugString("CreateSlopes()\n");
|
||||
|
||||
auto& m = *GetFielddataAt(dwPos);
|
||||
if (m.wGround == 0xFFFF) {
|
||||
m.wGround = 0;
|
||||
}
|
||||
|
||||
TILEDATA& d = (*tiledata)[m.wGround];
|
||||
|
||||
int ns = -1;
|
||||
int i, e, p = 0;
|
||||
int h[3][3];
|
||||
for (i = 0; i < 3; i++) {
|
||||
for (e = 0; e < 3; e++) {
|
||||
int pos = dwPos + (i - 1) + (e - 1) * m_IsoSize;
|
||||
if (pos < 0 || pos >= m_IsoSize * m_IsoSize) {
|
||||
h[i][e] = 0;
|
||||
} else {
|
||||
auto const& m2 = *GetFielddataAt(pos);
|
||||
h[i][e] = m.bHeight - m2.bHeight;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
// check if the current tile must be heightened anyway
|
||||
if (!theApp.m_Options.bDisableSlopeCorrection && d.bMorphable) {
|
||||
if ((h[0][1] < 0 && h[2][1] < 0) || (h[1][0] < 0 && h[1][2] < 0)
|
||||
|| (h[1][0] < 0 && h[0][2] < 0 && h[0][1] >= 0)
|
||||
|| (h[1][0] < 0 && h[2][2] < 0 && h[2][1] >= 0)
|
||||
|
||||
|| (h[0][1] < 0 && h[2][0] < 0 && h[1][0] >= 0)
|
||||
|| (h[0][1] < 0 && h[2][2] < 0 && h[1][2] >= 0)
|
||||
|
||||
|| (h[1][2] < 0 && h[0][0] < 0 && h[0][1] >= 0)
|
||||
|| (h[1][2] < 0 && h[2][0] < 0 && h[2][1] >= 0)
|
||||
|
||||
|| (h[2][1] < 0 && h[0][0] < 0 && h[1][0] >= 0)
|
||||
|| (h[2][1] < 0 && h[0][2] < 0 && h[1][2] >= 0)
|
||||
|
||||
|| (h[1][0] < 0 && h[0][1] < 0 && h[0][0] >= 0)
|
||||
|| (h[0][1] < 0 && h[1][2] < 0 && h[0][2] >= 0)
|
||||
|| (h[1][2] < 0 && h[2][1] < 0 && h[2][2] >= 0)
|
||||
|| (h[2][1] < 0 && h[1][0] < 0 && h[2][0] >= 0)
|
||||
|
||||
) {
|
||||
SetHeightAt(dwPos, m.bHeight + 1);
|
||||
for (i = -1; i < 2; i++) {
|
||||
for (e = -1; e < 2; e++) {
|
||||
CreateSlopesAt(dwPos + i + e * m_IsoSize);
|
||||
}
|
||||
}
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
BOOL checkOtherSlopes = FALSE;
|
||||
|
||||
if (h[0][0] == -1 && h[2][2] == -1 && h[2][0] >= 0 && h[0][2] >= 0 && h[1][0] >= 0 && h[1][2] >= 0 && h[0][1] >= 0 && h[2][1] >= 0) {
|
||||
ns = SLOPE_UP_LEFTTOP_AND_RIGHTBOTTOM;
|
||||
}
|
||||
if (h[0][2] == -1 && h[2][0] == -1 && h[0][0] >= 0 && h[2][2] >= 0 && h[0][1] >= 0 && h[1][0] >= 0 && h[1][2] >= 0 && h[2][1] >= 0) {
|
||||
ns = SLOPE_UP_LEFTBOTTOM_AND_RIGHTTOP;
|
||||
}
|
||||
|
||||
if (ns == -1) {
|
||||
if (h[1][0] == -1 && h[0][1] != -1 && h[1][2] != -1 && h[2][1] != -1) {
|
||||
ns = SLOPE_UP_LEFT;
|
||||
} else if (h[0][1] == -1 && h[1][0] != -1 && h[2][1] != -1 && h[1][2] != -1) {
|
||||
ns = SLOPE_UP_TOP;
|
||||
} else if (h[1][2] == -1 && h[0][1] != -1 && h[1][0] != -1 && h[2][1] != -1) {
|
||||
ns = SLOPE_UP_RIGHT;
|
||||
} else if (h[2][1] == -1 && h[0][1] != -1 && h[1][0] != -1 && h[1][2] != -1) {
|
||||
ns = SLOPE_UP_BOTTOM;
|
||||
}
|
||||
|
||||
if (ns == -1) {
|
||||
if (h[0][0] == -2) {
|
||||
ns = SLOPE_DOWN_BOTTOM;
|
||||
}
|
||||
if (h[2][0] == -2) {
|
||||
ns = SLOPE_DOWN_RIGHT;
|
||||
}
|
||||
if (h[0][2] == -2) {
|
||||
ns = SLOPE_DOWN_LEFT;
|
||||
}
|
||||
if (h[2][2] == -2) {
|
||||
ns = SLOPE_DOWN_TOP;
|
||||
}
|
||||
}
|
||||
|
||||
if (ns == -1 && h[0][0] == -1) {
|
||||
if (h[1][0] == -1 && h[0][1] == -1) {
|
||||
ns = SLOPE_DOWN_RIGHTBOTTOM;
|
||||
} else if (h[1][0] == 0 && h[0][1] == 0) {
|
||||
ns = SLOPE_UP_LEFTTOP;
|
||||
}
|
||||
//else if(h[2][2]==1) ns=SLOPE_DOWN_BOTTOM;
|
||||
}
|
||||
|
||||
if (ns == -1 && h[2][0] == -1) {
|
||||
if (h[1][0] == -1 && h[2][1] == -1) {
|
||||
ns = SLOPE_DOWN_RIGHTTOP;
|
||||
} else if (h[1][0] == 0 && h[2][1] == 0) {
|
||||
ns = SLOPE_UP_LEFTBOTTOM;
|
||||
}
|
||||
//else if(h[0][2]==1) ns=SLOPE_DOWN_RIGHT;
|
||||
}
|
||||
if (ns == -1 && h[0][2] == -1) {
|
||||
if (h[1][2] == -1 && h[0][1] == -1) {
|
||||
ns = SLOPE_DOWN_LEFTBOTTOM;
|
||||
} else if (h[1][2] == 0 && h[0][1] == 0) {
|
||||
ns = SLOPE_UP_RIGHTTOP;
|
||||
}
|
||||
//else if(h[2][0]==1) ns=SLOPE_DOWN_LEFT;
|
||||
}
|
||||
if (ns == -1 && h[2][2] == -1) {
|
||||
if (h[1][2] == -1 && h[2][1] == -1) {
|
||||
ns = SLOPE_DOWN_LEFTTOP;
|
||||
} else if (h[1][2] == 0 && h[2][1] == 0) {
|
||||
ns = SLOPE_UP_RIGHTBOTTOM;
|
||||
}
|
||||
//else if(h[0][0]==1) ns=SLOPE_DOWN_TOP;
|
||||
}
|
||||
|
||||
if (ns == -1 && h[1][0] == -1 && h[2][1] == -1) {
|
||||
ns = SLOPE_DOWN_RIGHTTOP;
|
||||
}
|
||||
if (ns == -1 && h[1][2] == -1 && h[2][1] == -1) {
|
||||
ns = SLOPE_DOWN_LEFTTOP;
|
||||
}
|
||||
if (ns == -1 && h[1][0] == -1 && h[0][1] == -1) {
|
||||
ns = SLOPE_DOWN_RIGHTBOTTOM;
|
||||
}
|
||||
if (ns == -1 && h[1][2] == -1 && h[0][1] == -1) {
|
||||
ns = SLOPE_DOWN_LEFTBOTTOM;
|
||||
}
|
||||
|
||||
int rampbase = rampset_start;//atoi((*tiles).sections["General"].values["RampBase"]);
|
||||
int rampsmooth = tiles->GetInteger("General", "RampSmooth");
|
||||
|
||||
if (ns == -1 && (d.wTileSet == rampset || d.wTileSet == rampsmooth) && d.bMorphable) {
|
||||
SetTileAt(dwPos, 0, 0);
|
||||
}
|
||||
if (tiledata == &un_tiledata) {
|
||||
int r = ramp2set;
|
||||
int m = pave2set;
|
||||
|
||||
if (ns == -1 && (d.wTileSet == r || d.wTileSet == m) && d.bMorphable) {
|
||||
SetTileAt(dwPos, pave2set_start/*GetTileID(m,0)*/, 0);
|
||||
}
|
||||
}
|
||||
if (d.bMorphable && ns != -1) {
|
||||
// NEW URBAN FIX FOR URBAN PAVEMENT
|
||||
if (tiledata == &un_tiledata) {
|
||||
//[NewUrbanInfo]
|
||||
//Morphable2=114
|
||||
//Ramps2=117
|
||||
int r = ramp2set;
|
||||
int m = pave2set;
|
||||
if (d.wTileSet == r || d.wTileSet == m) {
|
||||
rampbase = ramp2set_start;
|
||||
}
|
||||
}
|
||||
SetTileAt(dwPos, rampbase + ns - 1, 0);
|
||||
|
||||
}
|
||||
}
|
||||
}
|
Loading…
Add table
Add a link
Reference in a new issue