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); } }); }
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); }