コード例 #1
0
ファイル: CombatScreen.cs プロジェクト: edg3/TeamRoguelike
        public CombatScreen()
        {
            ClearColor = Color.Black;
            _combatService = Rock.Instance.GetService<CombatOverwatchService>() as CombatOverwatchService;

            comState = CombatState.PreCombat;
            turState = TurnState.Waiting;

            delaySpan = new TimeSpan();

            //Menus:
            // 0 - main
            // 1 - skill
            // 2 - item
            // 3 - targeting
            // 4 - choose skill.attack
            menuPositions = new int[5];

            menuItems = new List<string[]>();
            menuItems.Add(new string[4] { "Std Melee", "Skills", "Items", "Flee" });
            menuItems.Add(new string[1] { "Cancel" });
            menuItems.Add(new string[1] { "Cancel" });
            menuItems.Add(new string[8] { "Enemy: Front", "Enemy: Left", "Enemy: Right", "Enemy: Back", "Team: Front", "Team: Left", "Team: Right", "Team: Back" });
            menuItems.Add(new string[1] { "IMessedUp" });
        }
コード例 #2
0
 public void CombatSetUp()
 {
     foreach (Character c in combatants)
     {
         c.controller.combat = this;
     }
     currentState = CombatState.ActiveCombat;
     combatants[0].controller.turnstate = TurnState.StartPhase;
     TurnQueue.Instance.FillQueue(combatants);
 }
コード例 #3
0
    void Start()
    {
        player.shipMaxHealth = PlayerStatus.ShipHealthMax;
        // determine player ship health from world map
        player.shipHealth = PlayerStatus.ShipHealthCurrent;
        // First state where the weapon will count up until it can be used. Subject to change of course.
        currentState = States.PROCESSING;

        CSM = GameObject.Find("Combat Manager").GetComponent<CombatState>();
    }
コード例 #4
0
ファイル: AbilityDKTest.cs プロジェクト: tsebalj1/rawr
        public void AbilityDKTest_PlagueStrike_BP()
        {
            // Needs AP passed in
            Stats FFTestStats = new Stats();

            FFTestStats.AttackPower = 100;

            Item i = new Item("Test", ItemQuality.Common, ItemType.Dagger, 1, "", ItemSlot.MainHand, "", false, new Stats(), new Stats(), ItemSlot.None, ItemSlot.None, ItemSlot.None, 10, 20, ItemDamageType.Physical, 2, "");
            CalculationOptionsTankDK c = new CalculationOptionsTankDK();

            c.talents = new DeathKnightTalents();
            Weapon w = new Weapon(i, FFTestStats, c, 0f);

            CombatState combatState = new CombatState();

            combatState.m_Stats   = FFTestStats;
            combatState.MH        = w;
            combatState.m_Talents = c.talents;

            AbilityDK_PlagueStrike PS = new AbilityDK_PlagueStrike(combatState);

            // Blood Plauge application.
            AbilityDK_BloodPlague BP = new AbilityDK_BloodPlague(combatState);

            // A disease dealing [0 + AP * 0.055 * 1.15] Shadow damage every 3 sec .
            // Base damage 0
            // Bonus from attack power [AP * 0.055 * 1.15]

            // Plague Strike Checking
            Assert.IsTrue(PS.szName == "Plague Strike", "Name");
            Assert.AreEqual(PS.AbilityCost[(int)DKCostTypes.Blood], 0, "Blood Rune");
            Assert.AreEqual(PS.AbilityCost[(int)DKCostTypes.Frost], 0, "Frost Rune");
            Assert.AreEqual(PS.AbilityCost[(int)DKCostTypes.UnHoly], 1, "UnHoly Rune");
            Assert.AreEqual(PS.AbilityCost[(int)DKCostTypes.RunicPower], -10, "RP");
            Assert.AreEqual(Math.Floor((378 + PS.wMH.damage) / 2), PS.uBaseDamage, "BaseDamage");
            Assert.AreEqual(Math.Floor((378 + PS.wMH.damage) / 2), PS.uBaseDamage, "Total Damage");
            Assert.AreEqual(PS.uRange, AbilityDK_Base.MELEE_RANGE, "Range");
            Assert.AreEqual(PS.tDamageType, ItemDamageType.Physical, "Damage Type");
            Assert.AreEqual(PS.Cooldown, 1500u, "Cooldown");

            // Blood Plague Checking
            Assert.IsTrue(BP.szName == "Blood Plague", "Name");
            Assert.AreEqual(BP.AbilityCost[(int)DKCostTypes.Blood], 0, "Blood Rune");
            Assert.AreEqual(BP.AbilityCost[(int)DKCostTypes.Frost], 0, "Frost Rune");
            Assert.AreEqual(BP.AbilityCost[(int)DKCostTypes.UnHoly], 0, "UnHoly Rune");
            Assert.AreEqual(BP.AbilityCost[(int)DKCostTypes.RunicPower], 0, "Runic Power");
            Assert.AreEqual(BP.uBaseDamage, 0u, "Damage");
            Assert.AreEqual(BP.tDamageType, ItemDamageType.Shadow, "Damage Type");
            // Not sure if this actually needs a Cooldown.
//            Assert.AreEqual(BP.Cooldown, 0u, "Cooldown");
            Assert.AreEqual(BP.uDuration, 15000u, "Duration");
            Assert.AreEqual(BP.uTickRate, 3000u, "TickRate");
            Assert.AreEqual((int)(FFTestStats.AttackPower * 0.055f * 1.15f), BP.GetTickDamage(), 0.1, "GetTickDamage");
            Assert.AreEqual((int)(BP.GetTickDamage() * (15 / 3)), BP.GetTotalDamage(), 0.1, "GetTotalDamage");
        }
