private void CharsheetView_InitCharacter(On.CharsheetView.orig_InitCharacter orig, CharsheetView self, bool forceInit)
        {
            if (_startingAbilityPoints == 8)
            {
                orig(self, forceInit);
            }
            else
            {
                if (!self.IsNewCharInitialized || forceInit)
                {
                    self.character = CharacterSheetFactory.GetOrCreateComponent(SingletonComponent <World> .Singleton.you.gameObject);
                    self.character.Clean();
                    self.unusedAbilityPool = _startingAbilityPoints;
                    self.usedAbilityPoints = 0;
                    self.usedSkillPoints   = 0;
                    if (self.abilityMethod == AbilityMethod.ROLL)
                    {
                        int allowedTotal = self.unusedAbilityPool + 4;
                        CharacterSheetFactory.RollAbilities(self.character, allowedTotal);
                        self.usedAbilityPoints = self.unusedAbilityPool;
                        self.unusedAbilityPool = 0;
                    }
                    else if (self.abilityMethod == AbilityMethod.POINTBUY)
                    {
                        CharacterSheetFactory.CleanAbilities(self.character);
                    }
                    else
                    {
                        Debug.LogError("We only roll for now");
                    }
                    SkillPortraitPanel.signatureSkill = SkillType.NONE;
                    self.character.Recalc();
                    self.NotifyActivation();
                    self.GetType().GetProperty("IsNewCharInitialized").GetSetMethod(true).Invoke(self, new object[] { true });
                }
            }

            LiteSingleton <PlayerCharacter> .Singleton.SkillPoints = StartingSkillPoints;
        }
        public MockItemFactory(
            CharacterSheetFactory characterSheetFactory,
            SectorRandomPositionFactory sectorRandomPositionFactory,
            ICharacterNameGenerator <Item> itemNameGenerator)
        {
            if (characterSheetFactory == null)
            {
                throw new ArgumentNullException(nameof(characterSheetFactory));
            }
            CharacterSheetFactory = characterSheetFactory;

            if (sectorRandomPositionFactory == null)
            {
                throw new ArgumentNullException(nameof(sectorRandomPositionFactory));
            }
            RandomSectorPositionGenerator = sectorRandomPositionFactory;

            if (itemNameGenerator == null)
            {
                throw new ArgumentNullException(nameof(itemNameGenerator));
            }
            NameGenerator = itemNameGenerator;
        }
        protected override Item UseConverter <TParam>(TParam parameter)
        {
            var sectorBoundaries = parameter as IGameSectorBoundaries;

            var randomSheet = CharacterSheetFactory.GetRandomSheet();

            Console.WriteLine($"random sheet created with {randomSheet.Speed} ag & {randomSheet.Attack} atk");
            var exp = Randomness.Instance.From(1, 255);

            var generatedPosition = Vector2.Zero;

            try
            {
                generatedPosition = RandomSectorPositionGenerator.Create(sectorBoundaries);
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
            }
            var item = GenerateSurvivor(randomSheet, generatedPosition);

            item.DisplayName = NameGenerator.Generate(item);
            return(item);
        }