23 return this._ID = base.name.Replace(
"Widget",
"").Replace(
"(Clone)",
"");
36 if ((result = this._config) ==
null)
38 result = (this._config =
EMono.player.widgets.dict[this.ID]);
46 public SkinRoot skinRoot
51 if ((result = this._skinRoot) ==
null)
53 result = (this._skinRoot = base.GetComponent<SkinRoot>());
65 return this.config.meta.system && !
EMono.core.config.test.unsealWidgets;
71 public virtual bool ShowStyleMenu
81 public virtual bool AlwaysTop
91 public virtual bool IsStaticPosition
101 public virtual bool AlwaysBottom
111 public virtual Type SetSiblingAfter
121 public virtual bool ShowInBuildMode
125 return this.config.mode.HasFlag(GameMode.Build);
131 public virtual bool RightClickToClose
135 return this.config.RC;
141 public virtual bool AllowRightClickToClose
150 public bool IsInRightMode()
152 return (
EMono.scene.actionMode.ShowBuildWidgets &&
this.ShowInBuildMode) || this.config.IsInRightMode();
156 public void Activate()
158 this._rect = this.Rect();
159 this.config.state =
Widget.State.Active;
160 if (this.config.extra ==
null)
162 this.config.extra = this.CreateExtra();
166 this.dragPanel = base.GetComponentInChildren<UIDragPanel>();
168 if (this.IsStaticPosition)
170 this.dragPanel.enable =
false;
174 this.dragPanel.autoAnchor = (this.config.userAnchor == RectPosition.Auto);
175 if (this.config.userAnchor != RectPosition.Auto)
177 this._rect.SetAnchor(this.config.userAnchor);
181 this._rect.SetAnchor(this.config.anchor);
183 this._rect.anchoredPosition =
new Vector2(this.config.x,
this.config.y);
184 this.dragPanel.onDrag =
new Action(this.OnChangePosition);
186 this.SetPivot(this.config.pivot);
192 this.flip = (this._rect.position.x > (float)Screen.width * 0.5f);
194 this.OnChangePosition();
195 this.ClampToScreen();
196 foreach (SkinDeco deco
in this.config.skin.decos)
198 this.InstantiateDeco(deco);
203 public virtual void OnActivate()
208 public virtual object CreateExtra()
214 public void Deactivate()
217 this.config.state =
Widget.State.Inactive;
219 UnityEngine.Object.DestroyImmediate(base.gameObject);
223 public virtual void OnDeactivate()
230 EMono.ui.widgets.DeactivateWidget(
this);
234 public void Reactivate()
236 EMono.ui.widgets.DeactivateWidget(
this);
237 EMono.ui.widgets.ActivateWidget(this.config);
241 public virtual void OnManagerActivate()
243 this.goCover = Util.Instantiate(
"UI/Widget/CoverWidget", base.transform).gameObject;
244 RectTransform rectTransform = this.goCover.transform.Rect();
245 RectTransform rectTransform2 = this.dragPanel.Rect();
246 rectTransform.pivot = rectTransform2.pivot;
247 rectTransform.anchorMin = rectTransform2.anchorMin;
248 rectTransform.anchorMax = rectTransform2.anchorMax;
249 rectTransform.anchoredPosition = rectTransform2.anchoredPosition;
250 rectTransform.sizeDelta = rectTransform2.sizeDelta;
251 UIDragPanel componentInChildren = this.goCover.GetComponentInChildren<UIDragPanel>();
252 componentInChildren.autoAnchor = (this.config.userAnchor == RectPosition.Auto);
253 componentInChildren.onDrag =
new Action(this.OnChangePosition);
254 componentInChildren.container = this.dragPanel.container;
255 componentInChildren.target = this.dragPanel.target;
256 componentInChildren.bound = this.dragPanel.bound;
259 componentInChildren.enable =
false;
261 this.goCover.GetComponentInChildren<UIText>().SetText((
"Widget" + this.ID).lang());
265 public virtual void OnManagerDeactivate()
267 UnityEngine.Object.DestroyImmediate(this.goCover);
271 public void SetAnchor(RectPosition p)
273 this.config.userAnchor = p;
274 this.dragPanel.autoAnchor = (p == RectPosition.Auto);
275 this._rect.SetAnchor(p);
279 public void SetPivot(RectPosition p)
281 this.config.pivot = p;
282 RectTransform rectTransform = this.Rect();
283 Vector3 position = base.transform.position;
286 case RectPosition.TopLEFT:
287 rectTransform.pivot =
new Vector2(0f, 1f);
289 case RectPosition.TopCenter:
290 rectTransform.pivot =
new Vector2(0.5f, 1f);
292 case RectPosition.TopRIGHT:
293 rectTransform.pivot =
new Vector2(1f, 1f);
295 case RectPosition.Left:
296 rectTransform.pivot =
new Vector2(0f, 0.5f);
298 case RectPosition.Right:
299 rectTransform.pivot =
new Vector2(1f, 0.5f);
301 case RectPosition.BottomLEFT:
302 rectTransform.pivot =
new Vector2(0f, 0f);
304 case RectPosition.BottomCenter:
305 rectTransform.pivot =
new Vector2(0.5f, 0f);
307 case RectPosition.BottomRIGHT:
308 rectTransform.pivot =
new Vector2(1f, 0f);
311 rectTransform.pivot =
new Vector2(0.5f, 0.5f);
313 base.transform.position = position;
314 this.OnChangePivot();
315 this.ClampToScreen();
319 public virtual void OnChangePivot()
324 public void UpdateConfig()
326 this.config.anchor = this._rect.GetAnchor();
327 this.config.x = this._rect.anchoredPosition.x;
328 this.config.y = this._rect.anchoredPosition.y;
329 this.OnUpdateConfig();
333 public virtual void OnUpdateConfig()
338 protected void ClampToScreenEnsured(Component c, Vector2 anchoredPos)
340 RectTransform rectTransform = c.Rect();
341 rectTransform.anchoredPosition = anchoredPos;
342 rectTransform.RebuildLayout(
false);
343 rectTransform.ForceUpdateRectTransforms();
344 this.ClampToScreen(rectTransform, 10f);
345 rectTransform.anchoredPosition = anchoredPos;
346 rectTransform.RebuildLayout(
false);
347 rectTransform.ForceUpdateRectTransforms();
348 this.ClampToScreen(rectTransform, 10f);
352 public void ClampToScreen()
354 this.ClampToScreen(this.Rect(), 10f);
358 protected void ClampToScreen(RectTransform rect,
float margin = 10f)
360 if (this.IsStaticPosition || this.config.userAnchor != RectPosition.Auto)
364 Vector3 position = rect.position;
365 Vector2 a =
new Vector2(margin, margin);
366 Vector2 a2 =
new Vector2((
float)Screen.width - margin, (
float)Screen.height - margin);
367 Vector3 vector = a - rect.rect.min;
368 Vector3 vector2 = a2 - rect.rect.max;
369 position.x = (float)((
int)Mathf.Clamp(position.x, vector.x - 20f, vector2.x + 20f));
370 position.y = (float)((
int)Mathf.Clamp(position.y, vector.y - 20f, vector2.y + 20f));
371 rect.position = position;
375 public virtual void OnChangeResolution()
377 this.ClampToScreen(this.Rect(), 10f);
381 public void OnChangePosition()
383 bool flag = this.Rect().position.x > (float)Screen.width * 0.5f;
384 if (this.flip != flag)
389 this.RefreshTipPivotPosition();
393 public virtual void OnChangeActionMode()
395 this.SetActive(this.IsInRightMode());
399 public virtual void OnFlip()
404 public bool IsAlignTop()
406 RectPosition anchor = this.Rect().GetAnchor();
407 return anchor == RectPosition.TopCenter || anchor == RectPosition.TopLEFT || anchor == RectPosition.TopRIGHT;
411 public Layer AddLayer(Layer l, Transform trans)
413 l.OnBeforeAddLayer();
414 l.gameObject.SetActive(
true);
415 l.transform.SetParent(trans,
false);
418 Window window = l.windows[0];
419 RectTransform rectTransform = l.Rect();
420 RectTransform rectTransform2 = window.Rect();
421 rectTransform.sizeDelta = window.Rect().sizeDelta;
422 rectTransform.SetPivot(0.5f, 0.5f);
423 rectTransform.SetAnchor(0.5f, 0.5f, 0.5f, 0.5f);
424 rectTransform2.SetPivot(0.5f, 0.5f);
425 rectTransform2.SetAnchor(0.5f, 0.5f, 0.5f, 0.5f);
426 rectTransform2.anchoredPosition = Vector2.zero;
427 window.setting.allowMove = (window.setting.allowResize =
false);
428 window.setting.saveWindow =
false;
429 window.bgCollider.SetActive(
false);
434 public void RefreshTipPivotPosition()
436 bool flag = (float)(Screen.width / 2 - 40) > base.transform.position.x;
437 if (this.tipPivotLeft)
439 this.tipPivotLeft.SetActive(!flag || !this.tipPivotRight);
441 if (this.tipPivotRight)
443 this.tipPivotRight.SetActive(flag || !this.tipPivotLeft);
448 public SkinSet GetSkin()
450 return SkinManager.Instance.skinSets[this.config.skin.id];
454 public SkinConfig GetSkinConfig()
456 return this.config.skin;
460 public void SetSkin(
int id,
int v = 0)
462 SkinConfig skin = this.config.skin;
469 skin.bgColor = skin.BG.color;
474 public void TestSkin()
476 this.config.skin.SetID();
481 public virtual void ApplySkin()
483 SkinRoot component = base.GetComponent<SkinRoot>();
489 IUISkin[] componentsInChildren = base.GetComponentsInChildren<IUISkin>(
true);
490 for (
int i = 0; i < componentsInChildren.Length; i++)
492 componentsInChildren[i].ApplySkin();
498 public virtual void OnApplySkin()
503 public void InstantiateDeco(SkinDeco deco)
505 SkinDecoActor skinDecoActor = Util.Instantiate<SkinDecoActor>(
"UI/Widget/SkinDecoActor", base.transform);
506 deco.actor = skinDecoActor;
507 skinDecoActor.owner = deco;
508 skinDecoActor.image.sprite = ResourceCache.Load<Sprite>(
"Media/Graphics/Deco/deco" + deco.id.ToString());
509 skinDecoActor.Rect().anchoredPosition =
new Vector2((
float)deco.x, (
float)deco.y);
510 skinDecoActor.Refresh();
514 public void AddDeco(SkinDeco deco)
516 this.config.skin.decos.Add(deco);
517 this.InstantiateDeco(deco);
521 public void RemoveDeco(SkinDeco deco)
523 this.config.skin.decos.Remove(deco);
524 UnityEngine.Object.DestroyImmediate(deco.actor.gameObject);
528 public virtual bool CanShowContextMenu()
534 public void ShowContextMenu()
536 UIContextMenu uicontextMenu =
EMono.ui.CreateContextMenu(
"ContextMenu");
537 this.OnSetContextMenu(uicontextMenu);
538 uicontextMenu.Show();
542 public void SetBaseContextMenu(UIContextMenu m)
544 UIContextMenu uicontextMenu = m.AddChild(
"anchor");
545 SkinConfig cfg = this.config.skin;
546 using (List<RectPosition>.Enumerator enumerator = Util.EnumToList<RectPosition>().GetEnumerator())
548 while (enumerator.MoveNext())
550 RectPosition p = enumerator.Current;
551 uicontextMenu.AddButton(((this.config.userAnchor == p) ?
"★ " :
"") + p.ToString().lang(), delegate()
559 uicontextMenu = m.AddChild(
"pivot");
560 using (List<RectPosition>.Enumerator enumerator = Util.EnumToList<RectPosition>().GetEnumerator())
562 while (enumerator.MoveNext())
564 RectPosition p = enumerator.Current;
565 uicontextMenu.AddButton(((this.config.pivot == p) ?
"★ " :
"") + p.ToString().lang(), delegate()
573 UIContextMenuItem sliderB =
null;
574 Action Refresh = delegate()
576 int num =
EMono.ui.skins.skinSets[cfg.id].bgs.Count - 1;
577 sliderB.slider.maxValue = (float)num;
578 sliderB.slider.value = (float)cfg.bg;
579 sliderB.textSlider.text = cfg.bg.ToString() +
"/" + (
EMono.ui.skins.skinSets[cfg.id].bgs.Count - 1).ToString();
581 if (this.ShowStyleMenu)
583 UIContextMenu uicontextMenu2 = m.AddOrGetChild(
"style");
584 sliderB = uicontextMenu2.AddSlider(
"changeBG", (
float n) => n.ToString() +
"/" + (
EMono.ui.skins.skinSets[cfg.id].bgs.Count - 1).ToString(), (
float)cfg.bg, delegate(
float a)
586 this.SetSkin(cfg.id, (
int)a);
588 }, 0f, (float)(
EMono.ui.skins.skinSets[cfg.id].bgs.Count - 1),
true,
true,
false);
589 uicontextMenu2.AddSlider(
"bgSize", (
float n) => n.ToString() ??
"", (
float)cfg.bgSize, delegate(
float a)
593 }, -50f, 50f,
true,
true,
false);
594 Action<PickerState, Color> <>9__13;
595 uicontextMenu2.AddButton(
"colorBG", delegate()
597 if (
EMono.ui.skins.skinSets[cfg.id].bgs[cfg.bg].redirect != SkinAssetRedirect.None)
603 Color bgColor = cfg.bgColor;
604 Color color =
EMono.ui.skins.skinSets[cfg.id].bgs[cfg.bg].color;
605 Action<PickerState, Color> onChangeColor;
606 if ((onChangeColor = <>9__13) ==
null)
608 onChangeColor = (<>9__13 = delegate(PickerState state, Color _c)
614 layerColorPicker.SetColor(bgColor, color, onChangeColor);
616 uicontextMenu2.AddButton(
"editDeco", delegate()
621 if (this.AllowRightClickToClose)
623 m.AddToggle(
"RC_widget", this.config.RC, delegate(
bool a)
628 m.AddButton(() => (this.config.locked ?
"unlockWidget" :
"lockWidget").lang(), delegate()
630 EMono.ui.widgets.ToggleLock(this.config);
642 m.AddButton(
"closeWidget", delegate()
644 EMono.ui.widgets.DeactivateWidget(
this);
656 public virtual void OnSetContextMenu(UIContextMenu m)
658 this.SetBaseContextMenu(m);
662 public void SetGridContextMenu(UIContextMenu m)
664 SkinConfig cfg = this.config.skin;
665 m.AddSlider(
"skinGrid", (
float n) => n.ToString() ??
"", (
float)cfg.grid, delegate(
float a)
668 cfg.gridColor = cfg.Grid.color;
670 }, 0f, (float)(cfg.Skin.bgGrid.Count - 1),
true,
true,
false);
671 Action<PickerState, Color> <>9__3;
672 m.AddButton(
"colorGrid", delegate()
675 Color gridColor = cfg.gridColor;
676 Color color = cfg.Grid.color;
677 Action<PickerState, Color> onChangeColor;
678 if ((onChangeColor = <>9__3) ==
null)
680 onChangeColor = (<>9__3 = delegate(PickerState state, Color _c)
686 layerColorPicker.SetColor(gridColor, color, onChangeColor);
691 public void SoundActivate()
693 EMono.Sound.Play(this.soundActivate);
703 public Image imageBG;
706 public SoundData soundActivate;
709 public UIDragPanel dragPanel;
712 private RectTransform _rect;
715 public RectTransform tipPivotLeft;
718 public RectTransform tipPivotRight;
721 private SkinRoot _skinRoot;
727 private GameObject goCover;
734 public override string ToString()
749 public bool debugOnly;
755 public Widget.WidgetType type;
758 public GameMode mode;
762 public enum WidgetType
780 return this.meta.mode;
791 return this.IsSystem && !
EMono.core.config.test.unsealWidgets;
802 return this.meta.system || this.annoyPlayer;
807 public bool IsInRightMode()
810 if (actionMode.ShowBuildWidgets)
812 return this.mode.HasFlag(GameMode.Build);
816 return this.mode.HasFlag(GameMode.NoMap);
820 return this.mode.HasFlag(GameMode.Bird);
824 return this.mode.HasFlag(GameMode.Sim);
828 return this.mode.HasFlag(GameMode.EloMap);
830 return (
ActionMode.IsAdv ||
ActionMode.DefaultMode ==
ActionMode.View) && (actionMode != ActionMode.Region || this.mode.HasFlag(GameMode.EloMap)) && (ActionMode.Adv.zoomOut || this.meta.type !=
Widget.WidgetType.ZoomMenu) && this.mode.HasFlag(GameMode.Adv);
834 public Widget.State state;
837 public RectPosition anchor;
840 public RectPosition userAnchor;
843 public RectPosition pivot = RectPosition.Center;
849 public string titleLang;
867 public SkinConfig skin =
new SkinConfig();
875 public bool annoyPlayer;