public SkillForgetMenu(Character player, OnChooseSlot action, Action refuseAction)
        {
            int menuWidth = 152;

            this.player           = player;
            this.chooseSlotAction = action;
            this.refuseAction     = refuseAction;


            List <MenuChoice> char_skills = new List <MenuChoice>();

            for (int ii = 0; ii < player.BaseSkills.Count; ii++)
            {
                SlotSkill skill = player.BaseSkills[ii];
                if (skill.SkillNum > -1)
                {
                    SkillData data         = DataManager.Instance.GetSkill(skill.SkillNum);
                    string    skillString  = data.Name.ToLocal();
                    string    skillCharges = skill.Charges + "/" + (data.BaseCharges + player.ChargeBoost);
                    int       index        = ii;
                    MenuText  menuText     = new MenuText(skillString, new Loc(2, 1));
                    MenuText  menuCharges  = new MenuText(skillCharges, new Loc(menuWidth - 8 * 4, 1), DirH.Right);
                    char_skills.Add(new MenuElementChoice(() => { choose(index); }, true, menuText, menuCharges));
                }
            }

            summaryMenu = new SkillSummary(Rect.FromPoints(new Loc(16,
                                                                   GraphicsManager.ScreenHeight - 8 - GraphicsManager.MenuBG.TileHeight * 2 - LINE_SPACE * 2 - VERT_SPACE * 4),
                                                           new Loc(GraphicsManager.ScreenWidth - 16, GraphicsManager.ScreenHeight - 8)));

            Initialize(new Loc(16, 16), menuWidth, Text.FormatKey("MENU_SKILLS_TITLE", player.BaseName), char_skills.ToArray(), 0, CharData.MAX_SKILL_SLOTS);
        }
        public void SetCurrentChar(CharData chara)
        {
            CurrentChar = chara;
            if (CurrentChar == null)
            {
                return;
            }

            Portrait.Speaker = CurrentChar.BaseForm;
            Nickname.Text    = CurrentChar.BaseName;
            Name.Text        = CurrentChar.FullFormName;

            BaseMonsterForm formData = DataManager.Instance.GetMonster(CurrentChar.BaseForm.Species).Forms[CurrentChar.BaseForm.Form];

            Level.Text = Text.FormatKey("MENU_TEAM_LEVEL_SHORT", CurrentChar.Level);
            ElementData element1   = DataManager.Instance.GetElement(formData.Element1);
            ElementData element2   = DataManager.Instance.GetElement(formData.Element2);
            string      typeString = String.Format("{0}\u2060{1}", element1.Symbol, element1.Name.ToLocal());

            if (formData.Element2 != 00)
            {
                typeString += "/" + String.Format("{0}\u2060{1}", element2.Symbol, element1.Name.ToLocal());
            }

            Elements.Text = typeString;

            for (int ii = 0; ii < CharData.MAX_SKILL_SLOTS; ii++)
            {
                SlotSkill   skill       = CurrentChar.BaseSkills[ii];
                SkillData   data        = DataManager.Instance.GetSkill(skill.SkillNum);
                ElementData element     = DataManager.Instance.GetElement(data.Data.Element);
                string      skillString = "-----";
                if (skill.SkillNum > -1)
                {
                    skillString = String.Format("{0}\u2060{1}", element.Symbol, data.Name.ToLocal());
                }
                Skills[ii].Text = skillString;
            }

            IntrinsicData entry = DataManager.Instance.GetIntrinsic(CurrentChar.BaseIntrinsics[0]);

            Intrinsic.Text = entry.Name.ToLocal();
        }
        public void SetCurrentChar(CharData chara)
        {
            CurrentChar = chara;
            if (CurrentChar == null)
            {
                return;
            }

            Portrait.Speaker = CurrentChar.BaseForm;
            Nickname.SetText(CurrentChar.BaseName);
            Name.SetText(CharData.GetFullFormName(CurrentChar.BaseForm));

            BaseMonsterForm formData = DataManager.Instance.GetMonster(CurrentChar.BaseForm.Species).Forms[CurrentChar.BaseForm.Form];

            Level.SetText(Text.FormatKey("MENU_TEAM_LEVEL_SHORT", CurrentChar.Level));
            ElementData element1   = DataManager.Instance.GetElement(formData.Element1);
            ElementData element2   = DataManager.Instance.GetElement(formData.Element2);
            string      typeString = element1.GetIconName();

            if (formData.Element2 != 00)
            {
                typeString += "/" + element2.GetIconName();
            }

            Elements.SetText(typeString);

            for (int ii = 0; ii < CharData.MAX_SKILL_SLOTS; ii++)
            {
                SlotSkill skill       = CurrentChar.BaseSkills[ii];
                SkillData data        = DataManager.Instance.GetSkill(skill.SkillNum);
                string    skillString = "-----";
                if (skill.SkillNum > -1)
                {
                    skillString = data.GetIconName();
                }
                Skills[ii].SetText(skillString);
            }

            IntrinsicData entry = DataManager.Instance.GetIntrinsic(CurrentChar.BaseIntrinsics[0]);

            Intrinsic.SetText(entry.GetColoredName());
        }
        public SkillReplaceMenu(Character player, int skillNum, OnChooseSlot learnAction, Action refuseAction)
        {
            int menuWidth = 152;

            this.player       = player;
            this.skillNum     = skillNum;
            this.learnAction  = learnAction;
            this.refuseAction = refuseAction;

            List <MenuChoice> char_skills = new List <MenuChoice>();

            for (int ii = 0; ii < player.BaseSkills.Count; ii++)
            {
                SlotSkill skill = player.BaseSkills[ii];
                if (skill.SkillNum > -1)
                {
                    SkillData   data         = DataManager.Instance.GetSkill(skill.SkillNum);
                    string      skillString  = data.GetColoredName();
                    string      skillCharges = skill.Charges + "/" + (data.BaseCharges + player.ChargeBoost);
                    int         index        = ii;
                    MenuText    menuText     = new MenuText(skillString, new Loc(2, 1));
                    MenuText    menuCharges  = new MenuText(skillCharges, new Loc(menuWidth - 8 * 4, 1), DirH.Right);
                    MenuDivider div          = new MenuDivider(new Loc(0, LINE_SPACE), menuWidth - 8 * 4);
                    char_skills.Add(new MenuElementChoice(() => { choose(index); }, true, menuText, menuCharges, div));
                }
            }
            string   newSkillString  = DataManager.Instance.GetSkill(skillNum).GetColoredName();
            int      maxCharges      = DataManager.Instance.GetSkill(skillNum).BaseCharges + player.ChargeBoost;
            string   newSkillCharges = maxCharges + "/" + maxCharges;
            MenuText newMenuText     = new MenuText(newSkillString, new Loc(2, 1));
            MenuText newMenuCharges  = new MenuText(newSkillCharges, new Loc(menuWidth - 8 * 4, 1), DirH.Right);

            char_skills.Add(new MenuElementChoice(() => { choose(CharData.MAX_SKILL_SLOTS); }, true, newMenuText, newMenuCharges));

            summaryMenu = new SkillSummary(Rect.FromPoints(new Loc(16,
                                                                   GraphicsManager.ScreenHeight - 8 - GraphicsManager.MenuBG.TileHeight * 2 - LINE_SPACE * 2 - VERT_SPACE * 4),
                                                           new Loc(GraphicsManager.ScreenWidth - 16, GraphicsManager.ScreenHeight - 8)));

            Initialize(new Loc(16, 16), menuWidth, Text.FormatKey("MENU_SKILLS_TITLE", player.GetDisplayName(true)), char_skills.ToArray(), 0);
        }
