예제 #1
0
        void HandleDestroyPacket(NetInboundPacket packet)
        {
            ushort           id = packet.ReadUInt16();
            NetCreatableInfo creatableInfo;

            if (netObjects.Creatables.TryGetValue(id, out creatableInfo))
            {
                //DashCMD.WriteLine("[ObjectNC] Destroying creatable with id {0}...", id);

                NetEntityListSnapshot entList = snapshotComponent.WorldSnapshot.NetEntityListSnapshot;
                entList.RemoveNetEntitiy(id);

                netObjects.Remove(id);
                creatableInfo.Creatable.OnNetworkDestroy();

                if (OnCreatableDestroyed != null)
                {
                    OnCreatableDestroyed(this, creatableInfo);
                }
            }
            else
            {
                DashCMD.WriteError("[ObjectNC] Received destroy for unknown creatable, id: {0}", id);
            }
        }
예제 #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);
            }
        }