public override bool Trigger(PlayerShip p)
        {
            Vector3 Position3 = new Vector3(p.Position.X(), 0, p.Position.Y());

            for (int i = 0; i < 10; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 2000, ParticleColor, 20, 5);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 4000, 5);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 400, 7);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 300, 7);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 500, 7);

            for (int i = 0; i < 2; i++)
            {
                FlamingChunkSystem.AddParticle(Position3, Rand.V3() / 1.5f, new Vector3(0, -0.25f, 0),
                                               Rand.V3(), Rand.V3() / 10, 150, 30, new Vector3(0.2f, 0.5f, 1), new Vector3(0.2f, 0.5f, 1), 0, 3);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(0.5f, 0.75f, 1), p.Size.X() * 50, 4);
            for (int i = 0; i < 30; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 200, new Color(0.5f, 0.75f, 1), 200, 5);
            }

            p.InvTime = 10000;

            return(true);
        }
示例#2
0
        public override void Destroy()
        {
            Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());

            for (int i = 0; i < 10; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 400, ParticleColor, 40, 5);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 800, 5);


            for (int i = 0; i < 2; i++)
            {
                FlamingChunkSystem.AddParticle(Position3, Rand.V3() * 1.5f, new Vector3(0, -0.25f, 0),
                                               Rand.V3(), Rand.V3() / 10, 40, 30, new Vector3(1, 0.5f, 0.2f), new Vector3(1, 0.1f, 0.2f), 0, 3);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), Size.X() * 12, 4);
            for (int i = 0; i < 30; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 400, new Color(1, 0.75f, 0.5f), 50, 5);
            }

            Armed = true;
            base.Destroy();
        }
        public static void Load()
        {
            TextParticleSystem.Load();
            if (!Loaded)
            {
                ParticleEffect  = AssetManager.Load <Effect>("Effects/ShipGame/ShipParticles");
                ParticleSystems = new BasicParticleSystem[8];

                ParticleSystems[0] = new ShipParticleSystem(2000, 0.6f, 2, "Smoke", 1, 2f);
                ParticleSystems[1] = new FlareSystem(5000, 20, "Flare");
                ParticleSystems[2] = new ShipParticleSystem(2000, 0.1f, 2, "Smoke", 1, 1f);
                ParticleSystems[3] = new FlamingChunkSystem(100);
                ParticleSystems[4] = new ShipParticleSystem(100, 0.25f, 0, "Ring", 0, 2f);
                ParticleSystems[5] = new ShipParticleSystem(2000, 1f, 0, "Spark", 1, 0);
                ParticleSystems[6] = new ShipParticleSystem(50, 4, 0, "Ring", 0.1f, 2f);
                ParticleSystems[7] = new LineParticleSystem(1000, 10);

                for (int i = 0; i < ParticleSystems.Length; i++)
                {
                    ColorParticleSystem.AddLast(ParticleSystems[i]);
                }

                ringSystem = new RingSystem(250, "Ring");

                Loaded = true;
            }
            else
            {
                foreach (BasicParticleSystem system in ParticleSystems)
                {
                    system.Clear();
                }
            }
        }
        public override void Destroy()
        {
            Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());

            for (int i = 0; i < 10; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 200, ParticleColor, 20, 5);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 400, 5);

            Armed = true;

            //if (TimeAlive > LifeTime * 2 / 3)
            {
                BulletExplosionDamage   = Damage / 2;
                BulletExplosionDistance = 150;

                FlamingChunkSystem.AddParticle(Position3, Rand.V3() / 1.5f, new Vector3(0, -0.25f, 0),
                                               Rand.V3(), Rand.V3() / 10, 15, 30, new Vector3(1, 0.5f, 0.2f), new Vector3(1, 0.1f, 0.2f), 0, 3);

                ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), Size.X() * 5, 4);
                for (int i = 0; i < 30; i++)
                {
                    ParticleManager.CreateParticle(Position3, Rand.V3() * 200, new Color(1, 0.75f, 0.5f), 20, 5);
                }
            }

            base.Destroy();
        }
