internal WeaponPickerDialog CreateWeaponPickerDialog(IObjectPool pool, IWeaponPod pod)
        {
            Debug.Assert(ActiveDialog is null);
            var dialog = pool.GetObject <WeaponPickerDialog>();

            dialog.Init(initContext, pod, weaponsSettings);
            dialog.Position(GetDialogTopLeft(pod.Bounds, View, dialog.Size));
            dialog.InitContent(initContentContext);
            return(dialog);
        }
        /// <summary>
        /// Updates weapon pods and returns a clicked weapon pod if any.
        /// Caller is responsible for process click - i.e. create <see cref="WeaponPickerDialog"/>.
        /// </summary>
        /// <param name="childContext"></param>
        /// <param name="weaponPods"></param>
        /// <param name="currentEnemyWave"></param>
        /// <param name="canEntityClick"></param>
        /// <returns></returns>
        public static IWeaponPod UpdateWeaponPods(UpdateContext childContext, IWeaponPod[] weaponPods, IEnemyWave currentEnemyWave, bool canEntityClick)
        {
            IWeaponPod clickedWeaponPod = null;

            // converts mouse coordinates to absolute to scene
            foreach (var wp in weaponPods)
            {
                wp.Update(childContext, currentEnemyWave);
                // disable upgrades for now
                if (canEntityClick && wp.ClickState == ClickState.Clicked && wp.Weapon is null)
                {
                    logger.Info($"Weapon pod {Array.IndexOf(weaponPods, wp)} was clicked");
                    clickedWeaponPod = wp;
                }
            }
            return(clickedWeaponPod);
        }