Beispiel #1
0
        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());
            }
        }
Beispiel #3
0
        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));
        }
Beispiel #6
0
        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());
        }
Beispiel #7
0
        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());
     }
 }