Beispiel #5
0
        public IEnumerator <YieldInstruction> ProcessInput(GameAction action)
        {
            GroundChar character = FocusedCharacter;

            switch (action.Type)
            {
            case GameAction.ActionType.Dir:
            {
                //result.Success = ActionResult.ResultType.Success;
                break;
            }

            case GameAction.ActionType.Move:
            {
                character.CurrentCommand = action;
                break;
            }

            case GameAction.ActionType.Drop:
            {
                yield return(CoroutineManager.Instance.StartCoroutine(ProcessTrashItem(character, action[0], action[1] != 0)));

                break;
            }

            case GameAction.ActionType.Give:
            {
                //[0] = item slot to use (-1 for the ground item)
                //[1] = who to give it to (-1 for the user)
                yield return(CoroutineManager.Instance.StartCoroutine(ProcessGiveItem(character, action[0], action[1])));

                break;
            }

            case GameAction.ActionType.Take:
            {
                //[0] = team slot to take from
                yield return(CoroutineManager.Instance.StartCoroutine(ProcessTakeItem(character, action[0])));

                break;
            }

            case GameAction.ActionType.Attack:
            {
                character.CurrentCommand = action;
                yield return(CoroutineManager.Instance.StartCoroutine(ProcessObjectInteract(character)));

                break;
            }

            case GameAction.ActionType.UseItem:
            {
                //[0] = item slot to use (-1 for held item, -2 for the ground item)
                //[1] = who to use it on (-1 for the user)
                //others: which slot to delete,
                //which intrinsic to have, which team member/item to send in, etc.
                yield return(CoroutineManager.Instance.StartCoroutine(ProcessUseItem(character, action[0], action[1] != 0)));

                break;
            }

            case GameAction.ActionType.ShiftTeam:
            {
                int       charIndex  = action[0];
                Character targetChar = DataManager.Instance.Save.ActiveTeam.Players[charIndex];
                DataManager.Instance.Save.ActiveTeam.Players.RemoveAt(charIndex);
                DataManager.Instance.Save.ActiveTeam.Players.Insert(charIndex + 1, targetChar);

                //update the leader indices
                if (DataManager.Instance.Save.ActiveTeam.LeaderIndex == charIndex)
                {
                    DataManager.Instance.Save.ActiveTeam.LeaderIndex++;
                }
                else if (DataManager.Instance.Save.ActiveTeam.LeaderIndex == charIndex + 1)
                {
                    DataManager.Instance.Save.ActiveTeam.LeaderIndex--;
                }
                break;
            }

            case GameAction.ActionType.SetLeader:
            {
                yield return(CoroutineManager.Instance.StartCoroutine(MakeLeader(action[0], action[1] != 0)));

                break;
            }

            case GameAction.ActionType.SendHome:
            {
                yield return(CoroutineManager.Instance.StartCoroutine(SendHome(action[0])));

                break;
            }

            case GameAction.ActionType.GiveUp:
            {
                GameManager.Instance.SceneOutcome = GameManager.Instance.EndSegment((GameProgress.ResultType)action[0]);
                break;
            }

            case GameAction.ActionType.Tactics:
            {
                //saves all the settings to the characters
                for (int ii = 0; ii < DataManager.Instance.Save.ActiveTeam.Players.Count; ii++)
                {
                    int       choice = action[ii];
                    Character target = DataManager.Instance.Save.ActiveTeam.Players[ii];
                    AITactic  tactic = DataManager.Instance.GetAITactic(choice);
                    if (tactic.ID != target.Tactic.ID)
                    {
                        target.Tactic = new AITactic(tactic);
                    }
                    target.Tactic.Initialize(target);
                }
                break;
            }

            case GameAction.ActionType.SetSkill:
            {
                Skill skill = DataManager.Instance.Save.ActiveTeam.Players[action[0]].Skills[action[1]].Element;
                skill.Enabled = !skill.Enabled;
                break;
            }

            case GameAction.ActionType.ShiftSkill:
            {
                int                   slot       = action[1];
                Character             targetChar = DataManager.Instance.Save.ActiveTeam.Players[action[0]];
                BackReference <Skill> upState    = targetChar.Skills[slot];
                BackReference <Skill> downState  = targetChar.Skills[slot + 1];
                targetChar.Skills[slot]     = downState;
                targetChar.Skills[slot + 1] = upState;

                if (upState.BackRef > -1 && downState.BackRef > -1)
                {
                    SlotSkill skill = targetChar.BaseSkills[slot];
                    targetChar.BaseSkills.RemoveAt(slot);
                    targetChar.BaseSkills.Insert(slot + 1, skill);
                }
                break;
            }

            case GameAction.ActionType.SortItems:
            {
                DataManager.Instance.Save.ActiveTeam.SortItems();
                break;
            }

            default:
            {
                throw new Exception("Undefined Command: " + action.Type);
            }
            }
        }
