private void Awake() { var manager = World.Active.EntityManager; var entity = manager.CreateEntity(); var pos = transform.position.ToF2(); manager.AddComponentData(entity, new Translation() { Value = transform.position }); manager.AddComponentData(entity, new Scale() { Value = transform.localScale.x }); manager.AddComponentData(entity, collisionData); LaunchProjectileSystem.Launch( manager, entity, pos, 0.01f, new Unity.Mathematics.float2(1, UnityEngine.Random.Range(-1, 1)), 0 ); Destroy(gameObject); }
protected override void OnCreate() { Instance = this; base.OnCreate(); manager = World.Active.EntityManager; arrowArchetype = EntityManager.CreateArchetype( typeof(ProjectileLaunshSetupComponentData), typeof(RotationToMoveDirectionTagComponentData), typeof(Translation), typeof(Rotation), typeof(Scale), typeof(SpriteRendererComponentData), //typeof(SpriteSheetAnimationComponentData), typeof(RenderScaleComponentdata), typeof(RenderSharedComponentData), typeof(ProjectileCollisionComponentData) ); }
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(); }