Пример #1
0
        protected override JobHandle OnUpdate(JobHandle inputDeps)
        {
            //Debug.Log("MovementSystem working...");
            float time = Time.DeltaTime;

            NativeQueue <SpeedEvent> .ParallelWriter eventQueueParallel =
                eventsQueue.AsParallelWriter();

            JobHandle jobHandle =
                Entities
                .ForEach((ref Translation translation, ref MovementData movementData) =>
            {
                if (movementData.position.x > 5)
                {
                    movementData.speed.x = -movementData.speed.x;
                    eventQueueParallel.Enqueue(new SpeedEvent {
                    });
                }
                if (movementData.position.x < -5)
                {
                    movementData.speed.x = -movementData.speed.x;
                    eventQueueParallel.Enqueue(new SpeedEvent {
                    });
                }
                if (movementData.position.y > 3)
                {
                    movementData.speed.y = -movementData.speed.y;
                    eventQueueParallel.Enqueue(new SpeedEvent {
                    });
                }
                if (movementData.position.y < -3)
                {
                    movementData.speed.y = -movementData.speed.y;
                    eventQueueParallel.Enqueue(new SpeedEvent {
                    });
                }

                movementData.position =
                    new float3(movementData.position.x + movementData.speed.x * time,
                               movementData.position.y + movementData.speed.y * time, 0);

                translation.Value = movementData.position;
            }).Schedule(inputDeps);

            // работа должна быть завершена, прежде чем мы будем читать события!
            // фактически, мы создаем точку синхронизации
            jobHandle.Complete();

            while (eventsQueue.TryDequeue(out SpeedEvent speedEvent))
            {
                Debug.Log("Event!");
                OnChangeSpeed?.Invoke(this, EventArgs.Empty);
            }

            return(jobHandle);
        }
    public void HandleClick()
    {
        OnChangeSpeed?.Invoke(speed);
        var sisters = UISelectSpeed.sisters;

        for (int i = 0, l = sisters.Count; i < l; i++)
        {
            if (sisters[i] == this)
            {
                continue;
            }
            sisters[i].SetNotActive();
        }
        GetComponent <Image>().sprite = sprites[1];
    }