📄 bagendscene.h
字号:
#define NUMBER_OF_BILBO_MOVEMENTS 30
#define NUMBER_OF_GANDALF_MOVEMENTS 15
#define BILBO_SIGH 1
#define GANDY_LAUGH 2
Md2Model beBilbo, beGandalf, beEmapRing;
BezCam beCam(0.01f,0.75f);
CSkyBox beSkyBox;
CMap beMap;
int beMusic;
int beParticleSystem;
bool beFlags[NUMBER_OF_FLAGS];
CharMovement beBilboMovement[NUMBER_OF_BILBO_MOVEMENTS]; //stores the changes to be made to bilbo's position and rotation
CharMovement beGandalfMovement[NUMBER_OF_GANDALF_MOVEMENTS]; //stores the changes to be made to Gandalf's position and rotation
float beBilboAnimationFraction, beGandalfAnimationFraction;
Uint16 beBilboMovementIndex, beGandalfMovementIndex;
void BagEndInit()
{
beMap.Init("Data/BagEnd.cmf");
beSkyBox.Init("Data/CSkyBox/Day","jpg");
beBilbo.Load("Data/ModelsAndSkins/Hobbit/Hobbit.md2","Data/ModelsAndSkins/Hobbit/Bilbo.jpg");
beBilbo.SetAnimation("Walk");
beGandalf.Load("Data/ModelsAndSkins/Gandalf/Gandalf.md2","Data/ModelsAndSkins/Gandalf/GandalfTheGray.jpg");
beGandalf.SetAnimation("Walk");
beEmapRing.Load("Data/ModelsAndSkins/Ring/Ring.md2","Data/ModelsAndSkins/Ring/Ring.jpg");
beCam.LoadFromFile("Data/Paths/BagEnd.path");
for (int i=0;i<NUMBER_OF_FLAGS;i++)
beFlags[i]=false;
#include "BagEndSceneBilboChanges.h"
#include "BagEndSceneGandalfChanges.h"
}
void BagEndRenderNextFrame(float Milliseconds)
{
static bool Record=false, DrawPath=false;
static bool started=false;
if (!started)
{
started=true;
fpvCam.StartRecord("Data\\record.path");
LightManager.Enable(GL_LIGHT1);
LightManager.Enable(GL_LIGHT2);
LightManager.SetAmbientColor(GL_LIGHT1,0.7f,0.7f,0.7f,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT1,1.0f,1.0f,1.0f,1.0f);
LightManager.SetAmbientColor(GL_LIGHT2,0.7f,0.7f,0.7f,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT2,1.0f,1.0f,0.6f,1.0f);
if (ParticleFraction!=0.0f)
{
beParticleSystem=PGod.NewSystem(200,"Data/Particles/star.bmp", 30, false); // The Fire particle system :D
PGod[beParticleSystem]->InitialParticle.Pos=Vector3d(-18.5f,1.0f,3.0f);
PGod[beParticleSystem]->InitialParticle.Speed=Vector3d(0.0f,0.00005f,0.0f);
PGod[beParticleSystem]->InitialParticle.fLifetime=250.0f;
PGod[beParticleSystem]->InitialParticle.fInitialAlpha=1.0f;
PGod[beParticleSystem]->InitialParticle.fFinalAlpha=0.6f;
PGod[beParticleSystem]->InitialParticle.fInitialSize=0.3f;
PGod[beParticleSystem]->InitialParticle.fFinalSize=0.15f;
PGod[beParticleSystem]->InitialParticle.InitialColor.r=0.7f;
PGod[beParticleSystem]->InitialParticle.InitialColor.g=0.3f;
PGod[beParticleSystem]->InitialParticle.InitialColor.b=0.1f;
PGod[beParticleSystem]->InitialParticle.FinalColor.r=0.7f;
PGod[beParticleSystem]->InitialParticle.FinalColor.g=0.3f;
PGod[beParticleSystem]->InitialParticle.FinalColor.b=0.1f;
PGod[beParticleSystem]->Chaos.Pos=Vector3d(0.25f,0.05f,0.3f);
PGod[beParticleSystem]->Chaos.Speed=Vector3d(0.0f,0.00005f,0.0f);
PGod[beParticleSystem]->Chaos.fLifetime=150.0f;
PGod[beParticleSystem]->Chaos.fInitialAlpha=0.0f;
PGod[beParticleSystem]->Chaos.fFinalAlpha=0.05f;
PGod[beParticleSystem]->Chaos.fInitialSize=0.1f;
PGod[beParticleSystem]->Chaos.fFinalSize=0.05f;
PGod[beParticleSystem]->Chaos.InitialColor.r=0.0f;
PGod[beParticleSystem]->Chaos.InitialColor.g=0.0f;
PGod[beParticleSystem]->Chaos.InitialColor.b=0.0f;
PGod[beParticleSystem]->Chaos.FinalColor.r=0.0f;
PGod[beParticleSystem]->Chaos.FinalColor.g=0.0f;
PGod[beParticleSystem]->Chaos.FinalColor.b=0.0f;
PGod[scParticleSystem]->InitialAccel=Vector3d(0.0f,0.000001f,0.0f);
PGod[scParticleSystem]->FinalAccel=Vector3d(0.0f,0.0001f,0.0f);
}
}
PGod.Update(Milliseconds);
// UPDATE!
static float temptime=0.0f, TotalTime=0.0f, CamPointTime=0.0f;
temptime+=Milliseconds;
if (Record)
{
CamPointTime+=Milliseconds;
if (CamPointTime>=2000.0f)
{
if (!fpvCam.Continue)
Milliseconds=0.0f;
else
CamPointTime=0.0f;
fpvCam.Continue=false;
}
}
TotalTime+=Milliseconds;
beCam.LookAtNextPoint(Milliseconds*0.05);
beCam.PositionSkybox();
if (TotalTime<34000.0f || TotalTime>45500.0f)
beSkyBox.Render();
glLoadIdentity();
beCam.Position();
LightManager.SetPosition(GL_LIGHT1,-3.0f,54.0f,-16.0f);
LightManager.SetPosition(GL_LIGHT2,-18.5f,1.7f,3.0f);
if (TotalTime<10000.0f)
{
float t=TotalTime*0.0001f;
LightManager.SetAmbientColor(GL_LIGHT1,0.7f*t,0.7f*t,0.7f*t,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT1,1.0f*t,1.0f*t,1.0f*t,1.0f);
LightManager.SetAmbientColor(GL_LIGHT2,0.7f*t,0.7f*t,0.7f*t,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT2,1.0f*t,1.0f*t,0.6f*t,1.0f);
}
if (TotalTime>34000.0f && TotalTime<39000.0f)
{
float t=1.0f-((TotalTime-34000.0f)*0.0003333f);
LightManager.SetAmbientColor(GL_LIGHT1,0.7f*t,0.7f*t,0.7f*t,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT1,1.0f*t,1.0f*t,1.0f*t,1.0f);
LightManager.SetAmbientColor(GL_LIGHT2,0.7f*t,0.7f*t,0.7f*t,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT2,1.0f*t,1.0f*t,0.6f*t,1.0f);
}
if (TotalTime>45000.0f && TotalTime<48000.0f)
{
float t=(TotalTime-44000.0f)*0.0003333f;
LightManager.SetAmbientColor(GL_LIGHT1,0.7f*t,0.7f*t,0.7f*t,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT1,1.0f*t,1.0f*t,1.0f*t,1.0f);
LightManager.SetAmbientColor(GL_LIGHT2,0.7f*t,0.7f*t,0.7f*t,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT2,1.0f*t,1.0f*t,0.6f*t,1.0f);
}
if (TotalTime>48000.0f && !scFlags[SCENDED_FADE])
{
scFlags[SCENDED_FADE]=true;
LightManager.SetAmbientColor(GL_LIGHT1,0.7f,0.7f,0.7f,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT1,1.0f,1.0f,1.0f,1.0f);
LightManager.SetAmbientColor(GL_LIGHT2,0.7f,0.7f,0.7f,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT2,1.0f,1.0f,0.6f,1.0f);
}
beMap.Draw();
if (DrawPath)
{
beCam.DrawCurves();
beCam.DrawPoints();
}
glPushMatrix();
beBilboAnimationFraction+=Milliseconds*beBilboMovement[beBilboMovementIndex].TimeFactor;
if (beBilboAnimationFraction>=0.99f)
{
beBilboMovementIndex++;
beBilboAnimationFraction=0.0f;
if (beBilboMovement[beBilboMovementIndex].ChangeAnimation)
beBilbo.SetAnimation(beBilboMovement[beBilboMovementIndex].NewAnimation);
}
glTranslatef( beBilboMovement[beBilboMovementIndex].Position.Coords[0],
beBilboMovement[beBilboMovementIndex].Position.Coords[1],
beBilboMovement[beBilboMovementIndex].Position.Coords[2]);
glScalef(0.03f,0.03f,0.03f);
if (!beBilboMovement[beBilboMovementIndex].RotationInterpolation)
{
glRotatef(beBilboMovement[beBilboMovementIndex].Rotation.Coords[0],1,0,0);
glRotatef(beBilboMovement[beBilboMovementIndex].Rotation.Coords[1],0,1,0);
glRotatef(beBilboMovement[beBilboMovementIndex].Rotation.Coords[2],0,0,1);
}
else
{
Vector3d t(beBilboMovement[beBilboMovementIndex].Rotation+((beBilboMovement[beBilboMovementIndex].Rotation2 - beBilboMovement[beBilboMovementIndex].Rotation)*beBilboAnimationFraction));
glRotatef(t.Coords[0],1,0,0);
glRotatef(t.Coords[1],0,1,0);
glRotatef(t.Coords[2],0,0,1);
}
beBilbo.Animate(beBilboAnimationFraction,false);
glPopMatrix();
if(TotalTime>23800.0f && TotalTime<25800.0f)
{
glPushMatrix();
glTranslatef(-12.35f,1.215f-((TotalTime-23800.0f)*0.0005),-7.75f);
glScalef(0.02f,0.02f,0.02f);
beEmapRing.DrawWithEMap(0);
glPopMatrix();
}
if(TotalTime>25800.0f)
{
glPushMatrix();
glTranslatef(-12.35f,0.215f,-7.75f);
glScalef(0.02f,0.02f,0.02f);
beEmapRing.DrawWithEMap(0);
glPopMatrix();
}
if (TotalTime>34000.0f)
{
glPushMatrix();
beGandalfAnimationFraction+=Milliseconds*beGandalfMovement[beGandalfMovementIndex].TimeFactor;
if (beGandalfAnimationFraction>=0.99f)
{
beGandalfMovementIndex++;
beGandalfAnimationFraction=0.0f;
if (beGandalfMovement[beGandalfMovementIndex].ChangeAnimation)
beGandalf.SetAnimation(beGandalfMovement[beGandalfMovementIndex].NewAnimation);
}
glTranslatef( beGandalfMovement[beGandalfMovementIndex].Position.Coords[0],
beGandalfMovement[beGandalfMovementIndex].Position.Coords[1],
beGandalfMovement[beGandalfMovementIndex].Position.Coords[2]);
glScalef(0.05f,0.05f,0.05f);
if (!beGandalfMovement[beGandalfMovementIndex].RotationInterpolation)
{
glRotatef(beGandalfMovement[beGandalfMovementIndex].Rotation.Coords[0],1,0,0);
glRotatef(beGandalfMovement[beGandalfMovementIndex].Rotation.Coords[1],0,1,0);
glRotatef(beGandalfMovement[beGandalfMovementIndex].Rotation.Coords[2],0,0,1);
}
else
{
Vector3d t(beGandalfMovement[beGandalfMovementIndex].Rotation+((beGandalfMovement[beGandalfMovementIndex].Rotation2 - beGandalfMovement[beGandalfMovementIndex].Rotation)*beGandalfAnimationFraction));
glRotatef(t.Coords[0],1,0,0);
glRotatef(t.Coords[1],0,1,0);
glRotatef(t.Coords[2],0,0,1);
}
if (!beGandalfMovement[beGandalfMovementIndex].TwoFrameInterpolation)
beGandalf.Animate(beGandalfAnimationFraction,false);
else
beGandalf.TwoFrameInterpolate(beGandalfAnimationFraction,
beGandalfMovement[beGandalfMovementIndex].Frame1,
beGandalfMovement[beGandalfMovementIndex].Frame2);
glPopMatrix();
}
if (TotalTime>65000 && beParticleSystem!=-1)
{
PGod[beParticleSystem]->Enabled=false;
beParticleSystem=-1;
}
if (TotalTime>62000.0f)
{
Fade(1,1,1,(TotalTime-62000.0f)*0.001f);
}
if (TotalTime>19000.0f && TotalTime<24000.0f)
{
glLoadIdentity();
glDisable(GL_LIGHTING);
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
Standart.Display(" *Sigh* -- Bilbo finaly had the courage",1.0f,20,40,0);
Standart.Display(" To Give up The Ring!",1.0f,20,20,0);
glEnable(GL_LIGHTING);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
}
if (TotalTime>35000.0f && TotalTime<40000.0f)
{
glLoadIdentity();
glDisable(GL_LIGHTING);
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
Standart.Display(" *Hmmmm* -- Gandalf thought of using ",1.0f,20,40,0);
Standart.Display(" The Ring to do good!",1.0f,20,20,0);
glEnable(GL_LIGHTING);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
}
if (TotalTime>55000.0f && TotalTime<60000.0f)
{
glLoadIdentity();
glDisable(GL_LIGHTING);
glDisable(GL_CULL_FACE);
glDisable(GL_DEPTH_TEST);
Standart.Display(" *HA HA HA HA HA* - Evil Corrupted Gandalf! ",1.0f,20,40,0);
glEnable(GL_LIGHTING);
glEnable(GL_CULL_FACE);
glEnable(GL_DEPTH_TEST);
}
PGod.Draw();
}
void BagEndDeInit ()
{}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -