OptionsMenu.cpp 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142
  1. #include "OptionsMenu.h"
  2. #include <sstream>
  3. #include "Options.h"
  4. #include "shared.h"
  5. #include "RootActor.h"
  6. #include "blocking.h"
  7. spOptionsMenu OptionsMenu::instance;
  8. void OptionsApply()
  9. {
  10. int volume = 0;
  11. volume = Options::instance.getValue("music").as_int();
  12. volume = Options::instance.getValue("sounds").as_int();
  13. }
  14. OptionsMenu::OptionsMenu()
  15. {
  16. _timefadeIn = 500;
  17. _timeFadeOut = 500;
  18. EventCallback cb = CLOSURE(this, &OptionsMenu::clickedButton);
  19. _music = new ButtonWithText;
  20. _sounds = new ButtonWithText;
  21. _quality = new ButtonWithText;
  22. _back = new ButtonWithText;
  23. Vector2 pos(virtualSize.x/2.0f, 50);
  24. _music->init(getString("options", "music_on"), cb, pos, "music");
  25. pos.y += 70;
  26. _sounds->init(getString("options", "sounds_on"), cb, pos, "sounds");
  27. pos.y += 70;
  28. _quality->init(getString("options", "high_quality_on"), cb, pos, "high_quality");
  29. pos.y += 70;
  30. _back->init(getString("options", "back"), cb, pos, "back");
  31. _actor->addChild(_music);
  32. _actor->addChild(_sounds);
  33. _actor->addChild(_quality);
  34. _actor->addChild(_back);
  35. int volume = 0;
  36. volume = Options::instance.getValue("sounds").as_int();
  37. if (!volume)
  38. switchButton(_sounds);
  39. volume = Options::instance.getValue("music").as_int();
  40. if (!volume)
  41. switchButton(_music);
  42. bool high = Options::instance.getValue("high_quality").as_bool();
  43. if (!high)
  44. switchButton(_quality);
  45. OptionsApply();
  46. _actor->setSize(RootActor::instance->getSize());
  47. _actor->setAnchor(Vector2(0.5f, 0.5f));
  48. _actor->setPosition(RootActor::instance->getSize()/2);
  49. }
  50. OptionsMenu::~OptionsMenu()
  51. {
  52. }
  53. void OptionsMenu::doShowing()
  54. {
  55. _actor->setAlpha(0);
  56. _actor->setScale(1.0f);
  57. _actor->setRotation(0);
  58. spTween t = createTween(Actor::TweenAlpha(255), _timefadeIn);
  59. spTween rot = createTween(Actor::TweenRotation(MATH_PI*2), _timefadeIn);
  60. _actor->addTween(t);
  61. _actor->addTween(rot);
  62. blocking::waitTween(t);
  63. }
  64. void OptionsMenu::doHiding()
  65. {
  66. spTween t = createTween(Actor::TweenAlpha(0), _timeFadeOut);
  67. spTween sc = createTween(Actor::TweenScale(Vector2(10, 10)), _timeFadeOut);
  68. _actor->addTween(t);
  69. _actor->addTween(sc);
  70. blocking::waitTween(t);
  71. }
  72. void OptionsMenu::clickedButton(Event *event)
  73. {
  74. spActor btn = safeSpCast<Actor>(event->currentTarget);
  75. const string &name = btn->getName();
  76. if (name == "back")
  77. generateActionByEvent(event);
  78. if (name == "music")
  79. {
  80. switchButton(_music);
  81. int volume = _music->enabled ? 100 : 0;
  82. Options::instance.getValue("music").set_value(volume);
  83. }
  84. if (name == "sounds")
  85. {
  86. switchButton(_sounds);
  87. int volume = _sounds->enabled ? 100 : 0;
  88. Options::instance.getValue("sounds").set_value(volume);
  89. }
  90. if (name == "high_quality")
  91. {
  92. switchButton(_quality);
  93. Options::instance.getValue("high_quality").set_value(_quality->enabled);
  94. }
  95. Options::instance.save();
  96. OptionsApply();
  97. }
  98. void OptionsMenu::doLoop()
  99. {
  100. while(1)
  101. {
  102. string action = waitAction();
  103. if (action == "back")
  104. break;
  105. }
  106. }
  107. void OptionsMenu::switchButton(spButtonWithText btn)
  108. {
  109. btn->enabled = !btn->enabled;
  110. string s = btn->getName() + (btn->enabled ? "_on" : "_off");
  111. btn->setText(getString("options", s.c_str()));
  112. }