コード例 #5
0
    public void CheckCombatState()
    {
        switch (combatState)
        {
        //Player Turn
        case CombatState.PlayerTurn:
            //Decision - Attack
            //Attack the enemy
            BattleRound(playerObj, enemyObj);
            //Check if Enemy is defeated
            if (enemyObj.GetComponent <Stats>().isDefeated)
            {
                RemoveEnemy(enemyObj);
                SpawnEnemy();
            }
            //Next Case. Most likely EnemyTurn
            combatState = CombatState.EnemyTurn;
            break;

        //Enemy Turn
        case CombatState.EnemyTurn:
            //Decision - Attack
            //Attack the player
            BattleRound(enemyObj, playerObj);
            //Check if Player is defeated
            if (playerObj.GetComponent <Stats>().isDefeated)
            {
                //set state to lose cause we died
                combatState = CombatState.Loss;
                Debug.Log("You Lose...");
                break;
            }
            //Next Case. Most likely PlayerTurn
            combatState = CombatState.PlayerTurn;
            break;

        //Victory
        case CombatState.Victory:
            Debug.Log("You Win!");
            //You will want to assign exp here, before you travel, otherwise it could be an issue where you don't get your reward!
            //Travels out to the overworld!
            gameManager.GetComponent <GameManager>().TravelToWorld(GameManager.Worlds.Overworld);
            break;

        //Tell the player they won
        //End Game
        case CombatState.Loss:
            //we lose, reset game
            //Loss
            //Tell the player they lost
            //Restart Game
            gameManager.GetComponent <GameManager>().TravelToWorld(GameManager.Worlds.Overworld);
            break;
        }
    }
