public void Convert(Entity entity, EntityManager eManager, GameObjectConversionSystem conversionSystem)
        {
            instance  = this;
            archetype = eManager.CreateArchetype(
                typeof(Position2D),
                typeof(Rotation2D),
                typeof(Scale),
                //required params
                typeof(SpriteIndex),
                typeof(SpriteSheetAnimation),
                typeof(SpriteSheetMaterial),
                typeof(SpriteSheetColor),
                typeof(SpriteMatrix),
                typeof(BufferHook)
                );

            NativeArray <Entity> entities = new NativeArray <Entity>(spriteCount, Allocator.Temp);

            eManager.CreateEntity(archetype, entities);

            //only needed for first tiem material baking
            KeyValuePair <Material, float4[]> atlasData = SpriteSheetCache.BakeSprites(sprites, "emoji");
            SpriteSheetMaterial material = new SpriteSheetMaterial {
                material = atlasData.Key
            };

            DynamicBufferManager.manager = eManager;
            DynamicBufferManager.GenerateBuffers(material, entities.Length);
            DynamicBufferManager.BakeUvBuffer(material, atlasData);

            Rect   area      = GetSpawnArea();
            Random rand      = new Random((uint)UnityEngine.Random.Range(0, int.MaxValue));
            int    cellCount = atlasData.Value.Length;

            for (int i = 0; i < entities.Length; i++)
            {
                Entity e = entities[i];
                eManager.SetComponentData(e, new SpriteIndex {
                    Value = rand.NextInt(0, cellCount)
                });
                eManager.SetComponentData(e, new Scale {
                    Value = 10
                });
                eManager.SetComponentData(e, new Position2D {
                    Value = rand.NextFloat2(area.min, area.max)
                });
                eManager.SetComponentData(e, new SpriteSheetAnimation {
                    maxSprites = cellCount, play = true, repetition = SpriteSheetAnimation.RepetitionType.Loop, samples = 10
                });
                var color            = UnityEngine.Random.ColorHSV(.15f, .75f);
                SpriteSheetColor col = new SpriteSheetColor {
                    color = new float4(color.r, color.g, color.b, color.a)
                };
                eManager.SetComponentData(e, col);
                eManager.SetComponentData(e, new BufferHook {
                    bufferID = i, bufferEnityID = DynamicBufferManager.GetEntityBufferID(material)
                });
                eManager.SetSharedComponentData(e, material);
            }
        }
Пример #2
0
        protected DynamicBufferManager sendBufferManager;    //发送数据的缓存,统一写到内存中,调用一次发送

        public ClientBaseSocket()
        {
            m_tcpClient = new TcpClient();
            m_tcpClient.Client.Blocking = true; //使用阻塞模式,即同步模式
            ReceiveBufferManager        = new DynamicBufferManager(1024 * 4);
            sendBufferManager           = new DynamicBufferManager(1024 * 4);
        }
    public static Entity Instantiate(EntityArchetype archetype, SpriteSheetAnimator animator)
    {
        Entity e = EntityManager.CreateEntity(archetype);

        animator.currentAnimationIndex = animator.defaultAnimationIndex;
        SpriteSheetAnimationData startAnim = animator.animations[animator.defaultAnimationIndex];
        int      maxSprites = startAnim.sprites.Length;
        Material material   = SpriteSheetCache.GetMaterial(animator.animations[animator.defaultAnimationIndex].animationName);
        int      bufferID   = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material);

        var spriteSheetMaterial = new SpriteSheetMaterial {
            material = material
        };
        BufferHook bh = new BufferHook {
            bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial)
        };

        EntityManager.SetComponentData(e, bh);
        EntityManager.SetComponentData(e, new SpriteSheetAnimation {
            maxSprites = maxSprites, play = startAnim.playOnStart, samples = startAnim.samples, repetition = startAnim.repetition
        });
        EntityManager.SetComponentData(e, new SpriteIndex {
            Value = startAnim.startIndex
        });
        EntityManager.SetSharedComponentData(e, spriteSheetMaterial);
        animator.managedEntity = e;
        SpriteSheetCache.entityAnimator.Add(e, animator);
        return(e);
    }
    public static void SetAnimation(EntityCommandBuffer commandBuffer, Entity e, SpriteSheetAnimationData animation, BufferHook hook)
    {
        Material oldMaterial  = DynamicBufferManager.GetMaterial(hook.bufferEnityID);
        string   oldAnimation = SpriteSheetCache.GetMaterialName(oldMaterial);

        if (animation.animationName != oldAnimation)
        {
            Material material            = SpriteSheetCache.GetMaterial(animation.animationName);
            var      spriteSheetMaterial = new SpriteSheetMaterial {
                material = material
            };

            //clean old buffer
            DynamicBufferManager.RemoveBuffer(oldMaterial, hook.bufferID);

            //use new buffer
            int        bufferID = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material);
            BufferHook bh       = new BufferHook {
                bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial)
            };

            commandBuffer.SetSharedComponent(e, spriteSheetMaterial);
            commandBuffer.SetComponent(e, bh);
        }
        commandBuffer.SetComponent(e, new SpriteSheetAnimation {
            maxSprites = animation.sprites.Length, play = animation.playOnStart, samples = animation.samples, repetition = animation.repetition, elapsedFrames = 0
        });
        commandBuffer.SetComponent(e, new SpriteIndex {
            Value = animation.startIndex
        });
    }
