public void AttackWithKnockback_DamagesCharacter()
        {
            HeroSystemCharacter attacker = new HeroSystemCharacter();
            Attack cm = new Attack("Basic", attacker, DamageType.Normal, 5,
                                   DefenseType.PD);


            DamageAmount attackDamage = new DamageAmount();

            attackDamage.Type = DamageType.Normal;
            attackDamage.BOD  = 13;
            attackDamage.WorksAgainstDefense = DefenseType.PD;

            HeroSystemCharacter defender        = new HeroSystemCharacter();
            KnockbackResult     actualKnockback = cm.KnockBackCharacter(defender, attackDamage);

            KnockbackResultType actualResult   = actualKnockback.Result;
            KnockbackResultType expectedResult = KnockbackResultType.KnockBacked;

            Assert.AreEqual(actualResult, expectedResult);

            bool isProne = defender.State.ContainsKey(CharacterStateType.Prone);

            Assert.AreEqual(isProne, true);
        }
Пример #2
0
 void Awake()
 {
     // Setting up the references.
     player       = GameObject.FindGameObjectWithTag("Player");
     playerHealth = player.GetComponent <Health> ();
     damage       = GetComponent <DamageAmount>();
     enemyHealth  = GetComponent <EnemyHealth>();
     anim         = GetComponent <Animator> ();
 }
Пример #3
0
 private void UpdateAnimatorLayerByDamage(DamageAmount newDamageLayer)
 {
     print("Updating layer " + _damageTaken + " to 0.0 and layer " + newDamageLayer + " to 1");
     if (_damageTaken != DamageAmount.NONE)
     {
         Animator.SetLayerWeight((int)_damageTaken, 0.0f);
     }
     Animator.SetLayerWeight((int)newDamageLayer, 1.0f);
 }
        public DamageAmount DeductDefenseFromDamage(DamageAmount damageAmount)
        {
//to do: put state logic into body and stun charasteristics
            Charasteristic defense    = determineDefense(damageAmount);
            DamageAmount   damageDone = damageAmount.Clone();

            damageDone.STUN -= defense.CurrentValue;
            damageDone.BOD  -= defense.CurrentValue;
            return(damageDone);
        }
Пример #5
0
 public override void firedFrontWeapon(GameObject[] bullet, Vector3 whichPositionFiredFrom, float angleTravel)
 {
     foreach (GameObject shot in bullet)
     {
         DamageAmount damageAmount = shot.GetComponent <DamageAmount>();
         if (damageAmount != null)
         {
             damageAmount.addDamage(3);
         }
     }
 }
Пример #6
0
    private void CheckDamageTaken()
    {
        var currentDamageTaken = CalculateDamageTaken();

        if (_damageTaken != currentDamageTaken)
        {
            // update the damage to be the current and update layers
            UpdateAnimatorLayerByDamage(currentDamageTaken);
            _damageTaken = currentDamageTaken;
        }
    }
Пример #7
0
 public override void firedRightWeapon(GameObject[] bullet, Vector3 spawnPosition, float angleTravel)
 {
     foreach (GameObject bulletInstant in bullet)
     {
         DamageAmount damageAmount = bulletInstant.GetComponent <DamageAmount>();
         if (damageAmount != null)
         {
             damageAmount.addDamage(damageBonus);
             damageBonus = 0;
         }
     }
 }
Пример #8
0
    private void OnTriggerEnter2D(Collider2D collision)
    {
        if (collision.gameObject.layer == 16) // Is player projectile?
        {
            DamageAmount damageInstant = collision.gameObject.GetComponent <DamageAmount>();

            if (damageInstant != null)
            {
                Instantiate(empowerEffect, collision.transform.position, Quaternion.identity);
                damageInstant.originDamage = damageInstant.originDamage + attackSteroid;
                damageInstant.updateDamage();
            }
        }
    }
    void OnTriggerEnter(Collider col)
    {
        Debug.Log(col.gameObject.name);
        DamageAmount damage = col.gameObject.GetComponent <DamageAmount>();

        if (damage)
        {
            /*
             *          EnemyHealth enemyHealth = col.gameObject.GetComponent<EnemyHealth> ();
             *          enemyHealth.Kill ();
             */
            //playerHealth.damage(damage.GetDamage());
        }
    }
