Пример #1
0
        public override void OnFiredAsProjectile(Projectile projectile)
        {
            int   data = Terrain.ExtractData(projectile.Value);
            float num  = (FireworksBlock.GetAltitude(data) == 0) ? 0.8f : 1.3f;

            m_subsystemProjectiles.AddTrail(projectile, Vector3.Zero, new FireworksTrailParticleSystem());
            m_subsystemAudio.PlayRandomSound("Audio/FireworksWhoosh", 1f, m_random.Float(-0.2f, 0.2f), projectile.Position, 8f, autoDelay: true);
            m_subsystemNoise.MakeNoise(projectile.Position, 1f, 10f);
            m_subsystemTime.QueueGameTimeDelayedExecution(m_subsystemTime.GameTime + (double)num, delegate
            {
                if (!projectile.ToRemove)
                {
                    projectile.ToRemove = true;
                    ExplodeFireworks(projectile.Position, data);
                }
            });
        }
Пример #2
0
        public void ExplodeFireworks(Vector3 position, int data)
        {
            for (int i = 0; i < 3; i++)
            {
                Vector3 v = new Vector3(m_random.Float(-3f, 3f), -15f, m_random.Float(-3f, 3f));
                if (m_subsystemTerrain.Raycast(position, position + v, useInteractionBoxes: false, skipAirBlocks: true, null).HasValue)
                {
                    return;
                }
            }
            FireworksBlock.Shape shape = FireworksBlock.GetShape(data);
            float flickering           = FireworksBlock.GetFlickering(data) ? 0.66f : 0f;
            float particleSize         = (FireworksBlock.GetAltitude(data) > 0) ? 1.1f : 1f;
            Color color = FireworksBlock.FireworksColors[FireworksBlock.GetColor(data)];

            m_subsystemParticles.AddParticleSystem(new FireworksParticleSystem(position, color, shape, flickering, particleSize));
            m_subsystemAudio.PlayRandomSound("Audio/FireworksPop", 1f, m_random.Float(-0.4f, 0f), position, 80f, autoDelay: true);
            m_subsystemNoise.MakeNoise(position, 1f, 60f);
        }