Пример #5
0
    public static void SetAnimation(Entity e, SpriteSheetAnimationData animation)
    {
        int      bufferEnityID = EntityManager.GetComponentData <BufferHook>(e).bufferEnityID;
        int      bufferID      = EntityManager.GetComponentData <BufferHook>(e).bufferID;
        Material oldMaterial   = DynamicBufferManager.GetMaterial(bufferEnityID);
        string   oldAnimation  = SpriteSheetCache.GetMaterialName(oldMaterial);

        if (animation.animationName != oldAnimation)
        {
            Material material            = SpriteSheetCache.GetMaterial(animation.animationName);
            var      spriteSheetMaterial = new SpriteSheetMaterial {
                material = material
            };

            DynamicBufferManager.RemoveBuffer(oldMaterial, bufferID);

            //use new buffer
            bufferID = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material);
            BufferHook bh = new BufferHook {
                bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial)
            };

            EntityManager.SetSharedComponentData(e, spriteSheetMaterial);
            EntityManager.SetComponentData(e, bh);
        }
        EntityManager.SetComponentData(e, new SpriteSheetAnimation {
            maxSprites = animation.sprites.Length, play = animation.playOnStart, samples = animation.samples, repetition = animation.repetition, elapsedFrames = 0
        });
        EntityManager.SetComponentData(e, new SpriteIndex {
            Value = animation.startIndex
        });
        MarkDirty <SpriteSheetColor>(e);
        MarkDirty <SpriteIndex>(e);
        MarkDirty <SpriteMatrix>(e);
    }
