ui.c 6.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204
  1. #include "eruta.h"
  2. #include "image.h"
  3. #include "store.h"
  4. #include "zori.h"
  5. #include "zori_screen.h"
  6. #include "zori_console.h"
  7. #include "zori_button.h"
  8. #include "zori_page.h"
  9. #include "zori_menu.h"
  10. #include "ui.h"
  11. /* This file contains the concrete implementation of the Eruta GUI
  12. * and it's various GUI screens and pages. */
  13. static struct ui_state the_ui_state;
  14. char POEM_TEXT[] = "After mankind's summer, winter suddenly came"
  15. "Most reached for the stars, but some remained"
  16. "The earth scarred by the Ancients unhostpitable"
  17. "The hopes low, and so much wisdom forgotten"
  18. "Yet when it seemed the last hour struck"
  19. "Our hope returned, a savior arose"
  20. "Lord Kei, who by Creator's grace"
  21. "Restored the Trees that guard us all from harm"
  22. "Thus ushered in a new millennial spring"
  23. "Lord Kei, watch over us and protect us"
  24. "Until the Travellers return with bounty of the stars";
  25. char INTRO_TEXT[] = "Millennia have passed since mankind first traveled to the moon. "
  26. "Civilizations rose as never before, yet to fall again. "
  27. "When all hope seemed lost, the 21 trees sprouted from the earth. "
  28. "They brought mysterious powers that protected and strengthened mankind. "
  29. "Hi!\n\n"
  30. "Hello µ world, this is me, 無 life should be\nfun for everyone!";
  31. char INTRO_TEXT2[] = "Something happened, and I was changed!";
  32. zori_id ui_state_make_sub_menu(zori_id parent, int x, int y, int w, int bh);
  33. void ui_state_init(struct ui_state * ui) { }
  34. #ifdef COMMENT_
  35. /* Set up Zori GUI. */
  36. void ui_state_init(struct ui_state * ui, zori_displkay * display) {
  37. struct zori_style style;
  38. Rebox box;
  39. memset(&style, 0, sizeof(style));
  40. style.text.font = self->font;
  41. style.text.color = color_rgb(255,255,255);
  42. style.back.color = color_rgba(64,0,0, 191);
  43. if ( !ZORI_ID_OK_P(zori_start(&style)) ) {
  44. return state_errmsg_(self, "Out of memory when allocating GUI.");
  45. }
  46. self->ui.screen = zori_new_screen(-1, self->display);
  47. if(!ZORI_ID_OK_P(self->ui.screen)) {
  48. return state_errmsg_(self, "Could not init GUI screen.\n");
  49. }
  50. self->ui.main_page = zori_new_page(-1, self->ui.screen);
  51. LOG_NOTE("Main page: %d\n", self->ui.main_page);
  52. box = rebox_make(280, 80, 140, 240);
  53. self->ui.main_menu = zori_new_menu(-1, main_page, &box);
  54. LOG_NOTE("Main menu: %d\n", self->ui.main_menu);
  55. {
  56. Rebox box = rebox_make(300, 100, 100, 60);
  57. self->ui.continue_button = zori_new_button(-1, main_menu, &box, "Continue");
  58. LOG_NOTE("Button: %d\n", self->ui.continue_button);
  59. }
  60. {
  61. Rebox box = rebox_make(300, 200, 100, 60);
  62. self->ui.new_button = zori_new_button(-1, main_menu, &box, "New");
  63. LOG_NOTE("Button: %d\n", self->ui.new_button);
  64. }
  65. }
  66. INTRO_TEXT2 =
  67. def make_sub_menu(parent, x, y, w, h, bh)
  68. sub_menu = parent.make_menu(x, y, w, h, nil)
  69. sub_menu.make_button(x, y + 20, w - 20, bh, "Sub choice 1") do
  70. puts "choice 1"
  71. end
  72. sub_menu.make_button(x, y + 30 + bh, w - 20, bh, "Sub choice 2") do
  73. puts "choice 2"
  74. end
  75. sub_menu.make_button(x, y + 40 + 2* bh, w - 20, bh, "Sub choice 3") do
  76. puts "choice 3"
  77. end
  78. sub_menu.fit_children
  79. sub_menu.hide
  80. return sub_menu
  81. end
  82. def do_main_menu
  83. main_music = Music.load(:main, '/music/nethis-the_writer.ogg')
  84. $lote = nil
  85. $lobe = nil
  86. if PLAY_MUSIC
  87. res = main_music.play!
  88. end
  89. # res = nil
  90. # $main_menu = MainMenu.new
  91. # $main_menu.active = true
  92. Zori.make_page(:default) do |m|
  93. State.talk_box = m.make_longtext(10, 310, 620, 160, "Testing 1 2 3")
  94. State.talk_box.graph.each { |g| g.font = Eruta::Zori.font.id }
  95. State.talk_box.delay = 0.1
  96. State.talk_box.page_lines = 5
  97. State.talk_box.page = 0
  98. State.talk_box.hide
  99. end
  100. Zori.make_page(:main_menu) do |m|
  101. if MAIN_BACKGROUND
  102. main_back = Bitmap.load(:main_back,
  103. '/image/background/eruta_mainmenu.png')
  104. p main_back, main_back.width, main_back.height, main_back.name, main_back.id
  105. main_back = Bitmap.load(:main_back,
  106. '/image/background/eruta_mainmenu.png')
  107. p main_back, main_back.width, main_back.height, main_back.name, main_back.id
  108. p Bitmap[:main_back]
  109. p Store[:bitmap_main_back]
  110. m.graph_image(0, 0, main_back.id)
  111. end
  112. main_menu = m.make_menu(250, 190, 120, 440, nil)
  113. ma = main_menu
  114. main_button_1 = ma.make_button(260, 200, 100, 30, "Continue")
  115. sub_menu = make_sub_menu(main_button_1, 50, 190, 120, 440, 30)
  116. sub_menu.hide
  117. main_button_2 = ma.make_button(260, 240, 100, 30, "New") do
  118. do_start_test_map
  119. Zori.go(:default)
  120. end
  121. main_button_3 = ma.make_button(260, 280, 100, 30, "Settings") do
  122. Zori.go(:settings)
  123. end
  124. main_button_4 = ma.make_button(260, 320, 100, 30, "Instructions")
  125. main_button_5 = ma.make_button(260, 360, 100, 30, "µ£éè")
  126. main_button_5 << sub_menu
  127. main_button_5= ma.make_button(260, 400, 100, 30, "Quit") do
  128. Eruta.quit
  129. end
  130. main_menu.fit_children
  131. end
  132. Zori.make_page(:settings) do |se|
  133. lote2 = se.make_longtext(100, 10, 160, 100, INTRO_TEXT)
  134. lote2.delay = 1
  135. lote2.page = 0
  136. lote2.page_lines = 3
  137. # $lote2.line_stop = 999990
  138. settings_menu = se.make_menu(480, 380, 120, 440, nil)
  139. sm = settings_menu
  140. settings_ok_button = sm.make_button(500, 300, 100, 30, "Font 1") do
  141. if lote2
  142. lote2.graph.each { |g| g.font = 0 }
  143. end
  144. end
  145. settings_ok_button = sm.make_button(500, 350, 100, 30, "Font 2") do
  146. if lote2
  147. lote2.graph.each { |g| g.font = Eruta::Zori.font.id }
  148. end
  149. lote2.text = INTRO_TEXT2
  150. end
  151. settings_ok_button = sm.make_button(500, 400, 100, 30, "OK") do
  152. Zori.go(:main_menu)
  153. if lote
  154. lote.close
  155. lote = nil
  156. end
  157. end
  158. sm.fit_children
  159. end
  160. Zori[:main_menu].hide
  161. Zori[:settings].hide
  162. Zori.go(:main_menu)
  163. end
  164. #endif