예제 #1
0
 public ThinkAction(ThinkActionType type, string optionName, PartyMember actor = null, PartyMember target = null)
 {
     Type                = type;
     OptionName          = optionName;
     Actor               = actor;
     Target              = target;
     Active              = true;
     InfiniteInInventory = false;
     if (type == ThinkActionType.Attack)
     {
         WeaponData weaponData = ResourceManager.GetWeaponData(optionName);
         if (weaponData == null)
         {
             Melee = false;
         }
         else
         {
             Melee = weaponData.WeaponType == WeaponType.Melee;
         }
     }
     else
     {
         Melee = false;
     }
 }
예제 #2
0
 public override void Start()
 {
     Comparison<ThinkAction> speedComparer = new Comparison<ThinkAction>((a, b) => b.Actor.Speed.CompareTo(a.Actor.Speed));
     attackThinkActions.Sort(speedComparer);
     useItemThinkActions.Sort(speedComparer);
     currentThinkActionType = ThinkActionType.UseItem;
     currentThinkActionFinished = false;
     statusEffectsCompleteForAction = false;
 }
예제 #3
0
        public override void Start()
        {
            Comparison <ThinkAction> speedComparer = new Comparison <ThinkAction>((a, b) => b.Actor.Speed.CompareTo(a.Actor.Speed));

            attackThinkActions.Sort(speedComparer);
            useItemThinkActions.Sort(speedComparer);
            currentThinkActionType         = ThinkActionType.UseItem;
            currentThinkActionFinished     = false;
            statusEffectsCompleteForAction = false;
        }
예제 #4
0
 private void initThinkActionTypeMenu(ThinkActionType thinkActionType)
 {
     setThinkActionType(thinkActionType);
     Logger.Log(thinkActionType.ToString() + " action menu opened");
     selectDefaultOptionName();
     if (!menuIsEmpty())
     {
         Logger.Log("Selected option: " + MenuOptions[CurrentOptionNameIndex].Name);
     }
 }
예제 #5
0
        public Act(Battle battle, List<ThinkAction> thinkActions)
            : base(battle)
        {
            if (thinkActions == null)
                throw new Exception("List<ThinkAction> cannot be null");

            attackThinkActions = new List<ThinkAction>(thinkActions.Where(thinkAction => thinkAction.Type == ThinkActionType.Attack));
            useItemThinkActions = new List<ThinkAction>(thinkActions.Where(thinkAction => thinkAction.Type == ThinkActionType.UseItem));
            currentThinkActionIndex = 0;
            currentThinkActionType = ThinkActionType.None;
            statusEffectsCompleteForAction = false;
        }
 protected Inventory getInventoryFromThinkActionType(ThinkActionType thinkActionType, PartyMember partyMember)
 {
     Party party = Battle.GetPartyForPartyMember(partyMember);
     if (party == null)
         return null;
     switch (thinkActionType)
     {
     case ThinkActionType.Attack: return party.WeaponInventories[partyMember.CharacterClass];
     case ThinkActionType.Defend: return party.ShieldInventory;
     case ThinkActionType.UseItem: return party.ItemInventory;
     default: return null;
     }
 }
예제 #7
0
        public Act(Battle battle, List <ThinkAction> thinkActions)
            : base(battle)
        {
            if (thinkActions == null)
            {
                throw new Exception("List<ThinkAction> cannot be null");
            }

            attackThinkActions             = new List <ThinkAction>(thinkActions.Where(thinkAction => thinkAction.Type == ThinkActionType.Attack));
            useItemThinkActions            = new List <ThinkAction>(thinkActions.Where(thinkAction => thinkAction.Type == ThinkActionType.UseItem));
            currentThinkActionIndex        = 0;
            currentThinkActionType         = ThinkActionType.None;
            statusEffectsCompleteForAction = false;
        }
예제 #8
0
        private void setThinkActionType(ThinkActionType thinkActionType)
        {
            CurrentThinkActionType = thinkActionType;
            switch (thinkActionType)
            {
            case ThinkActionType.Attack: MenuOptions = weaponMenuOptions[CurrentPartyMember.CharacterClass]; break;

            case ThinkActionType.Defend: MenuOptions = shieldMenuOptions; break;

            case ThinkActionType.UseItem: MenuOptions = itemMenuOptions; break;

            default: MenuOptions = null; break;
            }
        }
