Survivalcraft API 1.8.2.3 v1.8.2.3
Survivalcraft 2.4
载入中...
搜索中...
未找到
DragHostWidget.cs
浏览该文件的文档.
1using Engine;
2
3namespace Game {
6
7 public object m_dragData;
8
9 public Action m_dragEndedHandler;
10
12
13 public bool IsDragInProgress => m_dragWidget != null;
14
15 public DragHostWidget() => IsHitTestVisible = false;
16
17 public void BeginDrag(Widget dragWidget, object dragData, Action dragEndedHandler) {
18 if (m_dragWidget == null) {
19 m_dragWidget = dragWidget;
20 m_dragData = dragData;
21 m_dragEndedHandler = dragEndedHandler;
24 }
25 }
26
27 public void EndDrag() {
28 if (m_dragWidget != null) {
29 Children.Remove(m_dragWidget);
30 m_dragWidget = null;
31 m_dragData = null;
32 if (m_dragEndedHandler != null) {
34 m_dragEndedHandler = null;
35 }
36 }
37 }
38
39 public override void Update() {
40 if (m_dragWidget != null) {
43 if (Input.Drag.HasValue) {
44 dragTargetWidget?.DragOver(m_dragWidget, m_dragData);
45 }
46 else {
47 try {
48 dragTargetWidget?.DragDrop(m_dragWidget, m_dragData);
49 }
50 finally {
51 EndDrag();
52 }
53 }
54 }
55 }
56
57 public override void ArrangeOverride() {
58 foreach (Widget child in Children) {
59 Vector2 parentDesiredSize = child.ParentDesiredSize;
60 parentDesiredSize.X = MathUtils.Min(parentDesiredSize.X, ActualSize.X);
61 parentDesiredSize.Y = MathUtils.Min(parentDesiredSize.Y, ActualSize.Y);
62 child.Arrange(ScreenToWidget(m_dragPosition) - 0.5f * parentDesiredSize, parentDesiredSize);
63 }
64 }
65
66 public virtual void UpdateDragPosition() {
67 if (Input.Drag.HasValue) {
68 m_dragPosition = Input.Drag.Value;
69 m_dragPosition.X = Math.Clamp(m_dragPosition.X, GlobalBounds.Min.X, GlobalBounds.Max.X - 1f);
70 m_dragPosition.Y = Math.Clamp(m_dragPosition.Y, GlobalBounds.Min.Y, GlobalBounds.Max.Y - 1f);
71 }
72 }
73 }
74}
static int Min(int x1, int x2)
readonly WidgetsList Children
override void ArrangeOverride()
void BeginDrag(Widget dragWidget, object dragData, Action dragEndedHandler)
virtual void UpdateDragPosition()
Vector2 ParentDesiredSize
virtual void Arrange(Vector2 position, Vector2 parentActualSize)
virtual Widget HitTestGlobal(Vector2 point, Func< Widget, bool > predicate=null)
WidgetInput Input
BoundingRectangle GlobalBounds
virtual bool IsHitTestVisible
Vector2 ActualSize
virtual Vector2 ScreenToWidget(Vector2 p)
void DragOver(Widget dragWidget, object data)
void DragDrop(Widget dragWidget, object data)