DayZ 1.27
DayZ Explorer by KGB
 
Загрузка...
Поиск...
Не найдено

◆ Refresh()

void Refresh ( bool hide_selector = true)
protected

См. определение в файле RadialMenu.c строка 228

229 {
230 int item_cards_count = GetItemCardsCount();
231 if (item_cards_count > 0)
232 m_AngleRadOffset = 2 * Math.PI / item_cards_count;
233 float angle_rad = -Math.PI / 2;
234
235 //--PARAM top offset--
236 if (m_OffsetFromTop != 0)
237 {
238 angle_rad = angle_rad + m_OffsetFromTop;
239 }
240 //--------------------
241
242 //delete all delimiters
243 Widget delimiters_panel = m_Parent.FindAnyWidget(RADIAL_DELIMITER_CONTAINER);
244 if (delimiters_panel)
245 {
246 Widget del_child = delimiters_panel.GetChildren();
247 while (del_child)
248 {
249 Widget child_to_destroy1 = del_child;
250 del_child = del_child.GetSibling();
251
252 delete child_to_destroy1;
253 }
254 }
255
256 //Position item cards, crate radial delimiters
257 Widget item_cards_panel = m_Parent.FindAnyWidget(RADIAL_ITEM_CARD_CONTAINER);
258 Widget item_card = item_cards_panel.GetChildren();
259
260 //get radius
261 float original_r = GetRadius();
262 float item_cards_r = original_r;
263
264 //--PARAM top offset--....
265 if (m_ItemCardRadiusOffset != 0)
266 {
267 item_cards_r = item_cards_r * m_ItemCardRadiusOffset;
268 if (item_cards_r < 0) item_cards_r = 0; //min radius is 0
269 }
270
271 m_RadialItemCards.Clear();
272 for (int i = 0; i < item_cards_count; ++i)
273 {
274 //position item cards
275 if (item_card)
276 {
277 //creates circle from simple widget items
278 float pos_x = item_cards_r * Math.Cos(angle_rad);
279 float pos_y = item_cards_r * Math.Sin(angle_rad);
280
281 pos_x = pos_x / original_r;
282 pos_y = pos_y / original_r;
283
284 item_card.SetPos(pos_x, pos_y);
285
286 //store item card
287 m_RadialItemCards.Insert(item_card, angle_rad);
288
289 //get next child
290 item_card = item_card.GetSibling();
291 }
292 //-------------------------
293
294 //create delimiter
295 if (item_cards_count > 1 && delimiters_panel && m_DelimiterLayout)
296 {
297 Widget delimiter_widget = GetGame().GetWorkspace().CreateWidgets(m_DelimiterLayout, delimiters_panel);
298 float delim_angle_rad = angle_rad + (m_AngleRadOffset / 2);
299 delimiter_widget.SetPos(0, 0);
300 delimiter_widget.SetRotation(0, 0, GetAngleInDegrees(delim_angle_rad) + 90);
301 }
302
303 //calculate next angle
304 angle_rad += m_AngleRadOffset;
305 }
306
307 //hide selector on refresh
308 if (hide_selector)
309 {
311 }
312 }
ref map< Widget, float > m_RadialItemCards
Определения RadialMenu.c:17
static const string RADIAL_ITEM_CARD_CONTAINER
Определения RadialMenu.c:27
float m_AngleRadOffset
Определения RadialMenu.c:19
void HideRadialSelector()
Определения RadialMenu.c:346
string m_DelimiterLayout
Определения RadialMenu.c:52
float m_ItemCardRadiusOffset
Определения RadialMenu.c:51
float m_OffsetFromTop
Определения RadialMenu.c:50
int GetItemCardsCount()
Определения RadialMenu.c:357
float GetRadius()
Определения RadialMenu.c:372
static const string RADIAL_DELIMITER_CONTAINER
Определения RadialMenu.c:26
float GetAngleInDegrees(float rad_angle)
Определения RadialMenu.c:498
Widget m_Parent
Определения SizeToChild.c:92
proto native WorkspaceWidget GetWorkspace()
Определения EnMath.c:7
Определения EnWidgets.c:190
proto native CGame GetGame()
static proto float Cos(float angle)
Returns cosinus of angle in radians.
static proto float Sin(float angle)
Returns sinus of angle in radians.
static const float PI
Определения EnMath.c:12
proto native external Widget CreateWidgets(string layout, Widget parentWidget=NULL, bool immedUpdate=true)
Create widgets from *.layout file.

Перекрестные ссылки Math::Cos(), WorkspaceWidget::CreateWidgets(), GetAngleInDegrees(), GetGame(), GetItemCardsCount(), GetRadius(), CGame::GetWorkspace(), HideRadialSelector(), m_AngleRadOffset, m_DelimiterLayout, m_ItemCardRadiusOffset, m_OffsetFromTop, m_Parent, m_RadialItemCards, Math::PI, RADIAL_DELIMITER_CONTAINER, RADIAL_ITEM_CARD_CONTAINER и Math::Sin().