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);
     }
 }
예제 #2
0
        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);
        }
예제 #3
0
        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);
        }