/// <summary> /// Initializes the fighter controller /// </summary> protected override void Initialize() { base.Initialize(); // Init engine trails this.trails = new List <TrailSetting>(); for (int i = 0; i < this.trailPositions.Count; i++) { var trailPosition = this.trailPositions[i]; Transform3D trailTransform; Entity trailEntity = new Entity("trail_" + i) .AddComponent(trailTransform = new Transform3D() { LocalPosition = trailPosition }); this.Owner.AddChild(trailEntity); TrailSetting trail = this.trailManager.GetFreeTrail(trailTransform); trail.Thickness = 1; trail.ExpirationTime = 1f; trail.TimeStep = 0.02; } // Register fighter in screenplay manager var screenplay = this.EntityManager.Find("ScreenplayManager").FindComponent <ScreenplayManager>(); screenplay.RegisterFighter(new FighterSetting() { State = this.state, Transform = transform3D }); // Gets all fighter guns this.guns = new List <ProjectileEmitter>(); var gunEntities = this.Owner.ChildEntities.Where(e => e.Tag == "Gun"); foreach (var gunEntity in gunEntities) { var projectileEmitter = gunEntity.FindComponent <ProjectileEmitter>(); this.guns.Add(projectileEmitter); projectileEmitter.OnShoot += projectileEmitter_OnShoot; } this.laserTrigger.OnActionChange += laserTrigger_OnActionChange; // Load sound emitters var engineSoundEntity = this.Owner.FindChild("engineSoundEmitter"); if (engineSoundEntity == null) { engineSoundEntity = this.Owner; } this.engineSoundEmitter = engineSoundEntity.FindComponent <Sound3DEmitter>(); var gunsSoundEntity = this.Owner.FindChild("gunsSoundEmitter"); if (gunsSoundEntity == null) { gunsSoundEntity = this.Owner; } this.gunsSoundEmitter = gunsSoundEntity.FindComponent <Sound3DEmitter>(); }
/// <summary> /// Creates a new explosion decorator /// </summary> /// <param name="name">The entity name</param> /// <param name="frame">The explosion frame </param> public ExplosionDecorator(string name, int frame) { this.particleSystems = new List <ParticleSystem3D>(); this.entity = new Entity(name) .AddComponent(this.cachedTransform = new Transform3D()) ; ParticleSystem3D particleSystem; var emitter1 = new Entity() .AddComponent(new Transform3D()) .AddComponent(emitter = new Sound3DEmitter()) .AddComponent(particleSystem = new ParticleSystem3D() { NumParticles = 25, EmitRate = 300000, MinLife = TimeSpan.FromSeconds(1), MaxLife = TimeSpan.FromSeconds(1.5), LocalVelocity = Vector3.Zero, RandomVelocity = Vector3.One * 0.7f, MinSize = 20, MaxSize = 25, MaxRotateSpeed = 0.025f, MinRotateSpeed = -0.055f, InitialAngle = MathHelper.TwoPi, EndDeltaScale = 2f, EmitterSize = new Vector2(4), EmitterShape = ParticleSystem3D.Shape.FillRectangle, InterpolationColors = new List <Color>() { Color.White, Color.White, Color.Black }, LinearColorEnabled = true, Gravity = Vector3.Zero, Emit = false }) .AddComponent(new ParticleSystemRenderer3D()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Explosion/Explosion_1.png", DefaultLayers.Additive) { VertexColorEnabled = true })) ; this.particleSystems.Add(particleSystem); var emitter2 = new Entity() .AddComponent(new Transform3D()) .AddComponent(particleSystem = new ParticleSystem3D() { NumParticles = 4, EmitRate = 300000, MinLife = TimeSpan.FromSeconds(0.2), MaxLife = TimeSpan.FromSeconds(0.3), LocalVelocity = Vector3.Zero, RandomVelocity = Vector3.One * 0.01f, MinSize = 30, MaxSize = 40, InitialAngle = MathHelper.TwoPi, MaxRotateSpeed = 0.1f, MinRotateSpeed = -0.1f, EndDeltaScale = 0.3f, EmitterSize = new Vector2(1), EmitterShape = ParticleSystem3D.Shape.FillRectangle, InterpolationColors = new List <Color>() { Color.White, Color.Black }, LinearColorEnabled = true, Gravity = Vector3.Zero, Emit = false }) .AddComponent(new ParticleSystemRenderer3D()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Explosion/Explosion_3.png", DefaultLayers.Additive) { VertexColorEnabled = true })) ; this.particleSystems.Add(particleSystem); var emitter3 = new Entity() .AddComponent(new Transform3D()) .AddComponent(particleSystem = new ParticleSystem3D() { NumParticles = 60, EmitRate = 300000, MinLife = TimeSpan.FromSeconds(2), MaxLife = TimeSpan.FromSeconds(2.4), LocalVelocity = Vector3.Zero, RandomVelocity = Vector3.One * 1f, MinSize = 0.7f, MaxSize = 0.7f, InitialAngle = MathHelper.TwoPi, Gravity = Vector3.Zero, EndDeltaScale = 1, EmitterSize = new Vector2(1), EmitterShape = ParticleSystem3D.Shape.FillRectangle, InterpolationColors = new List <Color>() { Color.White, Color.Black }, LinearColorEnabled = true, Emit = false }) .AddComponent(new ParticleSystemRenderer3D()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Blaster.png", DefaultLayers.Additive) { VertexColorEnabled = true })) ; this.particleSystems.Add(particleSystem); var emitter4 = new Entity() .AddComponent(new Transform3D()) .AddComponent(particleSystem = new ParticleSystem3D() { NumParticles = 15, EmitRate = 300000, MinLife = TimeSpan.FromSeconds(1.5), MaxLife = TimeSpan.FromSeconds(4), LocalVelocity = Vector3.Zero, RandomVelocity = Vector3.One * 0.2f, MinSize = 15, MaxSize = 20, MaxRotateSpeed = 0.015f, MinRotateSpeed = -0.015f, InitialAngle = MathHelper.TwoPi, EndDeltaScale = 2f, EmitterSize = new Vector2(4), EmitterShape = ParticleSystem3D.Shape.FillRectangle, AlphaEnabled = true, InterpolationColors = new List <Color>() { Color.White * 0.5f, Color.Black }, LinearColorEnabled = true, Gravity = Vector3.Zero, Emit = false }) .AddComponent(new ParticleSystemRenderer3D()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Explosion/Explosion_5.png", DefaultLayers.Alpha) { VertexColorEnabled = true })) ; this.particleSystems.Add(particleSystem); Entity shockwave = new Entity("shockwave") .AddComponent(new Transform3D() { Rotation = new Vector3(0.3f, -0.2f, -0.4f) }) .AddComponent(new Model("Content/Models/Plane.FBX")) .AddComponent(new ModelRenderer()) .AddComponent(this.shockwave = new ShockwaveBehavior()) .AddComponent(new MaterialsMap(new BasicMaterial("Content/Textures/Explosion/Explosion_4.png", DefaultLayers.Additive))) ; this.entity.AddChild(emitter1); this.entity.AddChild(emitter2); this.entity.AddChild(emitter3); this.entity.AddChild(emitter4); this.entity.AddChild(shockwave); this.entity.EntityInitialized += (s, e) => { var screenplay = this.entity.Scene.EntityManager.Find("ScreenplayManager").FindComponent <ScreenplayManager>(); screenplay.FrameEvent(frame, this.BayExplosion); }; }