mirror of
https://github.com/electronicarts/CNC_TS_and_RA2_Mission_Editor.git
synced 2025-04-30 09:01:41 -04:00
* fix: #116, using std::vector instead of bare array . * added guardian checks . * now unwanted cells to the edges will no longer be affected --------- Co-authored-by: handama <55939089+handama@users.noreply.github.com>
This commit is contained in:
parent
ac22ab9aab
commit
a9c9a5287b
5 changed files with 126 additions and 92 deletions
|
@ -1654,6 +1654,9 @@ void CIsoView::OnMouseMove(UINT nFlags, CPoint point)
|
|||
|
||||
for (m = left; m < right; m++) {
|
||||
for (n = top; n < bottom; n++) {
|
||||
if (!Map->isInside(x + m, y + n)) {
|
||||
continue;
|
||||
}
|
||||
int pos = x + m + (y + n) * isosize;
|
||||
int ground = Map->GetFielddataAt(pos)->wGround;
|
||||
if (ground == 0xFFFF) {
|
||||
|
@ -1699,6 +1702,9 @@ void CIsoView::OnMouseMove(UINT nFlags, CPoint point)
|
|||
|
||||
for (m = left; m < right; m++) {
|
||||
for (n = top; n < bottom; n++) {
|
||||
if (!Map->isInside(x + m, y + n)) {
|
||||
continue;
|
||||
}
|
||||
int ground = Map->GetFielddataAt(x + m + (y + n) * Map->GetIsoSize())->wGround;
|
||||
if (ground == 0xFFFF) {
|
||||
ground = 0;
|
||||
|
@ -1729,6 +1735,9 @@ void CIsoView::OnMouseMove(UINT nFlags, CPoint point)
|
|||
ASSERT(m_funcRect.top <= m_funcRect.bottom);
|
||||
for (m = m_funcRect.left - 1; m <= m_funcRect.right + 1; m++) {
|
||||
for (n = m_funcRect.top - 1; n <= m_funcRect.bottom + 1; n++) {
|
||||
if (!Map->isInside(m, n)) {
|
||||
continue;
|
||||
}
|
||||
Map->CreateSlopesAt(m + n * isosize);
|
||||
}
|
||||
}
|
||||
|
@ -2568,6 +2577,9 @@ void CIsoView::OnLButtonDown(UINT nFlags, CPoint point)
|
|||
int oheight = Map->GetHeightAt(x + y * Map->GetIsoSize());
|
||||
for (f = -m_BrushSize_x / 2; f < m_BrushSize_x / 2 + 1; f++) {
|
||||
for (n = -m_BrushSize_y / 2; n < m_BrushSize_y / 2 + 1; n++) {
|
||||
if (!Map->isInside(x + f, y + n)) {
|
||||
continue;
|
||||
}
|
||||
int pos = x + f + (y + n) * Map->GetIsoSize();
|
||||
int ground = Map->GetFielddataAt(pos)->wGround;
|
||||
if (ground == 0xFFFF) ground = 0;
|
||||
|
@ -2579,6 +2591,9 @@ void CIsoView::OnLButtonDown(UINT nFlags, CPoint point)
|
|||
}
|
||||
for (f = -m_BrushSize_x / 2; f < m_BrushSize_x / 2 + 1; f++) {
|
||||
for (n = -m_BrushSize_y / 2; n < m_BrushSize_y / 2 + 1; n++) {
|
||||
if (!Map->isInside(x + f, y + n)) {
|
||||
continue;
|
||||
}
|
||||
int pos = x + f + (y + n) * Map->GetIsoSize();
|
||||
int ground = Map->GetFielddataAt(pos)->wGround;
|
||||
if (ground == 0xFFFF) ground = 0;
|
||||
|
@ -2608,6 +2623,9 @@ void CIsoView::OnLButtonDown(UINT nFlags, CPoint point)
|
|||
int f, n;
|
||||
for (f = m_funcRect.left - 1; f <= m_funcRect.right + 1; f++) {
|
||||
for (n = m_funcRect.top - 1; n <= m_funcRect.bottom + 1; n++) {
|
||||
if (!Map->isInside(f, n)) {
|
||||
continue;
|
||||
}
|
||||
int pos = f + (n)*Map->GetIsoSize();
|
||||
Map->CreateSlopesAt(pos);
|
||||
}
|
||||
|
@ -2661,6 +2679,9 @@ void CIsoView::OnLButtonDown(UINT nFlags, CPoint point)
|
|||
int oheight = Map->GetHeightAt(x + y * Map->GetIsoSize());
|
||||
for (f = -m_BrushSize_x / 2; f < m_BrushSize_x / 2 + 1; f++) {
|
||||
for (n = -m_BrushSize_y / 2; n < m_BrushSize_y / 2 + 1; n++) {
|
||||
if (!Map->isInside(x + f, y + n)) {
|
||||
continue;
|
||||
}
|
||||
int pos = x + f + (y + n) * Map->GetIsoSize();
|
||||
int ground = Map->GetFielddataAt(pos)->wGround;
|
||||
if (ground == 0xFFFF) ground = 0;
|
||||
|
@ -2672,6 +2693,9 @@ void CIsoView::OnLButtonDown(UINT nFlags, CPoint point)
|
|||
}
|
||||
for (f = -m_BrushSize_x / 2; f < m_BrushSize_x / 2 + 1; f++) {
|
||||
for (n = -m_BrushSize_y / 2; n < m_BrushSize_y / 2 + 1; n++) {
|
||||
if (!Map->isInside(x + f, y + n)) {
|
||||
continue;
|
||||
}
|
||||
int pos = x + f + (y + n) * Map->GetIsoSize();
|
||||
int ground = Map->GetFielddataAt(pos)->wGround;
|
||||
if (ground == 0xFFFF) ground = 0;
|
||||
|
@ -2698,6 +2722,9 @@ void CIsoView::OnLButtonDown(UINT nFlags, CPoint point)
|
|||
int f, n;
|
||||
for (f = m_funcRect.left - 1; f <= m_funcRect.right + 1; f++) {
|
||||
for (n = m_funcRect.top - 1; n <= m_funcRect.bottom + 1; n++) {
|
||||
if (!Map->isInside(f, n)) {
|
||||
continue;
|
||||
}
|
||||
int pos = f + (n)*Map->GetIsoSize();
|
||||
Map->CreateSlopesAt(pos);
|
||||
}
|
||||
|
@ -2724,19 +2751,27 @@ void CIsoView::OnLButtonDown(UINT nFlags, CPoint point)
|
|||
} else if (AD.mode == ACTIONMODE_HEIGHTENTILE) {
|
||||
Map->TakeSnapshot();
|
||||
|
||||
int n, m;
|
||||
for (m = -m_BrushSize_x / 2; m < m_BrushSize_x / 2 + 1; m++) {
|
||||
for (n = -m_BrushSize_y / 2; n < m_BrushSize_y / 2 + 1; n++) {
|
||||
Map->SetHeightAt(x + m + (y + n) * Map->GetIsoSize(), Map->GetHeightAt(x + m + (y + n) * Map->GetIsoSize()) + 1);
|
||||
for (int m = -m_BrushSize_x / 2; m < m_BrushSize_x / 2 + 1; m++) {
|
||||
for (int n = -m_BrushSize_y / 2; n < m_BrushSize_y / 2 + 1; n++) {
|
||||
if (!Map->isInside(x + m, y + n)) {
|
||||
continue;
|
||||
}
|
||||
auto const pos = x + m + (y + n) * Map->GetIsoSize();
|
||||
Map->SetHeightAt(pos, Map->GetHeightAt(pos) + 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (nFlags & MK_CONTROL)
|
||||
for (m = -m_BrushSize_x / 2 - 1; m < m_BrushSize_x / 2 + 2; m++) {
|
||||
for (n = -m_BrushSize_y / 2 - 1; n < m_BrushSize_y / 2 + 2; n++) {
|
||||
Map->CreateSlopesAt(x + m + (y + n) * Map->GetIsoSize());
|
||||
if (nFlags & MK_CONTROL) {
|
||||
for (int m = -m_BrushSize_x / 2 - 1; m < m_BrushSize_x / 2 + 2; m++) {
|
||||
for (int n = -m_BrushSize_y / 2 - 1; n < m_BrushSize_y / 2 + 2; n++) {
|
||||
if (!Map->isInside(x + m, y + n)) {
|
||||
continue;
|
||||
}
|
||||
auto const pos = x + m + (y + n) * Map->GetIsoSize();
|
||||
Map->CreateSlopesAt(pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Map->TakeSnapshot();
|
||||
Map->Undo();
|
||||
|
@ -2745,19 +2780,27 @@ void CIsoView::OnLButtonDown(UINT nFlags, CPoint point)
|
|||
} else if (AD.mode == ACTIONMODE_LOWERTILE) {
|
||||
Map->TakeSnapshot();
|
||||
|
||||
int n, m;
|
||||
for (m = -m_BrushSize_x / 2; m < m_BrushSize_x / 2 + 1; m++) {
|
||||
for (n = -m_BrushSize_y / 2; n < m_BrushSize_y / 2 + 1; n++) {
|
||||
Map->SetHeightAt(x + m + (y + n) * Map->GetIsoSize(), Map->GetHeightAt(x + m + (y + n) * Map->GetIsoSize()) - 1);
|
||||
for (int m = -m_BrushSize_x / 2; m < m_BrushSize_x / 2 + 1; m++) {
|
||||
for (int n = -m_BrushSize_y / 2; n < m_BrushSize_y / 2 + 1; n++) {
|
||||
if (!Map->isInside(x + m, y + n)) {
|
||||
continue;
|
||||
}
|
||||
auto const pos = x + m + (y + n) * Map->GetIsoSize();
|
||||
Map->SetHeightAt(pos, Map->GetHeightAt(pos) - 1);
|
||||
}
|
||||
}
|
||||
|
||||
if (nFlags & MK_CONTROL)
|
||||
for (m = -m_BrushSize_x / 2 - 1; m < m_BrushSize_x / 2 + 2; m++) {
|
||||
for (n = -m_BrushSize_y / 2 - 1; n < m_BrushSize_y / 2 + 2; n++) {
|
||||
Map->CreateSlopesAt(x + m + (y + n) * Map->GetIsoSize());
|
||||
if (nFlags & MK_CONTROL) {
|
||||
for (int m = -m_BrushSize_x / 2 - 1; m < m_BrushSize_x / 2 + 2; m++) {
|
||||
for (int n = -m_BrushSize_y / 2 - 1; n < m_BrushSize_y / 2 + 2; n++) {
|
||||
if (!Map->isInside(x + m, y + n)) {
|
||||
continue;
|
||||
}
|
||||
auto const pos = x + m + (y + n) * Map->GetIsoSize();
|
||||
Map->CreateSlopesAt(pos);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Map->TakeSnapshot();
|
||||
Map->Undo();
|
||||
|
|
|
@ -181,8 +181,6 @@ CMapData::CMapData()
|
|||
m_noAutoObjectUpdate = FALSE;
|
||||
m_money = 0;
|
||||
m_cursnapshot = -1;
|
||||
fielddata = NULL;
|
||||
fielddata_size = 0;
|
||||
m_IsoSize = 0;
|
||||
isInitialized = FALSE;
|
||||
tiledata = NULL;
|
||||
|
@ -212,9 +210,6 @@ CMapData::~CMapData()
|
|||
tiledata = NULL;
|
||||
if (m_mfd != NULL) delete[] m_mfd;
|
||||
m_mfd = NULL;
|
||||
if (fielddata != NULL) delete[] fielddata;
|
||||
fielddata = NULL;
|
||||
fielddata_size = 0;
|
||||
|
||||
int i;
|
||||
|
||||
|
@ -542,9 +537,7 @@ void CMapData::LoadMap(const std::string& file)
|
|||
errstream << "LoadMap() frees memory\n";
|
||||
errstream.flush();
|
||||
|
||||
if (fielddata != NULL) {
|
||||
delete[] fielddata;
|
||||
}
|
||||
fielddata.clear();
|
||||
|
||||
for (auto i = 0; i < dwSnapShotCount; i++) {
|
||||
delete[] m_snapshots[i].bHeight;
|
||||
|
@ -557,12 +550,10 @@ void CMapData::LoadMap(const std::string& file)
|
|||
delete[] m_snapshots[i].overlaydata;
|
||||
// m_snapshots[i].mapfile.Clear();
|
||||
}
|
||||
if (m_snapshots != NULL) delete[] m_snapshots;
|
||||
if (m_snapshots != NULL) {
|
||||
delete[] m_snapshots;
|
||||
}
|
||||
|
||||
|
||||
|
||||
fielddata = NULL;
|
||||
fielddata_size = 0;
|
||||
m_snapshots = NULL;
|
||||
dwSnapShotCount = 0;
|
||||
m_cursnapshot = -1;
|
||||
|
@ -882,8 +873,7 @@ void CMapData::LoadMap(const std::string& file)
|
|||
errstream << "LoadMap() allocates fielddata\n";
|
||||
errstream.flush();
|
||||
|
||||
fielddata = new(FIELDDATA[(GetIsoSize() + 1) * (GetIsoSize() + 1)]);
|
||||
fielddata_size = (GetIsoSize() + 1) * (GetIsoSize() + 1);
|
||||
fielddata.resize((GetIsoSize() + 1)* (GetIsoSize() + 1));
|
||||
|
||||
errstream << "LoadMap() unpacks data\n";
|
||||
errstream.flush();
|
||||
|
@ -1372,7 +1362,9 @@ void CMapData::SetOverlayAt(DWORD dwPos, BYTE bValue)
|
|||
|
||||
BYTE CMapData::GetOverlayAt(DWORD dwPos)
|
||||
{
|
||||
if (dwPos > fielddata_size) return 0;
|
||||
if (dwPos > fielddata.size()) {
|
||||
return 0;
|
||||
}
|
||||
return fielddata[dwPos].overlay;
|
||||
}
|
||||
|
||||
|
@ -1480,9 +1472,11 @@ void CMapData::UpdateInfantry(BOOL bSave)
|
|||
int spp = sp - 1;
|
||||
if (spp < 0) spp = 0;
|
||||
|
||||
if (spp < SUBPOS_COUNT)
|
||||
if (pos < fielddata_size)
|
||||
if (spp < SUBPOS_COUNT) {
|
||||
if (pos < fielddata.size()) {
|
||||
fielddata[pos].infantry[spp] = iv.size() - 1;
|
||||
}
|
||||
}
|
||||
|
||||
Mini_UpdatePos(x, y, IsMultiplayer());
|
||||
|
||||
|
@ -1544,7 +1538,7 @@ void CMapData::UpdateAircraft(BOOL bSave)
|
|||
int x = atoi(GetParam(sec.Nth(i).second, 4));
|
||||
int y = atoi(GetParam(sec.Nth(i).second, 3));
|
||||
int pos = x + y * GetIsoSize();
|
||||
if (pos < fielddata_size) {
|
||||
if (pos < fielddata.size()) {
|
||||
fielddata[pos].aircraft = i;
|
||||
}
|
||||
Mini_UpdatePos(x, y, IsMultiplayer());
|
||||
|
@ -1592,7 +1586,7 @@ void CMapData::UpdateStructures(BOOL bSave)
|
|||
for (d = 0; d < buildinginfo[bid].h; d++) {
|
||||
for (e = 0; e < buildinginfo[bid].w; e++) {
|
||||
int pos = (x + d) + (y + e) * GetIsoSize();
|
||||
if (pos < fielddata_size) {
|
||||
if (pos < fielddata.size()) {
|
||||
fielddata[pos].structure = i;
|
||||
fielddata[pos].structuretype = bid;
|
||||
}
|
||||
|
@ -1699,7 +1693,7 @@ void CMapData::UpdateUnits(BOOL bSave)
|
|||
int x = atoi(GetParam(sec.Nth(i).second, 4));
|
||||
int y = atoi(GetParam(sec.Nth(i).second, 3));
|
||||
int pos = x + y * GetIsoSize();
|
||||
if (pos < fielddata_size) {
|
||||
if (pos < fielddata.size()) {
|
||||
fielddata[pos].unit = i;
|
||||
}
|
||||
Mini_UpdatePos(x, y, IsMultiplayer());
|
||||
|
@ -1726,7 +1720,7 @@ void CMapData::UpdateWaypoints(BOOL bSave)
|
|||
PosToXY(coord, &x, &y);
|
||||
|
||||
int pos = x + y * GetIsoSize();
|
||||
if (pos < 0 || pos >= fielddata_size) {
|
||||
if (pos < 0 || pos >= fielddata.size()) {
|
||||
continue;
|
||||
}
|
||||
fielddata[pos].waypoint = atoi(id);
|
||||
|
@ -1823,7 +1817,7 @@ void CMapData::UpdateCelltags(BOOL bSave)
|
|||
PosToXY(sec.Nth(i).first, &x, &y);
|
||||
|
||||
int pos = x + y * GetIsoSize();
|
||||
if (pos < fielddata_size) {
|
||||
if (pos < fielddata.size()) {
|
||||
fielddata[pos].celltag = i;
|
||||
}
|
||||
}
|
||||
|
@ -1866,7 +1860,7 @@ void CMapData::DeleteInfantry(DWORD dwIndex)
|
|||
pos--;
|
||||
}
|
||||
|
||||
if (x + y * m_IsoSize < fielddata_size) {
|
||||
if (x + y * m_IsoSize < fielddata.size()) {
|
||||
fielddata[x + y * m_IsoSize].infantry[pos] = -1;
|
||||
}
|
||||
|
||||
|
@ -2014,7 +2008,7 @@ void CMapData::DeleteTerrain(DWORD dwIndex)
|
|||
m_terrain[dwIndex].deleted = 1;
|
||||
|
||||
int pos = x + y * GetIsoSize();
|
||||
if (x + y * m_IsoSize < fielddata_size) {
|
||||
if (x + y * m_IsoSize < fielddata.size()) {
|
||||
fielddata[pos].terrain = -1;
|
||||
fielddata[pos].terraintype = -1;
|
||||
}
|
||||
|
@ -2122,7 +2116,7 @@ BOOL CMapData::AddNode(NODE* lpNode, WORD dwPos)
|
|||
|
||||
BOOL CMapData::AddInfantry(INFANTRY* lpInfantry, int suggestedIndex, LPCTSTR lpType, LPCTSTR lpHouse, DWORD dwPos)
|
||||
{
|
||||
if (dwPos >= fielddata_size) {
|
||||
if (dwPos >= fielddata.size()) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -2742,7 +2736,7 @@ BOOL CMapData::AddTerrain(LPCTSTR lpType, DWORD dwPos, int suggestedIndex)
|
|||
if (suggestedIndex >= 0 && suggestedIndex < m_terrain.size()) {
|
||||
if (m_terrain[suggestedIndex].deleted) {
|
||||
m_terrain[suggestedIndex] = td;
|
||||
if (dwPos < fielddata_size) {
|
||||
if (dwPos < fielddata.size()) {
|
||||
fielddata[dwPos].terrain = suggestedIndex;
|
||||
fielddata[dwPos].terraintype = terrainid[lpType];
|
||||
}
|
||||
|
@ -2757,7 +2751,7 @@ BOOL CMapData::AddTerrain(LPCTSTR lpType, DWORD dwPos, int suggestedIndex)
|
|||
if (m_terrain[i].deleted) // yep, found one, replace it
|
||||
{
|
||||
m_terrain[i] = td;
|
||||
if (dwPos < fielddata_size) {
|
||||
if (dwPos < fielddata.size()) {
|
||||
fielddata[dwPos].terrain = i;
|
||||
fielddata[dwPos].terraintype = terrainid[lpType];
|
||||
}
|
||||
|
@ -2769,7 +2763,7 @@ BOOL CMapData::AddTerrain(LPCTSTR lpType, DWORD dwPos, int suggestedIndex)
|
|||
if (!bFound) {
|
||||
m_terrain.push_back(td);
|
||||
int pos = x + y * GetIsoSize();
|
||||
if (pos < fielddata_size) {
|
||||
if (pos < fielddata.size()) {
|
||||
fielddata[pos].terrain = m_terrain.size() - 1;
|
||||
fielddata[pos].terraintype = terrainid[lpType];
|
||||
}
|
||||
|
@ -3225,7 +3219,7 @@ void CMapData::UpdateMapFieldData(BOOL bSave)
|
|||
int dwX, dwY;
|
||||
for (dwX = 0; dwX <= m_IsoSize; dwX++) {
|
||||
for (dwY = 0; dwY <= m_IsoSize; dwY++) {
|
||||
/*for(i=0;i<fielddata_size;i++)
|
||||
/*for(i=0;i<fielddata.size();i++)
|
||||
{*/
|
||||
//int dwX=i%m_IsoSize;
|
||||
//int dwY=i/m_IsoSize;
|
||||
|
@ -3716,9 +3710,7 @@ MAPFIELDDATA* CMapData::GetMappackPointer(DWORD dwPos)
|
|||
|
||||
void CMapData::CreateMap(DWORD dwWidth, DWORD dwHeight, LPCTSTR lpTerrainType, DWORD dwGroundHeight)
|
||||
{
|
||||
if (fielddata != NULL) {
|
||||
delete[] fielddata;
|
||||
}
|
||||
fielddata.clear();
|
||||
int i;
|
||||
for (i = 0; i < dwSnapShotCount; i++) {
|
||||
delete[] m_snapshots[i].bHeight;
|
||||
|
@ -3735,11 +3727,6 @@ void CMapData::CreateMap(DWORD dwWidth, DWORD dwHeight, LPCTSTR lpTerrainType, D
|
|||
delete[] m_snapshots;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
fielddata = NULL;
|
||||
fielddata_size = 0;
|
||||
m_snapshots = NULL;
|
||||
dwSnapShotCount = 0;
|
||||
m_cursnapshot = -1;
|
||||
|
@ -4068,12 +4055,11 @@ void CMapData::CreateMap(DWORD dwWidth, DWORD dwHeight, LPCTSTR lpTerrainType, D
|
|||
ClearOverlayData();
|
||||
|
||||
isInitialized = TRUE;
|
||||
if (fielddata != NULL) delete[] fielddata;
|
||||
fielddata.clear();
|
||||
|
||||
errstream << "CreateMap() allocates memory\n";
|
||||
errstream.flush();
|
||||
fielddata = new(FIELDDATA[(GetIsoSize() + 1) * (GetIsoSize() + 1)]); // +1 because of some unpacking problems
|
||||
fielddata_size = (GetIsoSize() + 1) * (GetIsoSize() + 1);
|
||||
fielddata.resize((GetIsoSize() + 1)* (GetIsoSize() + 1)); // +1 because of some unpacking problems
|
||||
dwIsoMapSize = 0;
|
||||
|
||||
errstream << "CreateMap() frees m_mfd\n";
|
||||
|
@ -4092,7 +4078,7 @@ void CMapData::CreateMap(DWORD dwWidth, DWORD dwHeight, LPCTSTR lpTerrainType, D
|
|||
errstream.flush();
|
||||
|
||||
|
||||
for (i = 0; i < fielddata_size; i++) {
|
||||
for (i = 0; i < fielddata.size(); i++) {
|
||||
fielddata[i].bHeight = dwGroundHeight;
|
||||
}
|
||||
|
||||
|
@ -4447,7 +4433,7 @@ or if loading maps made with modified tilesets
|
|||
BOOL CMapData::CheckMapPackData()
|
||||
{
|
||||
int i;
|
||||
for (i = 0; i < fielddata_size; i++) {
|
||||
for (i = 0; i < fielddata.size(); i++) {
|
||||
int gr = fielddata[i].wGround;
|
||||
if (gr != 0xFFFF && gr >= (*tiledata_count))
|
||||
return FALSE;
|
||||
|
@ -4682,7 +4668,7 @@ void CMapData::Redo()
|
|||
|
||||
/*
|
||||
int i;
|
||||
for(i=0;i<fielddata_size;i++)
|
||||
for(i=0;i<fielddata.size();i++)
|
||||
{
|
||||
fielddata[i].bHeight=m_snapshots[m_cursnapshot+1].bHeight[i];
|
||||
fielddata[i].bMapData=m_snapshots[m_cursnapshot+1].bMapData[i];
|
||||
|
@ -4738,7 +4724,7 @@ void CMapData::SmoothAllAt(DWORD dwPos)
|
|||
return;
|
||||
}
|
||||
|
||||
if (dwPos > fielddata_size) {
|
||||
if (dwPos > fielddata.size()) {
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -5535,7 +5521,7 @@ int CMapData::CalcMoneyOnMap()
|
|||
{
|
||||
int i;
|
||||
int money = 0;
|
||||
for (i = 0; i < fielddata_size; i++) {
|
||||
for (i = 0; i < fielddata.size(); i++) {
|
||||
FIELDDATA& fd = fielddata[i];
|
||||
|
||||
BYTE& ovrl = fd.overlay;
|
||||
|
@ -5728,11 +5714,11 @@ void CMapData::ResizeMap(int iLeft, int iTop, DWORD dwNewWidth, DWORD dwNewHeigh
|
|||
DeleteCelltag(0);
|
||||
}
|
||||
|
||||
FIELDDATA* old_fd = fielddata;
|
||||
auto const old_fd = std::exchange(fielddata, {});
|
||||
int ow = GetWidth();
|
||||
int oh = GetHeight();
|
||||
int os = GetIsoSize();
|
||||
int old_fds = fielddata_size;
|
||||
auto const old_fds = fielddata.size();
|
||||
|
||||
int left = iLeft;
|
||||
int top = iTop;
|
||||
|
@ -5751,11 +5737,10 @@ void CMapData::ResizeMap(int iLeft, int iTop, DWORD dwNewWidth, DWORD dwNewHeigh
|
|||
delete[] m_snapshots[i].overlaydata;
|
||||
// m_snapshots[i].mapfile.Clear();
|
||||
}
|
||||
if (m_snapshots != NULL) delete[] m_snapshots;
|
||||
if (m_snapshots != NULL) {
|
||||
delete[] m_snapshots;
|
||||
}
|
||||
|
||||
|
||||
fielddata = NULL;
|
||||
fielddata_size = 0;
|
||||
m_snapshots = NULL;
|
||||
dwSnapShotCount = 0;
|
||||
m_cursnapshot = -1;
|
||||
|
@ -5790,8 +5775,7 @@ void CMapData::ResizeMap(int iLeft, int iTop, DWORD dwNewWidth, DWORD dwNewHeigh
|
|||
|
||||
errstream << "ResizeMap() allocates memory\n";
|
||||
errstream.flush();
|
||||
fielddata = new(FIELDDATA[(GetIsoSize() + 1) * (GetIsoSize() + 1)]); // +1 because of some unpacking problems
|
||||
fielddata_size = (GetIsoSize() + 1) * (GetIsoSize() + 1);
|
||||
fielddata.resize((GetIsoSize() + 1)* (GetIsoSize() + 1)); // +1 because of some unpacking problems
|
||||
dwIsoMapSize = 0; // our iso mappack is empty now, as we didn´t load from a file
|
||||
|
||||
errstream << "ResizeMap() frees m_mfd\n";
|
||||
|
@ -5839,7 +5823,7 @@ void CMapData::ResizeMap(int iLeft, int iTop, DWORD dwNewWidth, DWORD dwNewHeigh
|
|||
}
|
||||
|
||||
FIELDDATA& fdd = fielddata[x + y * m_IsoSize];
|
||||
FIELDDATA& fdo = old_fd[i + e * os];
|
||||
const FIELDDATA& fdo = old_fd.at(i + e * os);
|
||||
|
||||
fdd.bCliffHack = fdo.bCliffHack;
|
||||
fdd.bHeight = fdo.bHeight;
|
||||
|
@ -6054,8 +6038,6 @@ void CMapData::ResizeMap(int iLeft, int iTop, DWORD dwNewWidth, DWORD dwNewHeigh
|
|||
dlg->SetRange(0, m_IsoSize * m_IsoSize);
|
||||
dlg->ShowWindow(SW_SHOW);
|
||||
|
||||
if (old_fd) delete[] old_fd;
|
||||
|
||||
errstream << "Init minimap" << endl;
|
||||
errstream.flush();
|
||||
|
||||
|
@ -6133,7 +6115,7 @@ BOOL CMapData::IsYRMap()
|
|||
|
||||
int yroverlay = g_data.GetInteger("YROverlay", "Begin");
|
||||
|
||||
for (i = 0; i < fielddata_size; i++) {
|
||||
for (i = 0; i < fielddata.size(); i++) {
|
||||
if (fielddata[i].wGround != 0xFFFF && fielddata[i].wGround >= max) {
|
||||
return TRUE;
|
||||
}
|
||||
|
@ -6265,7 +6247,7 @@ BOOL CMapData::AddSmudge(SMUDGE* lpSmudge)
|
|||
if (m_smudges[i].deleted) // yep, found one, replace it
|
||||
{
|
||||
m_smudges[i] = td;
|
||||
if (pos < fielddata_size) {
|
||||
if (pos < fielddata.size()) {
|
||||
fielddata[pos].smudge = i;
|
||||
fielddata[pos].smudgetype = smudgeid[td.type];
|
||||
}
|
||||
|
@ -6278,7 +6260,7 @@ BOOL CMapData::AddSmudge(SMUDGE* lpSmudge)
|
|||
if (!bFound) {
|
||||
m_smudges.push_back(td);
|
||||
|
||||
if (pos < fielddata_size) {
|
||||
if (pos < fielddata.size()) {
|
||||
fielddata[pos].smudge = m_smudges.size() - 1;
|
||||
fielddata[pos].smudgetype = smudgeid[td.type];
|
||||
}
|
||||
|
@ -6299,7 +6281,7 @@ void CMapData::DeleteSmudge(DWORD dwIndex)
|
|||
m_smudges[dwIndex].deleted = 1;
|
||||
|
||||
int pos = x + y * GetIsoSize();
|
||||
if (x + y * m_IsoSize < fielddata_size) {
|
||||
if (x + y * m_IsoSize < fielddata.size()) {
|
||||
fielddata[pos].smudge = -1;
|
||||
fielddata[pos].smudgetype = -1;
|
||||
}
|
||||
|
|
|
@ -160,7 +160,9 @@ public:
|
|||
|
||||
void SetFielddataAt(DWORD dwPos, FIELDDATA* lpFd)
|
||||
{
|
||||
if (dwPos >= fielddata_size) return;
|
||||
if (dwPos >= fielddata.size()) {
|
||||
return;
|
||||
}
|
||||
|
||||
RemoveOvrlMoney(fielddata[dwPos].overlay, fielddata[dwPos].overlaydata);
|
||||
fielddata[dwPos] = (*lpFd);
|
||||
|
@ -186,7 +188,7 @@ public:
|
|||
void CreateMap(DWORD dwWidth, DWORD dwHeight, LPCTSTR lpTerrainType, DWORD dwGroundHeight);
|
||||
BOOL SetTileAt(DWORD dwPos, DWORD dwID, DWORD dwTile)
|
||||
{
|
||||
if (dwPos > fielddata_size) {
|
||||
if (dwPos > fielddata.size()) {
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
@ -222,10 +224,10 @@ public:
|
|||
|
||||
void SetHeightAt(DWORD dwPos, BYTE bHeight)
|
||||
{
|
||||
int height = (char)bHeight;
|
||||
if (height > MAXHEIGHT) height = MAXHEIGHT; // too high else
|
||||
if (height < 0) height = 0;
|
||||
if (dwPos < fielddata_size) fielddata[dwPos].bHeight = height;
|
||||
auto const height = std::max(0, std::min<int>(bHeight, MAXHEIGHT));
|
||||
if (dwPos < fielddata.size()) {
|
||||
fielddata[dwPos].bHeight = height;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
@ -362,7 +364,10 @@ public:
|
|||
}
|
||||
INT GetHeightAt(DWORD dwPos) const
|
||||
{
|
||||
return fielddata[dwPos].bHeight;
|
||||
if (dwPos < fielddata.size()) {
|
||||
return fielddata[dwPos].bHeight;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
INT GetHeightAt(const MapCoords& coords) const
|
||||
{
|
||||
|
@ -371,7 +376,7 @@ public:
|
|||
|
||||
const FIELDDATA* GetFielddataAt(DWORD dwPos) const
|
||||
{
|
||||
if (dwPos >= fielddata_size) {
|
||||
if (dwPos >= fielddata.size()) {
|
||||
outside_f.bReserved = 1;
|
||||
return &outside_f;
|
||||
}
|
||||
|
@ -381,7 +386,7 @@ public:
|
|||
|
||||
FIELDDATA* GetFielddataAt(DWORD dwPos)
|
||||
{
|
||||
if (dwPos >= fielddata_size) {
|
||||
if (dwPos >= fielddata.size()) {
|
||||
outside_f.bReserved = 1;
|
||||
return &outside_f;
|
||||
}
|
||||
|
@ -397,7 +402,7 @@ public:
|
|||
const FIELDDATA* GetFielddataAt(const MapCoords& pos) const
|
||||
{
|
||||
auto dwPos = GetMapPos(pos);
|
||||
if (dwPos >= fielddata_size) {
|
||||
if (dwPos >= fielddata.size()) {
|
||||
outside_f.bReserved = 1;
|
||||
return &outside_f;
|
||||
}
|
||||
|
@ -408,7 +413,7 @@ public:
|
|||
FIELDDATA* GetFielddataAt(const MapCoords& pos)
|
||||
{
|
||||
auto dwPos = GetMapPos(pos);
|
||||
if (dwPos >= fielddata_size) {
|
||||
if (dwPos >= fielddata.size()) {
|
||||
outside_f.bReserved = 1;
|
||||
return &outside_f;
|
||||
}
|
||||
|
@ -472,6 +477,7 @@ public:
|
|||
bool IsCoordInMap(int X, int Y) const;
|
||||
inline int GetCoordIndex(int X, int Y) const { return X + Y * GetIsoSize(); }
|
||||
bool isInside(MapCoords xy) const;
|
||||
bool isInside(int x, int y) const;
|
||||
|
||||
__forceinline CPoint GetMiniMapPos(MapCoords mapCoords)
|
||||
{
|
||||
|
@ -517,8 +523,7 @@ private:
|
|||
CIniFile m_mapfile;
|
||||
RECT m_maprect;
|
||||
RECT m_vismaprect;
|
||||
FIELDDATA* fielddata;
|
||||
int fielddata_size;
|
||||
std::vector<FIELDDATA> fielddata;
|
||||
SNAPSHOTDATA* m_snapshots;
|
||||
DWORD dwSnapShotCount;
|
||||
int m_cursnapshot;
|
||||
|
@ -688,6 +693,10 @@ inline bool CMapData::isInside(MapCoords xy) const
|
|||
{
|
||||
return xy.x >= 0 && xy.y >= 0 && xy.x < m_IsoSize&& xy.y < m_IsoSize;
|
||||
}
|
||||
inline bool CMapData::isInside(int x, int y) const
|
||||
{
|
||||
return x >= 0 && y >= 0 && x < m_IsoSize&& y < m_IsoSize;
|
||||
}
|
||||
|
||||
inline MapCoords CMapData::ToMapCoords(ProjectedCoords xy) const
|
||||
{
|
||||
|
|
|
@ -164,7 +164,7 @@ void CMapData::Mini_UpdatePos(const int i, const int e, bool isMultiplayer)
|
|||
int i, e;
|
||||
for (i = -1; i < 2; i++) {
|
||||
for (e = -1; e < 2; e++) {
|
||||
if (dwPos + i + e * m_IsoSize < fielddata_size) {
|
||||
if (dwPos + i + e * m_IsoSize < fielddata.size()) {
|
||||
int w = GetWaypointAt(dwPos + i + e * m_IsoSize);
|
||||
if (w >= 0) {
|
||||
GetWaypointData(w, &id, &p);
|
||||
|
|
|
@ -42,7 +42,7 @@ void CMapData::SmoothAt(DWORD dwPos, int iSmoothSet, int iLatSet, int iTargetSet
|
|||
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 >= fielddata_size) {
|
||||
if (pos < 0 || pos >= fielddata.size()) {
|
||||
ts[i][e] = 0;
|
||||
} else {
|
||||
FIELDDATA m2 = *GetFielddataAt(pos);
|
||||
|
|
Loading…
Add table
Reference in a new issue