コード例 #6
0
    /*
     * ~ Methods found ~
     * private void Start(): Initializes variables
     * private void Update(): Executes state machine once per frame
     * IEnumerator PlayerPhase(): Executes PlayerPhase actions, yields for decision making
     * private void PrePlayerPhaseState(): Variables set before PlayerPhase
     * private void PostPlayerPhaseState(): Variables set after PlayerPhase
     * private void UseSkill(UnitStats stats): Uses the top skill stored in currSkills
     * private void UseItem(PlayerStats stats): Uses the item stored in currItem
     * private void Damage(UnitStats stats, float movePower): Handles damage calculation, enemy death, and experience gain
     * private void AttemptFlee(): Attempt to flee the battle
     * private void Flee(): Handles player/enemy unit flee option
     * private float ExpValue(UnitStats stats): Calculates the experience value of an enemy unit
     * public void AddBattleLog(string textToAdd): Adds a message to the battle log
     */

    // Initialize variables
    private void Start()
    {
        playerStats = GameObject.FindGameObjectWithTag("PlayerData").GetComponent <PlayerPrefab>().players;  // References the persistent list of player units
        Debug.Log("Found players");
        enemyStats = GameObject.FindGameObjectWithTag("EnemyData").GetComponent <EnemyPrefab>().enemies;     // References the persistent list of enemy units
        Debug.Log("Found enemies");
        Debug.Log(enemyStats.Count);

        skillButtons = new List <List <Button> >();
        skillButtons.Add(skillButtons1);
        skillButtons.Add(skillButtons2);
        skillButtons.Add(skillButtons3);

        // TODO: [ Create enemy sprite buttons dynamically ]

        currState        = CombatState.Init;            // Init is the first state
        expGain          = new List <float>();          // List of experience gained from defeating each enemy
        mainCharDefeated = false;
        fleeAttempted    = false;
        battleLog.text   = "\n\n\n\n\n\n\n";        // Ingenius way of creating a battle log (assumes ~7~ newline text limit)
        // Sets skills/item panels to inactive upon battle start
        foreach (GameObject panel in skillsPanels)
        {
            panel.SetActive(false);
        }
        itemPanel.SetActive(false);
        uIndex = 0;

        // Initializes player and enemy properties
        foreach (PlayerStats player in playerStats)
        {
            player.stamina    = player.maxStamina;      // Reset stamina after every battle
            player.itemUsed   = false;                  // True if current player's item has been used (for that turn)
            player.currItem   = new Item("", 0);        // String - name of the current item that player unit will use
            player.currOption = "";                     // String - name of the current option (Attack, Skills, Item, Flee)
            player.currSkills = new Stack <Skill>();    // Stack of Skills - skill(s) that player unit will use during combat phase
            player.currEnemy  = enemyStats[0];          // UnitStats - reference to the enemy unit that player unit is targeting
        }
        foreach (UnitStats enemy in enemyStats)
        {
            enemy.health     = enemy.maxHealth;
            enemy.stamina    = enemy.maxStamina;
            enemy.currOption = "";
            enemy.currSkills = new Stack <Skill>();
            enemy.currEnemy  = playerStats[0];          // UnitStats - reference to the player unit that enemy unit is targeting
            expGain.Add(ExpValue(enemy));               // Initializes list of experience values for each enemy unit
        }

        // [ Dialogue box... ]
        // Player1HP.text = "HP: " + PlayerStats.GetComponent<UnitStats>().health + "/" + PlayerStats.GetComponent<UnitStats>().maxhealth;
        // Player1SP.text = "SP: " + PlayerStats.GetComponent<UnitStats>().stamina + "/" + PlayerStats.GetComponent<UnitStats>().maxstamina;
        // Enemy1HP.text = "HP: " + EnemyStats.GetComponent<UnitStats>().health + "/" + EnemyStats.GetComponent<UnitStats>().maxhealth;
        // Enemy1SP.text = "SP: " + EnemyStats.GetComponent<UnitStats>().health + "/" + EnemyStats.GetComponent<UnitStats>().maxhealth;
    }
コード例 #7
0
 public void InitializeCombat()
 {
     timer = 0.0f;
     attackPhaseFinished = false;
     foreach (CharCombat cc in ccs)
     {
         cc.turnIsFinished = false;
         cc.animFinished   = false;
     }
     state = CombatState.TIMER;
 }
コード例 #8
0
 // Selected unit is unselected
 public void UnitUnselected()
 {
     if (state == CombatState.unit)
     {
         combatUI.HideUnitInspector(true);
         combatUI.ShowUndoMove(false);
         combatUI.SetHint("Select unit");
         state         = CombatState.ready;
         playerControl = true;
     }
 }
コード例 #9
0
    //3.a if the defender did not defend, we finish the attack
    void MA_FinishAttack()
    {
        currentTargetsCombat.OnEnemyLandsHitOnMe();

        currentTargetsHealth.TakeDamage(currentAttack.meleeDamage);
        currentTargetsCombat.DamageFlinch();

        currentCombatState = CombatState.FinishingMeleeAttack;
        unitAnimation.PlayFinishAttackAnimation(currentAttack.finishAttackTime);
        invokeTime = currentAttack.finishAttackTime;
    }
