Skip to content
This repository was archived by the owner on Apr 29, 2021. It is now read-only.

Commit dd78120

Browse files
committed
[Raycast] Add UIWidgetsRaycastablePanel
1 parent d1ebb51 commit dd78120

10 files changed

+139
-204
lines changed

Runtime/Plugins/Raycast/RaycastManager.cs

Lines changed: 21 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -55,24 +55,34 @@ public static RaycastManager instance {
5555
public readonly Dictionary<int, Dictionary<int, RaycastableRect>> raycastHandlerMap =
5656
new Dictionary<int, Dictionary<int, RaycastableRect>>();
5757

58-
public static void VerifyWindow(int windowHashCode) {
58+
public static void NewWindow(int windowHashCode) {
5959
if (!instance.raycastHandlerMap.ContainsKey(windowHashCode)) {
60-
Debug.Log($"New Window: @[{windowHashCode}] ({instance.raycastHandlerMap.Count})");
60+
// Debug.Log($"New Window: @[{windowHashCode}] ({instance.raycastHandlerMap.Count})");
6161
instance.raycastHandlerMap.Add(windowHashCode, new Dictionary<int, RaycastableRect>());
6262
}
6363
}
6464

65-
public static void AddToList(int widgetHashCode, int windowHashCode) {
66-
VerifyWindow(windowHashCode);
67-
Debug.Log($"Add To List: [{widgetHashCode}]@[{windowHashCode}]");
68-
if (!instance.raycastHandlerMap[windowHashCode].ContainsKey(widgetHashCode)) {
69-
instance.raycastHandlerMap[windowHashCode][widgetHashCode] = new RaycastableRect();
70-
65+
public static void DisposeWindow(int windowHashCode) {
66+
if (instance.raycastHandlerMap.ContainsKey(windowHashCode)) {
67+
// Debug.Log($"Dispose Window: @[{windowHashCode}]");
68+
instance.raycastHandlerMap.Remove(windowHashCode);
7169
}
7270
}
7371

72+
public static void AddToList(int widgetHashCode, int windowHashCode) {
73+
// Debug.Log($"Add To List: [{widgetHashCode}]@[{windowHashCode}]");
74+
D.assert(instance.raycastHandlerMap.ContainsKey(windowHashCode), () =>
75+
$"Raycast Handler Map doesn't contain Window {windowHashCode}, " +
76+
$"Make sure using UIWidgetsRaycastablePanel instead of UIWidgetsPanel " +
77+
$"while using RaycastableContainer.");
78+
D.assert(!instance.raycastHandlerMap[windowHashCode].ContainsKey(widgetHashCode), () =>
79+
$"Raycast Handler Map already contains Widget {widgetHashCode} at Window {windowHashCode}");
80+
81+
instance.raycastHandlerMap[windowHashCode][widgetHashCode] = new RaycastableRect();
82+
}
83+
7484
public static void MarkDirty(int widgetHashCode, int windowHashCode) {
75-
Debug.Log($"Mark Dirty: [{widgetHashCode}]@[{windowHashCode}]");
85+
// Debug.Log($"Mark Dirty: [{widgetHashCode}]@[{windowHashCode}]");
7686
D.assert(instance.raycastHandlerMap.ContainsKey(windowHashCode), () =>
7787
$"Raycast Handler Map doesn't contain Window {windowHashCode}");
7888
D.assert(instance.raycastHandlerMap[windowHashCode].ContainsKey(widgetHashCode), () =>
@@ -82,22 +92,21 @@ public static void MarkDirty(int widgetHashCode, int windowHashCode) {
8292
}
8393

8494
public static void UpdateSizeOffset(int widgetHashCode, int windowHashCode, Size size, Offset offset) {
85-
8695
D.assert(instance.raycastHandlerMap.ContainsKey(windowHashCode), () =>
8796
$"Raycast Handler Map doesn't contain Window {windowHashCode}");
8897
D.assert(instance.raycastHandlerMap[windowHashCode].ContainsKey(widgetHashCode), () =>
8998
$"Raycast Handler Map doesn't contain Widget {widgetHashCode} at Window {windowHashCode}");
9099

91100
if (instance.raycastHandlerMap[windowHashCode][widgetHashCode].isDirty) {
92-
Debug.Log($"Update Size Offset: [{widgetHashCode}]@[{windowHashCode}]");
101+
// Debug.Log($"Update Size Offset: [{widgetHashCode}]@[{windowHashCode}]");
93102
instance.raycastHandlerMap[windowHashCode][widgetHashCode]
94103
.UpdateRect(offset.dx, offset.dy, size.width, size.height);
95104
instance.raycastHandlerMap[windowHashCode][widgetHashCode].UnmarkDirty();
96105
}
97106
}
98107

99108
public static void RemoveFromList(int widgetHashCode, int windowHashCode) {
100-
Debug.Log($"Remove From List: [{widgetHashCode}]@[{windowHashCode}]");
109+
// Debug.Log($"Remove From List: [{widgetHashCode}]@[{windowHashCode}]");
101110
D.assert(instance.raycastHandlerMap.ContainsKey(windowHashCode), () =>
102111
$"Raycast Handler Map doesn't contain Window {windowHashCode}");
103112
D.assert(instance.raycastHandlerMap[windowHashCode].ContainsKey(widgetHashCode), () =>
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
using Unity.UIWidgets.engine;
2+
using Unity.UIWidgets.foundation;
3+
using Unity.UIWidgets.material;
4+
using Unity.UIWidgets.plugins.raycast;
5+
using Unity.UIWidgets.ui;
6+
using Unity.UIWidgets.widgets;
7+
using UnityEngine;
8+
using Color = Unity.UIWidgets.ui.Color;
9+
using Material = Unity.UIWidgets.material.Material;
10+
11+
namespace Unity.UIWidgets.Sample {
12+
public class DefaultSimpleTestbedPanel : UIWidgetsPanel {
13+
protected override void OnEnable() {
14+
FontManager.instance.addFont(Resources.Load<Font>("fonts/MaterialIcons-Regular"), "Material Icons");
15+
base.OnEnable();
16+
}
17+
18+
protected override Widget createWidget() {
19+
return new MaterialApp(
20+
home: new DefaultSimpleTestbedWidget()
21+
);
22+
}
23+
}
24+
25+
public class DefaultSimpleTestbedWidget : StatefulWidget {
26+
public DefaultSimpleTestbedWidget(Key key = null) : base(key) { }
27+
28+
public override State createState() {
29+
return new DefaultSimpleTestbedWidgetState();
30+
}
31+
}
32+
33+
public class DefaultSimpleTestbedWidgetState : State<DefaultSimpleTestbedWidget> {
34+
public override Widget build(BuildContext context) {
35+
return new Material(
36+
color: new Color(0x44FFFF00),
37+
child: new Center(
38+
child: new Container(
39+
child: new MaterialButton(
40+
child: new Text("Material Button"),
41+
onPressed: () => { },
42+
color: Colors.lightBlue
43+
)
44+
)
45+
)
46+
);
47+
}
48+
}
49+
}

Runtime/Plugins/Raycast/UIWidgetsPanelRaycastFilter.cs.meta renamed to Runtime/Plugins/Raycast/Sample/DefaultSimpleTestbedPanel.cs.meta

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Runtime/Plugins/Raycast/Sample/Raycast Simple Testbed.unity

Lines changed: 7 additions & 138 deletions
Original file line numberDiff line numberDiff line change
@@ -130,7 +130,6 @@ GameObject:
130130
m_Component:
131131
- component: {fileID: 238084977}
132132
- component: {fileID: 238084980}
133-
- component: {fileID: 238084979}
134133
- component: {fileID: 238084978}
135134
m_Layer: 5
136135
m_Name: Panel Button With Filter
@@ -155,23 +154,10 @@ RectTransform:
155154
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
156155
m_AnchorMin: {x: 0.5, y: 0.5}
157156
m_AnchorMax: {x: 0.5, y: 0.5}
158-
m_AnchoredPosition: {x: -200, y: 0.0000076294}
157+
m_AnchoredPosition: {x: 0, y: 0.0000076294}
159158
m_SizeDelta: {x: 300, y: 150}
160159
m_Pivot: {x: 0.5, y: 0.5}
161160
--- !u!114 &238084978
162-
MonoBehaviour:
163-
m_ObjectHideFlags: 0
164-
m_CorrespondingSourceObject: {fileID: 0}
165-
m_PrefabInstance: {fileID: 0}
166-
m_PrefabAsset: {fileID: 0}
167-
m_GameObject: {fileID: 238084976}
168-
m_Enabled: 1
169-
m_EditorHideFlags: 0
170-
m_Script: {fileID: 11500000, guid: 2455841904ff14258bae1b28c1363dc0, type: 3}
171-
m_Name:
172-
m_EditorClassIdentifier:
173-
reversed: 0
174-
--- !u!114 &238084979
175161
MonoBehaviour:
176162
m_ObjectHideFlags: 0
177163
m_CorrespondingSourceObject: {fileID: 0}
@@ -302,7 +288,6 @@ RectTransform:
302288
- {fileID: 789225035}
303289
- {fileID: 1371170890}
304290
- {fileID: 238084977}
305-
- {fileID: 1262432453}
306291
- {fileID: 409216488}
307292
- {fileID: 2108199658}
308293
m_Father: {fileID: 0}
@@ -332,7 +317,6 @@ GameObject:
332317
- component: {fileID: 409216488}
333318
- component: {fileID: 409216491}
334319
- component: {fileID: 409216490}
335-
- component: {fileID: 409216489}
336320
m_Layer: 5
337321
m_Name: Panel Button With Filter (1)
338322
m_TagString: Untagged
@@ -352,26 +336,13 @@ RectTransform:
352336
m_LocalScale: {x: 1, y: 1, z: 1}
353337
m_Children: []
354338
m_Father: {fileID: 354633980}
355-
m_RootOrder: 4
339+
m_RootOrder: 3
356340
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
357341
m_AnchorMin: {x: 0.5, y: 0.5}
358342
m_AnchorMax: {x: 0.5, y: 0.5}
359-
m_AnchoredPosition: {x: 150, y: 50}
343+
m_AnchoredPosition: {x: 0, y: -200}
360344
m_SizeDelta: {x: 300, y: 150}
361345
m_Pivot: {x: 0.5, y: 0.5}
362-
--- !u!114 &409216489
363-
MonoBehaviour:
364-
m_ObjectHideFlags: 0
365-
m_CorrespondingSourceObject: {fileID: 0}
366-
m_PrefabInstance: {fileID: 0}
367-
m_PrefabAsset: {fileID: 0}
368-
m_GameObject: {fileID: 409216487}
369-
m_Enabled: 1
370-
m_EditorHideFlags: 0
371-
m_Script: {fileID: 11500000, guid: 2455841904ff14258bae1b28c1363dc0, type: 3}
372-
m_Name:
373-
m_EditorClassIdentifier:
374-
reversed: 0
375346
--- !u!114 &409216490
376347
MonoBehaviour:
377348
m_ObjectHideFlags: 0
@@ -692,94 +663,6 @@ CanvasRenderer:
692663
m_PrefabAsset: {fileID: 0}
693664
m_GameObject: {fileID: 1097866537}
694665
m_CullTransparentMesh: 0
695-
--- !u!1 &1262432452
696-
GameObject:
697-
m_ObjectHideFlags: 0
698-
m_CorrespondingSourceObject: {fileID: 0}
699-
m_PrefabInstance: {fileID: 0}
700-
m_PrefabAsset: {fileID: 0}
701-
serializedVersion: 6
702-
m_Component:
703-
- component: {fileID: 1262432453}
704-
- component: {fileID: 1262432456}
705-
- component: {fileID: 1262432455}
706-
- component: {fileID: 1262432454}
707-
m_Layer: 5
708-
m_Name: Panel Button With Filter (Reversed)
709-
m_TagString: Untagged
710-
m_Icon: {fileID: 0}
711-
m_NavMeshLayer: 0
712-
m_StaticEditorFlags: 0
713-
m_IsActive: 1
714-
--- !u!224 &1262432453
715-
RectTransform:
716-
m_ObjectHideFlags: 0
717-
m_CorrespondingSourceObject: {fileID: 0}
718-
m_PrefabInstance: {fileID: 0}
719-
m_PrefabAsset: {fileID: 0}
720-
m_GameObject: {fileID: 1262432452}
721-
m_LocalRotation: {x: 0, y: 0, z: 0, w: 1}
722-
m_LocalPosition: {x: 0, y: 0, z: 0}
723-
m_LocalScale: {x: 1, y: 1, z: 1}
724-
m_Children: []
725-
m_Father: {fileID: 354633980}
726-
m_RootOrder: 3
727-
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
728-
m_AnchorMin: {x: 0.5, y: 0.5}
729-
m_AnchorMax: {x: 0.5, y: 0.5}
730-
m_AnchoredPosition: {x: -200, y: -200}
731-
m_SizeDelta: {x: 300, y: 150}
732-
m_Pivot: {x: 0.5, y: 0.5}
733-
--- !u!114 &1262432454
734-
MonoBehaviour:
735-
m_ObjectHideFlags: 0
736-
m_CorrespondingSourceObject: {fileID: 0}
737-
m_PrefabInstance: {fileID: 0}
738-
m_PrefabAsset: {fileID: 0}
739-
m_GameObject: {fileID: 1262432452}
740-
m_Enabled: 1
741-
m_EditorHideFlags: 0
742-
m_Script: {fileID: 11500000, guid: 2455841904ff14258bae1b28c1363dc0, type: 3}
743-
m_Name:
744-
m_EditorClassIdentifier:
745-
reversed: 1
746-
--- !u!114 &1262432455
747-
MonoBehaviour:
748-
m_ObjectHideFlags: 0
749-
m_CorrespondingSourceObject: {fileID: 0}
750-
m_PrefabInstance: {fileID: 0}
751-
m_PrefabAsset: {fileID: 0}
752-
m_GameObject: {fileID: 1262432452}
753-
m_Enabled: 1
754-
m_EditorHideFlags: 0
755-
m_Script: {fileID: 11500000, guid: 4fc8b0d34b82c4c63a41e0cde280075a, type: 3}
756-
m_Name:
757-
m_EditorClassIdentifier:
758-
m_Material: {fileID: 0}
759-
m_Color: {r: 1, g: 1, b: 1, a: 1}
760-
m_RaycastTarget: 1
761-
m_OnCullStateChanged:
762-
m_PersistentCalls:
763-
m_Calls: []
764-
m_TypeName: UnityEngine.UI.MaskableGraphic+CullStateChangedEvent, UnityEngine.UI,
765-
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null
766-
m_Texture: {fileID: 0}
767-
m_UVRect:
768-
serializedVersion: 2
769-
x: 0
770-
y: 0
771-
width: 1
772-
height: 1
773-
devicePixelRatioOverride: 0
774-
hardwareAntiAliasing: 0
775-
--- !u!222 &1262432456
776-
CanvasRenderer:
777-
m_ObjectHideFlags: 0
778-
m_CorrespondingSourceObject: {fileID: 0}
779-
m_PrefabInstance: {fileID: 0}
780-
m_PrefabAsset: {fileID: 0}
781-
m_GameObject: {fileID: 1262432452}
782-
m_CullTransparentMesh: 0
783666
--- !u!1 &1371170889
784667
GameObject:
785668
m_ObjectHideFlags: 0
@@ -814,7 +697,7 @@ RectTransform:
814697
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
815698
m_AnchorMin: {x: 0.5, y: 0.5}
816699
m_AnchorMax: {x: 0.5, y: 0.5}
817-
m_AnchoredPosition: {x: -200, y: 200}
700+
m_AnchoredPosition: {x: 0, y: 200}
818701
m_SizeDelta: {x: 300, y: 150}
819702
m_Pivot: {x: 0.5, y: 0.5}
820703
--- !u!222 &1371170891
@@ -834,7 +717,7 @@ MonoBehaviour:
834717
m_GameObject: {fileID: 1371170889}
835718
m_Enabled: 1
836719
m_EditorHideFlags: 0
837-
m_Script: {fileID: 11500000, guid: 4fc8b0d34b82c4c63a41e0cde280075a, type: 3}
720+
m_Script: {fileID: 11500000, guid: 15ddf18357c864b1b822b471672fd391, type: 3}
838721
m_Name:
839722
m_EditorClassIdentifier:
840723
m_Material: {fileID: 0}
@@ -931,7 +814,6 @@ GameObject:
931814
- component: {fileID: 2108199658}
932815
- component: {fileID: 2108199661}
933816
- component: {fileID: 2108199660}
934-
- component: {fileID: 2108199659}
935817
m_Layer: 5
936818
m_Name: Panel Button With Filter (2)
937819
m_TagString: Untagged
@@ -951,26 +833,13 @@ RectTransform:
951833
m_LocalScale: {x: 1, y: 1, z: 1}
952834
m_Children: []
953835
m_Father: {fileID: 354633980}
954-
m_RootOrder: 5
836+
m_RootOrder: 4
955837
m_LocalEulerAnglesHint: {x: 0, y: 0, z: 0}
956838
m_AnchorMin: {x: 0.5, y: 0.5}
957839
m_AnchorMax: {x: 0.5, y: 0.5}
958-
m_AnchoredPosition: {x: 227, y: 0}
840+
m_AnchoredPosition: {x: 50, y: -240}
959841
m_SizeDelta: {x: 300, y: 150}
960842
m_Pivot: {x: 0.5, y: 0.5}
961-
--- !u!114 &2108199659
962-
MonoBehaviour:
963-
m_ObjectHideFlags: 0
964-
m_CorrespondingSourceObject: {fileID: 0}
965-
m_PrefabInstance: {fileID: 0}
966-
m_PrefabAsset: {fileID: 0}
967-
m_GameObject: {fileID: 2108199657}
968-
m_Enabled: 1
969-
m_EditorHideFlags: 0
970-
m_Script: {fileID: 11500000, guid: 2455841904ff14258bae1b28c1363dc0, type: 3}
971-
m_Name:
972-
m_EditorClassIdentifier:
973-
reversed: 0
974843
--- !u!114 &2108199660
975844
MonoBehaviour:
976845
m_ObjectHideFlags: 0

Runtime/Plugins/Raycast/Sample/RaycastSimpleTestbedPanel.cs

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
using Unity.UIWidgets.engine;
21
using Unity.UIWidgets.foundation;
32
using Unity.UIWidgets.material;
43
using Unity.UIWidgets.plugins.raycast;
@@ -9,7 +8,7 @@
98
using Material = Unity.UIWidgets.material.Material;
109

1110
namespace Unity.UIWidgets.Sample {
12-
public class RaycastSimpleTestbedPanel : UIWidgetsPanel {
11+
public class RaycastSimpleTestbedPanel : UIWidgetsRaycastablePanel {
1312
protected override void OnEnable() {
1413
FontManager.instance.addFont(Resources.Load<Font>("fonts/MaterialIcons-Regular"), "Material Icons");
1514
base.OnEnable();

Runtime/Plugins/Raycast/Sample/RaycastTestbedPanel.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -13,7 +13,7 @@
1313
using TextStyle = Unity.UIWidgets.painting.TextStyle;
1414

1515
namespace Unity.UIWidgets.Sample {
16-
public class RaycastTestbedPanel : UIWidgetsPanel {
16+
public class RaycastTestbedPanel : UIWidgetsRaycastablePanel {
1717
protected override void OnEnable() {
1818
FontManager.instance.addFont(Resources.Load<Font>("fonts/MaterialIcons-Regular"), "Material Icons");
1919
base.OnEnable();

0 commit comments

Comments
 (0)