示例#5
0
        public virtual void Trigger(PlayerShip p)
        {
            SoundManager.PlaySound("BigBombExplode2", 1, 0, 0);
            SoundManager.DeafTone();

            p.ShakeScreen(2500);
            LinkedListNode <GameObject> CurrentNode = p.ParentScene.Children.First;

            Vector3 Position3 = new Vector3(p.Position.X(), 0, p.Position.Y());

            for (int i = 0; i < 100; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 20, ParticleColor, 60, 5);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 4000, 5);

            for (int i = 0; i < 20; i++)
            {
                FlamingChunkSystem.AddParticle(Position3, Rand.V3() * 10, new Vector3(0, -0.25f, 0),
                                               Rand.V3(), Rand.V3() / 10, 40, 30, new Vector3(1, 0.5f, 0.2f), new Vector3(1, 0.1f, 0.2f), 0, 3);
            }

            for (int i = 0; i < 50; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 15, new Color(1, 0.75f, 0.5f), 200, 5);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 2000, 4);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 3000, 4);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 4000, 4);

            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 500, 5);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 1000, 5);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 2000, 5);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 3000, 5);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 4000, 5);

            //ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 500, 7);
            //ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 750, 7);
            //ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 1000, 7);

            while (CurrentNode != null)
            {
                GameObject g = CurrentNode.Value;
                if (g.GetType().IsSubclassOf(typeof(UnitShip)))
                {
                    UnitShip u = (UnitShip)g;
                    u.Damage(100000, 0, Vector2.One, p, AttackType.Explosion);
                    u.Damage(100000, 0, Vector2.One, p, AttackType.Explosion);
                    WaveManager.EndWave();
                }

                CurrentNode = CurrentNode.Next;
            }
        }
        public override void Destroy()
        {
            Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());

            for (int i = 0; i < 10; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 200, ParticleColor, 20, 5);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 400, 5);
            FlamingChunkSystem.AddParticle(Position3, Rand.V3() / 4, Vector3.Zero, Rand.V3(), Vector3.Zero, 20, 10, ParticleColor.ToVector3(), ParticleColor.ToVector3(), 0, 2);

            base.Destroy();
        }
示例#7
0
        public override void Destroy()
        {
            SoundManager.PlaySound("SmallBombExplode", 1, 0, 0);
            SoundManager.DeafTone();
            PlayerShip ParentPlayer = (PlayerShip)ParentUnit;

            ParentPlayer.ShakeScreen(20);

            this.Armed = false;

            Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());

            for (int i = 0; i < 10; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 6, ParticleColor, 20, 5);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 4000, 5);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 400, 7);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 300, 7);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 500, 7);

            for (int i = 0; i < 10; i++)
            {
                FlamingChunkSystem.AddParticle(Position3, Rand.V3(), new Vector3(0, -0.25f, 0),
                                               Rand.V3(), Rand.V3() / 10, 20, 60, new Vector3(1, 0.5f, 0.2f), new Vector3(1, 0.1f, 0.2f), 0, 3);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 500, 4);
            for (int i = 0; i < 30; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 10, new Color(1, 0.75f, 0.5f), 200, 5);
            }

            QuadGrid quadGrid = Parent2DScene.quadGrids.First.Value;

            foreach (GameObject g in quadGrid.Enumerate(Position.get(), new Vector2(BulletExplosionDistance)))
            {
                if (g.GetType().IsSubclassOf(typeof(UnitBasic)))
                {
                    UnitBasic s = (UnitBasic)g;
                    if (Vector2.Distance(Position.get(), s.Position.get()) < BulletExplosionDistance / 4 && !s.IsAlly(ParentUnit) && !s.GetType().IsSubclassOf(typeof(UnitBuilding)))
                    {
                        s.SmallBomb(ParentUnit);
                    }
                }
            }

            base.Destroy();
        }
        public override void Destroy()
        {
            this.Armed = false;

            Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());

            for (int i = 0; i < 10; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 2000, ParticleColor, 20, 5);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 4000, 5);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 400, 7);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 300, 7);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 500, 7);

            for (int i = 0; i < 2; i++)
            {
                FlamingChunkSystem.AddParticle(Position3, Rand.V3() / 1.5f, new Vector3(0, -0.25f, 0),
                                               Rand.V3(), Rand.V3() / 10, 150, 30, new Vector3(0.2f, 0.5f, 1), new Vector3(0.2f, 0.5f, 1), 0, 3);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(0.5f, 0.75f, 1), Size.X() * 50, 4);
            for (int i = 0; i < 30; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 200, new Color(0.5f, 0.75f, 1), 200, 5);
            }

            QuadGrid quadGrid = Parent2DScene.quadGrids.First.Value;

            float MaxDist = 150 * Level;

            foreach (GameObject g in quadGrid.Enumerate(Position.get(), new Vector2(MaxDist * 2)))
            {
                if (g.GetType().IsSubclassOf(typeof(UnitBasic)))
                {
                    UnitBasic s = (UnitBasic)g;
                    if (Vector2.Distance(Position.get(), s.Position.get()) < MaxDist && !s.IsAlly(ParentUnit))
                    {
                        s.ShutDownTime = Math.Max(s.ShutDownTime, (int)(2000 * Level));
                    }
                }
            }

            base.Destroy();
        }
        public virtual void DeathParticles()
        {
            Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());

            for (int i = 0; i < 4; i++)
            {
                FlamingChunkSystem.AddParticle(Position3, Rand.V3() * Size.X() / 60, new Vector3(0, -0.25f, 0),
                                               Rand.V3(), Rand.V3() / 10, 0.375f * Size.X(), 30, new Vector3(1, 0.5f, 0.2f), new Vector3(1, 0.1f, 0.2f), 0, 3);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), Size.X() * 5, 4);
            for (int i = 0; i < 30; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * Size.X(), new Color(1, 0.75f, 0.5f), Size.X() / 2, 5);
            }
            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), Size.X() * 2, 5);
        }