コード例 #10
0
        protected void ChoseActionState()
        {
            SetInitiativeOrder();
            if (currentTurn < initiativeOrder.Count)
            {
                Character actingCharacter = initiativeOrder[currentTurn];
                if (actingCharacter.action != (int)ActionType.NoAction)
                {
                    currentTurn++;
                }
                else if (actingCharacter.playerControlled)
                {
                    UpdateButtonIcons(actingCharacter);
                    if (ChoseAction(actingCharacter))
                    {
                        if (actingCharacter.action == (int)ActionType.BasicAttack)
                        {
                            selectingCharacter = actingCharacter;
                            selectingSpell     = actingCharacter.spells[0];
                            currentState       = CombatState.SelectUnit;
                            return;
                        }

                        if (actingCharacter.action == (int)ActionType.CastSpell)
                        {
                            if (actingCharacter.spells[actingCharacter.spellToCast] is TargetSpell)
                            {
                                selectingCharacter = actingCharacter;
                                selectingSpell     = actingCharacter.spells[actingCharacter.spellToCast];
                                currentState       = CombatState.SelectUnit;
                            }
                            return;
                        }
                        currentTurn++;
                    }
                }
                else if (!actingCharacter.playerControlled)
                {
                    if (actingCharacter.action != (int)ActionType.PassTurn)
                    {
                        // AI decide action
                        actingCharacter.action = (int)ActionType.BasicAttack;
                        TargetSpell attackSpell = (TargetSpell)actingCharacter.spells[0];
                        attackSpell.target = team1[0]; // Attack first character
                    }
                    currentTurn++;
                }
            }
            else
            {
                currentState = CombatState.PlayActions;
                currentTurn  = 0;
            }
        }
コード例 #11
0
ファイル: CombatManager.cs プロジェクト: Alarack/Soulweaver
    private void SendingCombatEventsState()
    {
        RPCBroadcastAttacker(PhotonTargets.All, attacker);
        RPCBroadcastDefender(PhotonTargets.All, defender);

        RPCBroadcastCombat(PhotonTargets.All, attacker, defender);

        combatState = CombatState.ResolvingCombat;

        //StartCoroutine(DelayDamage());
    }
コード例 #12
0
        private void RunBtn_Click(object sender, EventArgs e)
        {
            CombatState cs = new CombatState();

            cs.Encounter  = fEncounter;
            cs.PartyLevel = fPartyLevel;

            CombatForm dlg = new CombatForm(cs);

            dlg.Show();
        }
コード例 #13
0
 public void setTarget()
 {
     if (enemyList.Count > 0)
     {
         enemyObj = enemyList[0];
     }
     else
     {
         combatState = CombatState.Win;
     }
 }
コード例 #14
0
ファイル: Turret.cs プロジェクト: jesterswilde/CP_Game
 void SawPlayer(CombatState _target)
 {
     if (!_isAlerted && _isActive)
     {
         UnloadAll();
         SetAction(new BasicAction(ActionType.Alert, true));
         BSeekAndShoot _behavior = new BSeekAndShoot();
         SetAction(new BehaviorAction(ActionType.BSeekAndShoot, _behavior, true));
         _behavior.StartBehavior(this, _target);
     }
 }
コード例 #15
0
    IEnumerator EnemySpawnDelay()
    {
        yield return(new WaitForSeconds(2.0f));

        Debug.Log("EnemySpawnDelay activated.");
        currState = CombatState.Active;
        IncreaseDifficultyLevel();
        StartCoroutine(StartCombat());
        IncreaseEnemyPower(enemyCharacter);
        yield break;
    }
コード例 #16
0
 void MaskBoard(CombatState combatState)
 {
     if (combatState != CombatState.Match3Turn)
     {
         BoardMaskPanel.SetActive(true);
     }
     else
     {
         BoardMaskPanel.SetActive(false);
     }
 }
コード例 #17
0
 public CombatAction PullTrigger(float _time, CombatState _target)
 {
     if (_pullingTrigger)
     {
         if (_inventory.SelectedWeapon.PullTrigger(_time))
         {
             return(new CombatAction(ActionType.Fire, _target));
         }
     }
     return(null);
 }
コード例 #18
0
 public void EndUnitTurn()
 {
     if (ActingUnits.Count != 0)
     {
         State = CombatState.ActingList;
     }
     else
     {
         State = CombatState.Ticking;
     }
 }
コード例 #19
0
 public void UseCurrentActionActorAndTargetEffects(CombatState combatState)
 {
     //We begin calculating the abilities speed
     this.combatState = combatState;
     //Place effects that fire in the current state into the EffectsInPlay list
     ActivateEffects(currentAction.provoker);
     //Sort the list by resolution order
     SortEffectsInPlay(); //TODO
                          //Resolve the list
     ResolveEffectsInPlay();
 }
