예제 #1
0
        private void Update()
        {
            if (IsAnimateFight)
            {
                FightTime -= Time.deltaTime;

                if (FightTime <= 0)
                {
                    IsAnimateFight = false;

                    Attacker.gameObject.GetComponent <Animator>().enabled = false;
                    Defender.gameObject.GetComponent <Animator>().enabled = false;

                    Attacker.gameObject.GetComponent <SpriteRenderer>().sprite = DefaultSpriteAttacker;
                    Defender.gameObject.GetComponent <SpriteRenderer>().sprite = DefaultSpriteDefender;

                    Attacker.UpdateHealthText();
                    Defender.UpdateHealthText();
                    FightTime = 1f;

                    // Create the animation fight event. But set the needsanimating to false. Meaning that the method Attack.BattleSimulation() is called.
                    var fight = new OnAnimFight
                    {
                        attacker       = Attacker,
                        defender       = Defender,
                        needsAnimating = false
                    };

                    EventHandler.dispatch(fight);
                }
            }
        }
예제 #2
0
파일: Attack.cs 프로젝트: ronaldme/Triumph
        /// <summary>
        /// The method which does all the complicated battle simulation. From calculating Damage to dealing Damage and so forth.
        /// Gets called when the event OnAnimFight is fired. When the needsAnimating property is false it will execute this code.
        /// </summary>
        /// <param Name="Attacker"></param>
        /// <param Name="Defender"></param>
        private void BattleSimulation(OnAnimFight evt)
        {
            if (evt.attacker != null && evt.defender != null && !evt.needsAnimating)
            {
                UnitGameObject attacker = evt.attacker;
                UnitGameObject defender = evt.defender;
                attacker.UnitGame.UpdateUnitColor();
                Unit attUnit = attacker.UnitGame;
                Unit defUnit = defender.UnitGame;

                float damageToDefender = attUnit.Damage * attUnit.GetStrength() * attUnit.GetGroundModifier() *
                                         attUnit.GetUnitModifier(defender.type);
                float damageToAttacker = defUnit.Damage * defUnit.GetStrength() * defUnit.GetGroundModifier() *
                                         defUnit.GetUnitModifier(attacker.type);
                damageToDefender = Mathf.Clamp(damageToDefender, 1f, float.MaxValue);
                damageToAttacker = Mathf.Clamp(damageToAttacker, 1f, float.MaxValue);

                defUnit.DecreaseHealth(damageToDefender);

                if (defUnit.AttackRange >= attUnit.AttackRange)
                {
                    attUnit.DecreaseHealth(damageToAttacker);
                }

                CheckUnitsHealth(attacker, defender);
            }
        }
예제 #3
0
파일: Attack.cs 프로젝트: ronaldme/Triumph
        /// <summary>
        /// Get called whenever an OnHighlightClick is fired. If it is possible it will attack an enemy unit.
        /// </summary>
        /// <param Name="evt"></param>
        public void BattlePreparation(OnHighlightClick evt)
        {
            if (evt.highlight != null)
            {
                HighlightObject highlightObj = evt.highlight;
                if (highlight.IsHighlightOn && !movement.NeedsMoving &&
                    highlightObj.highlightTypeActive == HighlightTypes.highlight_attack)
                {
                    UnitGameObject attackingUnit = highlight.UnitSelected;
                    UnitGameObject defendingUnit = highlightObj.Tile.unitGameObject;


                    if (!attackingUnit.UnitGame.HasAttacked)
                    {
                        if (!attackingUnit.UnitGame.HasMoved ||
                            (attackingUnit.UnitGame.HasMoved && attackingUnit.UnitGame.CanAttackAfterMove))
                        {
                            if (TileHelper.IsTileWithinRange(attackingUnit.transform.position,
                                                             defendingUnit.transform.position, attackingUnit.UnitGame.AttackRange))
                            {
                                attackingUnit.UnitGame.HasAttacked = true;
                                attackingUnit.UnitGame.HasMoved    = true;
                                attackingUnit.UnitGame.PlaySound(UnitSoundType.Attack);

                                highlight.ClearHighlights();

                                // Check if units are faces the wrong way
                                FacingDirectionUnits(attackingUnit, defendingUnit);

                                // Dispatch the animation fight event. But set the needsanimating to true.
                                OnAnimFight fight = new OnAnimFight();
                                fight.attacker       = attackingUnit;
                                fight.defender       = defendingUnit;
                                fight.needsAnimating = true;
                                EventHandler.dispatch(fight);
                            }
                            else
                            {
                                Notificator.Notify("Move to this unit to attack!", 1f);
                            }
                        }
                    }
                }
            }
        }
예제 #4
0
        private void OnFightAnim(OnAnimFight evt)
        {
            if (evt.attacker != null && evt.defender != null && evt.needsAnimating)
            {
                Defender = evt.defender;
                Attacker = evt.attacker;
                DefaultSpriteAttacker = Attacker.gameObject.GetComponent <SpriteRenderer>().sprite;
                DefaultSpriteDefender = Defender.gameObject.GetComponent <SpriteRenderer>().sprite;

                Attacker.gameObject.GetComponent <Animator>().enabled = true;

                if (Defender.UnitGame.AttackRange >= Attacker.UnitGame.AttackRange)
                {
                    Defender.gameObject.GetComponent <Animator>().enabled = true;
                }

                IsAnimateFight = true;
            }
        }