This repository has been archived by the owner on Dec 5, 2018. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 11
/
Copy pathGrabbingReceiver.cs
74 lines (64 loc) · 3 KB
/
GrabbingReceiver.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
using Assets.Gamelogic.Player;
using Improbable.Player;
using Improbable.Unity;
using Improbable.Unity.Core;
using Improbable.Unity.Entity;
using Improbable.Unity.Visualizer;
using UnityEngine;
namespace Assets.Gamelogic.Grabbing
{
// Runs on server-side player game object
[WorkerType(WorkerPlatform.UnityWorker)]
public class GrabbingReceiver : MonoBehaviour
{
[Require] private Grab.Reader GrabReader;
private void OnEnable()
{
GrabReader.GrabRequestTriggered.Add(AttemptGrab);
GrabReader.DropRequestTriggered.Add(AttemptDrop);
}
private void OnDisable()
{
GrabReader.GrabRequestTriggered.Remove(AttemptGrab);
GrabReader.DropRequestTriggered.Remove(AttemptDrop);
}
private void AttemptGrab(GrabRequestEvent request)
{
var grabbableGameObject = LocalEntities.Instance.Get(request.grabbedEntityId).UnderlyingGameObject;
if (grabbableGameObject == null)
{
Debug.LogWarning("Player grab attempt couldn't find targeted grabbable entity object with id: " + request.grabbedEntityId);
return;
}
GameObject controllerGameObject = gameObject.GetComponent<PlayerControllers>().GetController(request.controllerSide);
if (controllerGameObject == null)
{
Debug.LogWarning("Player grab attempt failed; no controller game object for " + request.controllerSide + " controller side");
return;
}
// Make grab request
GrabbableRequestHandler grabbableRequestHandler = grabbableGameObject.GetComponent<GrabbableRequestHandler>();
// GrabbableRequestHandler will be disabled on workers not authoritative over grabbed object's Grabbable component
if (grabbableRequestHandler != null && grabbableRequestHandler.isActiveAndEnabled)
{
grabbableRequestHandler.HandleGrabRequest(gameObject.EntityId(), request.controllerSide, controllerGameObject);
}
}
private void AttemptDrop(DropRequestEvent request)
{
GameObject droppedGameObject = LocalEntities.Instance.Get(request.droppedEntityId).UnderlyingGameObject;
if (droppedGameObject == null)
{
Debug.LogWarning("Player drop attempt couldn't find targeted grabbable entity object with id: " + request.droppedEntityId);
return;
}
// Make drop request
GrabbableRequestHandler grabbableRequestHandler = droppedGameObject.GetComponent<GrabbableRequestHandler>();
// GrabbableRequestHandler will be disabled on workers not authoritative over dropped object's Grabbable component
if (grabbableRequestHandler != null && grabbableRequestHandler.isActiveAndEnabled)
{
grabbableRequestHandler.HandleDropRequest();
}
}
}
}