// LoadCharacter in place
        public void ApplyCharacterDataToObject(GameObject character, CharacterData data)
        {
            CharacterBehaviour behaviour = character.GetComponent <CharacterBehaviour>();
            CharacterLoadout   loadout   = character.GetComponent <CharacterLoadout>();

            // Update Character
            behaviour.Name = data.CharacterName;
            behaviour.Id   = data.CharacterId;
            behaviour.SetProgress(data.CharacterLevel, data.CharacterExp);

            // Update common stats
            loadout.AvailablePoints = data.AvailablePoints;
            loadout.moveSpeedStat   = (MoveSpeedStat)data.MoveSpeedStat.Deserialize();
            loadout.moveSpeedStat.Apply(character);

            // Add abilities to loadout
            loadout.Ability1 = Ability.Deserialize(character, data.Abilities[data.Ability1Index]);
            loadout.Ability2 = Ability.Deserialize(character, data.Abilities[data.Ability2Index]);

            loadout.Init();
        }
        // --- End Singleton Pattern

        public void ApplyNewCharacterStats(GameObject character, string name, CharacterTypes type)
        {
            CharacterBehaviour behaviour = character.GetComponent <CharacterBehaviour>();
            CharacterLoadout   loadout   = character.GetComponent <CharacterLoadout>();

            if (type == CharacterTypes.Munch)
            {
                behaviour.Name        = name;
                behaviour.Level       = 1;
                behaviour.Experience  = 0;
                behaviour.Id          = System.Guid.NewGuid().ToString();
                loadout.moveSpeedStat = new MoveSpeedStat(1);
                BlinkDistanceStat blinkDistanceStat = new BlinkDistanceStat(1);
                BlinkChargesStat  blinkChargesStat  = new BlinkChargesStat(1);
                loadout.Ability1 = new BlinkAbility(character, new Stat[] { blinkDistanceStat, blinkChargesStat });
                loadout.Ability2 = new ReviveProjectileAbility(character, new Stat[] { });
            }
            else
            {
                throw new UnityException($"Unknown type of character {type}");
            }
            loadout.Init();
        }