nuclear@0: #include "nwt/startup.h" nuclear@0: #include "nwt/nucwin.h" nuclear@0: #include "3deng/3deng.h" nuclear@0: #include "demosystem/demosys.h" nuclear@0: #include "fmod.h" nuclear@0: nuclear@0: // parts nuclear@0: #include "beginpart.h" nuclear@0: #include "dungeonpart.h" nuclear@0: #include "treepart.h" nuclear@0: #include "tunnelpart.h" nuclear@0: #include "hellpart.h" nuclear@0: #include "greetspart.h" nuclear@0: #include "demonpart.h" nuclear@0: nuclear@0: int ScreenX; nuclear@0: int ScreenY; nuclear@0: nuclear@0: Widget *win; nuclear@0: Engine3D eng3d; nuclear@0: GraphicsContext *gc; nuclear@0: DemoSystem *demo; nuclear@0: FMUSIC_MODULE *mod; nuclear@0: nuclear@0: nuclear@0: // parts nuclear@0: DungeonPart *dungeonpart; nuclear@0: BeginPart *beginpart; nuclear@0: TreePart *treepart; nuclear@0: TunnelPart *tunnelpart; nuclear@0: HellPart *hellpart; nuclear@0: GreetsPart *greetspart; nuclear@0: DemonPart *demonpart; nuclear@0: nuclear@0: bool Init(); nuclear@0: void MainLoop(); nuclear@0: void CleanUp(); nuclear@0: int KeyHandler(Widget *win, int key); nuclear@0: int CloseHandler(Widget *win, int arg); nuclear@0: int MouseHandler(Widget *win, int x, int y, bool left, bool middle, bool right); nuclear@0: int WheelHandler(Widget *win, int x, int y, int rot); nuclear@0: nuclear@0: nuclear@0: int main() { nuclear@0: nuclear@0: win = NWCreateWindow("The Lab Demos", NWT_CENTERX, NWT_CENTERY, 100, 50, 0); nuclear@0: SetMainLoopFunc(MainLoop); nuclear@0: SetHandler(HANDLER_KEY, KeyHandler); nuclear@0: SetHandler(HANDLER_CLOSE, CloseHandler); nuclear@0: nuclear@0: SetHandler(HANDLER_MOUSE, (HandlerFunctionPtr)MouseHandler); nuclear@0: SetHandler(HANDLER_WHEEL, (HandlerFunctionPtr)WheelHandler); nuclear@0: nuclear@0: nuclear@0: if(!Init()) return 0; nuclear@0: nuclear@0: return NWMainLoop(RealTimeLoop); nuclear@0: } nuclear@0: nuclear@0: bool Init() { nuclear@0: nuclear@0: ContextInitParameters cip; nuclear@0: try { nuclear@0: cip = eng3d.LoadContextParamsConfigFile("n3dinit.conf"); nuclear@0: gc = eng3d.CreateGraphicsContext(win, 0, &cip); nuclear@0: } nuclear@0: catch(EngineInitException except) { nuclear@0: MessageBox(win, except.GetReason().c_str(), "Fatal Error", MB_OK | MB_ICONSTOP); nuclear@0: return false; nuclear@0: } nuclear@0: ScreenX = cip.x; nuclear@0: ScreenY = cip.y; nuclear@0: NWResize(win, ScreenX, ScreenY); nuclear@0: NWResizeClientArea(win, WS_OVERLAPPEDWINDOW); nuclear@0: nuclear@0: ShowCursor(false); nuclear@0: nuclear@0: // Loading pics.... nuclear@0: Texture *loading[9]; nuclear@0: loading[0] = gc->texman->AddTexture("data/textures/Loading/loading0.jpg"); nuclear@0: loading[1] = gc->texman->AddTexture("data/textures/Loading/loading1.jpg"); nuclear@0: loading[2] = gc->texman->AddTexture("data/textures/Loading/loading2.jpg"); nuclear@0: loading[3] = gc->texman->AddTexture("data/textures/Loading/loading3.jpg"); nuclear@0: loading[4] = gc->texman->AddTexture("data/textures/Loading/loading4.jpg"); nuclear@0: loading[5] = gc->texman->AddTexture("data/textures/Loading/loading5.jpg"); nuclear@0: loading[6] = gc->texman->AddTexture("data/textures/Loading/loading6.jpg"); nuclear@0: loading[7] = gc->texman->AddTexture("data/textures/Loading/loading7.jpg"); nuclear@0: loading[8] = gc->texman->AddTexture("data/textures/Loading/loading8.jpg"); nuclear@0: nuclear@0: demo = new DemoSystem(gc); nuclear@0: SceneLoader::SetGraphicsContext(gc); nuclear@0: nuclear@0: Object *quad = new Object(gc); nuclear@0: quad->CreatePlane(4.0f, 0); nuclear@0: quad->Scale(1.3333f, 1.0f, 1.0f); nuclear@0: quad->material = Material(1.0f, 1.0f, 1.0f); nuclear@0: nuclear@0: Matrix4x4 ViewMat; nuclear@0: ViewMat.Translate(0.0f, 0.0f, 3.6f); nuclear@0: gc->SetViewMatrix(ViewMat); nuclear@0: nuclear@0: gc->SetZBuffering(false); nuclear@0: gc->SetLighting(false); nuclear@0: nuclear@0: quad->material.SetTexture(loading[0], TextureMap); nuclear@0: quad->Render(); nuclear@0: gc->Flip(); nuclear@0: beginpart = new BeginPart(gc); nuclear@0: beginpart->SetTimingRel(0, 11000); nuclear@0: demo->AddPart(beginpart); nuclear@0: nuclear@0: quad->material.SetTexture(loading[1], TextureMap); nuclear@0: quad->Render(); nuclear@0: gc->Flip(); nuclear@0: dungeonpart = new DungeonPart(gc); nuclear@0: dungeonpart->SetTimingRel(11000, 75000); nuclear@0: demo->AddPart(dungeonpart); nuclear@0: nuclear@0: quad->material.SetTexture(loading[2], TextureMap); nuclear@0: quad->Render(); nuclear@0: gc->Flip(); nuclear@0: treepart = new TreePart(gc); nuclear@0: treepart->SetTimingRel(85900, 40000); nuclear@0: demo->AddPart(treepart); nuclear@0: nuclear@0: quad->material.SetTexture(loading[3], TextureMap); nuclear@0: quad->Render(); nuclear@0: gc->Flip(); nuclear@0: tunnelpart = new TunnelPart(gc); nuclear@0: tunnelpart->SetTimingRel(125900, 30000); nuclear@0: demo->AddPart(tunnelpart); nuclear@0: nuclear@0: quad->material.SetTexture(loading[4], TextureMap); nuclear@0: quad->Render(); nuclear@0: gc->Flip(); nuclear@0: hellpart = new HellPart(gc); nuclear@0: hellpart->SetTimingRel(155900, 40000); nuclear@0: demo->AddPart(hellpart); nuclear@0: nuclear@0: quad->material.SetTexture(loading[5], TextureMap); nuclear@0: quad->Render(); nuclear@0: gc->Flip(); nuclear@0: greetspart = new GreetsPart(gc); nuclear@0: greetspart->SetTimingRel(196000, 12000); nuclear@0: demo->AddPart(greetspart); nuclear@0: nuclear@0: quad->material.SetTexture(loading[6], TextureMap); nuclear@0: quad->Render(); nuclear@0: gc->Flip(); nuclear@0: demonpart = new DemonPart(gc); nuclear@0: demonpart->SetTimingRel(208000, 2000); nuclear@0: demo->AddPart(demonpart); nuclear@0: nuclear@0: quad->material.SetTexture(loading[7], TextureMap); nuclear@0: quad->Render(); nuclear@0: gc->Flip(); nuclear@0: FSOUND_SetHWND(win); nuclear@0: FSOUND_SetOutput(FSOUND_OUTPUT_DSOUND); nuclear@0: FSOUND_SetBufferSize(200); nuclear@0: FSOUND_Init(44100, 32, FSOUND_INIT_GLOBALFOCUS); nuclear@0: mod = FMUSIC_LoadSong("data/GOTH03.XM"); nuclear@0: FMUSIC_SetMasterVolume(mod, 250); nuclear@0: nuclear@0: quad->material.SetTexture(loading[8], TextureMap); nuclear@0: quad->Render(); nuclear@0: gc->Flip(); nuclear@0: gc->SetBackfaceCulling(true); nuclear@0: gc->SetZBuffering(true); nuclear@0: gc->SetLighting(true); nuclear@0: nuclear@0: Sleep(800); nuclear@0: nuclear@0: demo->Run(); nuclear@0: nuclear@0: FMUSIC_PlaySong(mod); nuclear@0: nuclear@0: return true; nuclear@0: } nuclear@0: nuclear@0: void MainLoop() { nuclear@0: demo->Update(); nuclear@0: gc->Flip(); nuclear@0: } nuclear@0: nuclear@0: void CleanUp() { nuclear@0: ShowCursor(true); nuclear@0: FMUSIC_FreeSong(mod); nuclear@0: FSOUND_Close(); nuclear@0: delete demo; nuclear@0: } nuclear@0: nuclear@0: ///////// handlers ///////// nuclear@0: int KeyHandler(Widget *win, int key) { nuclear@0: switch(key) { nuclear@0: case VK_ESCAPE: nuclear@0: NWCloseWindow(win); nuclear@0: break; nuclear@0: nuclear@0: } nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: int CloseHandler(Widget *win, int arg) { nuclear@0: CleanUp(); nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: int WheelHandler(Widget *win, int x, int y, int rot) { nuclear@0: /* float tr = rot > 0 ? 0.05f : -0.05f; nuclear@0: nuclear@0: Camera *cam = const_cast(demo->GetActivePath()->GetScene()->GetActiveCamera()); nuclear@0: cam->SetCameraPath(0, 0, 0, 0); nuclear@0: nuclear@0: cam->Zoom(tr); nuclear@0: */ nuclear@0: return 0; nuclear@0: } nuclear@0: nuclear@0: nuclear@0: int MouseHandler(Widget *win, int x, int y, bool left, bool middle, bool right) { nuclear@0: /* static POINT PrevPos; nuclear@0: POINT MoveDiff; nuclear@0: nuclear@0: if(right) { nuclear@0: MoveDiff.x = x - PrevPos.x; nuclear@0: MoveDiff.y = y - PrevPos.y; nuclear@0: float xangle = (float)MoveDiff.x / 50.0f; nuclear@0: float dy = (float)MoveDiff.y; nuclear@0: nuclear@0: Camera *cam = const_cast(demo->GetActivePath()->GetScene()->GetActiveCamera()); nuclear@0: cam->SetCameraPath(0, 0, 0, 0); nuclear@0: nuclear@0: cam->Rotate(0.0f, xangle, 0.0f); nuclear@0: cam->SetPosition(cam->GetPosition() + Vector3(0.0f, dy, 0.0f)); nuclear@0: } nuclear@0: nuclear@0: nuclear@0: PrevPos.x = x; nuclear@0: PrevPos.y = y; nuclear@0: */ nuclear@0: return 0; nuclear@0: }