Exemple #1
0
        // Make custom writer(private)
        private static void MakeCustomSyncWriter(NetworkIdentity behaviorOwner, Type targetType, Action <NetworkWriter> customSyncObject, Action <NetworkWriter> customSyncVar, NetworkWriter owner, NetworkWriter observer)
        {
            ulong            dirty     = 0ul;
            ulong            dirty_o   = 0ul;
            NetworkBehaviour behaviour = null;

            for (int i = 0; i < behaviorOwner.NetworkBehaviours.Length; i++)
            {
                behaviour = behaviorOwner.NetworkBehaviours[i];
                if (behaviour.GetType() == targetType)
                {
                    dirty |= 1UL << i;
                    if (behaviour.syncMode == SyncMode.Observers)
                    {
                        dirty_o |= 1UL << i;
                    }
                }
            }

            owner.WritePackedUInt64(dirty);
            observer.WritePackedUInt64(dirty & dirty_o);

            int position = owner.Position;

            owner.WriteInt32(0);
            int position2 = owner.Position;

            if (customSyncObject != null)
            {
                customSyncObject.Invoke(owner);
            }
            else
            {
                behaviour.SerializeObjectsDelta(owner);
            }

            customSyncVar?.Invoke(owner);

            int position3 = owner.Position;

            owner.Position = position;
            owner.WriteInt32(position3 - position2);
            owner.Position = position3;

            if (dirty_o != 0ul)
            {
                ArraySegment <byte> arraySegment = owner.ToArraySegment();
                observer.WriteBytes(arraySegment.Array, position, owner.Position - position);
            }
        }
Exemple #2
0
        void Start()
        {
            controller = GetComponentInParent <StationController>();

            if (controller == null)
            {
                controller = GetComponentInParent <GeneratorController>();
            }

            if (controller == null)
            {
                controller = GetComponentInParent <VillageController>();
            }

            type = controller.GetType();

            buttonUI = GameObject.Find("/Game/UI/EnterStationControl");
        }
Exemple #3
0
        public void ParseNetworkBehaviour(NetworkBehaviour nb, string nbname)
        {
            var nbtype = nb.GetType();

            foreach (var f in nbtype.GetFields())
            {
                if (f.IsDefined(typeof(SyncVarAttribute), true))
                {
                    syncvar_nb_so[f.Name + "@" + nbname] = new PropertyAccess(nbtype, "Network" + f.Name);
                }
            }
            foreach (var m in nbtype.GetMethods())
            {
                if (m.Name.StartsWith("CallRpc"))
                {
                    clientrpc_nb_so[m.Name.Substring(4) + "@" + nbname] = new MethodAccess(nbtype, m.Name);
                }
            }
        }
 public RPCReference(NetworkBehaviour targetBehaviour)
 {
     m_NetworkBehaviour = targetBehaviour;
     rpcDefinition      = RPCTypeDefinition.Get(targetBehaviour.GetType());
     rpcDelegates       = rpcDefinition.CreateTargetedDelegates(m_NetworkBehaviour);
 }