📄 shirescene.h
字号:
#define NUMBER_OF_SHIRE_WAKING_HOBBIT_MOVEMENTS 35
#define SCENDED_FADE 0
POINT Mouse; //mouse handling, remove in the final release
CCamera fpvCam;
Md2Model scHobbitResting, scChicken[4], scFarmerJohn, scWalkingHobbit;
BezCam scCam(0.01f,0.75f);
CSkyBox scSkyBox;
CMap scMap;
int scBGMusic,scWater, scChicks, scWind, scBirds, scHmmm;
int scParticleSystem;
CharMovement scWalkingHobbitMovement[NUMBER_OF_SHIRE_WAKING_HOBBIT_MOVEMENTS];
float scWalkingHobbitAnimationFraction=0.0f;
int scWalkingHobbitMovementIndex=0;
float scFlags[10];
void ShireSceneInit()
{
scMap.Init("Data/Shire.cmf");
scSkyBox.Init("Data/CSkyBox/Day","jpg");
scHobbitResting.Load("Data/ModelsAndSkins/Hobbit/Hobbit.md2","Data/ModelsAndSkins/Hobbit/Hob.jpg");
scHobbitResting.SetAnimation("RestFLR");
scFarmerJohn.Load("Data/ModelsAndSkins/Hobbit/Hobbit.md2","Data/ModelsAndSkins/Hobbit/Hob.jpg");
scFarmerJohn.SetAnimation("Mess");
for (int i=0;i<4;i++) // load the chicken!
{
scChicken[i].Load("Data/ModelsAndSkins/Chicken/Chicken.md2","Data/ModelsAndSkins/Chicken/Chicken.jpg");
scChicken[i].SetAnimation("stand");
}
scCam.LoadFromFile("Data/Paths/ShireScene.path");
scWalkingHobbit.Load("Data/ModelsAndSkins/Hobbit/Hobbit.md2","Data/ModelsAndSkins/Hobbit/Hob.jpg");
scWalkingHobbit.SetAnimation("Walk");
for (int i=0;i<NUMBER_OF_FLAGS;i++)
scFlags[i]=false;
#include "ShireSceneWalkingHobbitMovement.h"
}
void ShireSceneRenderNextFrame(float Milliseconds)
{
static bool Record=false, DrawPath=true;
static float scHobbitRestingFraction, scChickenFraction[4]={0.2f,0.4f,0.1f,0.7f}, scFarmerJohnFraction;
static bool started=false;
if (!started)
{
started=true;
scParticleSystem=PGod.NewSystem(2,"Data/Particles/fish.bmp", 1, true); // The Fish particle system :D
PGod[scParticleSystem]->InitialParticle.Pos=Vector3d(5.0f,-1.0f,20.0f);
PGod[scParticleSystem]->InitialParticle.Speed=Vector3d(0.0f,0.007f,-0.01f);
PGod[scParticleSystem]->InitialParticle.fLifetime=2000.0f;
PGod[scParticleSystem]->InitialParticle.fInitialAlpha=1.0f;
PGod[scParticleSystem]->InitialParticle.fFinalAlpha=1.0f;
PGod[scParticleSystem]->InitialParticle.fInitialSize=0.5f;
PGod[scParticleSystem]->InitialParticle.fFinalSize=0.5f;
PGod[scParticleSystem]->InitialParticle.InitialColor.r=1.0f;
PGod[scParticleSystem]->InitialParticle.InitialColor.g=1.0f;
PGod[scParticleSystem]->InitialParticle.InitialColor.b=1.0f;
PGod[scParticleSystem]->InitialParticle.FinalColor.r=1.0f;
PGod[scParticleSystem]->InitialParticle.FinalColor.g=1.0f;
PGod[scParticleSystem]->InitialParticle.FinalColor.b=1.0f;
PGod[scParticleSystem]->Chaos.Pos=Vector3d(0.6f,0.0f,7.5f);
PGod[scParticleSystem]->Chaos.Speed=Vector3d(0.0f,0.001f,0.0f);
PGod[scParticleSystem]->Chaos.fLifetime=400.0f;
PGod[scParticleSystem]->Chaos.fInitialAlpha=0.0f;
PGod[scParticleSystem]->Chaos.fFinalAlpha=0.0f;
PGod[scParticleSystem]->Chaos.fInitialSize=0.0f;
PGod[scParticleSystem]->Chaos.fFinalSize=0.0f;
PGod[scParticleSystem]->Chaos.InitialColor.r=0.0f;
PGod[scParticleSystem]->Chaos.InitialColor.g=0.0f;
PGod[scParticleSystem]->Chaos.InitialColor.b=0.0f;
PGod[scParticleSystem]->Chaos.FinalColor.r=0.0f;
PGod[scParticleSystem]->Chaos.FinalColor.g=0.0f;
PGod[scParticleSystem]->Chaos.FinalColor.b=0.0f;
PGod[scParticleSystem]->InitialAccel=Vector3d(0.0f,-0.00005f,0.0f);
PGod[scParticleSystem]->FinalAccel=Vector3d(0.0f,-0.00005f,0.0f);
LightManager.SetAmbientColor(GL_LIGHT1,0.7f,0.7f,0.7f,1.0f);
LightManager.SetDiffuseColor(GL_LIGHT1,1,1,1,1);
}
PGod.Update(Milliseconds);
// UPDATE!
static float temptime, TotalTime;
temptime+=Milliseconds;
TotalTime+=Milliseconds;
scCam.LookAtNextPoint(Milliseconds*0.05);
scCam.PositionSkybox();
scSkyBox.Render();
glLoadIdentity();
scCam.Position();
LightManager.SetPosition(GL_LIGHT1,-3.0f,54.0f,-16.0f); // set light position
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);
}
else if (!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);
}
//DRAW THE MAP
scMap.Draw();
//DRAW THE RESTING HOBBIT
glPushMatrix();
glTranslatef(20.0f,0.3f,1.1f);
glScalef(0.02f,0.02f,0.02f);
glRotatef(-90.0f,0,1,0);
glRotatef(20.0f,1,0,0);
scHobbitRestingFraction+=Milliseconds*0.001;
if (scHobbitRestingFraction>=1.0f)
scHobbitRestingFraction=0.0f;
scHobbitResting.Animate(scHobbitRestingFraction);
glPopMatrix();
for (int i=0;i<4;i++)
{
scChickenFraction[i]+=Milliseconds*0.0001;
if (scChickenFraction[i]>=1.0f)
scChickenFraction[i]=0.0f;
}
// DRAW CHICKEN
glPushMatrix();
glTranslatef(11.0f,-0.5f,15.0f);
glScalef(0.015f,0.015f,0.015f);
scChicken[0].Animate(scChickenFraction[0]);
glPopMatrix();
glPushMatrix();
glTranslatef(10.0f,-0.5f,15.4f);
glScalef(0.015f,0.015f,0.015f);
glRotatef(-134.0f,0,1,0);
scChicken[1].Animate(scChickenFraction[1]);
glPopMatrix();
glPushMatrix();
glTranslatef(13.0f,-0.5f,10.4f);
glScalef(0.015f,0.015f,0.015f);
glRotatef(-273.0f,0,1,0);
scChicken[2].Animate(scChickenFraction[2]);
glPopMatrix();
glPushMatrix();
glTranslatef(10.0f,-0.5f,10.4f);
glScalef(0.015f,0.015f,0.015f);
glRotatef(-213.0f,0,1,0);
scChicken[3].Animate(scChickenFraction[3]);
glPopMatrix();
// DRAW FARMER JOHN
scFarmerJohnFraction+=Milliseconds*0.001;
if (scFarmerJohnFraction>=1.0f)
scFarmerJohnFraction=0.0f;
glPushMatrix();
glTranslatef(10.0f,-0.5f,1.4f);
glScalef(0.015f,0.015f,0.015f);
glRotatef(-17.0f,0,1,0);
scFarmerJohn.Animate(scFarmerJohnFraction);
glPopMatrix();
if (TotalTime > 38000.0f)// if it's time ;=)
{
// for the walking hobbit
glPushMatrix();
scWalkingHobbitAnimationFraction+=Milliseconds*scWalkingHobbitMovement[scWalkingHobbitMovementIndex].TimeFactor;
if (scWalkingHobbitAnimationFraction>=0.99f)
{
scWalkingHobbitMovementIndex++;
scWalkingHobbitAnimationFraction=0.0f;
if (scWalkingHobbitMovement[scWalkingHobbitMovementIndex].ChangeAnimation)
scWalkingHobbit.SetAnimation(scWalkingHobbitMovement[scWalkingHobbitMovementIndex].NewAnimation);
}
glTranslatef( scWalkingHobbitMovement[scWalkingHobbitMovementIndex].Position.Coords[0],
scWalkingHobbitMovement[scWalkingHobbitMovementIndex].Position.Coords[1],
scWalkingHobbitMovement[scWalkingHobbitMovementIndex].Position.Coords[2]);
glScalef(0.015f,0.015f,0.015f);
glRotatef(scWalkingHobbitMovement[scWalkingHobbitMovementIndex].Rotation.Coords[0],1,0,0);
glRotatef(scWalkingHobbitMovement[scWalkingHobbitMovementIndex].Rotation.Coords[1],0,1,0);
glRotatef(scWalkingHobbitMovement[scWalkingHobbitMovementIndex].Rotation.Coords[2],0,0,1);
if (!scWalkingHobbitMovement[scWalkingHobbitMovementIndex].TwoFrameInterpolation)
scWalkingHobbit.Animate(scWalkingHobbitAnimationFraction,false);
else
scWalkingHobbit.TwoFrameInterpolate(scWalkingHobbitAnimationFraction,
scWalkingHobbitMovement[scWalkingHobbitMovementIndex].Frame1,
scWalkingHobbitMovement[scWalkingHobbitMovementIndex].Frame2);
glPopMatrix();
if (TotalTime<48000.0f)
{
glEnable(GL_ALPHA_TEST);
PGod.Draw(); // or for the fish :)
glDisable(GL_ALPHA_TEST);
}
}
if (TotalTime>99000 && scParticleSystem!=-1)
{
PGod[scParticleSystem]->Enabled=false;
scParticleSystem=-1;
}
if (TotalTime>95000.0f)
{
float t=1.0f-((TotalTime-95000.0f)*0.002f);
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);
}
Standart.Display("The Shire", 2.0f, 100, 150,1);
}
void ShireSceneDeInit ()
{
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -