1 /*! 2 @file 3 @author Albert Semenov 4 @date 12/2008 5 */ 6 #include "Precompiled.h" 7 #include "State.h" 8 9 namespace demo 10 { 11 State(const std::string & _layout,ControllerType _type)12 State::State(const std::string& _layout, ControllerType _type) : 13 wraps::BaseLayout(_layout), 14 mFrameAdvise(false) 15 { 16 mType = _type; 17 18 assignWidget(mButton1, "Button1"); 19 assignWidget(mButton2, "Button2"); 20 assignWidget(mButton3, "Button3"); 21 assignWidget(mButton4, "Button4"); 22 23 mMainWidget->setVisible(false); 24 mButton1->setVisible(false); 25 mButton2->setVisible(false); 26 mButton3->setVisible(false); 27 mButton4->setVisible(false); 28 29 mButton1->eventMouseButtonClick += MyGUI::newDelegate(this, &State::notifyMouseButtonClick); 30 mButton2->eventMouseButtonClick += MyGUI::newDelegate(this, &State::notifyMouseButtonClick); 31 mButton3->eventMouseButtonClick += MyGUI::newDelegate(this, &State::notifyMouseButtonClick); 32 mButton4->eventMouseButtonClick += MyGUI::newDelegate(this, &State::notifyMouseButtonClick); 33 } 34 ~State()35 State::~State() 36 { 37 FrameAdvise(false); 38 } 39 setVisible(bool _visible)40 void State::setVisible(bool _visible) 41 { 42 if (_visible) 43 { 44 mMainWidget->setVisible(false); 45 mButton1->setVisible(false); 46 mButton2->setVisible(false); 47 mButton3->setVisible(false); 48 mButton4->setVisible(false); 49 50 MyGUI::LayerManager::getInstance().upLayerItem(mMainWidget); 51 MyGUI::LayerManager::getInstance().upLayerItem(mButton1); 52 MyGUI::LayerManager::getInstance().upLayerItem(mButton2); 53 MyGUI::LayerManager::getInstance().upLayerItem(mButton3); 54 MyGUI::LayerManager::getInstance().upLayerItem(mButton4); 55 56 FrameAdvise(true); 57 mCountTime = 0; 58 } 59 else 60 { 61 MyGUI::ControllerManager& manager = MyGUI::ControllerManager::getInstance(); 62 63 MyGUI::ControllerFadeAlpha* controller = createControllerFadeAlpha(0, 3, true); 64 manager.addItem(mMainWidget, controller); 65 66 controller = createControllerFadeAlpha(0, 3, true); 67 manager.addItem(mButton1, controller); 68 controller = createControllerFadeAlpha(0, 3, true); 69 manager.addItem(mButton2, controller); 70 controller = createControllerFadeAlpha(0, 3, true); 71 manager.addItem(mButton3, controller); 72 controller = createControllerFadeAlpha(0, 3, true); 73 manager.addItem(mButton4, controller); 74 } 75 } 76 notifyMouseButtonClick(MyGUI::Widget * _sender)77 void State::notifyMouseButtonClick(MyGUI::Widget* _sender) 78 { 79 if (_sender == mButton1) eventButtonPress(ControllerType::Inertional, false); 80 else if (_sender == mButton2) eventButtonPress(ControllerType::Accelerated, false); 81 else if (_sender == mButton3) eventButtonPress(ControllerType::Slowed, false); 82 else if (_sender == mButton4) eventButtonPress(ControllerType::Jump, false); 83 } 84 notifyFrameEvent(float _time)85 void State::notifyFrameEvent(float _time) 86 { 87 mCountTime += _time; 88 89 const int offset = 30; 90 const float time_diff = 0.3f; 91 const MyGUI::IntSize& view = MyGUI::RenderManager::getInstance().getViewSize(); 92 93 if (!mMainWidget->getVisible()) 94 { 95 mMainWidget->setPosition(-mMainWidget->getWidth(), view.height - mMainWidget->getHeight() - offset); 96 mMainWidget->setVisible(true); 97 mMainWidget->setAlpha(1); 98 99 MyGUI::IntPoint point(offset, view.height - mMainWidget->getHeight() - offset); 100 MyGUI::ControllerManager::getInstance().addItem(mMainWidget, createControllerPosition(point)); 101 } 102 103 if (!mButton1->getVisible()) 104 { 105 mButton1->setPosition(view.width, offset); 106 mButton1->setVisible(true); 107 mButton1->setAlpha(1); 108 MyGUI::IntPoint point(view.width - mButton1->getWidth() - offset, offset); 109 MyGUI::ControllerManager::getInstance().addItem(mButton1, createControllerPosition(point)); 110 } 111 112 if (mCountTime > time_diff) 113 { 114 if (!mButton2->getVisible()) 115 { 116 mButton2->setPosition(view.width, (mButton2->getHeight() + offset) + offset); 117 mButton2->setVisible(true); 118 mButton2->setAlpha(1); 119 MyGUI::IntPoint point(view.width - mButton1->getWidth() - offset, (mButton2->getHeight() + offset) + offset); 120 MyGUI::ControllerManager::getInstance().addItem(mButton2, createControllerPosition(point)); 121 } 122 } 123 124 if (mCountTime > time_diff * 2) 125 { 126 if (!mButton3->getVisible()) 127 { 128 mButton3->setPosition(view.width, (mButton3->getHeight() + offset) * 2 + offset); 129 mButton3->setVisible(true); 130 mButton3->setAlpha(1); 131 MyGUI::IntPoint point(view.width - mButton3->getWidth() - offset, (mButton3->getHeight() + offset) * 2 + offset); 132 MyGUI::ControllerManager::getInstance().addItem(mButton3, createControllerPosition(point)); 133 } 134 } 135 136 if (mCountTime > time_diff * 3) 137 { 138 if (!mButton4->getVisible()) 139 { 140 mButton4->setPosition(view.width, (mButton4->getHeight() + offset) * 3 + offset); 141 mButton4->setVisible(true); 142 mButton4->setAlpha(1); 143 MyGUI::IntPoint point(view.width - mButton4->getWidth() - offset, (mButton4->getHeight() + offset) * 3 + offset); 144 MyGUI::ControllerPosition* controller = createControllerPosition(point); 145 MyGUI::ControllerManager::getInstance().addItem(mButton4, controller); 146 controller->eventPostAction += MyGUI::newDelegate(this, &State::notifyPostAction); 147 } 148 149 FrameAdvise(false); 150 } 151 } 152 notifyPostAction(MyGUI::Widget * _sender,MyGUI::ControllerItem * _controller)153 void State::notifyPostAction(MyGUI::Widget* _sender, MyGUI::ControllerItem* _controller) 154 { 155 eventButtonPress(ControllerType::Slowed, true); 156 } 157 FrameAdvise(bool _advise)158 void State::FrameAdvise(bool _advise) 159 { 160 if (_advise) 161 { 162 if (!mFrameAdvise) 163 { 164 mFrameAdvise = true; 165 MyGUI::Gui::getInstance().eventFrameStart += MyGUI::newDelegate(this, &State::notifyFrameEvent); 166 } 167 } 168 else 169 { 170 if (mFrameAdvise) 171 { 172 mFrameAdvise = false; 173 MyGUI::Gui::getInstance().eventFrameStart -= MyGUI::newDelegate(this, &State::notifyFrameEvent); 174 } 175 } 176 } 177 createControllerPosition(const MyGUI::IntPoint & _point)178 MyGUI::ControllerPosition* State::createControllerPosition(const MyGUI::IntPoint& _point) 179 { 180 MyGUI::ControllerItem* item = MyGUI::ControllerManager::getInstance().createItem(MyGUI::ControllerPosition::getClassTypeName()); 181 MyGUI::ControllerPosition* controller = item->castType<MyGUI::ControllerPosition>(); 182 183 controller->setPosition(_point); 184 controller->setTime(0.5); 185 186 if (mType == ControllerType::Inertional) controller->setAction(MyGUI::newDelegate(MyGUI::action::inertionalMoveFunction)); 187 else if (mType == ControllerType::Accelerated) controller->setAction(MyGUI::newDelegate(MyGUI::action::acceleratedMoveFunction<30>)); 188 else if (mType == ControllerType::Slowed) controller->setAction(MyGUI::newDelegate(MyGUI::action::acceleratedMoveFunction<4>)); 189 else controller->setAction(MyGUI::newDelegate(MyGUI::action::jumpMoveFunction<5>)); 190 191 return controller; 192 } 193 createControllerFadeAlpha(float _alpha,float _coef,bool _enable)194 MyGUI::ControllerFadeAlpha* State::createControllerFadeAlpha(float _alpha, float _coef, bool _enable) 195 { 196 MyGUI::ControllerItem* item = MyGUI::ControllerManager::getInstance().createItem(MyGUI::ControllerFadeAlpha::getClassTypeName()); 197 MyGUI::ControllerFadeAlpha* controller = item->castType<MyGUI::ControllerFadeAlpha>(); 198 199 controller->setAlpha(_alpha); 200 controller->setCoef(_coef); 201 controller->setEnabled(_enable); 202 203 return controller; 204 } 205 getClient()206 MyGUI::Widget* State::getClient() 207 { 208 return mMainWidget->getClientWidget(); 209 } 210 211 } // namespace demo 212