rev |
line source |
nuclear@0
|
1 #include "greetspart.h"
|
nuclear@0
|
2 #include "nwt/widget.h"
|
nuclear@0
|
3
|
nuclear@0
|
4 extern Widget *win;
|
nuclear@0
|
5
|
nuclear@0
|
6 GreetsPart::GreetsPart(GraphicsContext *gc) {
|
nuclear@0
|
7 this->gc = gc;
|
nuclear@0
|
8
|
nuclear@0
|
9 gc->Clear(0);
|
nuclear@0
|
10 gc->ClearZBufferStencil(1.0f, 0);
|
nuclear@0
|
11
|
nuclear@0
|
12
|
nuclear@0
|
13 SceneLoader::SetNormalFileSaving(false);
|
nuclear@0
|
14 SceneLoader::SetDataPath("data/textures/");
|
nuclear@0
|
15 SceneLoader::LoadScene("data/geometry/greets.3ds", &scene);
|
nuclear@0
|
16 SceneLoader::SetNormalFileSaving(true);
|
nuclear@0
|
17
|
nuclear@0
|
18 Parchment = scene->GetObject("Plane01");
|
nuclear@0
|
19 //Scroll1 = scene->GetObject("Object01");
|
nuclear@0
|
20 //Scroll2 = scene->GetObject("Object02");
|
nuclear@0
|
21
|
nuclear@0
|
22 // load the flame textures
|
nuclear@0
|
23 for(int i=0; i<52; i++) {
|
nuclear@0
|
24 char num[3];
|
nuclear@0
|
25 itoa(i, num, 10);
|
nuclear@0
|
26 string fname = string("data/textures/flame/flame") + (i < 10 ? string("0") : string("")) + string(num) + string(".jpg");
|
nuclear@0
|
27 FlameTex[i] = gc->texman->LoadTexture(fname.c_str());
|
nuclear@0
|
28 }
|
nuclear@0
|
29
|
nuclear@0
|
30 flame = scene->GetObject("Plane02");
|
nuclear@0
|
31 scene->RemoveObject(flame);
|
nuclear@0
|
32
|
nuclear@0
|
33 Parchment->SetScaling(9.0f, 1.0f, 1.0f);
|
nuclear@0
|
34
|
nuclear@0
|
35 Bottle = scene->GetObject("Bottle");
|
nuclear@0
|
36 scene->RemoveObject(Bottle);
|
nuclear@0
|
37
|
nuclear@0
|
38 light = scene->GetLight("Omni01");
|
nuclear@0
|
39
|
nuclear@0
|
40 scene->SetShadows(true);
|
nuclear@0
|
41 light->SetShadowCasting(true);
|
nuclear@0
|
42 //scene->GetObject("CHolder")->SetShadowCasting(true);
|
nuclear@0
|
43 scene->GetObject("Candle")->SetShadowCasting(true);
|
nuclear@0
|
44 //scene->GetObject("Bottle01")->SetShadowCasting(true);
|
nuclear@0
|
45
|
nuclear@0
|
46 const Light *l[] = {light};
|
nuclear@0
|
47 scene->GetObject("Cylinder01")->CalculateShadows(l, 1);
|
nuclear@0
|
48 scene->GetObject("Cylinder02")->CalculateShadows(l, 1);
|
nuclear@0
|
49 scene->GetObject("Bottle01")->CalculateShadows(l, 1);
|
nuclear@0
|
50 scene->GetObject("Plane01")->CalculateShadows(l, 1);
|
nuclear@0
|
51
|
nuclear@0
|
52 scene->SetAmbientLight(Color(0.58f, 0.3f, 0.3f));
|
nuclear@0
|
53
|
nuclear@0
|
54 LightPos = light->GetPosition();
|
nuclear@0
|
55 light->SetIntensity(0.5f);
|
nuclear@0
|
56 light->SetAttenuation(0.0f, 0.1f, 0.0f);
|
nuclear@0
|
57
|
nuclear@0
|
58 }
|
nuclear@0
|
59
|
nuclear@0
|
60 GreetsPart::~GreetsPart() {
|
nuclear@0
|
61 delete scene;
|
nuclear@0
|
62 }
|
nuclear@0
|
63
|
nuclear@0
|
64 void GreetsPart::MainLoop() {
|
nuclear@0
|
65
|
nuclear@0
|
66 gc->Clear(0);
|
nuclear@0
|
67 gc->ClearZBufferStencil(1.0f, 0);
|
nuclear@0
|
68
|
nuclear@0
|
69 Vector3 LightPosDiff(frand(0.005f) - 0.0025f, frand(0.005f) - 0.0025f, frand(0.005f) - 0.0025f);
|
nuclear@0
|
70 light->SetPosition(LightPos + LightPosDiff);
|
nuclear@0
|
71
|
nuclear@0
|
72 light->SetIntensity(0.5f + (frand(0.1f) - 0.05f));
|
nuclear@0
|
73
|
nuclear@0
|
74 dword msec = timer.GetMilliSec();
|
nuclear@0
|
75 float t = msec / 1000.0f;
|
nuclear@0
|
76
|
nuclear@0
|
77 scene->Render();
|
nuclear@0
|
78
|
nuclear@0
|
79 Bottle->Render();
|
nuclear@0
|
80
|
nuclear@0
|
81 gc->SetLighting(false);
|
nuclear@0
|
82 int ftexnum = (int)((float)msec / 33.35f) % 52;
|
nuclear@0
|
83 gc->SetAlphaBlending(true);
|
nuclear@0
|
84 gc->SetBackfaceCulling(false);
|
nuclear@0
|
85 gc->SetBlendFunc(BLEND_ONE, BLEND_ONE);
|
nuclear@0
|
86 gc->SetTextureStageColor(0, TexBlendSelectArg1, TexArgTexture, TexArgCurrent);
|
nuclear@0
|
87 gc->SetTextureStageAlpha(0, TexBlendSelectArg1, TexArgTexture, TexArgTexture);
|
nuclear@0
|
88 gc->SetMaterial(Material(1.0f, 1.0f, 1.0f));
|
nuclear@0
|
89 gc->SetTextureCoordIndex(0, 0);
|
nuclear@0
|
90 gc->SetTexture(1, 0);
|
nuclear@0
|
91 gc->SetTexture(0, FlameTex[ftexnum]);
|
nuclear@0
|
92 gc->SetWorldMatrix(flame->GetWorldTransform());
|
nuclear@0
|
93 flame->RenderBare();
|
nuclear@0
|
94 gc->SetBackfaceCulling(true);
|
nuclear@0
|
95 gc->SetAlphaBlending(false);
|
nuclear@0
|
96 gc->SetLighting(true);
|
nuclear@0
|
97 } |