/*
* Copyright (c) 2007, Wesley Hearn
*
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without modification,
* are permitted provided that the following conditions are met:
*
* * Redistributions of source code must retain the above copyright notice,
* this list of conditions and the following disclaimer.
* * Redistributions in binary form must reproduce the above copyright notice,
* this list of conditions and the following disclaimer in the documentation and/or
* other materials provided with the distribution.
* * Neither the name of the product nor the names of its contributors may be
* used to endorse or promote products derived from this software without specific
* prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*
* client.cpp - <DATE> - Main client file, sets up the renderer and handles the game state
*
*/
#include <main.hpp>
void sleep(unsigned int mseconds)
{
clock_t goal = mseconds + clock();
while (goal > clock());
}
void Client::Init()
{
GS = LOADING;
input.Init();
// Set up the renderer
// createDevice( E_DRIVER_TYPE, windowSize, uint bits, bool fullscreen,
// bool stencilbuffer, bool vsync, IEventReceiver* receiver = 0)
device = createDevice( EDT_OPENGL, dimension2d<s32>(640, 480), 16, false, false, false, &input);
// Set the window name
// virtual void setWindowCaption(const wchar_t* text)
device->setWindowCaption(L"Galatic Wars");
// Set up the driver, smgr, guienv pointers
driver = device->getVideoDriver();
smgr = device->getSceneManager();
guienv = device->getGUIEnvironment();
Camera = smgr->addCameraSceneNode();
Splash();
menu.Init();
}
void Client::Splash()
{
// Lets start up with the menu
// TODO: play a movie.. at least a splash screen for irrlicht
}
void Client::Render()
{
while(IsRunning)
{
while(device->run())
{
// Tell Irrlicht that this is a new scene
driver->beginScene(true, true, SColor(255,100,101,140));
// State switches.. BE SURE TO CALL state.Init() and Init will handle changing this
switch (GS)
{
case IN_WORLD:
world.Render();
break;
// case LOADING:
// break;
case MAIN_MENU:
default:
menu.Render();
break;
}
// Let Irrlicht know that the frame is over
driver->endScene();
}
}
}
// b0rk3d... (causes a seg fault in libX11 :/
// but in short shut down and start up
void Client::Reinit()
{
driver->endScene();
device->closeDevice();
device->run();
device->drop();
device = NULL;
sleep(5);
Init();
}
void Client::Shutdown()
{
// Clean up
device->drop();
device = NULL;
}