コード例 #20
0
 // Check the hitpoints of both characters to see if combat is over
 void CheckForCombatEnd()
 {
     if (playerCharacter.hitpoints <= 0)
     {
         currState = CombatState.Defeat;
     }
     else if (enemyCharacter.hitpoints <= 0)
     {
         currState             = CombatState.Victory;
         GameController.Score += (int)(difficultyModifier * 10);
     }
 }
コード例 #21
0
 void CheckEnemyDead()
 {
     if (Enemy.CurrentHP <= 0)  // If the enemy dies, player wins. If the enemy is still alive, move to enemies turn.
     {
         state = CombatState.VICTORY;
         EndBattle();
     }
     else
     {
         return;
     }
 }
コード例 #22
0
    /// <summary>
    /// This method adds a combat input to the queue to be processed.
    /// </summary>
    /// <param name="animationTimeInfo">The time information of the animation,
    ///                                 of type CombatInfo</param>
    protected void AddCombatInput()
    {
        // Condition to check if input is allowed to be accepted
        if (IsAcceptInput)
        {
            // Adding a new input to the queue
            _combatInputs.Enqueue(GetAttackAnimation());

            // Starting to process the queue
            _combatState = CombatState.SetupInput;
        }
    }
コード例 #23
0
    public bool HasState(CombatState State)
    {
        if (this.BuffList.Exists(b => b.state == State))
        {
            return(true);
        }

        else
        {
            return(false);
        }
    }
コード例 #24
0
 public void UseCurrentActionActorEffects(CombatState combatState)
 {
     Debug.Log("USECURRENTACTIONACTOREFFECTS: " + combatState.ToString());
     //We begin calculating the abilities speed
     this.combatState = combatState;
     //Place effects that fire in the current state into the EffectsInPlay list
     ActivateEffects(currentAction);
     //Sort the list by resolution order
     SortEffectsInPlay(); //TODO
     //Resolve the list
     ResolveEffectsInPlay();
 }
コード例 #25
0
        IEnumerator SetupStandbyState()
        {
            yield return(StartCoroutine(turn.HandleTurnEvents(player.gameObject)));

            state = CombatState.STANDBY;
            FindObjectOfType <StateHolder>().SetPhaseToCombat();

            enemyDice.gameObject.SetActive(true);
            enemyDice.GetComponent <SpriteRenderer>().sprite = enemy.GetCurrentEnemyDice().repSprite;

            combatMessage.text = enemy.GetCurrentDiceDescription();
        }
コード例 #26
0
 // Start is called before the first frame update
 void Start()
 {
     currState  = CombatState.PlayerPhase;
     Enemy1type = EnemyStats.GetComponent <UnitStats>().entityType;
     PlayerStats.GetComponent <UnitStats>().stamina = PlayerStats.GetComponent <UnitStats>().maxstamina;
     EnemyStats.GetComponent <UnitStats>().health   = EnemyStats.GetComponent <UnitStats>().maxhealth;
     EnemyStats.GetComponent <UnitStats>().stamina  = EnemyStats.GetComponent <UnitStats>().maxstamina;
     Player1HP.text = "HP: " + PlayerStats.GetComponent <UnitStats>().health + "/" + PlayerStats.GetComponent <UnitStats>().maxhealth;
     Player1SP.text = "SP: " + PlayerStats.GetComponent <UnitStats>().stamina + "/" + PlayerStats.GetComponent <UnitStats>().maxstamina;
     Enemy1HP.text  = "HP: " + EnemyStats.GetComponent <UnitStats>().health + "/" + EnemyStats.GetComponent <UnitStats>().maxhealth;
     Enemy1SP.text  = "SP: " + EnemyStats.GetComponent <UnitStats>().health + "/" + EnemyStats.GetComponent <UnitStats>().maxhealth;
 }
コード例 #27
0
ファイル: Mummy.cs プロジェクト: JoaoMFAndre/UnityProjects
 // Start is called before the first frame update
 void Start()
 {
     collider        = GetComponent <Collider>();
     combatState     = GameObject.Find("GM").GetComponent <CombatState>();
     enemyDamage     = GetComponent <EnemyDamage>();
     target          = PlayerManager.instance.player.transform;
     agent           = GetComponent <NavMeshAgent>();
     enemyAttack     = GetComponent <EnemyAttack>();
     animator        = GetComponent <Animator>();
     changeBehaviour = false;
     tomb            = GameObject.Find("Base_Tumulo");
 }
