예제 #1
0
        public override void Serialize(BitStream bs, ReplicaSerializationMode mode, ReplicaView view)
        {
            var isViewClientControlled = _pawn.isMounted || (_pawn.remotePlayerController != null && _pawn.remotePlayerController.connection == view.connection);

            bs.Write(isViewClientControlled);
            if (isViewClientControlled)
            {
                return;
            }

            bs.Write(transform.position);
            bs.Write(transform.rotation.eulerAngles.y);
        }
예제 #2
0
//         void Update()
//         {
//             if (_data.parts == null)
//                 return;
//
//             var buildingManager = SystemProvider.GetSystem<IBuildingSystem>(gameObject);
//
//             for (int partIdx = 0; partIdx < _data.parts.Count; ++partIdx) {
//                 var part = _data.parts[partIdx];
//                 var childrenIdx = _childrenIdxForPart[partIdx];
//
//                 for (int i = 0; i < buildingManager.GetNumChildrenForPartType(_data.type, part.type); ++i) {
//                     var childPartIdx = _partChildren[childrenIdx + i];
//                     if (childPartIdx == ushort.MaxValue)
//                         continue;
//
//                     var childPart = _data.parts[childPartIdx];
//                     DebugDraw.DrawLine(part.position, Vector3.Lerp(part.position, childPart.position, 0.5f), Color.blue);
//                 }
//             }
//         }

#if SERVER
        public override void Serialize(BitStream bs, ReplicaSerializationMode mode, ReplicaView view)
        {
            if (mode == ReplicaSerializationMode.Full)
            {
                bs.Write(data.type);

                bs.Write(data.parts.Count);
                foreach (var part in data.parts)
                {
                    bs.Write(part.type);
                    bs.Write(part.position);
                    bs.Write(part.rotation);
                }
            }
        }
예제 #3
0
        public override void Deserialize(BitStream bs, ReplicaSerializationMode mode)
        {
            var isViewClientControlled = bs.ReadBool();

            if (isViewClientControlled)
            {
                return;
            }

            var pos = bs.ReadVector3();
            var yaw = bs.ReadFloat();

            if (_pawn == null || _pawn.isMounted)
            {
                return;
            }

            _serverPosition = pos;
            _serverYaw      = yaw;
        }
예제 #4
0
        public override void Deserialize(BitStream bs, ReplicaSerializationMode mode)
        {
            if (mode == ReplicaSerializationMode.Full)
            {
                _data.type = bs.ReadNetworkObject <BuildingType>();

                _data.parts.Clear();
                Clear();
                var count = bs.ReadInt();

                for (int i = 0; i < count; i++)
                {
                    var part = new Part();
                    part.type     = bs.ReadNetworkObject <BuildingPartType>();
                    part.position = bs.ReadVector3();
                    part.rotation = bs.ReadQuaternion();

                    _data.parts.Add(part);
                }
                Rebuild();
            }
        }