@@ -15,7 +15,8 @@ use crate::{
1515 collision:: SortedCollisionEvent ,
1616 loot:: LootDropsResource ,
1717 spawnable:: {
18- InitialMotion , SpawnConsumableEvent , SpawnEffectEvent , SpawnProjectileEvent , TransformType ,
18+ InitialMotion , ProjectileSpawnData , SpawnConsumableEvent , SpawnEffectEvent ,
19+ SpawnProjectileEvent , TransformType ,
1920 } ,
2021} ;
2122
@@ -147,23 +148,53 @@ pub fn mob_execute_behavior_system(
147148 sound_effect_type : SoundEffectType :: EnemyFireBlast ,
148149 } ) ;
149150
150- spawn_projectile_event_writer. send ( SpawnProjectileEvent {
151- projectile_type : projectile_spawner. projectile_type . clone ( ) ,
152- transform_type : TransformType :: Initialized ( projectile_transform) ,
153- damage : projectile_spawner. damage ,
154- despawn_time : projectile_spawner. despawn_time ,
155- initial_motion,
156- source : entity,
157- offset_position : match projectile_spawner. position {
158- SpawnPosition :: Global ( coords) => {
159- coords - mob_transform. translation . xy ( )
160- }
161- SpawnPosition :: Local ( coords) => {
162- mob_transform. local_x ( ) . xy ( ) * coords. x
163- + mob_transform. local_y ( ) . xy ( ) * coords. y
164- }
165- } ,
166- } ) ;
151+ if let ProjectileType :: Beam ( _) = projectile_spawner. projectile_type {
152+ spawn_effect_event_writer. send ( SpawnEffectEvent {
153+ effect_type : EffectType :: EnemyBeamSpawn ,
154+ transform_type : TransformType :: Initialized (
155+ projectile_transform. with_scale ( Vec3 :: new (
156+ projectile_transform. scale . x ,
157+ projectile_transform. scale . y * projectile_spawner. range ,
158+ projectile_transform. scale . z ,
159+ ) ) ,
160+ ) ,
161+ source : Some ( entity) ,
162+ projectile_spawn : Some ( ProjectileSpawnData {
163+ damage : projectile_spawner. damage ,
164+ despawn_time : projectile_spawner. despawn_time ,
165+ offset_position : match projectile_spawner. position {
166+ SpawnPosition :: Global ( coords) => {
167+ coords - mob_transform. translation . xy ( )
168+ }
169+ SpawnPosition :: Local ( coords) => {
170+ mob_transform. local_x ( ) . xy ( ) * coords. x
171+ + mob_transform. local_y ( ) . xy ( ) * coords. y
172+ }
173+ } ,
174+ } ) ,
175+ ..default ( )
176+ } ) ;
177+ } else {
178+ spawn_projectile_event_writer. send ( SpawnProjectileEvent {
179+ projectile_type : projectile_spawner. projectile_type . clone ( ) ,
180+ transform_type : TransformType :: Initialized (
181+ projectile_transform,
182+ ) ,
183+ damage : projectile_spawner. damage ,
184+ despawn_time : projectile_spawner. despawn_time ,
185+ initial_motion,
186+ source : entity,
187+ offset_position : match projectile_spawner. position {
188+ SpawnPosition :: Global ( coords) => {
189+ coords - mob_transform. translation . xy ( )
190+ }
191+ SpawnPosition :: Local ( coords) => {
192+ mob_transform. local_x ( ) . xy ( ) * coords. x
193+ + mob_transform. local_y ( ) . xy ( ) * coords. y
194+ }
195+ } ,
196+ } ) ;
197+ }
167198 }
168199 }
169200 }
0 commit comments