From 6969851ca372d2ba5213137930aaebaf76a5ad8a Mon Sep 17 00:00:00 2001 From: btd Date: Mon, 4 Oct 2010 22:37:39 +0400 Subject: [PATCH] Clean up Doors and Teleport initialization. --- src/game/server/gamecontext.cpp | 17 ++-- src/game/server/gamemodes/DDRace.cpp | 129 ++++++++++++++------------- src/game/server/gamemodes/DDRace.h | 4 +- 3 files changed, 75 insertions(+), 75 deletions(-) diff --git a/src/game/server/gamecontext.cpp b/src/game/server/gamecontext.cpp index c83d2d06a..6a84c350d 100644 --- a/src/game/server/gamecontext.cpp +++ b/src/game/server/gamecontext.cpp @@ -2411,9 +2411,11 @@ void CGameContext::OnInit(/*class IKernel *pKernel*/) if (m_Layers.FrontLayer()) pFront = (CTile *)Kernel()->RequestInterface()->GetData(pTileMap->m_Front); m_pSwitch=0; - if (m_Layers.SwitchLayer()) - m_pSwitch = (CTeleTile *)Kernel()->RequestInterface()->GetData(pTileMap->m_Switch); - ((CGameControllerDDRace *)m_pController)->InitSwitcher(); + if (m_Layers.SwitchLayer()) { + m_pSwitch = (CTeleTile *)Kernel()->RequestInterface()->GetData(pTileMap->m_Switch); + ((CGameControllerDDRace *)m_pController)->InitSwitcher(); + } + for(int y = 0; y < pTileMap->m_Height; y++) { @@ -2450,15 +2452,6 @@ void CGameContext::OnInit(/*class IKernel *pKernel*/) m_pController->OnEntity(Index-ENTITY_OFFSET, Pos,true); } } - if (m_pSwitch) - { - int Index = m_pSwitch[y*pTileMap->m_Width+x].m_Type - ENTITY_OFFSET; - vec2 Pos(x*32.0f+16.0f, y*32.0f+16.0f); - if(Index == ENTITY_TRIGGER) - for(int i=0;i<((CGameControllerDDRace *)m_pController)->m_Size;i++) - if(((CGameControllerDDRace *)m_pController)->m_SDoors[i].m_Number == m_pSwitch[y*pTileMap->m_Width+x].m_Number) - new CTrigger(&m_World,Pos, ((CGameControllerDDRace *)m_pController)->m_SDoors[i].m_Address); - } } } diff --git a/src/game/server/gamemodes/DDRace.cpp b/src/game/server/gamemodes/DDRace.cpp index d5d6dbf5e..b69e318cc 100644 --- a/src/game/server/gamemodes/DDRace.cpp +++ b/src/game/server/gamemodes/DDRace.cpp @@ -6,7 +6,7 @@ #include #include "DDRace.h" -CGameControllerDDRace::CGameControllerDDRace(class CGameContext *pGameServer) : IGameController(pGameServer), m_Teams(pGameServer) +CGameControllerDDRace::CGameControllerDDRace(class CGameContext *pGameServer) : IGameController(pGameServer), m_Teams(pGameServer), m_SDoors(50) { m_pGameType = "DDRace"; @@ -37,6 +37,8 @@ void CGameControllerDDRace::InitTeleporter() if(GameServer()->Collision()->TeleLayer()[i].m_Number > m_ArraySize) m_ArraySize = GameServer()->Collision()->TeleLayer()[i].m_Number; } + } else { + return; } if(!m_ArraySize) @@ -68,12 +70,12 @@ void CGameControllerDDRace::InitTeleporter() m_TotalTele++; } } - m_pTele1D = new vec2[m_TotalTele]; - mem_zero(m_pTele1D, m_TotalTele*sizeof(vec2)); + //m_pTele1D = new vec2[m_TotalTele]; + //mem_zero(m_pTele1D, m_TotalTele*sizeof(vec2)); //Please rewrite this place in next lines you broke all initialization - m_pTele2D = (vec2**)m_pTele1D; - for (int i = 0; i < m_ArraySize; ++i) + m_pTele2D = new vec2 * [m_TotalTele]; + for (int i = 0; i < m_TotalTele; ++i) { m_pTele2D[i] = new vec2[m_pNumTele[i]]; mem_zero(m_pTele2D[i], m_pNumTele[i]*sizeof(vec2)); @@ -81,9 +83,12 @@ void CGameControllerDDRace::InitTeleporter() for(int i = 0; i < Width*Height; i++) { - if(GameServer()->Collision()->TeleLayer()[i].m_Number > 0 && GameServer()->Collision()->TeleLayer()[i].m_Type == TILE_TELEOUT) + if(GameServer()->Collision()->TeleLayer()[i].m_Number > 0 + && GameServer()->Collision()->TeleLayer()[i].m_Type == TILE_TELEOUT) { - m_pTele2D[GameServer()->Collision()->TeleLayer()[i].m_Number-1][--Count[GameServer()->Collision()->TeleLayer()[i].m_Number-1]] = vec2(i%GameServer()->Collision()->Layers()->TeleLayer()->m_Width*32+16, i/GameServer()->Collision()->Layers()->TeleLayer()->m_Width*32+16); + m_pTele2D[GameServer()->Collision()->TeleLayer()[i].m_Number-1][--Count[GameServer()->Collision()->TeleLayer()[i].m_Number-1]] + = vec2(i % GameServer()->Collision()->Layers()->TeleLayer()->m_Width*32+16, + i/GameServer()->Collision()->Layers()->TeleLayer()->m_Width*32+16); } } } @@ -95,65 +100,65 @@ void CGameControllerDDRace::InitSwitcher() if (GameServer()->m_pSwitch) { for(int y = 0; y < pTileMap->m_Height; y++) + { for(int x = 0; x < pTileMap->m_Width; x++) { - int sides[8][2]; - sides[0][0]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y+1)].m_Type - ENTITY_OFFSET; - sides[1][0]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y+1)].m_Type - ENTITY_OFFSET; - sides[2][0]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y)].m_Type - ENTITY_OFFSET; - sides[3][0]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y-1)].m_Type - ENTITY_OFFSET; - sides[4][0]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y-1)].m_Type - ENTITY_OFFSET; - sides[5][0]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y-1)].m_Type - ENTITY_OFFSET; - sides[6][0]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y)].m_Type - ENTITY_OFFSET; - sides[7][0]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y+1)].m_Type - ENTITY_OFFSET; - sides[0][1]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y+1)].m_Number; - sides[1][1]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y+1)].m_Number; - sides[2][1]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y)].m_Number; - sides[3][1]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y-1)].m_Number; - sides[4][1]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y-1)].m_Number; - sides[5][1]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y-1)].m_Number; - sides[6][1]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y)].m_Number; - sides[7][1]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y+1)].m_Number; - for(int i=0; i<8;i++) - if ((sides[i][0] >= ENTITY_LASER_SHORT && sides[i][0] <= ENTITY_LASER_LONG) && GameServer()->Collision()->SwitchLayer()[y*pTileMap->m_Width+x].m_Number == sides[i][1]) - m_Size++; - } - if(m_Size) - { - m_SDoors = new SDoors[m_Size]; - mem_zero(m_SDoors, m_Size*sizeof(SDoors)); - int num=0; - for(int y = 0; y < pTileMap->m_Height; y++) - for(int x = 0; x < pTileMap->m_Width; x++) - if(GameServer()->Collision()->SwitchLayer()[y*pTileMap->m_Width+x].m_Type == (ENTITY_DOOR + ENTITY_OFFSET)) - { - int sides[8][2]; - sides[0][0]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y+1)].m_Type - ENTITY_OFFSET; - sides[1][0]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y+1)].m_Type - ENTITY_OFFSET; - sides[2][0]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y)].m_Type - ENTITY_OFFSET; - sides[3][0]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y-1)].m_Type - ENTITY_OFFSET; - sides[4][0]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y-1)].m_Type - ENTITY_OFFSET; - sides[5][0]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y-1)].m_Type - ENTITY_OFFSET; - sides[6][0]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y)].m_Type - ENTITY_OFFSET; - sides[7][0]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y+1)].m_Type - ENTITY_OFFSET; - sides[0][1]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y+1)].m_Number; - sides[1][1]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y+1)].m_Number; - sides[2][1]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y)].m_Number; - sides[3][1]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y-1)].m_Number; - sides[4][1]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y-1)].m_Number; - sides[5][1]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y-1)].m_Number; - sides[6][1]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y)].m_Number; - sides[7][1]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y+1)].m_Number; - for(int i=0; i<8;i++) - if ((sides[i][0] >= ENTITY_LASER_SHORT && sides[i][0] <= ENTITY_LASER_LONG) && GameServer()->Collision()->SwitchLayer()[y*pTileMap->m_Width+x].m_Number == sides[i][1]) - { + if(GameServer()->Collision()->SwitchLayer()[y*pTileMap->m_Width+x].m_Type + == (ENTITY_DOOR + ENTITY_OFFSET)) + { + int sides[8][2]; + sides[0][0]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y+1)].m_Type - ENTITY_OFFSET; + sides[1][0]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y+1)].m_Type - ENTITY_OFFSET; + sides[2][0]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y)].m_Type - ENTITY_OFFSET; + sides[3][0]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y-1)].m_Type - ENTITY_OFFSET; + sides[4][0]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y-1)].m_Type - ENTITY_OFFSET; + sides[5][0]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y-1)].m_Type - ENTITY_OFFSET; + sides[6][0]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y)].m_Type - ENTITY_OFFSET; + sides[7][0]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y+1)].m_Type - ENTITY_OFFSET; + sides[0][1]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y+1)].m_Number; + sides[1][1]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y+1)].m_Number; + sides[2][1]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y)].m_Number; + sides[3][1]=GameServer()->m_pSwitch[(x+1)+pTileMap->m_Width*(y-1)].m_Number; + sides[4][1]=GameServer()->m_pSwitch[(x)+pTileMap->m_Width*(y-1)].m_Number; + sides[5][1]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y-1)].m_Number; + sides[6][1]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y)].m_Number; + sides[7][1]=GameServer()->m_pSwitch[(x-1)+pTileMap->m_Width*(y+1)].m_Number; + for(int i = 0; i < 8; i++) { + if ((sides[i][0] >= ENTITY_LASER_SHORT && sides[i][0] <= ENTITY_LASER_LONG) + && GameServer()->Collision()->SwitchLayer()[y*pTileMap->m_Width+x].m_Number == sides[i][1]) { vec2 Pos(x*32.0f+16.0f, y*32.0f+16.0f); - m_SDoors[num].m_Address = new CDoor(&GameServer()->m_World, Pos, pi/4*i, (32*3 + 32*(sides[i][0] - ENTITY_LASER_SHORT)*3), false); - m_SDoors[num].m_Pos = Pos; - m_SDoors[num++].m_Number = GameServer()->Collision()->SwitchLayer()[y*pTileMap->m_Width+x].m_Number; - } + SDoors tmp; + tmp.m_Pos = Pos; + tmp.m_Address = new CDoor( + &GameServer()->m_World, + Pos, + pi/4*i, + (32*3 + 32*(sides[i][0] - ENTITY_LASER_SHORT)*3), + false); + tmp.m_Number = GameServer()->Collision()->SwitchLayer()[y*pTileMap->m_Width+x].m_Number; + m_SDoors.push_back(tmp); + } } + + } + } + } + for(int y = 0; y < pTileMap->m_Height; y++) + { + for(int x = 0; x < pTileMap->m_Width; x++) + { + if(GameServer()->m_pSwitch[y*pTileMap->m_Width+x].m_Type - ENTITY_OFFSET == ENTITY_TRIGGER) { + for(int i = 0; i < m_SDoors.size(); ++i) { + if(m_SDoors[i].m_Number == GameServer()->m_pSwitch[y*pTileMap->m_Width+x].m_Number) { + new CTrigger( + &GameServer()->m_World, + vec2(x*32.0f+16.0f, y*32.0f+16.0f), + m_SDoors[i].m_Address); + break; + } + } + } + } } } - } diff --git a/src/game/server/gamemodes/DDRace.h b/src/game/server/gamemodes/DDRace.h index c4cad77ff..0d66cf24a 100644 --- a/src/game/server/gamemodes/DDRace.h +++ b/src/game/server/gamemodes/DDRace.h @@ -7,6 +7,8 @@ #include #include +#include + class CGameControllerDDRace : public IGameController { @@ -34,7 +36,7 @@ public: CDoor * m_Address; }; - SDoors* m_SDoors; + std::vector < SDoors > m_SDoors; virtual void Tick(); };