public static void ShootProjectileServer(RailgunFireData fireData)
        {
            RailgunProjectileData projectileData;
            bool registered = railgunDataDict.TryGetValue(fireData.ShooterID, out projectileData);

            if (!registered)
            {
                return;
            }

            var projectile = new ArmorPiercingProjectileSimulation(fireData, projectileData);

            AddProjectile(projectile);
            RailgunMessage.SendToClients(fireData);
        }
        private static void SimulateProjectiles()
        {
            //projectile simulation
            for (int i = liveProjectiles.Count - 1; i >= 0; i--)
            {
                var projectile = liveProjectiles[i];
                projectile.Update();

                if (projectile.Killed)
                {
                    liveProjectiles.RemoveAt(i);
                }

                var tracerData = projectile.GetTracerData();

                foreach (var tracer in tracerData)
                {
                    RailgunMessage.SendToClients(tracer);
                }
            }
        }