2012-11-26 18:58:24 +00:00
|
|
|
/*
|
|
|
|
===========================================================================
|
|
|
|
|
|
|
|
Doom 3 BFG Edition GPL Source Code
|
2012-11-28 15:47:07 +00:00
|
|
|
Copyright (C) 1993-2012 id Software LLC, a ZeniMax Media company.
|
2012-11-26 18:58:24 +00:00
|
|
|
|
2012-11-28 15:47:07 +00:00
|
|
|
This file is part of the Doom 3 BFG Edition GPL Source Code ("Doom 3 BFG Edition Source Code").
|
2012-11-26 18:58:24 +00:00
|
|
|
|
|
|
|
Doom 3 BFG Edition Source Code is free software: you can redistribute it and/or modify
|
|
|
|
it under the terms of the GNU General Public License as published by
|
|
|
|
the Free Software Foundation, either version 3 of the License, or
|
|
|
|
(at your option) any later version.
|
|
|
|
|
|
|
|
Doom 3 BFG Edition Source Code is distributed in the hope that it will be useful,
|
|
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
GNU General Public License for more details.
|
|
|
|
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
|
|
along with Doom 3 BFG Edition Source Code. If not, see <http://www.gnu.org/licenses/>.
|
|
|
|
|
|
|
|
In addition, the Doom 3 BFG Edition Source Code is also subject to certain additional terms. You should have received a copy of these additional terms immediately following the terms and conditions of the GNU General Public License which accompanied the Doom 3 BFG Edition Source Code. If not, please request a copy in writing from id Software at the address below.
|
|
|
|
|
|
|
|
If you have questions concerning this license or the applicable additional terms, you may contact in writing id Software LLC, c/o ZeniMax Media Inc., Suite 120, Rockville, Maryland 20850 USA.
|
|
|
|
|
|
|
|
===========================================================================
|
|
|
|
*/
|
|
|
|
|
|
|
|
#include "../idlib/precompiled.h"
|
|
|
|
#pragma hdrstop
|
|
|
|
|
|
|
|
#include "Game_local.h"
|
|
|
|
|
|
|
|
/*
|
|
|
|
|
|
|
|
game_endlevel.cpp
|
|
|
|
|
|
|
|
This entity is targeted to complete a level, and it also handles
|
|
|
|
running the stats and moving the camera.
|
|
|
|
|
|
|
|
*/
|
|
|
|
|
|
|
|
|
|
|
|
CLASS_DECLARATION( idEntity, idTarget_EndLevel )
|
2012-11-28 15:47:07 +00:00
|
|
|
EVENT( EV_Activate, idTarget_EndLevel::Event_Trigger )
|
2012-11-26 18:58:24 +00:00
|
|
|
END_CLASS
|
|
|
|
|
|
|
|
/*
|
|
|
|
================
|
|
|
|
idTarget_EndLevel::Spawn
|
|
|
|
================
|
|
|
|
*/
|
2012-11-28 15:47:07 +00:00
|
|
|
void idTarget_EndLevel::Spawn( void )
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
idStr guiName;
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
gui = NULL;
|
2012-11-28 15:47:07 +00:00
|
|
|
noGui = spawnArgs.GetBool( "noGui" );
|
|
|
|
if( !noGui )
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
spawnArgs.GetString( "guiName", "guis/EndLevel.gui", guiName );
|
2012-11-28 15:47:07 +00:00
|
|
|
|
|
|
|
if( guiName.Length() )
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
gui = idUserInterface::FindGui( guiName, true, false, true );
|
|
|
|
}
|
|
|
|
}
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
buttonsReleased = false;
|
|
|
|
readyToExit = false;
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
exitCommand = "";
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
================
|
|
|
|
idTarget_EndLevel::~idTarget_EndLevel()
|
|
|
|
================
|
|
|
|
*/
|
2012-11-28 15:47:07 +00:00
|
|
|
idTarget_EndLevel::~idTarget_EndLevel()
|
|
|
|
{
|
|
|
|
//FIXME: need to go to smart ptrs for gui allocs or the unique method
|
2012-11-26 18:58:24 +00:00
|
|
|
//delete gui;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
================
|
|
|
|
idTarget_EndLevel::Event_Trigger
|
|
|
|
================
|
|
|
|
*/
|
2012-11-28 15:47:07 +00:00
|
|
|
void idTarget_EndLevel::Event_Trigger( idEntity* activator )
|
|
|
|
{
|
|
|
|
if( gameLocal.endLevel )
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
return;
|
|
|
|
}
|
|
|
|
|
|
|
|
// mark the endLevel, which will modify some game actions
|
|
|
|
// and pass control to us for drawing the stats and camera position
|
|
|
|
gameLocal.endLevel = this;
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
// grab the activating player view position
|
2012-11-28 15:47:07 +00:00
|
|
|
idPlayer* player = ( idPlayer* )( activator );
|
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
initialViewOrg = player->GetEyePosition();
|
|
|
|
initialViewAngles = idVec3( player->viewAngles[0], player->viewAngles[1], player->viewAngles[2] );
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
// kill all the sounds
|
|
|
|
gameSoundWorld->StopAllSounds();
|
2012-11-28 15:47:07 +00:00
|
|
|
|
|
|
|
if( noGui )
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
readyToExit = true;
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
================
|
|
|
|
idTarget_EndLevel::Draw
|
|
|
|
================
|
|
|
|
*/
|
2012-11-28 15:47:07 +00:00
|
|
|
void idTarget_EndLevel::Draw()
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
|
2012-11-28 15:47:07 +00:00
|
|
|
if( noGui )
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
return;
|
|
|
|
}
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
renderView_t renderView;
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
memset( &renderView, 0, sizeof( renderView ) );
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
renderView.width = SCREEN_WIDTH;
|
|
|
|
renderView.height = SCREEN_HEIGHT;
|
|
|
|
renderView.x = 0;
|
|
|
|
renderView.y = 0;
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
renderView.fov_x = 90;
|
|
|
|
renderView.fov_y = gameLocal.CalcFovY( renderView.fov_x );
|
|
|
|
renderView.time = gameLocal.time;
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
#if 0
|
|
|
|
renderView.vieworg = initialViewOrg;
|
2012-11-28 15:47:07 +00:00
|
|
|
renderView.viewaxis = idAngles( initialViewAngles ).toMat3();
|
2012-11-26 18:58:24 +00:00
|
|
|
#else
|
|
|
|
renderView.vieworg = renderEntity.origin;
|
|
|
|
renderView.viewaxis = renderEntity.axis;
|
|
|
|
#endif
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
gameRenderWorld->RenderScene( &renderView );
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
// draw the gui on top of the 3D view
|
2012-11-28 15:47:07 +00:00
|
|
|
gui->Redraw( gameLocal.time );
|
2012-11-26 18:58:24 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
================
|
|
|
|
idTarget_EndLevel::PlayerCommand
|
|
|
|
================
|
|
|
|
*/
|
2012-11-28 15:47:07 +00:00
|
|
|
void idTarget_EndLevel::PlayerCommand( int buttons )
|
|
|
|
{
|
|
|
|
if( !( buttons & BUTTON_ATTACK ) )
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
buttonsReleased = true;
|
|
|
|
return;
|
|
|
|
}
|
2012-11-28 15:47:07 +00:00
|
|
|
if( !buttonsReleased )
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
return;
|
|
|
|
}
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
// we will exit at the end of the next game frame
|
|
|
|
readyToExit = true;
|
|
|
|
}
|
|
|
|
|
|
|
|
/*
|
|
|
|
================
|
|
|
|
idTarget_EndLevel::ExitCommand
|
|
|
|
================
|
|
|
|
*/
|
2012-11-28 15:47:07 +00:00
|
|
|
const char* idTarget_EndLevel::ExitCommand()
|
|
|
|
{
|
|
|
|
if( !readyToExit )
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
return NULL;
|
|
|
|
}
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
idStr nextMap;
|
2012-11-28 15:47:07 +00:00
|
|
|
|
|
|
|
if( spawnArgs.GetString( "nextMap", "", nextMap ) )
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
sprintf( exitCommand, "map %s", nextMap.c_str() );
|
2012-11-28 15:47:07 +00:00
|
|
|
}
|
|
|
|
else
|
|
|
|
{
|
2012-11-26 18:58:24 +00:00
|
|
|
exitCommand = "";
|
|
|
|
}
|
2012-11-28 15:47:07 +00:00
|
|
|
|
2012-11-26 18:58:24 +00:00
|
|
|
return exitCommand;
|
|
|
|
}
|