private void UpdateAuthChangeGroup()
        {
            Entities.With(authChangeGroup).ForEach(
                (Rigidbody rigidbody, ref KinematicStateWhenAuth kinematicStateWhenAuth, ref SpatialEntityId spatialEntityId) =>
            {
                var changes = updateSystem.GetAuthorityChangesReceived(spatialEntityId.EntityId,
                                                                       TransformInternal.ComponentId);
                if (changes.Count == 0)
                {
                    return;
                }

                var auth = changes[changes.Count - 1];
                switch (auth.Authority)
                {
                case Authority.NotAuthoritative:
                    kinematicStateWhenAuth = new KinematicStateWhenAuth
                    {
                        KinematicWhenAuthoritative = rigidbody.isKinematic
                    };
                    rigidbody.isKinematic = true;
                    break;

                case Authority.Authoritative:
                case Authority.AuthorityLossImminent:
                    rigidbody.isKinematic = kinematicStateWhenAuth.KinematicWhenAuthoritative;
                    break;
                }
            });
        }
예제 #2
0
        private void UpdateAuthChangeGroup()
        {
            var rigidbodyArray = authChangeGroup.GetComponentArray <Rigidbody>();
            var kinematicStateWhenAuthArray = authChangeGroup.GetComponentDataArray <KinematicStateWhenAuth>();
            var spatialEntityIdArray        = authChangeGroup.GetComponentDataArray <SpatialEntityId>();

            for (int i = 0; i < rigidbodyArray.Length; ++i)
            {
                var rigidbody = rigidbodyArray[i];
                var changes   = updateSystem.GetAuthorityChangesReceived(spatialEntityIdArray[i].EntityId,
                                                                         TransformInternal.ComponentId);
                if (changes.Count == 0)
                {
                    continue;
                }

                var auth = changes[changes.Count - 1];
                switch (auth.Authority)
                {
                case Authority.NotAuthoritative:
                    kinematicStateWhenAuthArray[i] = new KinematicStateWhenAuth
                    {
                        KinematicWhenAuthoritative = rigidbody.isKinematic
                    };
                    rigidbody.isKinematic = true;
                    break;

                case Authority.Authoritative:
                case Authority.AuthorityLossImminent:
                    rigidbody.isKinematic = kinematicStateWhenAuthArray[i].KinematicWhenAuthoritative;
                    break;
                }
            }
        }
        public void InitKinematicState(ref KinematicStateWhenAuth kinematicStateWhenAuth, Rigidbody rigidbody)
        {
            kinematicStateWhenAuth = new KinematicStateWhenAuth
            {
                KinematicWhenAuthoritative = rigidbody.isKinematic
            };

            rigidbody.isKinematic = true;
        }
        private void UpdateNewEntityGroup()
        {
            Entities.With(newEntityGroup).ForEach((ref KinematicStateWhenAuth kinematicStateWhenAuth, Rigidbody rigidbody) =>
            {
                kinematicStateWhenAuth = new KinematicStateWhenAuth
                {
                    KinematicWhenAuthoritative = rigidbody.isKinematic
                };

                rigidbody.isKinematic = true;
            });
        }
        private void UpdateNewEntityGroup()
        {
            var rigidbodyArray = newEntityGroup.GetComponentArray <Rigidbody>();
            var kinematicStateWhenAuthArray = newEntityGroup.GetComponentDataArray <KinematicStateWhenAuth>();

            for (int i = 0; i < rigidbodyArray.Length; ++i)
            {
                var rigidbody = rigidbodyArray[i];
                kinematicStateWhenAuthArray[i] = new KinematicStateWhenAuth
                {
                    KinematicWhenAuthoritative = rigidbody.isKinematic
                };
                rigidbody.isKinematic = true;
            }
        }
        public void ApplyKinematicStateOnAuthChange(ref KinematicStateWhenAuth kinematicStateWhenAuth,
                                                    AuthorityChangeReceived authChange, Rigidbody rigidbody)
        {
            switch (authChange.Authority)
            {
            case Authority.NotAuthoritative:
                kinematicStateWhenAuth = new KinematicStateWhenAuth
                {
                    KinematicWhenAuthoritative = rigidbody.isKinematic
                };
                rigidbody.isKinematic = true;
                break;

            case Authority.Authoritative:
                rigidbody.isKinematic = kinematicStateWhenAuth.KinematicWhenAuthoritative;
                break;
            }
        }