Пример #10
0
        public virtual bool Hits(BaseCharacter attacker, BaseCharacter target)
        {
            CriticalHit = false;
            bool hits = false;

            switch (Type)
            {
            case ActionType.MeleeAttack:
            case ActionType.RangedAttack:
            case ActionType.SpellAttack:
                hits   = AttackType(attacker, target);
                Result = hits ? DamageAmount.Full : DamageAmount.None;
                break;

            case ActionType.SpellSave:
                hits = !target.SavingThrow(Ability, DC);
                if (hits && EffectToApply != null)
                {
                    target.ActiveEffect = EffectToApply;
                }

                if (HalfDamageOnMiss)
                {
                    Result = hits ? DamageAmount.Full : DamageAmount.Half;
                    hits   = true;
                }
                else
                {
                    Result = hits ? DamageAmount.Full : DamageAmount.None;
                }
                break;

            case ActionType.Heal:
                hits   = true;
                Result = DamageAmount.Full;
                break;

            case ActionType.GrantTempHp:
                hits   = true;
                Result = DamageAmount.Full;
                break;

            default:
                hits   = false;
                Result = DamageAmount.None;
                break;
            }

            return(hits);
        }
        public void TestTakeDamage_EffectsCharacterStateBasedOnAmount()
        {
            DamageAmount attackDamage = new DamageAmount();

            attackDamage.STUN = 35;
            attackDamage.BOD  = 5;
            attackDamage.WorksAgainstDefense = DefenseType.PD;
            HeroSystemCharacter defender = new HeroSystemCharacter();

            defender.PD.CurrentValue   = 5;
            defender.STUN.CurrentValue = 50;
            defender.BOD.CurrentValue  = 10;
            defender.BOD.MaxValue      = 10;
            defender.CON.CurrentValue  = 29;

            defender.TakeDamage(attackDamage);

            bool actualStunned   = defender.State.ContainsKey(CharacterStateType.Stunned);
            bool expectedStunned = true;

            Assert.AreEqual(actualStunned, expectedStunned);

            attackDamage      = new DamageAmount();
            attackDamage.STUN = 35;
            attackDamage.BOD  = 10;
            attackDamage.WorksAgainstDefense = DefenseType.PD;

            defender.TakeDamage(attackDamage);
            bool actualUnconsious   = defender.State.ContainsKey(CharacterStateType.Unconsious);
            bool expectedUnconsious = true;

            Assert.AreEqual(actualUnconsious, expectedUnconsious);

            attackDamage.BOD = 11;
            defender.TakeDamage(attackDamage);
            bool actualDying   = defender.State.ContainsKey(CharacterStateType.Dying);
            bool expectedDying = true;

            Assert.AreEqual(actualDying, expectedDying);

            attackDamage.BOD = 14;
            defender.TakeDamage(attackDamage);
            bool actualDead   = defender.State.ContainsKey(CharacterStateType.Dying);
            bool expectedDead = true;

            Assert.AreEqual(actualDead, expectedDead);
        }
        private Charasteristic determineDefense(DamageAmount damage)
        {
            switch (damage.WorksAgainstDefense)
            {
            case DefenseType.PD:
                return(PD);

            case DefenseType.ED:
                return(ED);

            case DefenseType.RED:
                return(RED);

            case DefenseType.RPD:
                return(RPD);
            }
            return(null);
        }
Пример #13
0
    void firePowerShot(GameObject[] bullets)
    {
        numberBulletsFired++;
        if (numberBulletsFired == 4)
        {
            foreach (GameObject bullet in bullets)
            {
                DamageAmount damageAmount = bullet.GetComponent <DamageAmount>();
                damageAmount.originDamage += 3;
                damageAmount.updateDamage();
            }

            PlayerScript playerScript = PlayerProperties.playerScript;
            float        angleTravel  = Mathf.Atan2(PlayerProperties.cursorPosition.y - PlayerProperties.playerShipPosition.y, PlayerProperties.cursorPosition.x - PlayerProperties.playerShipPosition.x) + Mathf.PI;
            playerScript.setPlayerMomentum(new Vector3(Mathf.Cos(angleTravel), Mathf.Sin(angleTravel)) * 8, 0.75f);
            numberBulletsFired = 0;
        }
    }
        public Dictionary <CharacterStateType, HeroCharacterState> TakeDamage(DamageAmount damageAmount)
        {
            DamageAmount damageDone = DeductDefenseFromDamage(damageAmount);

            if (IsRolling == true)
            {
                damageDone.STUN /= 2;
                damageDone.BOD  /= 2;
                ActiveManuever   = null;
            }

            STUN.Deduct(damageDone.STUN);
            BOD.Deduct(damageDone.BOD);

            var statesResultingFromDamage = applyDamageStateBasedOnDamageAmount(damageDone);

            return(statesResultingFromDamage);
        }
        public void TestRoll_ReturnsCorrectBodyBasedOnDiceValuesAndStunBasedOnMultipler()
        {
            KillingDamageDicePool dp = new KillingDamageDicePool(3);

            dp.Roll();

            Dice[] pool = dp.Pool;

            ((KillingDamageDice)pool[0]).Body = 3;
            ((KillingDamageDice)pool[1]).Body = 4;
            ((KillingDamageDice)pool[2]).Body = 6;

            DamageAmount result = dp.DamageResult;

            int expectedBody = 13;
            int actualBody   = result.BOD;

            int expectedStun = 13 * dp.Multiplier;
            int actualStun   = result.STUN;

            Assert.AreEqual(expectedBody, actualBody);
            Assert.AreEqual(expectedStun, actualStun);
        }
        public void TestRoll_ReturnsCorrectStunAndBodyBasedOnDiceValues()
        {
            NormalDamageDicePool dp = new NormalDamageDicePool(3);

            dp.Roll();

            Dice[] pool = dp.Pool;

            ((NormalDamageDice)pool[0]).Stun = 3;
            ((NormalDamageDice)pool[1]).Stun = 4;
            ((NormalDamageDice)pool[2]).Stun = 6;

            DamageAmount result = dp.DamageResult;

            int expectedBody = 4;
            int actualBody   = result.BOD;

            int expectedStun = 13;
            int actualStun   = result.STUN;

            Assert.AreEqual(expectedBody, actualBody);
            Assert.AreEqual(expectedStun, actualStun);
        }
