Exemple #1
0
        public static void RequestPositionFromServer(MyFloatingObject floatingObject)
        {
            FloatingObjectRequestPosMsg msg = new FloatingObjectRequestPosMsg();

            msg.EntityId = floatingObject.EntityId;
            MySession.Static.SyncLayer.SendMessageToServer(ref msg);
        }
Exemple #2
0
        private static void OnFloatingObjectsRequestPosCallback(ref FloatingObjectRequestPosMsg msg, MyNetworkClient sender)
        {
            MyFloatingObject floatingObject;
            MyEntity         entity = null;

            MyEntities.TryGetEntityById(msg.EntityId, out entity);

            floatingObject = entity as MyFloatingObject;
            if (floatingObject != null)
            {
                MatrixD matrix = floatingObject.WorldMatrix;

                Vector3D   translation = matrix.Translation;
                Quaternion rotation    = Quaternion.CreateFromRotationMatrix(matrix.GetOrientation());

                if (MyPerGameSettings.EnableFloatingObjectsActiveSync)
                {
                    m_rigidBodyList.Clear();
                    Sandbox.Engine.Physics.MyPhysics.GetPenetrationsShape(floatingObject.Physics.RigidBody.GetShape(), ref translation, ref rotation, m_rigidBodyList, Sandbox.Engine.Physics.MyPhysics.NotCollideWithStaticLayer);

                    tmp_list.Clear();

                    foreach (var body in m_rigidBodyList)
                    {
                        var physicsBody = body.Body.UserObject as MyPhysicsBody;
                        if (physicsBody != null)
                        {
                            var collidingFloatingObject = physicsBody.Entity as MyFloatingObject;
                            if (collidingFloatingObject != null && !tmp_list.Contains(collidingFloatingObject))
                            {
                                tmp_list.Add(collidingFloatingObject);
                                if (tmp_list.Count > MAX_SYNC_ON_REQUEST)
                                {
                                    break;
                                }
                            }
                        }
                    }

                    foreach (var floatOb in tmp_list)
                    {
                        UpdatePosition(floatOb, false, sender);
                    }
                }

                UpdatePosition(floatingObject, false, sender);
            }
            else
            {
                //System.Diagnostics.Debug.Fail("Requested floating object wasn't found!");
            }
        }