absence_thelab
diff src/hellpart.cpp @ 0:1cffe3409164
initial commit
author | John Tsiombikas <nuclear@member.fsf.org> |
---|---|
date | Thu, 23 Oct 2014 01:46:07 +0300 |
parents | |
children |
line diff
1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/src/hellpart.cpp Thu Oct 23 01:46:07 2014 +0300 1.3 @@ -0,0 +1,225 @@ 1.4 +#include <cassert> 1.5 +#include "hellpart.h" 1.6 + 1.7 +HellPart::HellPart(GraphicsContext *gc) { 1.8 + this->gc = gc; 1.9 + 1.10 + SceneLoader::SetNormalFileSaving(true); 1.11 + SceneLoader::SetDataPath("data/textures/"); 1.12 + SceneLoader::LoadScene("data/geometry/hell.3ds", &scene); 1.13 + 1.14 + CamPath = scene->GetCurve("CamPath"); 1.15 + cam = const_cast<Camera*>(scene->GetActiveCamera()); 1.16 + cam->SetCameraPath(CamPath, 0, 0, 30000); 1.17 + cam->SetClippingPlanes(1.0f, 100000.0f); 1.18 + 1.19 + cam2 = scene->GetCamera("Camera02"); 1.20 + cam3 = scene->GetCamera("Camera03"); 1.21 + cam2->SetClippingPlanes(1.0f, 100000.0f); 1.22 + cam3->SetClippingPlanes(1.0f, 100000.0f); 1.23 + 1.24 + Thunder = scene->GetLight("Omni01"); 1.25 + Thunder->SetIntensity(0.0f); 1.26 + 1.27 + ThundEnv[0] = scene->GetObject("b1"); 1.28 + ThundEnv[1] = scene->GetObject("b2"); 1.29 + ThundEnv[2] = scene->GetObject("b3"); 1.30 + ThundEnv[3] = scene->GetObject("b4"); 1.31 + ThundEnv[4] = scene->GetObject("b5"); 1.32 + for(int i=0; i<5; i++) { 1.33 + scene->RemoveObject(ThundEnv[i]); 1.34 + } 1.35 + 1.36 + Stones[0] = scene->GetObject("Box01"); 1.37 + Stones[1] = scene->GetObject("Box02"); 1.38 + Stones[2] = scene->GetObject("Box03"); 1.39 + Stones[3] = scene->GetObject("Box04"); 1.40 + Stones[4] = scene->GetObject("Box05"); 1.41 + for(int i=0; i<5; i++) { 1.42 + scene->RemoveObject(Stones[i]); 1.43 + Stones[i]->SetShadingMode(FlatShading); 1.44 + } 1.45 + 1.46 + Rings[0] = scene->GetObject("Tube01"); 1.47 + Rings[1] = scene->GetObject("Tube02"); 1.48 + Rings[2] = scene->GetObject("Tube03"); 1.49 + Rings[3] = scene->GetObject("Tube04"); 1.50 + Rings[4] = scene->GetObject("Tube05"); 1.51 + for(int i=0; i<5; i++) { 1.52 + scene->RemoveObject(Rings[i]); 1.53 + } 1.54 + 1.55 + // Load Credits 1.56 + dbgtex = gc->texman->AddTexture("data/textures/psys02.jpg"); 1.57 + CredNuc[0] = gc->texman->AddTexture("data/textures/credits/nuc1.jpg"); 1.58 + CredNuc[1] = gc->texman->AddTexture("data/textures/credits/nuc2.jpg"); 1.59 + CredNuc[2] = gc->texman->AddTexture("data/textures/credits/nuc3.jpg"); 1.60 + CredNuc[3] = gc->texman->AddTexture("data/textures/credits/nuc4.jpg"); 1.61 + CredNuc[4] = gc->texman->AddTexture("data/textures/credits/nuc5.jpg"); 1.62 + CredNuc[5] = gc->texman->AddTexture("data/textures/credits/nuc6.jpg"); 1.63 + CredNuc[6] = gc->texman->AddTexture("data/textures/credits/nuc7.jpg"); 1.64 + 1.65 + CredRaw[0] = gc->texman->AddTexture("data/textures/credits/raw1.jpg"); 1.66 + CredRaw[1] = gc->texman->AddTexture("data/textures/credits/raw2.jpg"); 1.67 + CredRaw[2] = gc->texman->AddTexture("data/textures/credits/raw3.jpg"); 1.68 + CredRaw[3] = gc->texman->AddTexture("data/textures/credits/raw4.jpg"); 1.69 + CredRaw[4] = gc->texman->AddTexture("data/textures/credits/raw5.jpg"); 1.70 + CredRaw[5] = gc->texman->AddTexture("data/textures/credits/raw6.jpg"); 1.71 + CredRaw[6] = gc->texman->AddTexture("data/textures/credits/raw7.jpg"); 1.72 + 1.73 + CredAmi[0] = gc->texman->AddTexture("data/textures/credits/am1.jpg"); 1.74 + CredAmi[1] = gc->texman->AddTexture("data/textures/credits/am2.jpg"); 1.75 + CredAmi[2] = gc->texman->AddTexture("data/textures/credits/am3.jpg"); 1.76 + CredAmi[3] = gc->texman->AddTexture("data/textures/credits/am4.jpg"); 1.77 + CredAmi[4] = gc->texman->AddTexture("data/textures/credits/am5.jpg"); 1.78 + CredAmi[5] = gc->texman->AddTexture("data/textures/credits/am6.jpg"); 1.79 + CredAmi[6] = gc->texman->AddTexture("data/textures/credits/am7.jpg"); 1.80 + 1.81 + CredAmv[0] = gc->texman->AddTexture("data/textures/credits/amv1.jpg"); 1.82 + CredAmv[1] = gc->texman->AddTexture("data/textures/credits/amv2.jpg"); 1.83 + CredAmv[2] = gc->texman->AddTexture("data/textures/credits/amv3.jpg"); 1.84 + CredAmv[3] = gc->texman->AddTexture("data/textures/credits/amv4.jpg"); 1.85 + CredAmv[4] = gc->texman->AddTexture("data/textures/credits/amv5.jpg"); 1.86 + CredAmv[5] = gc->texman->AddTexture("data/textures/credits/amv6.jpg"); 1.87 + CredAmv[6] = gc->texman->AddTexture("data/textures/credits/amv7.jpg"); 1.88 + 1.89 + Credits = new Object(gc); 1.90 + Credits->CreatePlane(1.7f, 0); 1.91 + Credits->Scale(1.0f, 0.3f, 1.0f); 1.92 + 1.93 + Blood = scene->GetObject("Blood"); 1.94 + scene->RemoveObject(Blood); 1.95 + Grail = scene->GetObject("Object13"); 1.96 + //scene->RemoveObject(Grail); 1.97 +} 1.98 + 1.99 +HellPart::~HellPart() { 1.100 + delete scene; 1.101 +} 1.102 + 1.103 +void HellPart::MainLoop() { 1.104 + dword msec = timer.GetMilliSec(); 1.105 + float t = msec / 1000.0f; 1.106 + 1.107 + // deform blood surface 1.108 + Vertex *BloodVerts = Blood->GetTriMesh()->GetModVertexArray(); 1.109 + dword VertexCount = Blood->GetTriMesh()->GetVertexCount(); 1.110 + 1.111 + for(dword i=0; i<VertexCount; i++) { 1.112 + Vector2 pos2d(BloodVerts[i].pos.x, BloodVerts[i].pos.z); 1.113 + float dist = pos2d.Length(); 1.114 + BloodVerts[i].pos.y = (1.5f * sinf(dist - t*3.0f)) * (dist > 0.0f ? (1.0f / (dist*1.5f)) : 1.0f); 1.115 + } 1.116 + Blood->GetTriMesh()->CalculateNormals(); 1.117 + 1.118 + 1.119 + //////////////////////// 1.120 + 1.121 + gc->Clear(0); 1.122 + gc->ClearZBufferStencil(1.0f, 0); 1.123 + 1.124 + scene->SetActiveCamera(cam); 1.125 + 1.126 + if(t >= 18.0f && t < 22.0f) { 1.127 + scene->SetActiveCamera(cam2); 1.128 + Credits->material.SetTexture(CredNuc[(int)(t * 20.0f) % 7], TextureMap); 1.129 + } 1.130 + if(t >= 24.0f && t < 28.0f) { 1.131 + scene->SetActiveCamera(cam3); 1.132 + Credits->material.SetTexture(CredRaw[(int)(t * 20.0f) % 7], TextureMap); 1.133 + } 1.134 + if(t >= 30.0f && t < 34.0f) { 1.135 + scene->SetActiveCamera(cam2); 1.136 + Credits->material.SetTexture(CredAmi[(int)(t * 20.0f) % 7], TextureMap); 1.137 + } 1.138 + if(t >= 36.0f && t < 40.0f) { 1.139 + scene->SetActiveCamera(cam3); 1.140 + Credits->material.SetTexture(CredAmv[(int)(t * 20.0f) % 7], TextureMap); 1.141 + } 1.142 + 1.143 + cam->FollowPath(msec); 1.144 + 1.145 + gc->SetAmbientLight(Color(0.5f)); 1.146 + 1.147 + scene->Render(); 1.148 + 1.149 + for(int i=0; i<5; i++) { 1.150 + Matrix4x4 tmat = Stones[i]->TransMat, rmat = Stones[i]->GRotMat; 1.151 + Stones[i]->Translate(0.0f, sinf(t) * 54.0f, 0.0f); 1.152 + Stones[i]->GlobalRotate(0.0f, t/4.0f, 0.0f); 1.153 + 1.154 + Stones[i]->Render(); 1.155 + 1.156 + Stones[i]->TransMat = tmat; 1.157 + Stones[i]->GRotMat = rmat; 1.158 + } 1.159 + 1.160 + float Rot = t / 2.0f; 1.161 + 1.162 + for(int i=0; i<5; i++) { 1.163 + Rings[i]->ResetRotation(); 1.164 + } 1.165 + 1.166 + Rings[0]->Rotate(Rot, 0.0f, 0.0f); 1.167 + 1.168 + Rings[1]->Rotate(0.0f, 0.0f, Rot); 1.169 + 1.170 + Vector3 axis(1.0f, 0.0f, 0.0f); 1.171 + axis.Rotate(0.0f, 0.0f, QuarterPi); 1.172 + Rings[2]->Rotate(0.0f, 0.0f, QuarterPi); 1.173 + Rings[2]->Rotate(axis, Rot); 1.174 + 1.175 + axis = Vector3(0.0f, 0.0f, 1.0f); 1.176 + axis.Rotate(QuarterPi, 0.0f, 0.0f); 1.177 + Rings[3]->Rotate(QuarterPi, 0.0f, 0.0f); 1.178 + Rings[3]->Rotate(axis, Rot); 1.179 + 1.180 + Rings[4]->Rotate(Rot, 0.0f, Rot); 1.181 + 1.182 + gc->SetZWrite(false); 1.183 + for(int i=0; i<5; i++) { 1.184 + Rings[i]->Render(); 1.185 + } 1.186 + gc->SetZWrite(true); 1.187 + 1.188 + Light *light = scene->GetLight("Spot01"); 1.189 + light->SetRange(100000.0f); 1.190 + light->SetIntensity(0.5f); 1.191 + light->SetLight(0, gc); 1.192 + Blood->Render(); 1.193 + light->SetRange(100.0f); 1.194 + light->SetLight(0, gc); 1.195 + 1.196 + gc->SetAmbientLight(Color(0.0f)); 1.197 + 1.198 + 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)) { 1.199 + gc->SetAlphaBlending(true); 1.200 + gc->SetLighting(false); 1.201 + gc->SetZBuffering(false); 1.202 + gc->SetBlendFunc(BLEND_ONE, BLEND_ONE); 1.203 + gc->SetMaterial(Material(1.0f, 1.0f, 1.0f)); 1.204 + gc->SetTexture(0, Credits->material.Maps[TextureMap]); 1.205 + gc->SetTexture(1, 0); 1.206 + gc->SetTextureCoordIndex(0, 0); 1.207 + 1.208 + gc->SetTextureStageColor(0, TexBlendSelectArg1, TexArgTexture, TexArgCurrent); 1.209 + gc->SetTextureStageAlpha(0, TexBlendSelectArg1, TexArgTexture, TexArgCurrent); 1.210 + Matrix4x4 WorldMat; 1.211 + WorldMat.Scale(1.0f, 0.3f, 1.0f); 1.212 + gc->SetWorldMatrix(WorldMat); 1.213 + Matrix4x4 ViewMat; 1.214 + ViewMat.Translate(0.0f, 0.0f, 2.0f); 1.215 + gc->SetViewMatrix(ViewMat); 1.216 + Matrix4x4 ProjMat, OldProj; 1.217 + OldProj = gc->GetProjectionMatrix(); 1.218 + CreateProjectionMatrix(&ProjMat, QuarterPi, 1.333333f, 1.0f, 10.0f); 1.219 + gc->SetProjectionMatrix(ProjMat); 1.220 + 1.221 + Credits->RenderBare(); 1.222 + 1.223 + gc->SetProjectionMatrix(OldProj); 1.224 + gc->SetLighting(true); 1.225 + gc->SetZBuffering(true); 1.226 + gc->SetAlphaBlending(false); 1.227 + } 1.228 +} 1.229 \ No newline at end of file