示例#10
0
        public override bool Trigger(PlayerShip p)
        {
            Vector3 Position3 = new Vector3(p.Position.X(), 0, p.Position.Y());

            for (int i = 0; i < 10; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 2000, ParticleColor, 20, 5);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 4000, 5);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 400, 7);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 300, 7);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 500, 7);

            for (int i = 0; i < 2; i++)
            {
                FlamingChunkSystem.AddParticle(Position3, Rand.V3() / 1.5f, new Vector3(0, -0.25f, 0),
                                               Rand.V3(), Rand.V3() / 10, 150, 30, new Vector3(0.2f, 0.5f, 1), new Vector3(0.2f, 0.5f, 1), 0, 3);
            }

            ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(0.5f, 0.75f, 1), p.Size.X() * 50, 4);
            for (int i = 0; i < 30; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 200, new Color(0.5f, 0.75f, 1), 200, 5);
            }


            float MaxDist = 600;

            foreach (GameObject g in p.Parent2DScene.quadGrids.First.Value.Enumerate(p.Position.get(), new Vector2(MaxDist * 2)))
            {
                if (g.GetType().IsSubclassOf(typeof(UnitShip)))
                {
                    UnitShip s = (UnitShip)g;
                    if (Vector2.Distance(p.Position.get(), s.Position.get()) < MaxDist && s.IsAlly(p))
                    {
                        s.InvTime = Math.Max(s.InvTime, (int)(10000));
                    }
                }
            }

            return(true);
        }
        public override void Destroy()
        {
            int Mult = Big ? 2 : 1;

            Vector3 Position3 = new Vector3(Position.X(), Y, Position.Y());

            for (int i = 0; i < 10; i++)
            {
                ParticleManager.CreateParticle(Position3, Rand.V3() * 200, ParticleColor, 20 * Mult, 5);
            }

            FlareSystem.AddLightingPoint(Position3, new Vector3(1, 0.25f, 0.25f), new Vector3(0.5f, 0, 0.25f), 5 * Mult, 20 * Mult, 3, 5);
            ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 400 * Mult, 5);
            for (int i = 0; i < 3; i++)
            {
                FlamingChunkSystem.AddParticle(Position3, Rand.V3() / 4, Vector3.Zero, Rand.V3() * Mult, Vector3.Zero, 20 * Mult, 10, ParticleColor.ToVector3(), ParticleColor.ToVector3(), 0, 2);
            }

            base.Destroy();
        }
