/project/Naruto_ninja_story/Scene/ScenePromoA.cpp

http://narutortsproject.googlecode.com/ · C++ · 679 lines · 518 code · 128 blank · 33 comment · 76 complexity · 275f3f44697cd6820c95389f1809497e MD5 · raw file

  1. #include "ScenePromoA.h"
  2. #include "Core/Core.h"
  3. #include "../Naruto_controls.h"
  4. #include "tools/Speedometr.h"
  5. #include "tools/tools.h"
  6. #include "Graphick/Texture/Texture.h"
  7. #include "Graphick/Texture/TextureContainer.h"
  8. #include "Graphick/Graphick.h"
  9. #include "Graphick/OpenGL/OpenGl.h"
  10. #include "Graphick/OpenGL/vertex_shader.h"
  11. #include "Graphick/OpenGL/fragment_shader.h"
  12. ScenePromoA::ScenePromoA()
  13. {
  14. m_promo_string_date[0] = 0;
  15. m_cancel_key = 0;
  16. m_body_naruto_title = 0;
  17. m_body_ninja_story_title = 0;
  18. m_shade_bg = 0;
  19. m_credits_scroll = 0.0;
  20. m_credits_count = 0;
  21. m_credits_line_width = 0;
  22. m_credits_lines = 0;
  23. for (int i = 0; i < m_chars_bg_max; i ++)
  24. {
  25. m_chars_bg[i] = 0;
  26. }
  27. m_glsl_sample_shader = 0;
  28. m_glsl_particle_shader = 0;
  29. m_glsl_outline_shader = 0;
  30. m_glsl_simple_shadow = 0;
  31. m_show_timer_max = 0.0;
  32. m_show_timer = 0.0;
  33. m_show_timer_alpha = 500.0;
  34. m_show_rotation = 0.0;
  35. m_show_rotation_vel = 0.0;
  36. m_show_rotation_bet = 0.0;
  37. m_show_rotation_bet_vel = 0.0;
  38. m_welcome_timer = 0.0;
  39. m_show_posx = 0.0;
  40. m_show_posy = 0.0;
  41. m_show_posz = 0.0;
  42. m_show_velx = 0.0;
  43. m_show_vely = 0.0;
  44. m_show_velz = 0.0;
  45. m_track_id = -1;
  46. m_menu_item_start = -1;
  47. m_menu_item_exit = -1;
  48. m_menu_activated = false;
  49. m_menu_menu_player_count = -1;
  50. m_menu_item_player_1 = -1;
  51. m_menu_item_player_2 = -1;
  52. m_menu_item_player_3 = -1;
  53. m_press_start_message[0] = 0;
  54. };
  55. ScenePromoA::~ScenePromoA()
  56. {
  57. };
  58. void ScenePromoA::InitShow()
  59. {
  60. m_show_timer_max = rndf(3000.0f, 6000.0f);
  61. m_show_timer = 0.0;
  62. m_show_timer_alpha = 1000.0f;
  63. m_show_rotation = rndf(0.0f, 360.0f);
  64. m_show_rotation_vel = rndf(0.0f, 10.0f);
  65. m_show_rotation_bet = rndf(-80.0f, -45.0f);
  66. m_show_rotation_bet_vel = rndf(-4.0f, 4.0f);
  67. m_show_posx = rndf(-30.0f, 30.0f);
  68. m_show_posy = rndf(-10.0f, 0.0f);
  69. m_show_posz = rndf(30.0f, 50.0f);
  70. m_show_velx = rndf(-2.0f, 2.0f);
  71. m_show_vely = rndf(-2.0f, 2.0f);
  72. m_show_velz = rndf(-1.0f, 2.0f);
  73. int new_char = rand()%m_chars_bg_max;
  74. while (m_show_character == new_char)
  75. new_char = rand()%m_chars_bg_max;
  76. m_show_character = new_char;
  77. };
  78. void ScenePromoA::Control()
  79. {
  80. double duration = m_speedometer->GetFrameDuration();
  81. if (duration < 0.001)
  82. duration = 0.001;
  83. if (duration > 40.0)
  84. duration = 40.0;
  85. if (m_menu_activated)
  86. {
  87. m_menu.Control(duration);
  88. if (m_key_down && m_key_controller->is_hit(m_key_down))
  89. m_menu.SetNextItem();
  90. if (m_key_up && m_key_controller->is_hit(m_key_up))
  91. m_menu.SetPreviousItem();
  92. if (m_start_key && m_key_controller->is_hit(m_start_key))
  93. m_menu.DoStartItem();
  94. if (m_cancel_key && m_key_controller->is_hit(m_cancel_key))
  95. m_menu.DoBackItem();
  96. }
  97. if (m_start_key && m_key_controller->is_hit(m_start_key))
  98. {
  99. if (m_menu_activated)
  100. {
  101. } else
  102. if (m_welcome_timer >= 2000.0)
  103. {
  104. m_menu_activated = true;
  105. }
  106. }
  107. //m_menu_bg->Control(duration);
  108. //m_object->Control(duration);
  109. if (m_show_timer >= m_show_timer_max)
  110. InitShow();
  111. double mv = duration / 1000.0;
  112. m_show_timer += duration;
  113. m_show_posx += m_show_velx*mv;
  114. m_show_posy += m_show_vely*mv;
  115. m_show_posz += m_show_velz*mv;
  116. m_show_rotation += m_show_rotation_vel*mv;
  117. m_show_rotation_bet += m_show_rotation_bet_vel*mv;
  118. double inv_time = m_show_timer_max - m_show_timer;
  119. if (m_show_timer <= m_show_timer_alpha)
  120. {
  121. int alpha = 255 - int(255*(m_show_timer/m_show_timer_alpha));
  122. if (alpha < 0)
  123. alpha = 0;
  124. if (alpha > 255)
  125. alpha = 255;
  126. m_shade_bg->SetColorDiffuse(20, 40, 70, alpha);
  127. }
  128. else
  129. if (inv_time <= m_show_timer_alpha)
  130. {
  131. int alpha = 255 - int(255*(inv_time/m_show_timer_alpha));
  132. if (alpha < 0)
  133. alpha = 0;
  134. if (alpha > 255)
  135. alpha = 255;
  136. m_shade_bg->SetColorDiffuse(20, 40, 70, alpha);
  137. }
  138. else
  139. m_shade_bg->SetColorDiffuse(20, 40, 70, 0);
  140. m_welcome_timer += duration;
  141. m_credits_scroll += 0.03*mv;
  142. }
  143. void ScenePromoA::Paint()
  144. {
  145. double time = m_speedometer->GetTime();
  146. if (time > 1500)
  147. {
  148. //m_bg_changed = true;
  149. //SetClearColor(1.0f, 1.0f, 1.0f, 1.0f);
  150. };
  151. m_graphick->PushMatrix();
  152. glTranslatef(0.0f, -30.0f, -100.0f);
  153. glTranslated(m_show_posx, m_show_posy, m_show_posz);
  154. //glRotatef(-70.0f, 1.0f, 0.0f, 0.0f);
  155. glRotatef(float(m_show_rotation_bet), 1.0f, 0.0f, 0.0f);
  156. glRotatef(float(m_show_rotation), 0.0f, 0.0f, 1.0f);
  157. //m_show_posx += m_show_velx*mv;
  158. //m_show_posy += m_show_vely*mv;
  159. //m_show_posz += m_show_velz*mv;
  160. //m_show_rotation += m_show_rotation_vel*mv;
  161. //glRotatef(0.0f, 0.0f, 0.0f, 1.0f);
  162. if (m_glsl_sample_shader && m_glsl_outline_shader)
  163. {
  164. glEnable(GL_CULL_FACE);
  165. glCullFace(GL_BACK);
  166. m_chars_bg[m_show_character]->SetShader(m_glsl_sample_shader);
  167. m_chars_bg[m_show_character]->paint();
  168. glCullFace(GL_FRONT);
  169. m_chars_bg[m_show_character]->SetShader(m_glsl_outline_shader);
  170. m_chars_bg[m_show_character]->paint();
  171. glDisable(GL_CULL_FACE);
  172. m_chars_bg[m_show_character]->SetShader(m_glsl_simple_shadow);
  173. m_chars_bg[m_show_character]->paint();
  174. //Tmatrix matrix_shadow;
  175. //CalculateShadowMatrix(matrix_shadow.matrix.elements_16, 0.0f, 0.0f, 1.0f, -1.0, 0.0f, 0.0f, 100.0f, 1.0f);
  176. //glMultMatrixf(matrix_shadow.matrix.elements_16);
  177. //m_menu_bg->paint();
  178. }else
  179. {
  180. m_chars_bg[m_show_character]->paint();
  181. }
  182. m_graphick->PopMatrix();
  183. m_shade_bg->Paint();
  184. m_body_naruto_title->Animate(time);
  185. m_body_ninja_story_title->Animate(time);
  186. m_graphick->SetBlend(false);
  187. //Draw credits
  188. double text_height = 0.03;
  189. int credit_position = int(m_credits_scroll / text_height);
  190. double small_offset = m_credits_scroll - double(credit_position)*text_height;
  191. credit_position %= m_credits_count;
  192. int line_out = 16;
  193. double alpha_level = text_height*4.0;
  194. double height = text_height*double(line_out);
  195. double left = -m_graphick->GetVirtualWidth()/2.0 + 0.1;
  196. for (int i = 0; i < line_out; i ++)
  197. {
  198. double y_pos = text_height*double(i) - small_offset;
  199. double y_end_pos = height - y_pos - text_height;
  200. double alpha = 1.0;
  201. if (y_pos < alpha_level)
  202. alpha = y_pos/alpha_level;
  203. if (y_end_pos < alpha_level)
  204. alpha = y_end_pos/alpha_level;
  205. int ialpha = int(alpha*255.0);
  206. if (ialpha < 0)
  207. ialpha = 0;
  208. if (ialpha > 255)
  209. ialpha = 255;
  210. int pos = (credit_position + i) % m_credits_count;
  211. m_core->TextDraw(Core_base::FONT_DEFAULT, m_credits_lines[pos], float(left), -0.0f - float(y_pos), -1.0f, float(text_height), 0xcfcfcf + (ialpha << 24));
  212. }
  213. //sprintf_s(m_promo_string, 2048, "Naruto Ninja Story Project. Restorate Team. Kuznietsov IEvgeny");
  214. m_core->TextDraw(Core_base::FONT_DEFAULT, "Naruto Ninja Story Project by Restorate Team", -0.3f, -0.62f, -1.0f, 0.03f, 0xffffffff);
  215. m_core->TextDraw(Core_base::FONT_DEFAULT, "Visit us http://res-team.ucoz.com", -0.22f, -0.65f, -1.0f, 0.03f, 0xffffffff);
  216. m_core->TextDraw(Core_base::FONT_DEFAULT, m_promo_string_date, -m_graphick->GetVirtualWidth()/2.0f, -0.75f, -1.0f, 0.03f, 0xffffffff);
  217. if (!m_menu_activated)
  218. {
  219. if (m_welcome_timer < 1000.0)
  220. {
  221. float alpha = float(1000.0 - m_welcome_timer)/1000.0f;
  222. m_core->TextDraw(Core_base::FONT_DEFAULT, m_press_start_message, -0.1f + alpha, -0.50f, -1.0f, 0.05f, 0xffffffff);
  223. m_core->TextDraw(Core_base::FONT_DEFAULT, m_press_start_message, -0.1f - alpha, -0.50f, -1.0f, 0.05f, 0xffffffff);
  224. } else
  225. if (m_welcome_timer < 2000.0)
  226. {
  227. float alpha = float(m_welcome_timer - 1000.0)/1000.0f;
  228. m_core->TextDraw(Core_base::FONT_DEFAULT, m_press_start_message, -0.1f - alpha*0.1f, -0.50f - alpha*0.025f, -1.0f, 0.05f + alpha*0.05f, 0xffffff + (unsigned int(255 - alpha*255) << 24));
  229. m_core->TextDraw(Core_base::FONT_DEFAULT, m_press_start_message, -0.1f, -0.50f, -1.0f, 0.05f, 0xffffffff);
  230. } else
  231. {
  232. float alpha = float((1.0 + cos((2000.0 - m_welcome_timer)/200.0))/2.0)*0.7f + 0.3f;
  233. m_core->TextDraw(Core_base::FONT_DEFAULT, m_press_start_message, -0.1f, -0.50f, -1.0f, 0.05f, 0xffffff + (unsigned int(alpha*255) << 24));
  234. };
  235. } else
  236. {
  237. m_menu.Paint();
  238. }
  239. //if (time > 9500.0)
  240. // finish();
  241. Scene_base::Paint();
  242. };
  243. void ScenePromoA::CreateMenu()
  244. {
  245. //Fill menu
  246. m_menu.SetCore(m_core);
  247. //Start, Exit menu
  248. {
  249. TMenu* menu_start_exit = new TMenu;
  250. menu_start_exit->SetCore(m_core);
  251. menu_start_exit->SetNotify(this);
  252. m_menu_menu_start_exit = menu_start_exit->GetId();
  253. MenuItem* item_start = new MenuItem;
  254. item_start->SetPos(-0.1f, -0.40f);
  255. item_start->SetText(m_core->GetLocaleString("menu_start"));
  256. m_menu_item_start = item_start->GetId();
  257. menu_start_exit->AddMenuItem(item_start);
  258. MenuItem* item_exit = new MenuItem;
  259. item_exit->SetPos(-0.1f, -0.45f);
  260. item_exit->SetText(m_core->GetLocaleString("menu_exit"));
  261. m_menu_item_exit = item_exit->GetId();
  262. menu_start_exit->AddMenuItem(item_exit);
  263. menu_start_exit->SetCurrent(m_menu_item_start);
  264. m_menu.AddMenu(menu_start_exit);
  265. m_menu.SetMenu(m_menu_menu_start_exit);
  266. }
  267. //Player Quantity
  268. {
  269. TMenu* menu_player_count = new TMenu;
  270. menu_player_count->SetCore(m_core);
  271. menu_player_count->SetNotify(this);
  272. m_menu_menu_player_count = menu_player_count->GetId();
  273. MenuItem* item_player_1 = new MenuItem;
  274. item_player_1->SetPos(-0.1f, -0.40f);
  275. item_player_1->SetText(m_core->GetLocaleString("menu_start_1p"));
  276. m_menu_item_player_1 = item_player_1->GetId();
  277. menu_player_count->AddMenuItem(item_player_1);
  278. MenuItem* item_player_2 = new MenuItem;
  279. item_player_2->SetPos(-0.1f, -0.45f);
  280. item_player_2->SetText(m_core->GetLocaleString("menu_start_2p"));
  281. m_menu_item_player_2 = item_player_2->GetId();
  282. menu_player_count->AddMenuItem(item_player_2);
  283. MenuItem* item_player_3 = new MenuItem;
  284. item_player_3->SetPos(-0.1f, -0.50f);
  285. item_player_3->SetText(m_core->GetLocaleString("menu_start_3p"));
  286. m_menu_item_player_3 = item_player_3->GetId();
  287. menu_player_count->AddMenuItem(item_player_3);
  288. MenuItem* item_back = new MenuItem;
  289. item_back->SetPos(-0.1f, -0.55f);
  290. item_back->SetText(m_core->GetLocaleString("menu_return"));
  291. m_menu_menu_player_count_back = item_back->GetId();
  292. menu_player_count->AddMenuItem(item_back);
  293. menu_player_count->SetCurrent(m_menu_item_player_1);
  294. m_menu.AddMenu(menu_player_count);
  295. }
  296. };
  297. void ScenePromoA::LoadCredits()
  298. {
  299. char credits_name[1024];
  300. m_core->GetLocaleStringFolder(credits_name, 1024);
  301. strcat_s(credits_name, 1024, "credits.txt");
  302. FILE * file = 0;
  303. fopen_s(&file, credits_name, "rb");
  304. if (!file)
  305. {
  306. m_core->OnCoreWarning("W:Can't load Credits '");
  307. m_core->OnCoreWarning(credits_name);
  308. m_core->OnCoreWarning("'\n");
  309. return;
  310. }
  311. _fseeki64(file, 0, SEEK_END);
  312. long long file_size = _ftelli64(file);
  313. _fseeki64(file, 0, SEEK_SET);
  314. if (file_size > 65536)
  315. file_size = 65536;
  316. //Read data
  317. char* credits_string = new char[int(file_size)+1];
  318. fread(credits_string, 1, int(file_size), file);
  319. credits_string[file_size] = 0;
  320. fclose(file);
  321. //Initialize credits
  322. m_credits_count = 0;
  323. for (unsigned int i = 0; i < strlen(credits_string); i ++)
  324. {
  325. if (credits_string[i] == '\n')
  326. {
  327. m_credits_count ++;
  328. }
  329. }
  330. m_credits_line_width = new double[m_credits_count];
  331. m_credits_lines = new char*[m_credits_count];
  332. for (int i = 0; i < m_credits_count; i ++)
  333. {
  334. m_credits_line_width[i] = 0;
  335. m_credits_lines[i] = new char[512];
  336. };
  337. int line_pos = 0;
  338. int credit_num = 0;
  339. for (unsigned int i = 0; i < strlen(credits_string); i ++)
  340. {
  341. if (credits_string[i] == '\n')
  342. {
  343. m_credits_line_width[credit_num] = line_pos;
  344. m_credits_lines[credit_num][line_pos] = 0;
  345. credit_num ++;
  346. line_pos = 0;
  347. if (credit_num < m_credits_count)
  348. m_credits_lines[credit_num][0] = 0;
  349. } else
  350. {
  351. m_credits_lines[credit_num][line_pos] = credits_string[i];
  352. m_credits_line_width[credit_num] = 0;
  353. line_pos++;
  354. if (line_pos >= 512)
  355. line_pos = 511;
  356. }
  357. }
  358. delete[] credits_string;
  359. };
  360. void ScenePromoA::OnItemEnter(long long id)
  361. {
  362. if (id == m_menu_item_exit)
  363. {
  364. ShutDown();
  365. } else
  366. if (id == m_menu_item_start)
  367. {
  368. m_menu.SetMenu(m_menu_menu_player_count);
  369. m_menu.SetMenuItem(m_menu_item_player_1);
  370. } else
  371. if (id == m_menu_menu_player_count_back)
  372. {
  373. m_menu.SetMenu(m_menu_menu_start_exit);
  374. m_menu.SetMenuItem(m_menu_item_start);
  375. } else
  376. if (id == m_menu_item_player_1)
  377. {
  378. m_core->StoreValue("game_player_count", 1.0);
  379. Finish();
  380. } else
  381. if (id == m_menu_item_player_2)
  382. {
  383. m_core->StoreValue("game_player_count", 2.0);
  384. Finish();
  385. } else
  386. if (id == m_menu_item_player_3)
  387. {
  388. m_core->StoreValue("game_player_count", 3.0);
  389. Finish();
  390. };
  391. }
  392. void ScenePromoA::OnItemBack(long long id)
  393. {
  394. }
  395. bool ScenePromoA::Initialize()
  396. {
  397. if (!Scene_base::Initialize())
  398. return false;
  399. if (((graphick_OpenGl*)m_graphick)->GlslSupport())
  400. {
  401. m_glsl_sample_shader = new GlslShader;
  402. if (!m_glsl_sample_shader->Create(vertex_cartoon_shader, fragment_cartoon_shader))
  403. {
  404. delete m_glsl_sample_shader;
  405. m_glsl_sample_shader = 0;
  406. }
  407. m_glsl_particle_shader = new GlslShader;
  408. if (!m_glsl_particle_shader->Create(vertex_particle_shader, 0))
  409. {
  410. delete m_glsl_particle_shader;
  411. m_glsl_particle_shader = 0;
  412. }
  413. m_glsl_outline_shader = new GlslShader;
  414. if (!m_glsl_outline_shader->Create(vertex_contur_shader, fragment_contur_shader))
  415. {
  416. delete m_glsl_outline_shader;
  417. m_glsl_outline_shader = 0;
  418. }
  419. m_glsl_simple_shadow = new GlslShader;
  420. if (!m_glsl_simple_shadow->Create(vertex_simple_shadow_shader, 0))
  421. {
  422. delete m_glsl_simple_shadow;
  423. m_glsl_simple_shadow = 0;
  424. }
  425. }
  426. strcpy_s(m_press_start_message, 4096, m_core->GetLocaleString("menu_press_start"));
  427. sprintf_s(m_promo_string_date, 2048, "%s Kuznietsov IEvgeny %s %s", m_core->GetLocaleString("menu_build_by"), __DATE__, __TIME__);
  428. m_chars_bg[0] = new Object_base;
  429. InitializeObject(m_chars_bg[0]);
  430. m_chars_bg[0]->load("../../data/object/MainMenuRockLee.n3d");
  431. m_chars_bg[1] = new Object_base;
  432. InitializeObject(m_chars_bg[1]);
  433. m_chars_bg[1]->load("../../data/object/MainMenuTenTen.n3d");
  434. m_chars_bg[2] = new Object_base;
  435. InitializeObject(m_chars_bg[2]);
  436. m_chars_bg[2]->load("../../data/object/MainMenuSasuke.n3d");
  437. m_chars_bg[3] = new Object_base;
  438. InitializeObject(m_chars_bg[3]);
  439. m_chars_bg[3]->load("../../data/object/MainMenuHinata.n3d");
  440. //m_menu_bg->set_animation(10.0*40.0, 100.0*40.0, true);
  441. {
  442. m_shade_bg = new Body_animate;
  443. Mesh_base* mesh_shade = new Mesh_base;
  444. mesh_shade->CreatePlane(3.0f, 3.0f, 1,1);
  445. m_shade_bg->SetMesh(mesh_shade);
  446. m_shade_bg->Move(0.0f, 0.0f, -1.01f);
  447. m_shade_bg->SetColorDiffuse(20, 40, 70, 0);
  448. m_object->insert_body(m_shade_bg);
  449. }
  450. {
  451. m_body_naruto_title = new Body_animate;
  452. Mesh_base* mesh_naruto_title = new Mesh_base;
  453. Texture_instance* txt_naruto_title = m_texture->load_texture("../../data/texture/gui/game_menu/Naruto_title.bmp", Texture_instance::TXT_CLAMPING_EDGE);
  454. mesh_naruto_title->CreatePlane(2.0f, 1.0f, 1,1);
  455. mesh_naruto_title->SetTexture(txt_naruto_title);
  456. m_body_naruto_title->SetMesh(mesh_naruto_title);
  457. m_body_naruto_title->Move(2.0f, 0.0f, -1.0f);
  458. m_body_naruto_title->SetColorDiffuse(255, 255, 255, 255);
  459. m_body_naruto_title->SetAlphaTest(true);
  460. m_object->insert_body(m_body_naruto_title);
  461. Body_state state;
  462. state.s_time = 0.0;
  463. Translatef(state.s_matrix.matrix.elements_16, 2.0f,0.0f,-1.0f);
  464. m_body_naruto_title->AddState(&state);
  465. state.s_time = 500.0;
  466. Translatef(state.s_matrix.matrix.elements_16, -3.0f,0.0f,0.0f);
  467. m_body_naruto_title->AddState(&state);
  468. state.s_time = 1000.0;
  469. Translatef(state.s_matrix.matrix.elements_16, 1.0f,0.4f,0.0f);
  470. Scalef(state.s_matrix.matrix.elements_16, 0.7f,0.7f,1.0f);
  471. m_body_naruto_title->AddState(&state);
  472. }
  473. {
  474. //m_body_ninja_story_title
  475. //Ninja_story_title.bmp
  476. m_body_ninja_story_title = new Body_animate;
  477. Mesh_base* mesh_ninja_story_title = new Mesh_base;
  478. Texture_instance* txt_ninja_story_title = m_texture->load_texture("../../data/texture/gui/game_menu/Ninja_story_title.bmp", Texture_instance::TXT_CLAMPING_EDGE);
  479. mesh_ninja_story_title->CreatePlane(0.4f*1.5f, 0.1f*1.5f, 1,1);
  480. mesh_ninja_story_title->SetTexture(txt_ninja_story_title);
  481. m_body_ninja_story_title->SetMesh(mesh_ninja_story_title);
  482. m_body_ninja_story_title->Move(0.0f, 0.0f, -1.0f);
  483. m_body_ninja_story_title->SetColorDiffuse(255, 255, 255, 255);
  484. //m_body_ninja_story_title->SetAlphaTest(true);
  485. m_object->insert_body(m_body_ninja_story_title);
  486. Body_state state;
  487. state.s_time = 0.0;
  488. state.s_color.a = 0.0;
  489. Translatef(state.s_matrix.matrix.elements_16, 0.4f,0.2f,-1.0f);
  490. m_body_ninja_story_title->AddState(&state);
  491. state.s_time = 1200.0;
  492. //Translatef(state.s_matrix.matrix.elements_16, -3.0,0.0,0.0);
  493. m_body_ninja_story_title->AddState(&state);
  494. state.s_time = 1700.0;
  495. state.s_color.a = 1.0;
  496. //Translatef(state.s_matrix.matrix.elements_16, 1.0,0.4,0.0);
  497. //Scalef(state.s_matrix.matrix.elements_16, 0.7,0.7,1.0);
  498. m_body_ninja_story_title->AddState(&state);
  499. }
  500. LoadCredits();
  501. m_credits_scroll = 0.0;
  502. //int m_credits_count;
  503. //double* m_credits_line_width;
  504. //double m_credits_scroll;
  505. if (m_sound_engine)
  506. {
  507. m_track_id = m_sound_engine->PlayTrack("../../data/music/Toshiro Masuda - Bunta.ogg", true);
  508. }
  509. m_cancel_key = KeyFind(CTRL_P1_CANCEL);
  510. m_start_key = KeyFind(CTRL_P1_START);
  511. m_key_down = KeyFind(CTRL_P1_GO_BACK);
  512. m_key_up = KeyFind(CTRL_P1_GO_FORWARD);
  513. SetClearColor(20.0f/255.0f, 40.0f/255.0f, 70.0f/255.0f, 0.0f);
  514. CreateMenu();
  515. return true;
  516. };
  517. void ScenePromoA::Destroy()
  518. {
  519. if (m_sound_engine && m_track_id > -1)
  520. {
  521. m_sound_engine->StopTrack(m_track_id);
  522. }
  523. if (m_credits_line_width)
  524. delete [] m_credits_line_width;
  525. m_credits_line_width = 0;
  526. if (m_credits_lines)
  527. {
  528. for (int i = 0; i < m_credits_count; i ++)
  529. {
  530. delete [] m_credits_lines[i];
  531. }
  532. delete [] m_credits_lines;
  533. }
  534. m_credits_lines = 0;
  535. if (m_glsl_sample_shader)
  536. delete m_glsl_sample_shader;
  537. m_glsl_sample_shader = 0;
  538. if (m_glsl_outline_shader)
  539. delete m_glsl_outline_shader;
  540. m_glsl_outline_shader = 0;
  541. if (m_glsl_simple_shadow)
  542. delete m_glsl_simple_shadow;
  543. m_glsl_simple_shadow = 0;
  544. for (int i = 0; i < m_chars_bg_max; i ++)
  545. {
  546. if (m_chars_bg[i])
  547. delete m_chars_bg[i];
  548. m_chars_bg[i] = 0;
  549. }
  550. Scene_base::Destroy();
  551. };