예제 #9
0
        public override void Update(Delta delta)
        {
            if (Battle.PlayerParty.Count == 0 || Battle.EnemyParty.Count == 0)
            {
                Finish();
                return;
            }
            else if (currentThinkActionFinished)
            {
                if (allPartyMembersIdle())
                {
                    getNextThinkAction();
                }
                return;
            }

            ThinkAction thinkAction = null;

            if (currentThinkActionType == ThinkActionType.UseItem)
            {
                if (currentThinkActionIndex >= useItemThinkActions.Count)
                {
                    currentThinkActionIndex        = 0;
                    statusEffectsCompleteForAction = false;
                    currentThinkActionType         = ThinkActionType.Attack;
                    return;
                }

                thinkAction = useItemThinkActions[currentThinkActionIndex];
            }
            else if (currentThinkActionType == ThinkActionType.Attack)
            {
                if (currentThinkActionIndex >= attackThinkActions.Count)
                {
                    Finish();
                    return;
                }

                thinkAction = attackThinkActions[currentThinkActionIndex];
            }

            pushStateForThinkAction(thinkAction);
        }
예제 #10
0
        protected Inventory getInventoryFromThinkActionType(ThinkActionType thinkActionType, PartyMember partyMember)
        {
            Party party = Battle.GetPartyForPartyMember(partyMember);

            if (party == null)
            {
                return(null);
            }
            switch (thinkActionType)
            {
            case ThinkActionType.Attack: return(party.WeaponInventories[partyMember.CharacterClass]);

            case ThinkActionType.Defend: return(party.ShieldInventory);

            case ThinkActionType.UseItem: return(party.ItemInventory);

            default: return(null);
            }
        }
예제 #11
0
 public override void Finish()
 {
     base.Finish();
     currentThinkActionType = ThinkActionType.None;
     ChangeState(new EndTurn(Battle));
 }
예제 #12
0
        public override void Update(Delta delta)
        {
            if (Battle.PlayerParty.Count == 0 || Battle.EnemyParty.Count == 0)
            {
                Finish();
                return;
            }
            else if (currentThinkActionFinished)
            {
                if (allPartyMembersIdle())
                    getNextThinkAction();
                return;
            }

            ThinkAction thinkAction = null;

            if (currentThinkActionType == ThinkActionType.UseItem)
            {
                if (currentThinkActionIndex >= useItemThinkActions.Count)
                {
                    currentThinkActionIndex = 0;
                    statusEffectsCompleteForAction = false;
                    currentThinkActionType = ThinkActionType.Attack;
                    return;
                }

                thinkAction = useItemThinkActions[currentThinkActionIndex];
            }
            else if (currentThinkActionType == ThinkActionType.Attack)
            {
                if (currentThinkActionIndex >= attackThinkActions.Count)
                {
                    Finish();
                    return;
                }

                thinkAction = attackThinkActions[currentThinkActionIndex];
            }

            pushStateForThinkAction(thinkAction);
        }
예제 #13
0
 public override void Finish()
 {
     base.Finish();
     currentThinkActionType = ThinkActionType.None;
     ChangeState(new EndTurn(Battle));
 }
예제 #14
0
 public ThinkAction(ThinkActionType type, string optionName, PartyMember actor = null, PartyMember target = null)
 {
     Type = type;
     OptionName = optionName;
     Actor = actor;
     Target = target;
     Active = true;
     InfiniteInInventory = false;
     if (type == ThinkActionType.Attack)
     {
         WeaponData weaponData = ResourceManager.GetWeaponData(optionName);
         if (weaponData == null)
             Melee = false;
         else
             Melee = weaponData.WeaponType == WeaponType.Melee;
     }
     else
         Melee = false;
 }
예제 #15
0
 private void setThinkActionType(ThinkActionType thinkActionType)
 {
     CurrentThinkActionType = thinkActionType;
     switch (thinkActionType)
     {
     case ThinkActionType.Attack: MenuOptions = weaponMenuOptions[CurrentPartyMember.CharacterClass]; break;
     case ThinkActionType.Defend: MenuOptions = shieldMenuOptions; break;
     case ThinkActionType.UseItem: MenuOptions = itemMenuOptions; break;
     default: MenuOptions = null; break;
     }
 }
예제 #16
0
 private void initThinkActionTypeMenu(ThinkActionType thinkActionType)
 {
     setThinkActionType(thinkActionType);
     Logger.Log(thinkActionType.ToString() + " action menu opened");
     selectDefaultOptionName();
     if (!menuIsEmpty())
         Logger.Log("Selected option: " + MenuOptions[CurrentOptionNameIndex].Name);
 }