Example #1
0
    protected override void OnUpdate()
    {
        var animationsToSet = new NativeQueue <SetterData>(Allocator.TempJob);

        new StateMachineJob()
        {
            animationsToSet = animationsToSet.AsParallelWriter()
        }.Schedule(this).Complete();

        SetterData setData;

        while (animationsToSet.TryDequeue(out setData))
        {
            AnimationSetterUtil.SetAnimation(EntityManager, setData.entity, setData.animation);
        }

        animationsToSet.Dispose();
    }
 protected virtual void EndInitEntityData(Entity entity, EntityManager manager)
 {
     AnimationSetterUtil.SetAnimation(manager, entity, AnimationType.IDLE, 4);
 }
    protected override void OnUpdate()
    {
        var manager = EntityManager;
        var query   = GetEntityQuery(
            ComponentType.ReadOnly <Translation>(),
            ComponentType.ReadOnly <ProcessProjectileCollisionTag>()
            );
        var entities    = query.ToEntityArray(Allocator.TempJob);
        var processData = query.ToComponentDataArray <ProcessProjectileCollisionTag>(Allocator.TempJob);
        var translation = query.ToComponentDataArray <Translation>(Allocator.TempJob);

        for (int i = 0; i < entities.Length; i++)
        {
            if (processData[i].hittedByProjectile && !processData[i].olreadyProceeded)
            {
                var temp = processData[i];
                temp.olreadyProceeded   = true;
                temp.hittedByProjectile = false;
                processData[i]          = temp;
                manager.SetComponentData(entities[i], processData[i]);

                if (manager.HasComponent <HealthComponentData>(entities[i]))
                {
                    var health = manager.GetComponentData <HealthComponentData>(entities[i]);
                    health.value -= processData[i].processData.damage;
                    manager.SetComponentData(entities[i], health);
                }

                switch (processData[i].processData.type)
                {
                case HitProcessingType.REMOVE:
                    manager.DestroyEntity(entities[i]);
                    break;

                case HitProcessingType.SET_ANIMATION:
                    AnimationSetterUtil.SetAnimation(manager, entities[i], processData[i].processData.animation);
                    break;

                case HitProcessingType.REMOVE_WITH_DELAY:
                    DestroyEntityWithDelaySystem.MarkToDestroy(manager, entities[i], processData[i].processData.destroyDelay);
                    break;

                case HitProcessingType.SET_ANIMATION_AND_REMOVE_WITH_DELAY:
                    AnimationSetterUtil.SetAnimation(manager, entities[i], processData[i].processData.animation);
                    DestroyEntityWithDelaySystem.MarkToDestroy(manager, entities[i], processData[i].processData.destroyDelay);
                    break;

                case HitProcessingType.LAUNCH_AS_PROJECTILE:
                    LaunchProjectileSystem.Launch(
                        manager,
                        entities[i],
                        translation[i].Value.ToF2() + processData[i].processData.direction + UnityEngine.Random.Range(-1, 1),
                        processData[i].processData.absoluteProjectileVelocity,
                        processData[i].processData.direction,
                        processData[i].processData.destroyDelay
                        );
                    break;

                case HitProcessingType.SET_ANIMATION_AND_LAUNCH_AS_PROJECTILE:
                    AnimationSetterUtil.SetAnimation(manager, entities[i], processData[i].processData.animation);
                    LaunchProjectileSystem.Launch(
                        manager,
                        entities[i],
                        translation[i].Value.ToF2() + processData[i].processData.direction + UnityEngine.Random.Range(-1, 1),
                        processData[i].processData.absoluteProjectileVelocity,
                        processData[i].processData.direction,
                        processData[i].processData.destroyDelay
                        );
                    break;
                }
            }
        }

        entities.Dispose();
        processData.Dispose();
        translation.Dispose();
    }
    protected override void EndInitEntityData(Entity entity, EntityManager manager)
    {
        base.EndInitEntityData(entity, manager);

        AnimationSetterUtil.SetAnimation(manager, entity, AnimationType.SHOOT, 4);
    }