nuclear@0: #include "beginpart.h" nuclear@0: nuclear@0: BeginPart::BeginPart(GraphicsContext *gc) { nuclear@0: this->gc = gc; nuclear@0: nuclear@0: this->gc = gc; nuclear@0: nuclear@0: SceneLoader::SetNormalFileSaving(true); nuclear@0: SceneLoader::SetDataPath("data/textures/"); nuclear@0: SceneLoader::LoadScene("data/geometry/begin.3ds", &scene); nuclear@0: nuclear@0: light = new DirLight(Vector3(0.0f, 0.0f, 1.0f)); nuclear@0: light->SetIntensity(1.5f); nuclear@0: scene->AddLight(light); nuclear@0: nuclear@0: // get stuff nuclear@0: Logo1 = scene->GetObject("LogoT"); nuclear@0: scene->RemoveObject(Logo1); nuclear@0: nuclear@0: Logo2 = scene->GetObject("LogoB"); nuclear@0: scene->RemoveObject(Logo2); nuclear@0: nuclear@0: VolumeLogo = scene->GetObject("VolumeLogo"); nuclear@0: scene->RemoveObject(VolumeLogo); nuclear@0: nuclear@0: Latin1 = scene->GetObject("Latin1"); nuclear@0: Latin2 = scene->GetObject("Latin2"); nuclear@0: Lines[0] = scene->GetObject("Lines1"); nuclear@0: Lines[1] = scene->GetObject("Lines2"); nuclear@0: TheLabText[0] = scene->GetObject("LabText1"); nuclear@0: TheLabText[1] = scene->GetObject("LabText2"); nuclear@0: nuclear@0: scene->RemoveObject(scene->GetObject("Plane01")); nuclear@0: nuclear@0: gc->SetTextureTransformState(0, TexTransform2D); nuclear@0: } nuclear@0: nuclear@0: BeginPart::~BeginPart() { nuclear@0: delete scene; nuclear@0: } nuclear@0: nuclear@0: #define psin(x) (sinf(x) / 2.0f + 0.5f) nuclear@0: #define pcos(x) (cosf(x) / 2.0f + 0.5f) nuclear@0: nuclear@0: void BeginPart::MainLoop() { nuclear@0: dword msec = timer.GetMilliSec(); nuclear@0: float t = (float)msec / 1000.0f; nuclear@0: nuclear@0: const float StartCycle = 2.5f; nuclear@0: const float EndCycle = 5.0f; nuclear@0: const float StartFade = 9.0f; nuclear@0: nuclear@0: nuclear@0: Latin1->SetTextureMatrix(Matrix3x3(1,0,0, 0,1,0, 0,t/4,1)); nuclear@0: Latin2->SetTextureMatrix(Matrix3x3(1,0,0, 0,1,0, 0,t/2,1)); nuclear@0: Lines[0]->SetTextureMatrix(Matrix3x3(1,0,0, 0,1,0, t*2.0f,0,1)); nuclear@0: Lines[1]->SetTextureMatrix(Matrix3x3(1,0,0, 0,1,0, t/2.0f,0,1)); nuclear@0: TheLabText[0]->SetTextureMatrix(Matrix3x3(1,0,0, 0,1,0, t,0,1)); nuclear@0: TheLabText[1]->SetTextureMatrix(Matrix3x3(1,0,0, 0,1,0, t/3,0,1)); nuclear@0: nuclear@0: gc->Clear(0); nuclear@0: gc->ClearZBufferStencil(1.0f, 0); nuclear@0: nuclear@0: gc->SetZBuffering(false); nuclear@0: nuclear@0: scene->Render(); nuclear@0: nuclear@0: gc->SetAlphaBlending(true); nuclear@0: gc->SetTextureStageColor(0, TexBlendModulate, TexArgCurrent, TexArgTexture); nuclear@0: gc->SetTextureStageAlpha(0, TexBlendModulate, TexArgCurrent, TexArgTexture); nuclear@0: gc->SetBlendFunc(BLEND_ONE, BLEND_ONE); nuclear@0: nuclear@0: Matrix3x3 TexMat; nuclear@0: nuclear@0: // render shit nuclear@0: Logo1->SetTranslation(0.0f, max(0.8f - t, 0) * 50.0f, 0.0f); nuclear@0: Logo2->SetTranslation(0.0f, -max(0.8f - t, 0) * 50.0f, 0.0f); nuclear@0: nuclear@0: if(t > StartCycle) { nuclear@0: Logo1->material.Diffuse.r += (t-StartCycle) * 0.005f; nuclear@0: Logo1->material.Diffuse.g -= (t-StartCycle) * 0.005f; nuclear@0: Logo1->material.Diffuse.b -= (t-StartCycle) * 0.005f; nuclear@0: if(Logo1->material.Diffuse.r > 0.5f) Logo1->material.Diffuse.r = 0.5f; nuclear@0: if(Logo1->material.Diffuse.g < 0.0f) Logo1->material.Diffuse.g = 0.0f; nuclear@0: if(Logo1->material.Diffuse.b < 0.0f) Logo1->material.Diffuse.b = 0.0f; nuclear@0: nuclear@0: Logo2->material.Diffuse.r += (t-StartCycle) * 0.005f; nuclear@0: Logo2->material.Diffuse.g -= (t-StartCycle) * 0.005f; nuclear@0: Logo2->material.Diffuse.b -= (t-StartCycle) * 0.005f; nuclear@0: if(Logo2->material.Diffuse.r > 0.5f) Logo2->material.Diffuse.r = 0.5f; nuclear@0: if(Logo2->material.Diffuse.g < 0.0f) Logo2->material.Diffuse.g = 0.0f; nuclear@0: if(Logo2->material.Diffuse.b < 0.0f) Logo2->material.Diffuse.b = 0.0f; nuclear@0: } nuclear@0: nuclear@0: gc->SetMaterial(Logo1->material); nuclear@0: gc->SetTexture(0, Logo1->material.Maps[TextureMap]); nuclear@0: nuclear@0: gc->SetWorldMatrix(Logo1->GetWorldTransform()); nuclear@0: Logo1->RenderBare(); nuclear@0: nuclear@0: gc->SetWorldMatrix(Logo2->GetWorldTransform()); nuclear@0: Logo2->RenderBare(); nuclear@0: nuclear@0: if(t > EndCycle) { nuclear@0: Color color(Logo1->material.Diffuse.r, Logo1->material.Diffuse.g, Logo1->material.Diffuse.b); nuclear@0: VolumeLogo->material.SetDiffuse(color); nuclear@0: gc->SetTexture(0, VolumeLogo->material.Maps[TextureMap]); nuclear@0: nuclear@0: float xoffs = sinf(t/2.0f) * 4.0f; nuclear@0: float yoffs = sinf(t) * 1.5f;//-(t - 2.0f*EndCycle); nuclear@0: for(int i=0; imaterial.Diffuse.r -= 0.08f; nuclear@0: VolumeLogo->material.Diffuse.g -= 0.08f; nuclear@0: VolumeLogo->material.Diffuse.b -= 0.08f; nuclear@0: nuclear@0: gc->SetWorldMatrix(VolumeLogo->GetWorldTransform() * mat * ScaleMat); nuclear@0: VolumeLogo->RenderBare(); nuclear@0: } nuclear@0: } nuclear@0: nuclear@0: Material OrigMat = VolumeLogo->material; nuclear@0: VolumeLogo->material = Material(0.0f, 0.0f, 0.0f, max((t - StartFade) / 2.0f, 0.0f)); nuclear@0: VolumeLogo->Render(); nuclear@0: VolumeLogo->material = OrigMat; nuclear@0: nuclear@0: gc->SetZBuffering(true); nuclear@0: gc->SetAlphaBlending(false); nuclear@0: }