Пример #6
0
 public AsyncSendBufferManager(int bufferSize)
 {
     m_dynamicBufferManager    = new DynamicBufferManager(bufferSize);
     m_sendBufferList          = new List <SendBufferPacket>();
     m_sendBufferPacket.Offset = 0;
     m_sendBufferPacket.Count  = 0;
 }
    public static void DestroyEntity(EntityCommandBuffer commandBuffer, Entity e, BufferHook hook)
    {
        commandBuffer.DestroyEntity(e);
        Material material = DynamicBufferManager.GetMaterial(hook.bufferEnityID);

        DynamicBufferManager.RemoveBuffer(material, hook.bufferID);
    }
        private SendBufferPacket m_sendBufferPacket; //当前的发送包

        #endregion Fields

        #region Constructors

        public AsyncSendBufferManager(int bufferSize)
        {
            m_dynamicBufferManager = new DynamicBufferManager(bufferSize);//初始化m_dynamicBufferManager
                                                                          //设置缓冲区buffer的大小
            m_sendBufferList = new List<SendBufferPacket>();//初始化发送包列表
            m_sendBufferPacket.Offset = 0;//当前发送包的偏移量
            m_sendBufferPacket.Count = 0;//当前发送包的长度
        }
        public static void DestroyEntity(EntityCommandBuffer eManager, Entity e, string materialName)
        {
            eManager.DestroyEntity(e);
            Material material = SpriteSheetCache.materialNameMaterial[materialName];
            int      bufferID = DynamicBufferManager.manager.GetComponentData <BufferHook>(e).bufferID;

            DynamicBufferManager.RemoveBuffer(material, bufferID);
        }
    public static void DestroyEntity(Entity e, string materialName)
    {
        Material material = SpriteSheetCache.GetMaterial(materialName);
        int      bufferID = EntityManager.GetComponentData <BufferHook>(e).bufferID;

        DynamicBufferManager.RemoveBuffer(material, bufferID);
        EntityManager.DestroyEntity(e);
    }
        private int Timeout = 8000; //线程等待时间

        #endregion Fields

        #region Constructors

        public SyncSocketInvokeElement()
        {
            m_tcpClient = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            m_protocolFlag = ProtocolFlag.None;
            m_outgoingDataAssembler = new OutgoingDataAssembler();
            m_recvBuffer = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize);
            m_incomingDataParser = new IncomingDataParser();
            m_sendBuffer = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize);
        }
        public void Convert(Entity entity, EntityManager eManager, GameObjectConversionSystem conversionSystem)
        {
            EntityArchetype archetype = eManager.CreateArchetype(
                typeof(Position2D),
                typeof(Rotation2D),
                typeof(Scale),
                //required params
                typeof(SpriteIndex),
                typeof(SpriteSheetAnimation),
                typeof(SpriteSheetMaterial),
                typeof(SpriteSheetColor),
                typeof(SpriteMatrix),
                typeof(BufferHook)
                );

            NativeArray <Entity> entities = new NativeArray <Entity>(spriteCount, Allocator.Temp);

            eManager.CreateEntity(archetype, entities);

            //only needed for the first time to bake the material and create the uv map
            SpriteSheetManager.RecordSpriteSheet(sprites, spriteSheetName, entities.Length);


            Rect   area                  = GetSpawnArea();
            Random rand                  = new Random((uint)UnityEngine.Random.Range(0, int.MaxValue));
            int    cellCount             = SpriteSheetCache.GetLength(spriteSheetName);
            SpriteSheetMaterial material = new SpriteSheetMaterial {
                material = SpriteSheetCache.GetMaterial(spriteSheetName)
            };

            for (int i = 0; i < entities.Length; i++)
            {
                Entity e = entities[i];
                eManager.SetComponentData(e, new SpriteIndex {
                    Value = rand.NextInt(0, cellCount)
                });
                eManager.SetComponentData(e, new Scale {
                    Value = 10
                });
                eManager.SetComponentData(e, new Position2D {
                    Value = rand.NextFloat2(area.min, area.max)
                });
                eManager.SetComponentData(e, new SpriteSheetAnimation {
                    frameCount = cellCount, playMode = PlayMode.Loop, framesPerSecond = 10
                });
                var color            = UnityEngine.Random.ColorHSV(.15f, .75f);
                SpriteSheetColor col = new SpriteSheetColor {
                    color = new float4(color.r, color.g, color.b, color.a)
                };
                eManager.SetComponentData(e, col);
                eManager.SetComponentData(e, new BufferHook {
                    bufferID = i, bufferEntityID = DynamicBufferManager.GetEntityBufferID(material)
                });
                eManager.SetSharedComponentData(e, material);
            }
        }
        public virtual bool processReceive(byte[] buffer, int offset, int length)
        {
            DynamicBufferManager bufferManager = userToken.DynamicBufferManager;

            bufferManager.writeBuffer(buffer, offset, length);
            bool result = processPacket(bufferManager.Buffer, offset, length);

            bufferManager.clearBuffer(length);
            return(result);
        }
