* made better base for different scenes (startup, loading, world,...)

* first time to display something on GUI.
* corrected (again) major typo, thx bLuma!
* added some sample data to display.
* moved log.cpp/h to shared.
* cant update vc80 files right now, sorry.
This commit is contained in:
False.Genesis 2007-10-21 20:52:29 +00:00
parent b7a4ae92c5
commit 87f708a0fd
13 changed files with 145 additions and 41 deletions

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.7 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 15 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 13 KiB

View File

@ -89,7 +89,7 @@ void DefScriptPackage::_InitFunctions(void)
AddFunc("shdn",&DefScriptPackage::func_shdn);
AddFunc("loaddef",&DefScriptPackage::func_loaddef);
AddFunc("reloaddef",&DefScriptPackage::func_reloaddef);
AddFunc("reloaddef",&DefScriptPackage::func_unloaddef);
AddFunc("unloaddef",&DefScriptPackage::func_unloaddef);
AddFunc("setscriptpermission",&DefScriptPackage::func_setscriptpermission);
AddFunc("toint",&DefScriptPackage::func_toint);
AddFunc("add",&DefScriptPackage::func_add);

View File

@ -3,25 +3,9 @@
#include "Object.h"
#include "DrawObject.h"
#include "PseuWoW.h"
#include "Scene.h"
#include "PseuGUI.h"
using namespace irr;
using namespace core;
using namespace scene;
using namespace video;
using namespace io;
using namespace gui;
enum DriverIDs
{
NULLDEVICE = 0,
SOFTWARE = 1,
BURNINGSVIDEO = 2,
OPENGL = 3,
DIRECTX8 = 4,
DIRECTX9 = 5,
};
PseuGUIRunnable::PseuGUIRunnable()
{
_gui = new PseuGUI();
@ -53,6 +37,11 @@ PseuGUI::PseuGUI()
_initialized = false;
_mustdie = false;
_driverType = video::EDT_BURNINGSVIDEO; // nulldevice makes not really a sense to display stuff
_scenestate = SCENESTATE_NULL;
_smgr = NULL;
_device = NULL;
_guienv = NULL;
_scene = NULL;
}
PseuGUI::~PseuGUI()
@ -108,6 +97,7 @@ void PseuGUI::_Init(void)
_device->setWindowCaption(L"PseuWoW - Initializing");
_driver = _device->getVideoDriver();
_smgr = _device->getSceneManager();
_guienv = _device->getGUIEnvironment();
//...
_initialized = true;
}
@ -115,12 +105,19 @@ void PseuGUI::_Init(void)
void PseuGUI::Cancel(void)
{
DEBUG(logdebug("PseuGUI::Cancel()"));
_mustdie = true;
if(_scene)
{
delete _scene;
_scene = NULL;
}
if(_device)
{
_device->drop();
_device = NULL;
}
_mustdie = true;
}
void PseuGUI::Shutdown(void)
@ -149,9 +146,11 @@ void PseuGUI::Run(void)
{
_driver->beginScene(true, true, 0);
domgr.Update(); // iterate over DrawObjects, draw them and clean up
_UpdateSceneState();
DrawCurrentScene();
_smgr->drawAll();
_guienv->drawAll();
_driver->endScene();
}
@ -198,4 +197,39 @@ void PseuGUI::SetInstance(PseuInstance* in)
_instance = in;
}
void PseuGUI::SetSceneState(SceneState state)
{
_scenestate_new = state; // will be applied at next cycle
}
void PseuGUI::_UpdateSceneState(void)
{
if(_scenestate != _scenestate_new && _smgr)
{
_smgr->clear();
if(_scene)
delete _scene;
_scenestate = _scenestate_new;
logdebug("PseuGUI: switched to SceneState %u", _scenestate);
switch (_scenestate)
{
case SCENESTATE_GUISTART: _scene = new SceneGuiStart(this); break;
case SCENESTATE_WORLD: _scene = new SceneWorld(this); break;
default: _scene = new Scene(this); // will draw nothing, just yield the gui
}
logdebug("PseuGUI: scene created.");
}
}
void PseuGUI::DrawCurrentScene()
{
if(!_initialized)
return;
if(_scene)
_scene->Draw();
}

View File

