nuclear@0: #include nuclear@0: #include "hellpart.h" nuclear@0: nuclear@0: HellPart::HellPart(GraphicsContext *gc) { nuclear@0: this->gc = gc; nuclear@0: nuclear@0: SceneLoader::SetNormalFileSaving(true); nuclear@0: SceneLoader::SetDataPath("data/textures/"); nuclear@0: SceneLoader::LoadScene("data/geometry/hell.3ds", &scene); nuclear@0: nuclear@0: CamPath = scene->GetCurve("CamPath"); nuclear@0: cam = const_cast(scene->GetActiveCamera()); nuclear@0: cam->SetCameraPath(CamPath, 0, 0, 30000); nuclear@0: cam->SetClippingPlanes(1.0f, 100000.0f); nuclear@0: nuclear@0: cam2 = scene->GetCamera("Camera02"); nuclear@0: cam3 = scene->GetCamera("Camera03"); nuclear@0: cam2->SetClippingPlanes(1.0f, 100000.0f); nuclear@0: cam3->SetClippingPlanes(1.0f, 100000.0f); nuclear@0: nuclear@0: Thunder = scene->GetLight("Omni01"); nuclear@0: Thunder->SetIntensity(0.0f); nuclear@0: nuclear@0: ThundEnv[0] = scene->GetObject("b1"); nuclear@0: ThundEnv[1] = scene->GetObject("b2"); nuclear@0: ThundEnv[2] = scene->GetObject("b3"); nuclear@0: ThundEnv[3] = scene->GetObject("b4"); nuclear@0: ThundEnv[4] = scene->GetObject("b5"); nuclear@0: for(int i=0; i<5; i++) { nuclear@0: scene->RemoveObject(ThundEnv[i]); nuclear@0: } nuclear@0: nuclear@0: Stones[0] = scene->GetObject("Box01"); nuclear@0: Stones[1] = scene->GetObject("Box02"); nuclear@0: Stones[2] = scene->GetObject("Box03"); nuclear@0: Stones[3] = scene->GetObject("Box04"); nuclear@0: Stones[4] = scene->GetObject("Box05"); nuclear@0: for(int i=0; i<5; i++) { nuclear@0: scene->RemoveObject(Stones[i]); nuclear@0: Stones[i]->SetShadingMode(FlatShading); nuclear@0: } nuclear@0: nuclear@0: Rings[0] = scene->GetObject("Tube01"); nuclear@0: Rings[1] = scene->GetObject("Tube02"); nuclear@0: Rings[2] = scene->GetObject("Tube03"); nuclear@0: Rings[3] = scene->GetObject("Tube04"); nuclear@0: Rings[4] = scene->GetObject("Tube05"); nuclear@0: for(int i=0; i<5; i++) { nuclear@0: scene->RemoveObject(Rings[i]); nuclear@0: } nuclear@0: nuclear@0: // Load Credits nuclear@0: dbgtex = gc->texman->AddTexture("data/textures/psys02.jpg"); nuclear@0: CredNuc[0] = gc->texman->AddTexture("data/textures/credits/nuc1.jpg"); nuclear@0: CredNuc[1] = gc->texman->AddTexture("data/textures/credits/nuc2.jpg"); nuclear@0: CredNuc[2] = gc->texman->AddTexture("data/textures/credits/nuc3.jpg"); nuclear@0: CredNuc[3] = gc->texman->AddTexture("data/textures/credits/nuc4.jpg"); nuclear@0: CredNuc[4] = gc->texman->AddTexture("data/textures/credits/nuc5.jpg"); nuclear@0: CredNuc[5] = gc->texman->AddTexture("data/textures/credits/nuc6.jpg"); nuclear@0: CredNuc[6] = gc->texman->AddTexture("data/textures/credits/nuc7.jpg"); nuclear@0: nuclear@0: CredRaw[0] = gc->texman->AddTexture("data/textures/credits/raw1.jpg"); nuclear@0: CredRaw[1] = gc->texman->AddTexture("data/textures/credits/raw2.jpg"); nuclear@0: CredRaw[2] = gc->texman->AddTexture("data/textures/credits/raw3.jpg"); nuclear@0: CredRaw[3] = gc->texman->AddTexture("data/textures/credits/raw4.jpg"); nuclear@0: CredRaw[4] = gc->texman->AddTexture("data/textures/credits/raw5.jpg"); nuclear@0: CredRaw[5] = gc->texman->AddTexture("data/textures/credits/raw6.jpg"); nuclear@0: CredRaw[6] = gc->texman->AddTexture("data/textures/credits/raw7.jpg"); nuclear@0: nuclear@0: CredAmi[0] = gc->texman->AddTexture("data/textures/credits/am1.jpg"); nuclear@0: CredAmi[1] = gc->texman->AddTexture("data/textures/credits/am2.jpg"); nuclear@0: CredAmi[2] = gc->texman->AddTexture("data/textures/credits/am3.jpg"); nuclear@0: CredAmi[3] = gc->texman->AddTexture("data/textures/credits/am4.jpg"); nuclear@0: CredAmi[4] = gc->texman->AddTexture("data/textures/credits/am5.jpg"); nuclear@0: CredAmi[5] = gc->texman->AddTexture("data/textures/credits/am6.jpg"); nuclear@0: CredAmi[6] = gc->texman->AddTexture("data/textures/credits/am7.jpg"); nuclear@0: nuclear@0: CredAmv[0] = gc->texman->AddTexture("data/textures/credits/amv1.jpg"); nuclear@0: CredAmv[1] = gc->texman->AddTexture("data/textures/credits/amv2.jpg"); nuclear@0: CredAmv[2] = gc->texman->AddTexture("data/textures/credits/amv3.jpg"); nuclear@0: CredAmv[3] = gc->texman->AddTexture("data/textures/credits/amv4.jpg"); nuclear@0: CredAmv[4] = gc->texman->AddTexture("data/textures/credits/amv5.jpg"); nuclear@0: CredAmv[5] = gc->texman->AddTexture("data/textures/credits/amv6.jpg"); nuclear@0: CredAmv[6] = gc->texman->AddTexture("data/textures/credits/amv7.jpg"); nuclear@0: nuclear@0: Credits = new Object(gc); nuclear@0: Credits->CreatePlane(1.7f, 0); nuclear@0: Credits->Scale(1.0f, 0.3f, 1.0f); nuclear@0: nuclear@0: Blood = scene->GetObject("Blood"); nuclear@0: scene->RemoveObject(Blood); nuclear@0: Grail = scene->GetObject("Object13"); nuclear@0: //scene->RemoveObject(Grail); nuclear@0: } nuclear@0: nuclear@0: HellPart::~HellPart() { nuclear@0: delete scene; nuclear@0: } nuclear@0: nuclear@0: void HellPart::MainLoop() { nuclear@0: dword msec = timer.GetMilliSec(); nuclear@0: float t = msec / 1000.0f; nuclear@0: nuclear@0: // deform blood surface nuclear@0: Vertex *BloodVerts = Blood->GetTriMesh()->GetModVertexArray(); nuclear@0: dword VertexCount = Blood->GetTriMesh()->GetVertexCount(); nuclear@0: nuclear@0: for(dword i=0; i 0.0f ? (1.0f / (dist*1.5f)) : 1.0f); nuclear@0: } nuclear@0: Blood->GetTriMesh()->CalculateNormals(); nuclear@0: nuclear@0: nuclear@0: //////////////////////// nuclear@0: nuclear@0: gc->Clear(0); nuclear@0: gc->ClearZBufferStencil(1.0f, 0); nuclear@0: nuclear@0: scene->SetActiveCamera(cam); nuclear@0: nuclear@0: if(t >= 18.0f && t < 22.0f) { nuclear@0: scene->SetActiveCamera(cam2); nuclear@0: Credits->material.SetTexture(CredNuc[(int)(t * 20.0f) % 7], TextureMap); nuclear@0: } nuclear@0: if(t >= 24.0f && t < 28.0f) { nuclear@0: scene->SetActiveCamera(cam3); nuclear@0: Credits->material.SetTexture(CredRaw[(int)(t * 20.0f) % 7], TextureMap); nuclear@0: } nuclear@0: if(t >= 30.0f && t < 34.0f) { nuclear@0: scene->SetActiveCamera(cam2); nuclear@0: Credits->material.SetTexture(CredAmi[(int)(t * 20.0f) % 7], TextureMap); nuclear@0: } nuclear@0: if(t >= 36.0f && t < 40.0f) { nuclear@0: scene->SetActiveCamera(cam3); nuclear@0: Credits->material.SetTexture(CredAmv[(int)(t * 20.0f) % 7], TextureMap); nuclear@0: } nuclear@0: nuclear@0: cam->FollowPath(msec); nuclear@0: nuclear@0: gc->SetAmbientLight(Color(0.5f)); nuclear@0: nuclear@0: scene->Render(); nuclear@0: nuclear@0: for(int i=0; i<5; i++) { nuclear@0: Matrix4x4 tmat = Stones[i]->TransMat, rmat = Stones[i]->GRotMat; nuclear@0: Stones[i]->Translate(0.0f, sinf(t) * 54.0f, 0.0f); nuclear@0: Stones[i]->GlobalRotate(0.0f, t/4.0f, 0.0f); nuclear@0: nuclear@0: Stones[i]->Render(); nuclear@0: nuclear@0: Stones[i]->TransMat = tmat; nuclear@0: Stones[i]->GRotMat = rmat; nuclear@0: } nuclear@0: nuclear@0: float Rot = t / 2.0f; nuclear@0: nuclear@0: for(int i=0; i<5; i++) { nuclear@0: Rings[i]->ResetRotation(); nuclear@0: } nuclear@0: nuclear@0: Rings[0]->Rotate(Rot, 0.0f, 0.0f); nuclear@0: nuclear@0: Rings[1]->Rotate(0.0f, 0.0f, Rot); nuclear@0: nuclear@0: Vector3 axis(1.0f, 0.0f, 0.0f); nuclear@0: axis.Rotate(0.0f, 0.0f, QuarterPi); nuclear@0: Rings[2]->Rotate(0.0f, 0.0f, QuarterPi); nuclear@0: Rings[2]->Rotate(axis, Rot); nuclear@0: nuclear@0: axis = Vector3(0.0f, 0.0f, 1.0f); nuclear@0: axis.Rotate(QuarterPi, 0.0f, 0.0f); nuclear@0: Rings[3]->Rotate(QuarterPi, 0.0f, 0.0f); nuclear@0: Rings[3]->Rotate(axis, Rot); nuclear@0: nuclear@0: Rings[4]->Rotate(Rot, 0.0f, Rot); nuclear@0: nuclear@0: gc->SetZWrite(false); nuclear@0: for(int i=0; i<5; i++) { nuclear@0: Rings[i]->Render(); nuclear@0: } nuclear@0: gc->SetZWrite(true); nuclear@0: nuclear@0: Light *light = scene->GetLight("Spot01"); nuclear@0: light->SetRange(100000.0f); nuclear@0: light->SetIntensity(0.5f); nuclear@0: light->SetLight(0, gc); nuclear@0: Blood->Render(); nuclear@0: light->SetRange(100.0f); nuclear@0: light->SetLight(0, gc); nuclear@0: nuclear@0: gc->SetAmbientLight(Color(0.0f)); nuclear@0: nuclear@0: if((t >= 18.0f && t < 22.0f) || (t >= 24.0f && t < 28.0f) || (t >= 30.0f && t < 34.0f) || (t >= 36.0f && t < 40.0f)) { nuclear@0: gc->SetAlphaBlending(true); nuclear@0: gc->SetLighting(false); nuclear@0: gc->SetZBuffering(false); nuclear@0: gc->SetBlendFunc(BLEND_ONE, BLEND_ONE); nuclear@0: gc->SetMaterial(Material(1.0f, 1.0f, 1.0f)); nuclear@0: gc->SetTexture(0, Credits->material.Maps[TextureMap]); nuclear@0: gc->SetTexture(1, 0); nuclear@0: gc->SetTextureCoordIndex(0, 0); nuclear@0: nuclear@0: gc->SetTextureStageColor(0, TexBlendSelectArg1, TexArgTexture, TexArgCurrent); nuclear@0: gc->SetTextureStageAlpha(0, TexBlendSelectArg1, TexArgTexture, TexArgCurrent); nuclear@0: Matrix4x4 WorldMat; nuclear@0: WorldMat.Scale(1.0f, 0.3f, 1.0f); nuclear@0: gc->SetWorldMatrix(WorldMat); nuclear@0: Matrix4x4 ViewMat; nuclear@0: ViewMat.Translate(0.0f, 0.0f, 2.0f); nuclear@0: gc->SetViewMatrix(ViewMat); nuclear@0: Matrix4x4 ProjMat, OldProj; nuclear@0: OldProj = gc->GetProjectionMatrix(); nuclear@0: CreateProjectionMatrix(&ProjMat, QuarterPi, 1.333333f, 1.0f, 10.0f); nuclear@0: gc->SetProjectionMatrix(ProjMat); nuclear@0: nuclear@0: Credits->RenderBare(); nuclear@0: nuclear@0: gc->SetProjectionMatrix(OldProj); nuclear@0: gc->SetLighting(true); nuclear@0: gc->SetZBuffering(true); nuclear@0: gc->SetAlphaBlending(false); nuclear@0: } nuclear@0: }