private void GrabController_OnGrabNothing(ControllerGrabberData controller, IHandleGrabbing grabbedObj) { if (NetServices.isNetworked && NetServices.isClient) { // spawn! // or if networked, ask server for permission to spawn. // also give spawn request feedback, and success/fail feedback... but in separate feedback class. var msgReq = MessagePool.Get <SpawnGrabRequestMessage>(); msgReq.isLeft = controller.isLeft; msgReq.prefabType = GetSpawnType(controller.isLeft); ClientNetSender.instance.Send(msgReq, UnityEngine.Networking.QosType.ReliableSequenced); MessagePool.Return(msgReq); } else if (!NetServices.isNetworked) { // spawn! but beware: it might get out of sync with server... so upon reconnect, all those objects must be destroyed or re-synced! :( how the f**k to do that??? var newObj = PrefabManager.instance.Spawn(prefabType, controller.grabPointGO.transform.position, controller.grabPointGO.transform.rotation); var grabber = newObj.gameObject.GetComponent <IHandleGrabbing>(); if (grabber != null) { controller.Grab(grabber); } Debug.Log("<color=#aa6000>Spawned non-synced object</color>", newObj.gameObject); } }
private void VrGrabController_OnGrab(ControllerGrabberData controller, IHandleGrabbing grabbedObj) { if (!NetServices.isClient) { return; } // deactivate rb sync while grabbed var rbsyncer = grabbedObj.gameObject.GetComponent <RigidbodySyncComponent>(); rbsyncer.StopUpdating(controller.controller); // send net message about grab. grabMessage.netId = player.netId; grabMessage.leftHand = controller.isLeft; grabMessage.syncId = rbsyncer.syncId; ClientNetSender.instance.Send(grabMessage, UnityEngine.Networking.QosType.ReliableSequenced); }
private void VrGrabController_OnUngrab(ControllerGrabberData controller, IHandleGrabbing grabbedObj) { if (!NetServices.isClient) { return; } // reactivate rb sync on ungrab var rbsyncer = grabbedObj.gameObject.GetComponent <RigidbodySyncComponent>(); rbsyncer.ContinueUpdating(controller.controller); // send net message about ungrab. throwMessage.netId = player.netId; throwMessage.leftHand = controller.isLeft; throwMessage.syncId = rbsyncer.syncId; var rb = rbsyncer.rigidbody; throwMessage.position = rb.position; throwMessage.rotation = rb.rotation; throwMessage.velocity = rb.velocity; throwMessage.angularVelocity = rb.angularVelocity; ClientNetSender.instance.Send(throwMessage, UnityEngine.Networking.QosType.ReliableSequenced); }