コード例 #28
0
    private void Update()
    {
        var scene = currentScene;

        currentScene = SceneManager.GetActiveScene().name;

        if (scene != currentScene && currentScene == "Combat")
        {
            _combatState            = FindObjectOfType <CombatState>();
            _combatState.LoadWorld += SwitchToWorldScene;
        }
    }
コード例 #29
0
 // Start is called before the first frame update
 void Awake()
 {
     state = CombatState.START;
     turn  = 1;
     lowHealthLineIsSaid = false;
     _audioSource        = FindObjectOfType <Persistant>().GetComponent <AudioSource>();
     _information        = FindObjectOfType <LastEnemy>();
     SetEnemyInfo(_information.GetMemory().Item1, _information.GetMemory().Item2);
     StartCoroutine(PrepareCombat());
     _player = FindObjectOfType <PlayerController>().gameObject;
     _player.SetActive(false);
 }
コード例 #30
0
        public CombatManagerNotificationServer(string path, CombatState state)
            : base(path, true)
        {
            this.state = state;

            state.CharacterAdded           += State_CharacterAdded;
            state.CharacterRemoved         += State_CharacterRemoved;
            state.CharacterPropertyChanged += State_CharacterPropertyChanged;
            state.CharacterSortCompleted   += State_CharacterSortCompleted;
            state.PropertyChanged          += State_PropertyChanged;
            state.TurnChanged += State_TurnChanged;
        }
コード例 #31
0
        private void CombatThread()
        {
            _combatState = CombatState.Active;
            _eventQueue.EnqueueEvent(new CombatStateChangedEvent(_combatState));
            _eventQueue.EnqueueEvent(new CombatStartedEvent());

            uint winningParty = LoopUntilCombatComplete();

            _combatState = CombatState.Completed;
            _eventQueue.EnqueueEvent(new CombatStateChangedEvent(_combatState));
            _eventQueue.EnqueueEvent(new CombatCompletedEvent(winningParty));
        }
コード例 #32
0
        private void FoundryChangeCombatState(CombatState RequiredState)
        {
            try
            {
                //If entering Magic mode, must have a caster equipped.  If no caster, exit this action and equip a wand.
                if(RequiredState == CombatState.Magic && Core.WorldFilter.GetInventory().Where(x => x.Values(LongValueKey.EquippedSlots) == 0x1000000).Count() == 0)
                {
                    FoundryActionList.Find(x => x.Action == FoundryActionTypes.EquipWand).FireAction = true;
                    return;
                }

                if(Core.Actions.CombatMode != RequiredState)
                {
                    Core.Actions.SetCombatMode(RequiredState);
                }
            }catch(Exception ex){LogError(ex);}
        }
コード例 #33
0
        void Awake()
        {
            me = GetComponent<Entity>();

            combat = CombatState.Idle;
        }
コード例 #34
0
 //Firing gun state
 IEnumerator CFiringState()
 {
     while (combatState == CombatState.CFiring)
     {
         if(!isFocusedOnPlayer)
             combatState = CombatState.CIdle;
         fireTimer--;
         if(ammo > 0)
         {
             if(chamber > 0)
             {
                 if(fireTimer <= 0)
                 {
                     for(int i = 0; i < bulletsFired;i++)
                     {
                         GameObject temp = (GameObject) Instantiate (bulletClone,transform.position + transform.forward,transform.rotation);
                         temp.rigidbody.AddForce(transform.forward*500);
                     }
                     fireTimer = 60 / fireRate;
                     ammo--;
                     chamber--;
                 }
             }
             else
             {
                 chamber = maxChamber;
                 fireTimer = (int)(60/chamberTime);
             }
         }
         else
         {
             if(!flee)
             {
             combatState = CombatState.CReloading;
             }
         }
         yield return 0;
     }
                     NextCombatState ();
 }
コード例 #35
0
 IEnumerator CReloadingState()
 {
     reloadTimer = reloadTime * 60;
     while (combatState == CombatState.CReloading)
     {
         reloadTimer--;
         if(reloadTimer <= 0 && !flee)
         {
             ammo = maxAmmo;
             combatState = CombatState.CIdle;
         }
         yield return 0;
     }
                     NextCombatState ();
 }
コード例 #36
0
 IEnumerator CIdleState()
 {
     while (combatState == CombatState.CIdle)
     {
         if(isFocusedOnPlayer && !flee)
             combatState = CombatState.CFiring;
         yield return 0;
     }
                     NextCombatState ();
 }