Пример #14
0
 public AsyncSocketServer()
 {
     tcpClient = new TcpClient();
     tcpClient.Client.Blocking = true; //使用阻塞模式,即同步模式
     protocolFlag          = ProtocolFlag.None;
     SocketTimeOutMS       = ProtocolConst.SocketTimeOutMS;
     outgoingDataAssembler = new OutgoingDataAssembler();
     recvBuffer            = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize);
     incomingDataParser    = new IncomingDataParser();
     sendBuffer            = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize);
 }
    public static void RecordSpriteSheet(Sprite[] sprites, string spriteSheetName, int spriteCount = 0)
    {
        KeyValuePair <Material, float4[]> atlasData = SpriteSheetCache.BakeSprites(sprites, spriteSheetName);
        SpriteSheetMaterial material = new SpriteSheetMaterial {
            material = atlasData.Key
        };

        DynamicBufferManager.GenerateBuffers(material, spriteCount);
        DynamicBufferManager.BakeUvBuffer(material, atlasData);
        renderInformation.Add(new RenderInformation(material.material, DynamicBufferManager.GetEntityBuffer(material.material)));
    }
Пример #16
0
        protected DynamicBufferManager m_sendBuffer;             //发送数据的缓存,统一写到内存中,调用一次发送

        public SyncSocketInvokeElement()
        {
            m_tcpClient = new TcpClient();
            m_tcpClient.Client.Blocking = true; //使用阻塞模式,即同步模式
            m_protocolFlag          = ProtocolFlag.None;
            SocketTimeOutMS         = ProtocolConst.SocketTimeOutMS;
            m_outgoingDataAssembler = new OutgoingDataAssembler();
            m_recvBuffer            = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize);
            m_incomingDataParser    = new IncomingDataParser();
            m_sendBuffer            = new DynamicBufferManager(ProtocolConst.ReceiveBufferSize);
        }
    protected override void OnUpdate()
    {
        DynamicBufferManager.CopyBufferEntities(m_bufferEntities);
        var bufferEntities = m_bufferEntities.AsArray();
        var entityManager  = EntityManager;

        Entities.ForEach((Entity e, in BufferHook hook, in LocalToWorld localToWorld) =>
        {
            var buffer            = GetBuffer <MatrixBuffer>(bufferEntities[hook.bufferEnityID]);
            buffer[hook.bufferID] = localToWorld.Value;
        })
Пример #18
0
    protected override void OnUpdate()
    {
        DynamicBufferManager.CopyBufferEntities(m_bufferEntities);
        var bufferEntities = m_bufferEntities.AsArray();
        var entityManager  = EntityManager;

        Entities.ForEach((in BufferHook hook, in SpriteSheetColor data) =>
        {
            var buffer            = GetBuffer <SpriteColorBuffer>(bufferEntities[hook.bufferEnityID]);
            buffer[hook.bufferID] = data.color;
        })
Пример #19
0
        public bool ClearFirstPacket()
        {
            if (m_SendBufferList.Count <= 0)
            {
                return(false);
            }
            int count = m_SendBufferList[0].Count;

            DynamicBufferManager.Clear(count);
            m_SendBufferList.RemoveAt(0);
            return(true);
        }
Пример #20
0
        public AsyncSocketUserToken(int asyncReceviceBufferSize)
        {
            asyncReceviceBuffer          = new byte[asyncReceviceBufferSize];
            RecevicveEventArgs           = new SocketAsyncEventArgs();
            RecevicveEventArgs.UserToken = this;
            RecevicveEventArgs.SetBuffer(asyncReceviceBuffer, 0, asyncReceviceBuffer.Length);
            SendEventArgs           = new SocketAsyncEventArgs();
            SendEventArgs.UserToken = this;

            ReceiveBuffer = new DynamicBufferManager(ProtocolConst.InitBufferSize);
            SendBuffer    = new AsyncSendBufferManager(ProtocolConst.InitBufferSize);
        }
 public static void RecordAnimator(SpriteSheetAnimator animator)
 {
     foreach (SpriteSheetAnimationData animation in animator.animations)
     {
         KeyValuePair <Material, float4[]> atlasData = SpriteSheetCache.BakeSprites(animation.sprites, animation.animationName);
         SpriteSheetMaterial material = new SpriteSheetMaterial {
             material = atlasData.Key
         };
         DynamicBufferManager.GenerateBuffers(material);
         DynamicBufferManager.BakeUvBuffer(material, atlasData);
         renderInformation.Add(new RenderInformation(material.material, DynamicBufferManager.GetEntityBuffer(material.material)));
     }
 }
Пример #22
0
        /// <summary>
        /// 接收到的数据进行处理:该传感器没有帧头帧尾,一帧一处理。
        /// </summary>
        /// <param name="buffer"></param>
        /// <param name="offset"></param>
        /// <param name="count"></param>
        /// <returns></returns>
        public override bool ProcessReceive(byte[] buffer, int offset, int count)
        {
            m_activeDT = DateTime.UtcNow;
            DynamicBufferManager receiveBuffer = m_asyncSocketUserToken.ReceiveBuffer;



            //写进缓冲区
            receiveBuffer.WriteBuffer(buffer, offset, count);
            bool result       = true;
            int  preCount     = 0; //
            int  packetLength = 0; //2字结或者

            if (NetByteOrder)
            {
                packetLength = System.Net.IPAddress.NetworkToHostOrder(packetLength); //把网络字节顺序转为本地字节顺序
            }
            while (receiveBuffer.DataCount > 0)                                       //0
            {
                //心跳或者其他包
                packetLength = receiveBuffer.DataCount;//全部取出

                if (packetLength == 1)
                {
                    receiveBuffer.Buffer[0] = 0xFE;//
                    ///心跳包,
                    Console.WriteLine("心跳包");
                }
                if (packetLength == 38)
                {
                    byte[] forCheck     = new byte[36];
                    byte[] bCheckResult = new byte[2];
                    Array.Copy(receiveBuffer.Buffer, 0, forCheck, 0, 36);
                    bCheckResult = CheckSumCRC(forCheck);
                    //校验OK:
                    if ((bCheckResult[0] == receiveBuffer.Buffer[37]) && (bCheckResult[1] == receiveBuffer.Buffer[36]))
                    {
                        bool paseResult = ProcessPacket(receiveBuffer.Buffer, 0, packetLength);
                    }
                    else
                    {
                        Program.Logger.Debug("数据帧尾有问题,抛弃一帧");
                        Console.WriteLine(System.DateTime.Now + "数据帧尾有问题,抛弃一帧");
                    }
                }

                //一帧数据全部清除
                receiveBuffer.Clear(packetLength);
            }
            return(true);
        }
Пример #23
0
        protected SocketAsyncEventArgs m_sendEventArgs; //异步发送事件

        #endregion Fields

        #region Constructors

        public AsyncSocketUserToken(int asyncReceiveBufferSize)
        {
            m_connectSocket = null;//清空connectSocket
            m_asyncSocketInvokeElement = null;//清空数据传输协议
            m_receiveEventArgs = new SocketAsyncEventArgs();//新建接收SocketAsyncEventArgs事件
            m_receiveEventArgs.UserToken = this;//指定UserToken
            m_asyncReceiveBuffer = new byte[asyncReceiveBufferSize];//设置接收缓冲区大小
            m_receiveEventArgs.SetBuffer(m_asyncReceiveBuffer, 0, m_asyncReceiveBuffer.Length);//设置异步套接字方法的数据缓冲区

            m_sendEventArgs = new SocketAsyncEventArgs();//新建发送SocketAsyncEventArgs事件
            m_sendEventArgs.UserToken = this;//指定UserToken
            m_receiveBuffer = new DynamicBufferManager(ProtocolConst.InitBufferSize);//动态buffer管理对象(接收)
            m_sendBuffer = new AsyncSendBufferManager(ProtocolConst.InitBufferSize);//动态buffer管理对象(发送)
        }
Пример #24
0
    public void InitClient(string ip, int port, SZHReceiveCallBack clientReceiveCallBack)
    {
        clientBuffer = new DynamicBufferManager(reciveSize, OnClientReceive);
        this.clientReceiveCallBack = clientReceiveCallBack;

        clientSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        IPEndPoint clientEP = new IPEndPoint(IPAddress.Parse(ip), port);

        clientSocket.Connect(clientEP);

        clientSocket.BeginReceive(tempClientBuffer, 0, reciveSize, SocketFlags.None,
                                  new System.AsyncCallback(clientReceive), this.clientSocket);
    }
Пример #25
0
        public void CheckPackage()
        {
            IPAddress ip = IPAddress.Parse(CameraIP);

            recDynBuffer   = new DynamicBufferManager(0xa00000);
            this.startCode = new byte[] { 0xff, 0xd8, 0xff };
            this.endCode   = new byte[] { 0xff, 0xd9 };

            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(ip, 20000);
            threadClient = new Thread(new ParameterizedThreadStart(ReceiveData));
            threadClient.IsBackground = true;
            threadClient.Start(socket);
        }
Пример #26
0
        private void btn_Connet_Click(object sender, EventArgs e)
        {
            IPAddress ip = IPAddress.Parse(textBox4.Text);

            recDynBuffer   = new DynamicBufferManager(0xa00000);
            this.startCode = new byte[] { 0xff, 0xd8, 0xff };
            this.endCode   = new byte[] { 0xff, 0xd9 };

            socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(ip, 20000);
            threadClient = new Thread(new ParameterizedThreadStart(this.ReceiveData));
            threadClient.IsBackground = true;
            threadClient.Start(this.socket);
        }
Пример #27
0
        public BaseClient(int asyncBufferSize)
        {
            bufferSize = asyncBufferSize;
            Handler    = new DynamicBufferManager(asyncBufferSize);

            receiveEventArgs            = new SocketAsyncEventArgs();
            receiveEventArgs.Completed += IO_Completed;
            receiveEventArgs.UserToken  = this;
            receiveEventArgs.SetBuffer(new byte[bufferSize], 0, bufferSize);

            sendEventArgs            = new SocketAsyncEventArgs();
            sendEventArgs.Completed += IO_Completed;
            sendEventArgs.UserToken  = this;
        }
Пример #28
0
    protected override JobHandle OnUpdate(JobHandle inputDeps)
    {
        var buffers = DynamicBufferManager.GetIndexBuffers();
        NativeArray <JobHandle> jobs = new NativeArray <JobHandle>(buffers.Length, Allocator.TempJob);

        for (int i = 0; i < buffers.Length; i++)
        {
            DynamicBuffer <SpriteIndexBuffer> indexBuffer = buffers[i];
            jobs[i] = Entities
                      .WithNativeDisableParallelForRestriction(indexBuffer)
                      .WithChangeFilter <SpriteIndex>()
                      .ForEach((in SpriteIndex data, in BufferHook hook) => {
                if (i == hook.bufferEnityID)
                {
                    indexBuffer[hook.bufferID] = data.Value;
                }
            }).Schedule(inputDeps);
    public static Entity Instantiate(EntityArchetype archetype, string spriteSheetName)
    {
        Entity   e        = EntityManager.CreateEntity(archetype);
        Material material = SpriteSheetCache.GetMaterial(spriteSheetName);
        int      bufferID = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material);

        var spriteSheetMaterial = new SpriteSheetMaterial {
            material = material
        };
        BufferHook bh = new BufferHook {
            bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial)
        };

        EntityManager.SetComponentData(e, bh);
        EntityManager.SetSharedComponentData(e, spriteSheetMaterial);
        return(e);
    }
Пример #30
0
    protected override JobHandle OnUpdate(JobHandle inputDeps)
    {
        var buffers = DynamicBufferManager.GetMatrixBuffers();
        NativeArray <JobHandle> jobs = new NativeArray <JobHandle>(buffers.Length, Allocator.TempJob);

        for (int i = 0; i < buffers.Length; i++)
        {
            inputDeps = new UpdateJob()
            {
                indexBuffer   = buffers[i],
                bufferEnityID = i
            }.Schedule(this, inputDeps);
            jobs[i] = inputDeps;
        }
        JobHandle.CompleteAll(jobs);
        jobs.Dispose();
        return(inputDeps);
    }
Пример #31
0
    //初始化服务器
    public void InitServer(/*SZHReceiveCallBack serverCallBack*/)
    {
        serverBuffer = new DynamicBufferManager(reciveSize, OnServerReceive);

        //this.serverCallBack = serverCallBack;

        serverSocket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);

        IPEndPoint serverEP = new IPEndPoint(IPAddress.Any, 6065);

        serverSocket.Bind(serverEP);

        serverSocket.Listen(10);

        serverSocket.BeginAccept(new AsyncCallback(ServerAccept), serverSocket);

        //Debug.Log("Server Has Init");
    }
    protected override JobHandle OnUpdate(JobHandle inputDeps)
    {
        var buffers = DynamicBufferManager.GetIndexBuffers();
        var jobs    = new NativeArray <JobHandle>(buffers.Length, Allocator.Persistent);

        // Debug.Log(buffers[0].Length +"-"+buffers[1].Length +"-"+buffers[2].Length +"-"+buffers[3].Length);
        for (var i = 0; i < buffers.Length; i++)
        {
            Debug.Log(i);
            inputDeps = new UpdateJob()
            {
                indexBuffer    = buffers[i],
                bufferEntityId = i
            }.Schedule(this, inputDeps);
            jobs[i] = inputDeps;
        }
        JobHandle.CompleteAll(jobs);
        jobs.Dispose();
        return(inputDeps);
    }
        public static Entity SpawnEntity(EntityCommandBuffer eManager, string materialName)
        {
            var e = eManager.CreateEntity(instance.archetype);
            //only needed for first tiem material baking
            Material material = SpriteSheetCache.materialNameMaterial[materialName];

            int    bufferID   = DynamicBufferManager.AddDynamicBuffers(DynamicBufferManager.GetEntityBuffer(material), material);
            Entity uvBuffer   = DynamicBufferManager.GetEntityBuffer(material);
            int    maxSprites = DynamicBufferManager.manager.GetBuffer <UvBuffer>(uvBuffer).Length;

            Rect   area = instance.GetSpawnArea();
            Random rand = new Random((uint)UnityEngine.Random.Range(0, int.MaxValue));

            eManager.SetComponent(e, new SpriteIndex {
                Value = 0
            });
            eManager.SetComponent(e, new Scale {
                Value = 20
            });
            eManager.SetComponent(e, new Position2D {
                Value = rand.NextFloat2(area.min, area.max)
            });
            eManager.SetComponent(e, new SpriteSheetAnimation {
                maxSprites = maxSprites, play = true, repetition = SpriteSheetAnimation.RepetitionType.Loop, samples = 10
            });
            var color            = UnityEngine.Random.ColorHSV(.15f, .75f);
            SpriteSheetColor col = new SpriteSheetColor {
                color = new float4(color.r, color.g, color.b, color.a)
            };

            eManager.SetComponent(e, col);
            var spriteSheetMaterial = new SpriteSheetMaterial {
                material = material
            };

            eManager.SetComponent(e, new BufferHook {
                bufferID = bufferID, bufferEnityID = DynamicBufferManager.GetEntityBufferID(spriteSheetMaterial)
            });
            eManager.SetSharedComponent(e, spriteSheetMaterial);
            return(e);
        }