示例#12
0
        public FlamingChunkSystem(int MaxChunks)
        {
            self           = this;
            this.MaxChunks = MaxChunks;

            Chunks = new FlamingChunk[MaxChunks];
            for (int i = 0; i < MaxChunks; i++)
            {
                Chunks[i] = new FlamingChunk();
            }

            ChunkModel = AssetManager.Load <Model>("Models/ShipGame/World/Chunk");

            ChunkEffect               = AssetManager.LoadEffect("Effects/Tex");
            WorldParam                = ChunkEffect.Parameters["World"];
            ViewParam                 = ChunkEffect.Parameters["View"];
            ProjectionParam           = ChunkEffect.Parameters["Projection"];
            ForwardInstancedTechnique = ChunkEffect.Techniques["ForwardInstancedTechnique"];

            ChunkTexture = AssetManager.Load <Texture2D>("Textures/ShipGame/World/ChunkSurface_Color");
        }
        private void DoExplosion()
        {
            if (!Dead)
            {
                BulletExplosionDistance = 300 * (1 + (MaxBombs - Bombs) / MaxBombs) / WaveCard.LevelMult;
                BulletExplosionDamage   = 1f / WaveCard.LevelMult;

                Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());
                for (int i = 0; i < 10; i++)
                {
                    ParticleManager.CreateParticle(Position3, Rand.V3() * 6, ParticleColor, 20 / WaveCard.LevelMult, 5);
                }

                ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 4000 / WaveCard.LevelMult, 5);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 400 / WaveCard.LevelMult, 7);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 300 / WaveCard.LevelMult, 7);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 500 / WaveCard.LevelMult, 7);

                for (int i = 0; i < 10; i++)
                {
                    FlamingChunkSystem.AddParticle(Position3, Rand.V3() / WaveCard.LevelMult, new Vector3(0, -0.25f, 0),
                                                   Rand.V3(), Rand.V3() / 10, 20 / WaveCard.LevelMult, 60, new Vector3(1, 0.5f, 0.2f), new Vector3(1, 0.1f, 0.2f), 0, 3);
                }

                ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 500 / WaveCard.LevelMult, 4);
                for (int i = 0; i < 30; i++)
                {
                    ParticleManager.CreateParticle(Position3, Rand.V3() * 10, new Color(1, 0.75f, 0.5f), 200 / WaveCard.LevelMult, 5);
                }
            }
            else
            {
                foreach (PlayerShip p in ParentScene.Enumerate(typeof(PlayerShip)))
                {
                    p.ShakeScreen(250);
                }

                Vector3 Position3 = new Vector3(Position.X(), 0, Position.Y());
                for (int i = 0; i < 100; i++)
                {
                    ParticleManager.CreateParticle(Position3, Rand.V3() * 20, ParticleColor, 60, 5);
                }

                ParticleManager.CreateParticle(Position3, Vector3.Zero, ParticleColor, 4000, 5);

                for (int i = 0; i < 20; i++)
                {
                    FlamingChunkSystem.AddParticle(Position3, Rand.V3() * 10, new Vector3(0, -0.25f, 0),
                                                   Rand.V3(), Rand.V3() / 10, 40, 30, new Vector3(1, 0.5f, 0.2f), new Vector3(1, 0.1f, 0.2f), 0, 3);
                }

                for (int i = 0; i < 50; i++)
                {
                    ParticleManager.CreateParticle(Position3, Rand.V3() * 15, new Color(1, 0.75f, 0.5f), 200, 5);
                }

                ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 2000, 4);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 3000, 4);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 4000, 4);

                ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 500, 5);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 1000, 5);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 2000, 5);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 3000, 5);
                ParticleManager.CreateParticle(Position3, Vector3.Zero, new Color(1, 0.75f, 0.5f), 4000, 5);

                BulletExplosionDistance = 1200 / WaveCard.LevelMult;
                BulletExplosionDamage   = 5f / WaveCard.LevelMult;
            }

            QuadGrid grid = Parent2DScene.quadGrids.First.Value;

            for (int i = 0; i < 2; i++)
            {
                foreach (Basic2DObject o in grid.Enumerate(Position.get(), new Vector2(BulletExplosionDistance * 2)))
                {
                    if (o.GetType().IsSubclassOf(typeof(UnitShip)))
                    {
                        BasicShipGameObject s = (BasicShipGameObject)o;
                        float dist            = Vector2.Distance(s.Position.get(), Position.get()) - o.Size.X() / 2;

                        if (dist < BulletExplosionDistance && GetTeam() != s.GetTeam())
                        {
                            float DistMult = 1;
                            if (dist > 0)
                            {
                                DistMult = (BulletExplosionDistance - dist) / BulletExplosionDistance;
                            }
                            s.Damage(DistMult * BulletExplosionDamage, DistMult, Vector2.Normalize(s.Position.get() - Position.get()), this, AttackType.Explosion);
                        }
                    }
                }
            }
        }