@ -7,6 +7,27 @@
class PseuGUI;
class Object;
class PseuInstance;
class Scene;
enum SceneState
{
SCENESTATE_NULL,
SCENESTATE_GUISTART,
SCENESTATE_LOGINSCREEN,
SCENESTATE_CHARACTERSELECTION,
SCENESTATE_LOADING,
SCENESTATE_WORLD
};
enum DriverIDs
{
NULLDEVICE = 0,
SOFTWARE = 1,
BURNINGSVIDEO = 2,
OPENGL = 3,
DIRECTX8 = 4,
DIRECTX9 = 5,
};
class PseuGUIRunnable : public ZThread::Runnable
{
@ -22,6 +43,12 @@ private:
class PseuGUI
{
// too bad friends are not inherited...
friend class Scene;
friend class SceneWorld;
friend class SceneGuiStart;
// ...
public:
PseuGUI();
~PseuGUI();
@ -35,14 +62,21 @@ public:
void UseShadows(bool);
void Cancel(void);
void Shutdown(void);
inline bool IsInitialized(void) { return _initialized; }
inline bool MustDie(void) { return _mustdie; }
// interfaces to tell the gui what to draw
void NotifyObjectDeletion(uint64 guid);
void NotifyObjectCreation(Object *o);
// scenes
void DrawCurrentScene(void);
void SetSceneState(SceneState);
private:
void _Init(void);
void _UpdateSceneState(void);
uint16 _xres,_yres,_colordepth;
bool _windowed,_vsync,_shadows;
bool _initialized,_mustdie;
@ -53,6 +87,8 @@ private:
irr::video::E_DRIVER_TYPE _driverType;
DrawObjMgr domgr;
PseuInstance *_instance;
SceneState _scenestate, _scenestate_new;
Scene *_scene;
};

View File

@ -94,7 +94,8 @@ PseuInstance::~PseuInstance()
bool PseuInstance::Init(void)
{
log_prepare("logfile.txt",this);
log_prepare("logfile.txt","a");
log_setloglevel(0);
log("");
log("--- Initializing Instance ---");
@ -185,10 +186,20 @@ bool PseuInstance::Init(void)
void PseuInstance::Run(void)
{
if(!_initialized)
return;
logdetail("PseuInstance: Initialized and running!");
if(GetGUI())
{
while(!GetGUI()->IsInitialized())
Sleep(1); // wait until the gui is ready. it will crash otherwise
logdebug("GUI: switching to startup display...");
GetGUI()->SetSceneState(SCENESTATE_GUISTART);
}
// TODO: as soon as username ans password can be inputted into the gui, wait until it was set by user.
if(GetConf()->realmlist.empty() || GetConf()->realmport==0)
{
logcritical("Realmlist address not set, can't connect.");
@ -404,6 +415,8 @@ void PseuInstanceConf::ApplyFromVarSet(VarSet &v)
num+=opt.at(i);
}
}
log_setloglevel(debug);
}

View File

@ -177,12 +177,6 @@
<File
RelativePath=".\Client\HelperDefs.h">
</File>
<File
RelativePath=".\Client\log.cpp">
</File>
<File
RelativePath=".\Client\log.h">
</File>
<File
RelativePath=".\Client\main.cpp">
</File>
@ -426,6 +420,18 @@
<File
RelativePath=".\Client\Gui\PseuGUI.h">
</File>
<File
RelativePath=".\Client\Gui\Scene.cpp">
</File>
<File
RelativePath=".\Client\Gui\Scene.h">
</File>
<File
RelativePath=".\Client\Gui\SceneGuiStart.cpp">
</File>
<File
RelativePath=".\Client\Gui\SceneWorld.cpp">
</File>
</Filter>
</Filter>
<Filter

View File

@ -138,6 +138,12 @@
<File
RelativePath=".\shared\DebugStuff.h">
</File>
<File
RelativePath=".\shared\log.cpp">
</File>
<File
RelativePath=".\shared\log.h">
</File>
<File
RelativePath=".\shared\SysDefs.h">
</File>

View File

@ -26,6 +26,7 @@
#include "SysDefs.h"
#include "DebugStuff.h"
#include "tools.h"
#include "log.h"
#include "ByteBuffer.h"

View File

@ -1,16 +1,25 @@
#include <stdarg.h>
#include "common.h"
#include "PseuWoW.h"
#include "log.h"
PseuInstance *instance=NULL;
#if PLATFORM == PLATFORM_WIN32
#include <windows.h>
#endif
FILE *logfile=NULL;
uint8 loglevel=0;
void log_prepare(char *fn, PseuInstance* p)
void log_prepare(char *fn, char *mode = NULL)
{
logfile = fopen(fn,"a");
instance = p;
if(!mode)
mode = "a";
logfile = fopen(fn,mode);
}
void log_setloglevel(uint8 lvl)
{
loglevel = lvl;
}
void log(const char *str, ...)
@ -40,7 +49,7 @@ void log(const char *str, ...)
void logdetail(const char *str, ...)
{
if(!str || instance->GetConf()->debug < 1)
if(!str || loglevel < 1)
return;
va_list ap;
_log_setcolor(true,LCYAN);
@ -65,7 +74,7 @@ void logdetail(const char *str, ...)
void logdebug(const char *str, ...)
{
if(!str || instance->GetConf()->debug < 2)
if(!str || loglevel < 2)
return;
va_list ap;
_log_setcolor(true,LBLUE);
@ -91,7 +100,7 @@ void logdebug(const char *str, ...)
void logdev(const char *str, ...)
{
if(!str || instance->GetConf()->debug < 3)
if(!str || loglevel < 3)
return;
va_list ap;
_log_setcolor(true,LMAGENTA);
@ -161,9 +170,9 @@ void logcritical(const char *str, ...)
fflush(stdout);
}
void logcustom(uint8 loglevel, Color color, const char *str, ...)
void logcustom(uint8 lvl, Color color, const char *str, ...)
{
if(!str || instance->GetConf()->debug < loglevel)
if(!str || loglevel < lvl)
return;
va_list ap;
_log_setcolor(true,color);

View File

@ -1,8 +1,6 @@
#ifndef _LOG_H
#define _LOG_H
class PseuInstance;
enum Color
{
BLACK,
@ -22,7 +20,8 @@ enum Color
WHITE
};
void log_prepare(char *fn, PseuInstance* p); // instance reference needed for log level determination
void log_prepare(char *fn, char *mode);
void log_setloglevel(uint8 lvl);
void log(const char *str, ...);
void logdetail(const char *str, ...);
void logdebug(const char *str, ...);