Пример #17
0
    //  Update is called once per frame
    void Update()
    {
        if (PlayerHealth.Health >= 25)
        {
            amount = DamageAmount.none;
        }
        else if (PlayerHealth.Health <= 20 && PlayerHealth.Health >= 15)
        {
            amount = DamageAmount.small;
        }
        else if (PlayerHealth.Health < 15 && PlayerHealth.Health >= 10)
        {
            amount = DamageAmount.medium;
        }
        else if (PlayerHealth.Health < 10 && PlayerHealth.Health >= 5)
        {
            amount = DamageAmount.large;
        }


        switch (UIAmmoController.Type)
        {
        case GunType.HandGun:
        {
            LaserGunIcon.gameObject.SetActive(false);
            SMGGunIcon.gameObject.SetActive(false);
            SniperGunIcon.gameObject.SetActive(false);
            HandGunIcon.gameObject.SetActive(true);
            GrenadeIcon.gameObject.SetActive(false);
        } break;

        case GunType.SMGGun:
        {
            LaserGunIcon.gameObject.SetActive(false);
            HandGunIcon.gameObject.SetActive(false);
            SniperGunIcon.gameObject.SetActive(false);
            SMGGunIcon.gameObject.SetActive(true);
            GrenadeIcon.gameObject.SetActive(false);
        } break;

        case GunType.LaserGun:
        {
            LaserGunIcon.gameObject.SetActive(true);
            HandGunIcon.gameObject.SetActive(false);
            SniperGunIcon.gameObject.SetActive(false);
            SMGGunIcon.gameObject.SetActive(false);
            GrenadeIcon.gameObject.SetActive(false);
        } break;

        case GunType.Sniper:
        {
            LaserGunIcon.gameObject.SetActive(false);
            HandGunIcon.gameObject.SetActive(false);
            SniperGunIcon.gameObject.SetActive(true);
            SMGGunIcon.gameObject.SetActive(false);
            GrenadeIcon.gameObject.SetActive(false);
        } break;

        case GunType.Granade:
        {
            LaserGunIcon.gameObject.SetActive(false);
            HandGunIcon.gameObject.SetActive(false);
            SniperGunIcon.gameObject.SetActive(false);
            SMGGunIcon.gameObject.SetActive(false);
            GrenadeIcon.gameObject.SetActive(true);
        } break;
        }

        switch (amount)
        {
        case DamageAmount.none:
        {
            foreach (var img in bloodEffect)
            {
                img.gameObject.SetActive(false);
            }
        } break;

        case DamageAmount.small:
        {
            bloodEffect[0].gameObject.SetActive(true);
            bloodEffect[1].gameObject.SetActive(false);
            bloodEffect[2].gameObject.SetActive(false);
        } break;

        case DamageAmount.medium:
        {
            bloodEffect[0].gameObject.SetActive(false);
            bloodEffect[1].gameObject.SetActive(true);
            bloodEffect[2].gameObject.SetActive(false);
        } break;

        case DamageAmount.large:
        {
            bloodEffect[0].gameObject.SetActive(false);
            bloodEffect[1].gameObject.SetActive(false);
            bloodEffect[2].gameObject.SetActive(true);
        } break;
        }
    }
        private Dictionary <CharacterStateType, HeroCharacterState> applyDamageStateBasedOnDamageAmount(DamageAmount damageDone)
        {
            Dictionary <CharacterStateType, HeroCharacterState> statesResultingFromDamage =
                new Dictionary <CharacterStateType, HeroCharacterState>();
            HeroCharacterState stateFromDamage = null;

            if (damageDone.STUN > CON.CurrentValue)
            {
                stateFromDamage = AddState(CharacterStateType.Stunned, false);
                statesResultingFromDamage.Add(stateFromDamage.Type, stateFromDamage);
                InterruptManueverInProgess();
            }
            if (STUN.CurrentValue <= 0)
            {
                stateFromDamage = AddState(CharacterStateType.Unconsious, false);
                statesResultingFromDamage.Add(stateFromDamage.Type, stateFromDamage);
                InterruptManueverInProgess();
            }
            if (BOD.CurrentValue <= 0 && BOD.CurrentValue > (BOD.MaxValue * -1))
            {
                stateFromDamage = AddState(CharacterStateType.Dying, false);
                statesResultingFromDamage.Add(stateFromDamage.Type, stateFromDamage);
            }
            else
            {
                if (BOD.CurrentValue < 0 && BOD.CurrentValue < (BOD.MaxValue * -1))
                {
                    RemoveState(CharacterStateType.Dying);
                    stateFromDamage = AddState(CharacterStateType.Dead, false);
                    ;
                    statesResultingFromDamage.Add(stateFromDamage.Type, stateFromDamage);
                }
            }
            return(statesResultingFromDamage);
        }