MyGUI  3.4.0
MyGUI_ControllerPosition.cpp
Go to the documentation of this file.
1 /*
2  * This source file is part of MyGUI. For the latest info, see http://mygui.info/
3  * Distributed under the MIT License
4  * (See accompanying file COPYING.MIT or copy at http://opensource.org/licenses/MIT)
5  */
6 
7 #include "MyGUI_Precompiled.h"
9 #include "MyGUI_Gui.h"
10 #include "MyGUI_InputManager.h"
11 #include "MyGUI_WidgetManager.h"
12 #include "MyGUI_Widget.h"
13 #include "MyGUI_ActionController.h"
14 
15 namespace MyGUI
16 {
17 
19  mTime(1),
20  mElapsedTime(0),
21  mCalcPosition(false),
22  mCalcSize(false)
23  {
24  }
25 
26  void ControllerPosition::setCoord(const IntCoord& _destCoord)
27  {
28  mDestCoord = _destCoord;
29  mCalcPosition = true;
30  mCalcSize = true;
31  }
32 
33  void ControllerPosition::setSize(const IntSize& _destSize)
34  {
35  mDestCoord.width = _destSize.width;
36  mDestCoord.height = _destSize.height;
37  mCalcPosition = false;
38  mCalcSize = true;
39  }
40 
41  void ControllerPosition::setPosition(const IntPoint& _destPoint)
42  {
43  mDestCoord.left = _destPoint.left;
44  mDestCoord.top = _destPoint.top;
45  mCalcPosition = true;
46  mCalcSize = false;
47  }
48 
50  {
51  MYGUI_DEBUG_ASSERT(mTime > 0, "Time must be > 0");
52 
53  mStartCoord = _widget->getCoord();
54 
55  // вызываем пользовательский делегат для подготовки
56  eventPreAction(_widget, this);
57  }
58 
59  bool ControllerPosition::addTime(Widget* _widget, float _time)
60  {
61  mElapsedTime += _time;
62 
63  if (mElapsedTime < mTime)
64  {
65  IntCoord coord;
66  eventFrameAction(mStartCoord, mDestCoord, coord, mElapsedTime / mTime);
67  if (mCalcPosition)
68  {
69  if (mCalcSize) _widget->setCoord(coord);
70  else _widget->setPosition(coord.point());
71  }
72  else if (mCalcSize) _widget->setSize(coord.size());
73 
74  // вызываем пользовательский делегат обновления
75  eventUpdateAction(_widget, this);
76 
77  return true;
78  }
79 
80  // поставить точно в конец
81  IntCoord coord;
82  eventFrameAction(mStartCoord, mDestCoord, coord, 1.0f);
83  if (mCalcPosition)
84  {
85  if (mCalcSize) _widget->setCoord(coord);
86  else _widget->setPosition(coord.point());
87  }
88  else if (mCalcSize) _widget->setSize(coord.size());
89 
90  // вызываем пользовательский делегат обновления
91  eventUpdateAction(_widget, this);
92 
93  // вызываем пользовательский делегат пост обработки
94  eventPostAction(_widget, this);
95 
96  return false;
97  }
98 
99  void ControllerPosition::setProperty(const std::string& _key, const std::string& _value)
100  {
101  if (_key == "Time")
102  setTime(utility::parseValue<float>(_value));
103  else if (_key == "Coord")
104  setCoord(utility::parseValue<IntCoord>(_value));
105  else if (_key == "Size")
106  setSize(utility::parseValue<IntSize>(_value));
107  else if (_key == "Position")
108  setPosition(utility::parseValue<IntPoint>(_value));
109  else if (_key == "Function")
110  setFunction(_value);
111  }
112 
113  void ControllerPosition::setFunction(const std::string& _value)
114  {
115  if (_value == "Inertional")
117  else if (_value == "Accelerated")
118  setAction(MyGUI::newDelegate(action::acceleratedMoveFunction<30>));
119  else if (_value == "Slowed")
120  setAction(MyGUI::newDelegate(action::acceleratedMoveFunction<4>));
121  else if (_value == "Jump")
122  setAction(MyGUI::newDelegate(action::jumpMoveFunction<5>));
123  }
124 
125  void ControllerPosition::setTime(float _value)
126  {
127  mTime = _value;
128  }
129 
131  {
132  eventFrameAction = _value;
133  }
134 
135 } // namespace MyGUI
MyGUI_Gui.h
MyGUI::ControllerPosition::setProperty
void setProperty(const std::string &_key, const std::string &_value) override
Definition: MyGUI_ControllerPosition.cpp:99
MyGUI::types::TSize::height
T height
Definition: MyGUI_TSize.h:21
MyGUI::Widget::setPosition
void setPosition(const IntPoint &_value) override
Definition: MyGUI_Widget.cpp:630
MyGUI::ControllerPosition::setPosition
void setPosition(const IntPoint &_value)
Definition: MyGUI_ControllerPosition.cpp:41
MyGUI::types::TCoord::left
T left
Definition: MyGUI_TCoord.h:22
MyGUI_Widget.h
MyGUI::types::TPoint::top
T top
Definition: MyGUI_TPoint.h:21
MyGUI::delegates::DelegateFunction
Definition: MyGUI_Delegate.h:42
MyGUI::types::TCoord::top
T top
Definition: MyGUI_TCoord.h:23
MyGUI::Widget
Widget properties. Skin childs. Widget widget description should be here.
Definition: MyGUI_Widget.h:37
MyGUI::types::TPoint< int >
MyGUI::types::TSize::width
T width
Definition: MyGUI_TSize.h:20
MyGUI::ControllerPosition::setAction
void setAction(FrameAction::IDelegate *_value)
Definition: MyGUI_ControllerPosition.cpp:130
MyGUI::action::inertionalMoveFunction
void inertionalMoveFunction(const IntCoord &_startRect, const IntCoord &_destRect, IntCoord &_result, float _current_time)
Definition: MyGUI_ActionController.cpp:42
MyGUI::newDelegate
delegates::DelegateFunction< Args... > * newDelegate(void(*_func)(Args... args))
Definition: MyGUI_Delegate.h:99
MyGUI_Precompiled.h
MyGUI_ControllerPosition.h
MyGUI::ControllerItem::eventUpdateAction
EventPairAddParameter< EventHandle_WidgetPtr, EventHandle_WidgetPtrControllerItemPtr > eventUpdateAction
Definition: MyGUI_ControllerItem.h:48
MyGUI_InputManager.h
MyGUI::types::TPoint::left
T left
Definition: MyGUI_TPoint.h:20
MyGUI::ICroppedRectangle::getCoord
const IntCoord & getCoord() const
Definition: MyGUI_ICroppedRectangle.h:61
MyGUI::ControllerPosition::prepareItem
void prepareItem(Widget *_widget) override
Definition: MyGUI_ControllerPosition.cpp:49
MyGUI::Widget::setSize
void setSize(const IntSize &_value) override
Definition: MyGUI_Widget.cpp:647
MyGUI_WidgetManager.h
MyGUI::ControllerItem::eventPostAction
EventPairAddParameter< EventHandle_WidgetPtr, EventHandle_WidgetPtrControllerItemPtr > eventPostAction
Definition: MyGUI_ControllerItem.h:54
MyGUI::ControllerPosition::setCoord
void setCoord(const IntCoord &_value)
Definition: MyGUI_ControllerPosition.cpp:26
MyGUI::ControllerPosition::setTime
void setTime(float _value)
Definition: MyGUI_ControllerPosition.cpp:125
MyGUI::types::TSize< int >
MyGUI::Widget::setCoord
void setCoord(const IntCoord &_value) override
Definition: MyGUI_Widget.cpp:684
MyGUI::types::TCoord::point
TPoint< T > point() const
Definition: MyGUI_TCoord.h:185
MyGUI::types::TCoord::width
T width
Definition: MyGUI_TCoord.h:24
MyGUI_ActionController.h
MyGUI::ControllerPosition::ControllerPosition
ControllerPosition()
Definition: MyGUI_ControllerPosition.cpp:18
MyGUI::ControllerPosition::addTime
bool addTime(Widget *_widget, float _time) override
Definition: MyGUI_ControllerPosition.cpp:59
MyGUI::types::TCoord< int >
MyGUI::types::TCoord::height
T height
Definition: MyGUI_TCoord.h:25
MyGUI
Definition: MyGUI_ActionController.h:15
MYGUI_DEBUG_ASSERT
#define MYGUI_DEBUG_ASSERT(exp, dest)
Definition: MyGUI_Diagnostic.h:58
MyGUI::types::TCoord::size
TSize< T > size() const
Definition: MyGUI_TCoord.h:190
MyGUI::ControllerPosition::setSize
void setSize(const IntSize &_value)
Definition: MyGUI_ControllerPosition.cpp:33
MyGUI::ControllerPosition::setFunction
void setFunction(const std::string &_value)
Definition: MyGUI_ControllerPosition.cpp:113
MyGUI::ControllerItem::eventPreAction
EventPairAddParameter< EventHandle_WidgetPtr, EventHandle_WidgetPtrControllerItemPtr > eventPreAction
Definition: MyGUI_ControllerItem.h:42