コード例 #37
0
ファイル: CombatScreen.cs プロジェクト: edg3/TeamRoguelike
        public override void Update(GameTime gameTime, InputService input)
        {
            switch (comState)
            {
                case CombatState.PreCombat:
                    //TODO: pre fight stuff, priority hit if needs be
                    comState = CombatState.TurnManage;
                    break;
                case CombatState.TurnManage:
                    //Player chooses action, time progresses, eventually player chooses enxt action
                    //based on speed stat
                    if (turState == TurnState.Delay)
                    {
                        delaySpan = delaySpan.Subtract(new TimeSpan(0, 0, 0, 0, gameTime.ElapsedGameTime.Milliseconds));
                        if (delaySpan.TotalMilliseconds <= 0)
                        {
                            turState = TurnState.Waiting;
                        }
                    }
                    else if (turState == TurnState.Waiting)
                    {
                        if (_combatService.Enemy.First().Stats.HPCurrent <= 0)
                        {
                            DelayMessage = "Your enemy has fainted! You won!";
                            comState = CombatState.FinalCombat;
                            delaySpan = new TimeSpan(0, 0, 0, 0, delayMilliToAdd);
                            _combatService.Player.AddExp(_combatService.Enemy.First().Stats.Level);
                            return;
                        }
                        else if (_combatService.Player.GetPlayer().Stats.HPCurrent <= 0)
                        {
                            DelayMessage = "You have died! You lost!";
                            comState = CombatState.FinalCombat;
                            delaySpan = new TimeSpan(0, 0, 0, 0, delayMilliToAdd);
                            return;
                        }

                        bool moveHappened = false;
                        while (!moveHappened)
                        {
                            playerSpeedNext -= 1;
                            enemySpeedNext -= 1;
                            if (playerSpeedNext <= 0)
                            {
                                playerSpeedNext += _combatService.Player.GetPlayer().Stats.Get(EntityStatsContainer.AT_SPEED);
                                turState = TurnState.ChooseAction; //Players turn
                                currentMenu = 0; //Always start at the top yo
                                moveHappened = true;
                            }
                            else if (enemySpeedNext <= 0)
                            {
                                enemySpeedNext += _combatService.Enemy.First().Stats.Get(EntityStatsContainer.AT_SPEED);
                                turState = TurnState.Delay;
                                _combatService.Enemy.First().TakeCombatTurn(_combatService);
                                Delay(_combatService.Enemy.First().CombatMessage);
                                moveHappened = true;
                            }
                        }
                    }
                    else if (turState == TurnState.ChooseAction)
                    {
                        if (input.Keyboard.KeyPress(Microsoft.Xna.Framework.Input.Keys.Up))
                        {
                            menuPositions[currentMenu] -= 1;
                        }
                        else if (input.Keyboard.KeyPress(Microsoft.Xna.Framework.Input.Keys.Down))
                        {
                            menuPositions[currentMenu] += 1;
                        }

                        menuPositions[currentMenu] = (menuPositions[currentMenu] + menuItems[currentMenu].Length) % menuItems[currentMenu].Length;

                        if (input.Keyboard.KeyPress(Microsoft.Xna.Framework.Input.Keys.Enter))
                        {
                            switch (currentMenu)
                            {
                                case 0: //Main menu
                                    switch (menuPositions[currentMenu])
                                    {
                                        case 0: //melee default
                                            selectedAttack = AttackID.Default;
                                            currentMenu = 3; //Target select!
                                            break;
                                        case 1:
                                            //Choose skill page
                                            menuItems[4] = (from item in _combatService.Player.GetPlayer().Stats.SkillsList
                                                            select item.ToString()).ToArray();
                                            currentMenu = 4;
                                            break;
                                        case 2:
                                            break;
                                        case 3:
                                            {
                                                int roll = rndm.Next(2);
                                                if (roll == 0)
                                                {
                                                    Delay("You failed to flee!");
                                                }
                                                else
                                                {
                                                    Rock.Screen.Remove();
                                                    return;
                                                }
                                            }
                                            break;
                                    }
                                    break;
                                case 1: //Skills menu
                                    break;
                                case 2: //Items menu
                                    break;
                                case 3: //Target selection menu
                                    {
                                        //TODO: self targeting / etc
                                        AttackResult res;
                                        if (menuPositions[3] < 4)
                                        {
                                            //enemy!
                                            var target = _combatService.Enemy.Get((Party.PartySlot)menuPositions[3]);
                                            res = _combatService.Attack(_combatService.Player.GetPlayer(), target, selectedAttack);
                                        }
                                        else
                                        {
                                            //teammate
                                            var target = _combatService.Player.Get((Party.PartySlot)(menuPositions[3] - 4));
                                            res = _combatService.Attack(_combatService.Player.GetPlayer(), target, selectedAttack);
                                        }

                                        if (res == AttackResult.Hit)
                                        {
                                            Delay("Your attack hits!");
                                        }
                                        else if (res == AttackResult.Critical)
                                        {
                                            Delay("Your attack hits for a critical!");
                                        }
                                        else if (res == AttackResult.Miss)
                                        {
                                            Delay("Your attack misses!");
                                        }
                                    }
                                    break;

                                case 4:
                                    {
                                        selectedAttack = _combatService.Player.GetPlayer().Stats.SkillsList[menuPositions[4]];
                                        currentMenu = 3; //target select!
                                    }
                                    break;
                            }
                        }
                    }
                    break;
                case CombatState.FinalCombat:
                    {
                        delaySpan = delaySpan.Subtract(new TimeSpan(0, 0, 0, 0, gameTime.ElapsedGameTime.Milliseconds));
                        if (delaySpan.TotalMilliseconds <= 0)
                        {
                            if (_combatService.Player.MessageStack.Count > 0)
                            {
                                DelayMessage = _combatService.Player.MessageStack.Pop();
                                delaySpan = new TimeSpan(0, 0, 0, 0, delayMilliToAdd * 2);
                            }
                            else
                            {
                                Rock.Screen.Remove();
                                return;
                            }
                        }
                    }
                    break;
            }
        }
