public override StateOperationResult OnSelectPosition(FDPosition position) { FDCreature creature = gameAction.GetCreatureAt(position); if (creature == null) { // Empty space, show system menu MenuSystemState state = new MenuSystemState(gameAction, position); return(new StateOperationResult(StateOperationResult.ResultType.Push, state)); } else if (creature.IsActionable()) { // Actionable friend ShowMoveRangeState nextState = new ShowMoveRangeState(gameAction, creature); return(new StateOperationResult(StateOperationResult.ResultType.Push, nextState)); } else { // Show creature information CreatureShowInfoPack pack = new CreatureShowInfoPack(creature.Clone(), CreatureInfoType.View); var gameCallback = gameAction.GetCallback(); gameCallback.OnHandlePack(pack); return(new StateOperationResult(StateOperationResult.ResultType.None)); } }
private StateOperationResult OnMagicSelected(int index) { Debug.Log("MenuActionState: OnMagicSelected."); if (index < 0 || index >= this.Creature.Data.Magics.Count) { // Cancelled return(StateOperationResult.Pop()); } int magicId = this.Creature.Data.Magics[index]; MagicDefinition magicDefinition = DefinitionStore.Instance.GetMagicDefinition(magicId); if (magicDefinition != null && this.Creature.Data.CanSpellMagic() && magicDefinition.MpCost <= this.Creature.Data.Mp) { // Enough MP to spell SelecteMagicTargetState magicTargetState = new SelecteMagicTargetState(gameAction, this.Creature, magicDefinition); return(StateOperationResult.Push(magicTargetState)); } else { // Go back to open magic info CreatureShowInfoPack pack = new CreatureShowInfoPack(this.Creature, CreatureInfoType.SelectMagic); SendPack(pack); return(StateOperationResult.None()); } }
public override StateOperationResult OnSelectPosition(FDPosition position) { if (range == null || !range.Contains(position)) { return(StateOperationResult.Pop()); } // No creature or not a friend/NPC FDCreature targetCreature = this.gameAction.GetCreatureAt(position); if (targetCreature == null || targetCreature.Faction == Definitions.CreatureFaction.Enemy) { return(StateOperationResult.None()); } if (!targetCreature.Data.IsItemsFull()) { gameAction.DoCreatureExchangeItem(this.CreatureId, this.SelectedItemIndex, targetCreature.CreatureId); return(StateOperationResult.Clear()); } else { subState = SubState.SelectExchangeItem; this.TargetCreature = targetCreature; CreatureShowInfoPack pack = new CreatureShowInfoPack(targetCreature, CreatureInfoType.SelectAllItem); SendPack(pack); return(StateOperationResult.None()); } }
private static ActivityBase BuildShowCreatureInfoActivity(CreatureShowInfoPack pack) { if (pack == null) { throw new ArgumentNullException("pack"); } FDCreature creature = pack.Creature; CreatureDialog.ShowType showType = CreatureDialog.ShowType.SelectAllItem; switch (pack.InfoType) { case CreatureInfoType.SelectAllItem: showType = CreatureDialog.ShowType.SelectAllItem; break; case CreatureInfoType.SelectEquipItem: showType = CreatureDialog.ShowType.SelectEquipItem; break; case CreatureInfoType.SelectUseItem: showType = CreatureDialog.ShowType.SelectUseItem; break; case CreatureInfoType.SelectMagic: showType = CreatureDialog.ShowType.SelectMagic; break; case CreatureInfoType.View: showType = CreatureDialog.ShowType.ViewItem; break; default: showType = CreatureDialog.ShowType.SelectAllItem; break; } CallbackActivity activity = new CallbackActivity( (gameInterface) => { gameInterface.ShowCreatureDialog(pack.Creature, showType); }); if (pack.InfoType == CreatureInfoType.View && creature.Data.HasMagic()) { SequenceActivity sequenceActivity = new SequenceActivity(); sequenceActivity.Add(activity); CallbackActivity activity2 = new CallbackActivity( (gameInterface) => { gameInterface.ShowCreatureDialog(pack.Creature, CreatureDialog.ShowType.ViewMagic); }); sequenceActivity.Add(activity2); return(sequenceActivity); } return(activity); }
public MenuActionState(IGameAction gameAction, int creatureId, FDPosition position) : base(gameAction, position) { this.CreatureId = creatureId; this.Creature = gameAction.GetCreature(creatureId); // Magic this.SetMenu(0, MenuItemId.ActionMagic, IsMenuMagicEnabled(), () => { CreatureShowInfoPack pack = new CreatureShowInfoPack(this.Creature, CreatureInfoType.SelectMagic); gameAction.GetCallback().OnHandlePack(pack); subState = SubActionState.SelectMagic; return(StateOperationResult.None()); }); // Attack this.SetMenu(1, MenuItemId.ActionAttack, IsMenuAttackEnabled(), () => { SelectAttackTargetState attackState = new SelectAttackTargetState(gameAction, this.Creature); return(StateOperationResult.Push(attackState)); }); // Item this.SetMenu(2, MenuItemId.ActionItems, IsMenuItemEnabled(), () => { MenuItemState itemState = new MenuItemState(gameAction, this.CreatureId, this.Central); return(StateOperationResult.Push(itemState)); }); // Rest this.SetMenu(3, MenuItemId.ActionRest, true, () => { // Check Treasure treasureItem = gameAction.GetTreatureAt(this.Creature.Position); if (treasureItem != null) { subState = SubActionState.ConfirmPickTreasure; return(StateOperationResult.None()); } gameAction.DoCreatureRest(this.CreatureId); return(StateOperationResult.Clear()); }); }
public MenuItemState(IGameAction gameAction, int creatureId, FDPosition position) : base(gameAction, position) { this.CreatureId = creatureId; this.Creature = gameAction.GetCreature(creatureId); // Exchange this.SetMenu(0, MenuItemId.ItemExchange, IsMenuExchangeEnabled(), () => { CreatureShowInfoPack pack = new CreatureShowInfoPack(this.Creature, CreatureInfoType.SelectAllItem); SendPack(pack); subState = SubActionState.SelectExchangeItem; return(StateOperationResult.None()); }); // Use this.SetMenu(1, MenuItemId.ItemUse, IsMenuUseEnabled(), () => { CreatureShowInfoPack pack = new CreatureShowInfoPack(this.Creature, CreatureInfoType.SelectUseItem); SendPack(pack); subState = SubActionState.SelectUseItem; return(StateOperationResult.None()); }); // Equip this.SetMenu(2, MenuItemId.ItemEquip, IsMenuEquipEnabled(), () => { CreatureShowInfoPack pack = new CreatureShowInfoPack(this.Creature, CreatureInfoType.SelectEquipItem); SendPack(pack); subState = SubActionState.SelectEquipItem; return(StateOperationResult.None()); }); // Discard this.SetMenu(3, MenuItemId.ItemDiscard, IsMenuDiscardEnabled(), () => { CreatureShowInfoPack pack = new CreatureShowInfoPack(this.Creature, CreatureInfoType.SelectAllItem); SendPack(pack); subState = SubActionState.SelectDiscardItem; return(StateOperationResult.None()); }); }
private StateOperationResult OnSelectedEquipItem(int index) { if (index < 0) { // Cancel the selection return(StateOperationResult.None()); } this.Creature.Data.EquipItemAt(index); // Reopen the item dialog CreatureShowInfoPack pack = new CreatureShowInfoPack(this.Creature, CreatureInfoType.SelectEquipItem); SendPack(pack); subState = SubActionState.SelectEquipItem; return(StateOperationResult.None()); }
private StateOperationResult OnExchangeTreasureConfirmed(int index) { if (index == 0) { // Put it back TalkPack talkPack = new TalkPack(this.Creature.Clone(), MessageId.Create(MessageId.MessageTypes.Message, 7)); SendPack(talkPack); gameAction.DoCreatureRest(this.CreatureId); return(StateOperationResult.Clear()); } subState = SubActionState.ConfirmExchangeSelecting; CreatureShowInfoPack pack = new CreatureShowInfoPack(this.Creature, CreatureInfoType.SelectAllItem); SendPack(pack); return(StateOperationResult.None()); }