示例#1
0
 public NetCreatableInfo(NetConnection owner, INetCreatable creatable, ushort id, bool isAppOwner)
 {
     Owner      = owner;
     Creatable  = creatable;
     Id         = id;
     IsAppOwner = isAppOwner;
 }
示例#2
0
        void HandleInstantiationPacket(NetInboundPacket packet)
        {
            string eventName = packet.ReadString();
            ushort id        = packet.ReadUInt16();
            bool   isOwner   = packet.ReadBool();

            NetInstantiationCallback callback;

            if (instCallbacks.TryGetValue(eventName, out callback))
            {
                if (netObjects.Creatables.ContainsKey(id))
                {
                    DashCMD.WriteError("[ObjectNC] Creatable with id {0} is already instantiated!", id);
                    return;
                }

                //DashCMD.WriteLine("[ObjectNC] Instantiating creatable with id {0}...", id);

                INetCreatable    creatable = callback(id, isOwner, packet);
                NetCreatableInfo info      = new NetCreatableInfo(packet.Sender, creatable, id, isOwner);
                netObjects.Add(id, info);

                INetEntity entity = creatable as INetEntity;
                if (entity != null && snapshotComponent.WorldSnapshot != null)
                {
                    NetEntityListSnapshot entList = snapshotComponent.WorldSnapshot.NetEntityListSnapshot;
                    entList.AddNetEntity(info, entity);
                }

                creatable.OnNetworkInstantiated(info);

                if (OnCreatableInstantiated != null)
                {
                    OnCreatableInstantiated(this, info);
                }
            }
            else
            {
                DashCMD.WriteError("[ObjectNC] Received instantiation for unknown type: {0}", eventName);
            }
        }
示例#3
0
        public void NetworkInstantiate(INetCreatable creatable, string instEventName,
                                       NetConnection clientOwner, params object[] args)
        {
            ushort netId = lastNetEntId++;

            if (netId == 0)
            {
                netId++;
            }

            NetCreatableInfo info = new NetCreatableInfo(clientOwner, creatable, netId, true);

            INetEntity entity = creatable as INetEntity;

            if (entity != null)
            {
                foreach (NetConnectionSnapshotState state in snapshotComponent.ConnectionStates.Values)
                {
                    state.WorldSnapshot.NetEntityListSnapshot.AddNetEntity(info, entity);
                }
            }

            creatable.OnNetworkInstantiated(info);

            if (OnCreatableInstantiated != null)
            {
                OnCreatableInstantiated(this, info);
            }

            netObjects.Add(netId, info);

            foreach (NetConnection conn in server.Connections.Values)
            {
                NetOutboundPacket packet = new NetOutboundPacket(NetDeliveryMethod.Reliable);
                packet.Write((byte)CustomPacketType.Instantiate);
                packet.Write(instEventName);
                packet.Write(netId);
                packet.Write(conn == clientOwner);

                for (int i = 0; i < args.Length; i++)
                {
                    packet.WriteDynamic(args[i]);
                }

                conn.SendPacket(packet);
            }

            NetOutboundPacket epacket = new NetOutboundPacket(NetDeliveryMethod.Reliable);

            epacket.Write((byte)CustomPacketType.Instantiate);
            epacket.Write(instEventName);
            epacket.Write(netId);
            epacket.Write(false);

            for (int i = 0; i < args.Length; i++)
            {
                epacket.WriteDynamic(args[i]);
            }

            instPackets.Add(netId, epacket);
        }