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 (this.magicRange == null) { // should not happen return(StateOperationResult.Clear()); } if (this.magicRange.Contains(position)) { DirectRangeFinder rangeFinder = new DirectRangeFinder(gameAction.GetField(), position, this.Magic.EffectScope); FDRange magicScope = rangeFinder.CalculateRange(); List <FDCreature> targets = gameAction.GetCreatureInRange(magicScope, CreatureFaction.Enemy); if (targets == null || targets.Count == 0) { // Cannot spell on that position, do nothing return(StateOperationResult.None()); } else { gameAction.DoCreatureSpellMagic(this.Creature.CreatureId, this.Magic.MagicId, position); return(StateOperationResult.Clear()); } } else { // Cancel the magic return(StateOperationResult.Pop()); } }
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()); } }
public override StateOperationResult OnSelectIndex(int index) { if (index < 0) { // Cancel return(StateOperationResult.None()); } switch (this.subState) { case SubActionState.SelectExchangeItem: return(OnSelectedExchangeItem(index)); case SubActionState.SelectEquipItem: return(OnSelectedEquipItem(index)); case SubActionState.SelectUseItem: return(OnSelectedUseItem(index)); case SubActionState.SelectDiscardItem: return(OnSelectedDiscardItem(index)); default: return(StateOperationResult.Pop()); } }
private StateOperationResult OnSelectedExchangeItem(int index) { if (index < 0) { return(StateOperationResult.Pop()); } // Selete Target Friend SelectItemExchangeTargetState exchangeTargetState = new SelectItemExchangeTargetState(gameAction, this.CreatureId, index); return(StateOperationResult.Push(exchangeTargetState)); }
public override StateOperationResult OnSelectPosition(FDPosition position) { for (int index = 0; index < 4; index++) { if (this.MenuItemEnabled[index] && this.MenuItemPositions[index].AreSame(position)) { // Clicked on menu return(this.MenuActions[index]()); } } // Cancell the menu return(StateOperationResult.Pop()); }
public override StateOperationResult OnSelectPosition(FDPosition position) { // Selecte position must be included in the range if (!this.ItemRange.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()); } gameAction.DoCreatureUseItem(this.CreatureId, this.SelectedItemIndex, targetCreature.CreatureId); return(StateOperationResult.Clear()); }
public override StateOperationResult OnSelectPosition(FDPosition position) { if (this.AttackRange != null && this.AttackRange.Contains(position)) { FDCreature target = this.gameAction.GetCreatureAt(position); if (target != null && target.Faction == Definitions.CreatureFaction.Enemy) { // Do the attack this.gameAction.DoCreatureAttack(this.Creature.CreatureId, position); return(StateOperationResult.Clear()); } else { // Clicked in the range, but no target, let the player to click again return(StateOperationResult.None()); } } else { // Clicked out of range, cancel return(StateOperationResult.Pop()); } }