コード例 #38
0
        /// <summary>
        /// Services one tick of combat.
        /// </summary>
        public void Service()
        {
            if (_combatState == CombatState.InCombat)
            {
                Faction winner = CheckVictoryCondition();

                // check victory condition
                if (winner == Faction.NoFaction)
                {
                    ServiceProjectiles();
                    ServiceUnits();
                }
                else if (winner == Faction.TowerSide)
                {
                    Debug.Log("############################################# yay, tower side won");
                    _combatState = CombatState.PostCombat;
                }
                else
                {
                    Debug.Log("############################################# boo, lemming side won");
                    _combatState = CombatState.PostCombat;
                }
            }
            else if (_combatState == CombatState.OutOfCombat)
            {
               ServiceProjectiles();
               ServiceOnlyTowers();
            }
        }
コード例 #39
0
        /// <summary>
        /// Starts a combat sequence in the CombatController.
        /// </summary>
        public void StartCombat()
        {
            _combatState = CombatState.InCombat;

            GridPoint[,] map = NavigationController.Instance.NavigationGrid;
        }
コード例 #40
0
 public void EndTurn()
 {
     if (_combatState == CombatState.EnemyTurn)
     {
         _combatState = CombatState.PlayerTurn;
     }
     else if (_combatState == CombatState.PlayerTurn)
     {
         _combatState = CombatState.EnemyTurn;
     }
 }
コード例 #41
0
    // Use this for initialization
    void Start ()
    {
        _combatState = CombatState.PlayerTurn;

        Fighter _fight = new Fighter();
        InitBattle(_player, _enemy, 8);
        
	
	}
コード例 #42
0
        private CombatController()
        {
            _spawnedUnits = new Dictionary<UnitTypes, int>();
            _slainUnits = new Dictionary<UnitTypes, int>();

            foreach (UnitTypes type in Enum.GetValues(typeof(UnitTypes)))
            {
                _spawnedUnits[type] = 0;
                _slainUnits[type] = 0;
            }

            _activeProjectiles = new List<Projectile>();
            _pendingProjectiles = new List<Projectile>();
            _deadProjectiles = new List<Projectile>();

            _activeUnits = new List<Unit>();
            _pendingUnits = new List<Unit>();
            _deadUnits = new List<Unit>();

            _combatState = CombatState.PreCombat;

            // TODO: hook this up to a button
            StartCombat();
        }
コード例 #43
0
 private void Foundry_ChangeCombatState(CombatState RequiredState)
 {
     try
     {
         if(Core.Actions.CombatMode != RequiredState){Core.Actions.SetCombatMode(RequiredState);}
     }catch(Exception ex){LogError(ex);}
 }