1
+ package com.example.xr.scenecore
2
+
3
+ import androidx.xr.runtime.math.Pose
4
+ import androidx.xr.runtime.math.Quaternion
5
+ import androidx.xr.runtime.math.Vector3
6
+ import androidx.xr.scenecore.AnchorPlacement
7
+ import androidx.xr.scenecore.Dimensions
8
+ import androidx.xr.scenecore.Entity
9
+ import androidx.xr.scenecore.InputEvent
10
+ import androidx.xr.scenecore.InteractableComponent
11
+ import androidx.xr.scenecore.MovableComponent
12
+ import androidx.xr.scenecore.PlaneSemantic
13
+ import androidx.xr.scenecore.PlaneType
14
+ import androidx.xr.scenecore.ResizableComponent
15
+ import androidx.xr.scenecore.Session
16
+ import java.util.concurrent.Executors
17
+
18
+ private fun setPoseExample (entity : Entity ) {
19
+ // [START androidxr_scenecore_entity_setPoseExample]
20
+ // Place the entity forward 2 meters
21
+ val newPosition = Vector3 (0f , 0f , - 2f )
22
+ // Rotate the entity by 180 degrees on the up axis (upside-down)
23
+ val newOrientation = Quaternion .fromEulerAngles(0f , 0f , 180f )
24
+ // Update the position and rotation on the entity
25
+ entity.setPose(Pose (newPosition, newOrientation))
26
+ // [END androidxr_scenecore_entity_setPoseExample]
27
+ }
28
+
29
+ private fun hideEntity (entity : Entity ) {
30
+ // [START androidxr_scenecore_entity_hideEntity]
31
+ // Hide the entity
32
+ entity.setHidden(true )
33
+ // [END androidxr_scenecore_entity_hideEntity]
34
+ }
35
+
36
+ private fun entitySetScale (entity : Entity ) {
37
+ // [START androidxr_scenecore_entity_entitySetScale]
38
+ // Double the size of the entity
39
+ entity.setScale(2f )
40
+ // [END androidxr_scenecore_entity_entitySetScale]
41
+ }
42
+
43
+ private fun moveableComponentExample (session : Session , entity : Entity ) {
44
+ // [START androidxr_scenecore_moveableComponentExample]
45
+ val anchorPlacement = AnchorPlacement .createForPlanes(
46
+ planeTypeFilter = setOf (PlaneSemantic .FLOOR , PlaneSemantic .TABLE ),
47
+ planeSemanticFilter = setOf (PlaneType .VERTICAL )
48
+ )
49
+
50
+ val movableComponent = MovableComponent .create(
51
+ session = session,
52
+ systemMovable = false ,
53
+ scaleInZ = false ,
54
+ anchorPlacement = setOf (anchorPlacement)
55
+ )
56
+ entity.addComponent(movableComponent)
57
+ // [END androidxr_scenecore_moveableComponentExample]
58
+ }
59
+
60
+ private fun resizableComponentExample (session : Session , entity : Entity ) {
61
+ // [START androidxr_scenecore_resizableComponentExample]
62
+ val resizableComponent = ResizableComponent .create(session)
63
+ resizableComponent.minimumSize = Dimensions (177f , 100f , 1f )
64
+ resizableComponent.fixedAspectRatio = 16f / 9f // Specify a 16:9 aspect ratio
65
+ entity.addComponent(resizableComponent)
66
+ // [END androidxr_scenecore_resizableComponentExample]
67
+ }
68
+
69
+ private fun interactableComponentExample (session : Session , entity : Entity ) {
70
+ // [START androidxr_scenecore_interactableComponentExample]
71
+ val executor = Executors .newSingleThreadExecutor()
72
+ val interactableComponent = InteractableComponent .create(session, executor) {
73
+ // when the user disengages with the entity with their hands
74
+ if (it.source == InputEvent .SOURCE_HANDS && it.action == InputEvent .ACTION_UP ) {
75
+ // increase size with right hand and decrease with left
76
+ if (it.pointerType == InputEvent .POINTER_TYPE_RIGHT ) {
77
+ entity.setScale(1.5f )
78
+ } else if (it.pointerType == InputEvent .POINTER_TYPE_LEFT ) {
79
+ entity.setScale(0.5f )
80
+ }
81
+ }
82
+ }
83
+ entity.addComponent(interactableComponent)
84
+ // [END androidxr_scenecore_interactableComponentExample]
85
+ }
0 commit comments