Beispiel #6
0
        public MemberFeaturesMenu(int teamSlot, bool assembly, bool allowAssembly)
        {
            Bounds = Rect.FromPoints(new Loc(24, 16), new Loc(296, 224));

            this.teamSlot      = teamSlot;
            this.assembly      = assembly;
            this.allowAssembly = allowAssembly;

            Character player = assembly ? DataManager.Instance.Save.ActiveTeam.Assembly[teamSlot] : DataManager.Instance.Save.ActiveTeam.Players[teamSlot];

            //TODO: align this text properly
            Title = new MenuText(Text.FormatKey("MENU_TEAM_FEATURES") + " (1/3)", Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth + 8, GraphicsManager.MenuBG.TileHeight));
            Div   = new MenuDivider(Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth, GraphicsManager.MenuBG.TileHeight + LINE_SPACE), Bounds.End.X - Bounds.X - GraphicsManager.MenuBG.TileWidth * 2);

            Portrait = new SpeakerPortrait(player.BaseForm, new EmoteStyle(0),
                                           Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth * 2, GraphicsManager.MenuBG.TileHeight + TitledStripMenu.TITLE_OFFSET), false);
            string speciesText = player.GetDisplayName(true) + " / " + CharData.GetFullFormName(player.BaseForm);

            Name = new MenuText(speciesText, Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth * 2 + 48, GraphicsManager.MenuBG.TileHeight + TitledStripMenu.TITLE_OFFSET));

            ElementData element1 = DataManager.Instance.GetElement(player.Element1);
            ElementData element2 = DataManager.Instance.GetElement(player.Element2);

            string typeString = element1.GetIconName();

            if (player.Element2 != 00)
            {
                typeString += "/" + element2.GetIconName();
            }
            bool origElements = (player.Element1 == DataManager.Instance.GetMonster(player.BaseForm.Species).Forms[player.BaseForm.Form].Element1);

            origElements &= (player.Element2 == DataManager.Instance.GetMonster(player.BaseForm.Species).Forms[player.BaseForm.Form].Element2);
            Elements      = new MenuText(Text.FormatKey("MENU_TEAM_ELEMENT", typeString), Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth * 2 + 48, GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 1 + TitledStripMenu.TITLE_OFFSET), origElements ? Color.White : Color.Yellow);

            Level = new MenuText(Text.FormatKey("MENU_TEAM_LEVEL_SHORT", player.Level), Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth * 2 + 48, GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 2 + TitledStripMenu.TITLE_OFFSET));


            HP       = new MenuText(Text.FormatKey("MENU_TEAM_HP", player.HP, player.MaxHP), Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth * 2, GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 3 + TitledStripMenu.TITLE_OFFSET));
            Fullness = new MenuText(Text.FormatKey("MENU_TEAM_HUNGER", player.Fullness, player.MaxFullness), Bounds.Start + new Loc((Bounds.End.X - Bounds.X) / 2, GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 3 + TitledStripMenu.TITLE_OFFSET));

            MainDiv = new MenuDivider(Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth, GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 5), Bounds.End.X - Bounds.X - GraphicsManager.MenuBG.TileWidth * 2);

            SkillTitle = new MenuText(Text.FormatKey("MENU_TEAM_SKILLS"), Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth * 2, GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 4 + TitledStripMenu.TITLE_OFFSET));
            Skills     = new MenuText[CharData.MAX_SKILL_SLOTS * 3];
            for (int ii = 0; ii < CharData.MAX_SKILL_SLOTS; ii++)
            {
                SlotSkill skill        = player.BaseSkills[ii];
                string    skillString  = "-----";
                string    skillCharges = "--";
                string    totalCharges = "/--";
                if (skill.SkillNum > -1)
                {
                    SkillData data = DataManager.Instance.GetSkill(skill.SkillNum);
                    skillString  = data.GetIconName();
                    skillCharges = skill.Charges.ToString();
                    totalCharges = "/" + (data.BaseCharges + player.ChargeBoost);
                }
                Skills[ii * 3]     = new MenuText(skillString, Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth * 2, GraphicsManager.MenuBG.TileHeight + VERT_SPACE * (ii + 5) + TitledStripMenu.TITLE_OFFSET));
                Skills[ii * 3 + 1] = new MenuText(skillCharges, new Loc(Bounds.End.X - GraphicsManager.MenuBG.TileWidth * 2 - 16 - GraphicsManager.TextFont.CharSpace, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * (ii + 5) + TitledStripMenu.TITLE_OFFSET), DirH.Right);
                Skills[ii * 3 + 2] = new MenuText(totalCharges, new Loc(Bounds.End.X - GraphicsManager.MenuBG.TileWidth * 2 - 16, Bounds.Y + GraphicsManager.MenuBG.TileHeight + VERT_SPACE * (ii + 5) + TitledStripMenu.TITLE_OFFSET), DirH.Left);
            }

            IntrinsicDiv = new MenuDivider(Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth, GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 10), Bounds.End.X - Bounds.X - GraphicsManager.MenuBG.TileWidth * 2);

            bool          origIntrinsic = (player.Intrinsics[0].Element.ID == player.BaseIntrinsics[0]);
            IntrinsicData entry         = DataManager.Instance.GetIntrinsic(player.Intrinsics[0].Element.ID);

            Intrinsic     = new MenuText(Text.FormatKey("MENU_TEAM_INTRINSIC", entry.GetColoredName()), Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth * 2, GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 9 + TitledStripMenu.TITLE_OFFSET), origIntrinsic ? Color.White : Color.Yellow);
            IntrinsicDesc = new DialogueText(entry.Desc.ToLocal(), Bounds.Start + new Loc(GraphicsManager.MenuBG.TileWidth * 2, GraphicsManager.MenuBG.TileHeight + VERT_SPACE * 10 + TitledStripMenu.TITLE_OFFSET),
                                             Bounds.End.X - GraphicsManager.MenuBG.TileWidth * 3 - Bounds.X, LINE_SPACE, false);
        }