// // OpenDoor // void Raycaster::OpenDoor(bool hasKey, bool *needAKey) { static int doorPosX, doorPosY; static Uint32 lDoorOpen = 0; int i; // Don't close doors we're standing in if(map[(int)posY][(int)posX] == DOOR_INDEX) return; for(i=0; i<4; i++) { switch(i) { case 0: doorPosX = (int)posX; doorPosY = (int)posY + 1; break; case 1: doorPosX = (int)posX + 1; doorPosY = (int)posY; break; case 2: doorPosX = (int)posX; doorPosY = (int)posY - 1; break; case 3: doorPosX = (int)posX - 1; doorPosY = (int)posY; break; } if(doorPosX < 0 || doorPosY < 0) continue; if(map[doorPosY][doorPosX] == DOOR_INDEX || map[doorPosY][doorPosX] == LOCKED_DOOR_INDEX) { if(lDoorOpen == 0) lDoorOpen = SDL_GetTicks(); else if(SDL_GetTicks() - lDoorOpen < DOOR_CHG_TIME) continue; Door *door = GetDoorAt(doorPosX, doorPosY); //door->SetOpen(!door->IsOpen()); if(!door->IsLockedDoor() || hasKey) { if(!door->IsOpen()) door->SetOpening(true); else door->SetClosing(true); lDoorOpen = SDL_GetTicks(); } else if(door->IsLockedDoor()) *needAKey = true; return; } else if(map[doorPosY][doorPosX] == EXIT_DOOR_INDEX) mapChange = true; } }