mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-14 03:58:18 +00:00
Use IsValid***Tile
functions
Use the utility function to check if tele/speedup/switch/tune tile indices are valid. Using `IsValidSwitchTile` fixes that the switch number and delay were not updated when selecting freeze, deep freeze, deep unfreeze, live freeze and live unfreeze tiles, as those tiles were missing in the existing condition.
This commit is contained in:
parent
1d9cbba326
commit
60c0da7c4d
|
@ -667,7 +667,7 @@ void CMapLayers::OnMapLoad()
|
||||||
Flags = 0;
|
Flags = 0;
|
||||||
if(CurOverlay == 1)
|
if(CurOverlay == 1)
|
||||||
{
|
{
|
||||||
if(Index != TILE_TELECHECKIN && Index != TILE_TELECHECKINEVIL)
|
if(IsTeleTileNumberUsed(Index))
|
||||||
Index = ((CTeleTile *)pTiles)[y * pTMap->m_Width + x].m_Number;
|
Index = ((CTeleTile *)pTiles)[y * pTMap->m_Width + x].m_Number;
|
||||||
else
|
else
|
||||||
Index = 0;
|
Index = 0;
|
||||||
|
|
|
@ -456,7 +456,7 @@ void CRenderTools::RenderTeleOverlay(CTeleTile *pTele, int w, int h, float Scale
|
||||||
int c = mx + my * w;
|
int c = mx + my * w;
|
||||||
|
|
||||||
unsigned char Index = pTele[c].m_Number;
|
unsigned char Index = pTele[c].m_Number;
|
||||||
if(Index && pTele[c].m_Type != TILE_TELECHECKIN && pTele[c].m_Type != TILE_TELECHECKINEVIL)
|
if(Index && IsTeleTileNumberUsed(pTele[c].m_Type))
|
||||||
{
|
{
|
||||||
char aBuf[16];
|
char aBuf[16];
|
||||||
str_format(aBuf, sizeof(aBuf), "%d", Index);
|
str_format(aBuf, sizeof(aBuf), "%d", Index);
|
||||||
|
|
|
@ -707,27 +707,15 @@ bool CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Stora
|
||||||
unsigned int Size = DataFile.GetDataSize(pTilemapItem->m_Tele);
|
unsigned int Size = DataFile.GetDataSize(pTilemapItem->m_Tele);
|
||||||
if(Size >= (size_t)pTiles->m_Width * pTiles->m_Height * sizeof(CTeleTile))
|
if(Size >= (size_t)pTiles->m_Width * pTiles->m_Height * sizeof(CTeleTile))
|
||||||
{
|
{
|
||||||
static const int s_aTilesRep[] = {
|
|
||||||
TILE_TELEIN,
|
|
||||||
TILE_TELEINEVIL,
|
|
||||||
TILE_TELEOUT,
|
|
||||||
TILE_TELECHECK,
|
|
||||||
TILE_TELECHECKIN,
|
|
||||||
TILE_TELECHECKINEVIL,
|
|
||||||
TILE_TELECHECKOUT,
|
|
||||||
TILE_TELEINWEAPON,
|
|
||||||
TILE_TELEINHOOK};
|
|
||||||
CTeleTile *pLayerTeleTiles = ((CLayerTele *)pTiles)->m_pTeleTile;
|
CTeleTile *pLayerTeleTiles = ((CLayerTele *)pTiles)->m_pTeleTile;
|
||||||
mem_copy(pLayerTeleTiles, pTeleData, (size_t)pTiles->m_Width * pTiles->m_Height * sizeof(CTeleTile));
|
mem_copy(pLayerTeleTiles, pTeleData, (size_t)pTiles->m_Width * pTiles->m_Height * sizeof(CTeleTile));
|
||||||
|
|
||||||
for(int i = 0; i < pTiles->m_Width * pTiles->m_Height; i++)
|
for(int i = 0; i < pTiles->m_Width * pTiles->m_Height; i++)
|
||||||
{
|
{
|
||||||
|
if(IsValidTeleTile(pLayerTeleTiles[i].m_Type))
|
||||||
|
pTiles->m_pTiles[i].m_Index = pLayerTeleTiles[i].m_Type;
|
||||||
|
else
|
||||||
pTiles->m_pTiles[i].m_Index = 0;
|
pTiles->m_pTiles[i].m_Index = 0;
|
||||||
for(int TilesRep : s_aTilesRep)
|
|
||||||
{
|
|
||||||
if(pLayerTeleTiles[i].m_Type == TilesRep)
|
|
||||||
pTiles->m_pTiles[i].m_Index = TilesRep;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
DataFile.UnloadData(pTilemapItem->m_Tele);
|
DataFile.UnloadData(pTilemapItem->m_Tele);
|
||||||
|
@ -744,8 +732,8 @@ bool CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Stora
|
||||||
|
|
||||||
for(int i = 0; i < pTiles->m_Width * pTiles->m_Height; i++)
|
for(int i = 0; i < pTiles->m_Width * pTiles->m_Height; i++)
|
||||||
{
|
{
|
||||||
if(pLayerSpeedupTiles[i].m_Force > 0)
|
if(IsValidSpeedupTile(pLayerSpeedupTiles[i].m_Type) && pLayerSpeedupTiles[i].m_Force > 0)
|
||||||
pTiles->m_pTiles[i].m_Index = TILE_BOOST;
|
pTiles->m_pTiles[i].m_Index = pLayerSpeedupTiles[i].m_Type;
|
||||||
else
|
else
|
||||||
pTiles->m_pTiles[i].m_Index = 0;
|
pTiles->m_pTiles[i].m_Index = 0;
|
||||||
}
|
}
|
||||||
|
@ -768,29 +756,12 @@ bool CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Stora
|
||||||
unsigned int Size = DataFile.GetDataSize(pTilemapItem->m_Switch);
|
unsigned int Size = DataFile.GetDataSize(pTilemapItem->m_Switch);
|
||||||
if(Size >= (size_t)pTiles->m_Width * pTiles->m_Height * sizeof(CSwitchTile))
|
if(Size >= (size_t)pTiles->m_Width * pTiles->m_Height * sizeof(CSwitchTile))
|
||||||
{
|
{
|
||||||
const int s_aTilesComp[] = {
|
|
||||||
TILE_SWITCHTIMEDOPEN,
|
|
||||||
TILE_SWITCHTIMEDCLOSE,
|
|
||||||
TILE_SWITCHOPEN,
|
|
||||||
TILE_SWITCHCLOSE,
|
|
||||||
TILE_FREEZE,
|
|
||||||
TILE_DFREEZE,
|
|
||||||
TILE_DUNFREEZE,
|
|
||||||
TILE_LFREEZE,
|
|
||||||
TILE_LUNFREEZE,
|
|
||||||
TILE_HIT_ENABLE,
|
|
||||||
TILE_HIT_DISABLE,
|
|
||||||
TILE_JUMP,
|
|
||||||
TILE_ADD_TIME,
|
|
||||||
TILE_SUBTRACT_TIME,
|
|
||||||
TILE_ALLOW_TELE_GUN,
|
|
||||||
TILE_ALLOW_BLUE_TELE_GUN};
|
|
||||||
CSwitchTile *pLayerSwitchTiles = ((CLayerSwitch *)pTiles)->m_pSwitchTile;
|
CSwitchTile *pLayerSwitchTiles = ((CLayerSwitch *)pTiles)->m_pSwitchTile;
|
||||||
mem_copy(pLayerSwitchTiles, pSwitchData, (size_t)pTiles->m_Width * pTiles->m_Height * sizeof(CSwitchTile));
|
mem_copy(pLayerSwitchTiles, pSwitchData, (size_t)pTiles->m_Width * pTiles->m_Height * sizeof(CSwitchTile));
|
||||||
|
|
||||||
for(int i = 0; i < pTiles->m_Width * pTiles->m_Height; i++)
|
for(int i = 0; i < pTiles->m_Width * pTiles->m_Height; i++)
|
||||||
{
|
{
|
||||||
if(((pLayerSwitchTiles[i].m_Type > (ENTITY_CRAZY_SHOTGUN + ENTITY_OFFSET) && ((CLayerSwitch *)pTiles)->m_pSwitchTile[i].m_Type < (ENTITY_DRAGGER_WEAK + ENTITY_OFFSET)) || ((CLayerSwitch *)pTiles)->m_pSwitchTile[i].m_Type == (ENTITY_LASER_O_FAST + 1 + ENTITY_OFFSET)))
|
if(((pLayerSwitchTiles[i].m_Type > (ENTITY_CRAZY_SHOTGUN + ENTITY_OFFSET) && pLayerSwitchTiles[i].m_Type < (ENTITY_DRAGGER_WEAK + ENTITY_OFFSET)) || pLayerSwitchTiles[i].m_Type == (ENTITY_LASER_O_FAST + 1 + ENTITY_OFFSET)))
|
||||||
continue;
|
continue;
|
||||||
else if(pLayerSwitchTiles[i].m_Type >= (ENTITY_ARMOR_1 + ENTITY_OFFSET) && pLayerSwitchTiles[i].m_Type <= (ENTITY_DOOR + ENTITY_OFFSET))
|
else if(pLayerSwitchTiles[i].m_Type >= (ENTITY_ARMOR_1 + ENTITY_OFFSET) && pLayerSwitchTiles[i].m_Type <= (ENTITY_DOOR + ENTITY_OFFSET))
|
||||||
{
|
{
|
||||||
|
@ -799,16 +770,13 @@ bool CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Stora
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
for(int TilesComp : s_aTilesComp)
|
if(IsValidSwitchTile(pLayerSwitchTiles[i].m_Type))
|
||||||
{
|
{
|
||||||
if(pLayerSwitchTiles[i].m_Type == TilesComp)
|
pTiles->m_pTiles[i].m_Index = pLayerSwitchTiles[i].m_Type;
|
||||||
{
|
|
||||||
pTiles->m_pTiles[i].m_Index = TilesComp;
|
|
||||||
pTiles->m_pTiles[i].m_Flags = pLayerSwitchTiles[i].m_Flags;
|
pTiles->m_pTiles[i].m_Flags = pLayerSwitchTiles[i].m_Flags;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
DataFile.UnloadData(pTilemapItem->m_Switch);
|
DataFile.UnloadData(pTilemapItem->m_Switch);
|
||||||
}
|
}
|
||||||
else if(pTiles->m_Tune)
|
else if(pTiles->m_Tune)
|
||||||
|
@ -822,8 +790,8 @@ bool CEditorMap::Load(class IStorage *pStorage, const char *pFileName, int Stora
|
||||||
|
|
||||||
for(int i = 0; i < pTiles->m_Width * pTiles->m_Height; i++)
|
for(int i = 0; i < pTiles->m_Width * pTiles->m_Height; i++)
|
||||||
{
|
{
|
||||||
if(pLayerTuneTiles[i].m_Type == TILE_TUNE)
|
if(IsValidTuneTile(pLayerTuneTiles[i].m_Type))
|
||||||
pTiles->m_pTiles[i].m_Index = TILE_TUNE;
|
pTiles->m_pTiles[i].m_Index = pLayerTuneTiles[i].m_Type;
|
||||||
else
|
else
|
||||||
pTiles->m_pTiles[i].m_Index = 0;
|
pTiles->m_pTiles[i].m_Index = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -259,11 +259,7 @@ int CLayerTiles::BrushGrab(CLayerGroup *pBrush, CUIRect Rect)
|
||||||
for(int x = 0; x < r.w; x++)
|
for(int x = 0; x < r.w; x++)
|
||||||
{
|
{
|
||||||
pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x] = ((CLayerTele *)this)->m_pTeleTile[(r.y + y) * m_Width + (r.x + x)];
|
pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x] = ((CLayerTele *)this)->m_pTeleTile[(r.y + y) * m_Width + (r.x + x)];
|
||||||
if(pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type == TILE_TELEIN || pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type == TILE_TELEOUT || pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type == TILE_TELEINEVIL
|
if(IsValidTeleTile(pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type) && IsTeleTileNumberUsed(pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type))
|
||||||
// || pGrabbed->m_pTeleTile[y*pGrabbed->m_Width+x].m_Type == TILE_TELECHECKINEVIL
|
|
||||||
|| pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type == TILE_TELECHECK || pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type == TILE_TELECHECKOUT
|
|
||||||
// || pGrabbed->m_pTeleTile[y*pGrabbed->m_Width+x].m_Type == TILE_TELECHECKIN
|
|
||||||
|| pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type == TILE_TELEINWEAPON || pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Type == TILE_TELEINHOOK)
|
|
||||||
{
|
{
|
||||||
m_pEditor->m_TeleNumber = pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Number;
|
m_pEditor->m_TeleNumber = pGrabbed->m_pTeleTile[y * pGrabbed->m_Width + x].m_Number;
|
||||||
}
|
}
|
||||||
|
@ -297,7 +293,7 @@ int CLayerTiles::BrushGrab(CLayerGroup *pBrush, CUIRect Rect)
|
||||||
for(int x = 0; x < r.w; x++)
|
for(int x = 0; x < r.w; x++)
|
||||||
{
|
{
|
||||||
pGrabbed->m_pSpeedupTile[y * pGrabbed->m_Width + x] = ((CLayerSpeedup *)this)->m_pSpeedupTile[(r.y + y) * m_Width + (r.x + x)];
|
pGrabbed->m_pSpeedupTile[y * pGrabbed->m_Width + x] = ((CLayerSpeedup *)this)->m_pSpeedupTile[(r.y + y) * m_Width + (r.x + x)];
|
||||||
if(pGrabbed->m_pSpeedupTile[y * pGrabbed->m_Width + x].m_Type == TILE_BOOST)
|
if(IsValidSpeedupTile(pGrabbed->m_pSpeedupTile[y * pGrabbed->m_Width + x].m_Type))
|
||||||
{
|
{
|
||||||
m_pEditor->m_SpeedupAngle = pGrabbed->m_pSpeedupTile[y * pGrabbed->m_Width + x].m_Angle;
|
m_pEditor->m_SpeedupAngle = pGrabbed->m_pSpeedupTile[y * pGrabbed->m_Width + x].m_Angle;
|
||||||
m_pEditor->m_SpeedupForce = pGrabbed->m_pSpeedupTile[y * pGrabbed->m_Width + x].m_Force;
|
m_pEditor->m_SpeedupForce = pGrabbed->m_pSpeedupTile[y * pGrabbed->m_Width + x].m_Force;
|
||||||
|
@ -335,21 +331,7 @@ int CLayerTiles::BrushGrab(CLayerGroup *pBrush, CUIRect Rect)
|
||||||
for(int x = 0; x < r.w; x++)
|
for(int x = 0; x < r.w; x++)
|
||||||
{
|
{
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x] = ((CLayerSwitch *)this)->m_pSwitchTile[(r.y + y) * m_Width + (r.x + x)];
|
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x] = ((CLayerSwitch *)this)->m_pSwitchTile[(r.y + y) * m_Width + (r.x + x)];
|
||||||
if(pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == ENTITY_DOOR + ENTITY_OFFSET ||
|
if(IsValidSwitchTile(pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type))
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_HIT_ENABLE ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_HIT_DISABLE ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_SWITCHOPEN ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_SWITCHCLOSE ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_SWITCHTIMEDOPEN ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_SWITCHTIMEDCLOSE ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == ENTITY_LASER_LONG + ENTITY_OFFSET ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == ENTITY_LASER_MEDIUM + ENTITY_OFFSET ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == ENTITY_LASER_SHORT + ENTITY_OFFSET ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_JUMP ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_ADD_TIME ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_SUBTRACT_TIME ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_ALLOW_TELE_GUN ||
|
|
||||||
pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Type == TILE_ALLOW_BLUE_TELE_GUN)
|
|
||||||
{
|
{
|
||||||
m_pEditor->m_SwitchNum = pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Number;
|
m_pEditor->m_SwitchNum = pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Number;
|
||||||
m_pEditor->m_SwitchDelay = pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Delay;
|
m_pEditor->m_SwitchDelay = pGrabbed->m_pSwitchTile[y * pGrabbed->m_Width + x].m_Delay;
|
||||||
|
@ -386,7 +368,7 @@ int CLayerTiles::BrushGrab(CLayerGroup *pBrush, CUIRect Rect)
|
||||||
for(int x = 0; x < r.w; x++)
|
for(int x = 0; x < r.w; x++)
|
||||||
{
|
{
|
||||||
pGrabbed->m_pTuneTile[y * pGrabbed->m_Width + x] = ((CLayerTune *)this)->m_pTuneTile[(r.y + y) * m_Width + (r.x + x)];
|
pGrabbed->m_pTuneTile[y * pGrabbed->m_Width + x] = ((CLayerTune *)this)->m_pTuneTile[(r.y + y) * m_Width + (r.x + x)];
|
||||||
if(pGrabbed->m_pTuneTile[y * pGrabbed->m_Width + x].m_Type == TILE_TUNE)
|
if(IsValidTuneTile(pGrabbed->m_pTuneTile[y * pGrabbed->m_Width + x].m_Type))
|
||||||
{
|
{
|
||||||
m_pEditor->m_TuningNum = pGrabbed->m_pTuneTile[y * pGrabbed->m_Width + x].m_Number;
|
m_pEditor->m_TuningNum = pGrabbed->m_pTuneTile[y * pGrabbed->m_Width + x].m_Number;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue