Beispiel #1
0
    public static int CalculateDamage(int AttackerModifier, Weapon.EWeaponRoll RollType)
    {
        int TotalDamage = AttackerModifier;

        switch (RollType)
        {
        case Weapon.EWeaponRoll.R1d4:
            TotalDamage += Random.Range(1, 4);
            break;

        case Weapon.EWeaponRoll.R1d6:
            TotalDamage += Random.Range(1, 6);
            break;

        case Weapon.EWeaponRoll.R1d8:
            TotalDamage += Random.Range(1, 8);
            break;

        case Weapon.EWeaponRoll.R1d10:
            TotalDamage += Random.Range(1, 10);
            break;

        case Weapon.EWeaponRoll.R1d12:
            TotalDamage += Random.Range(1, 12);
            break;

        case Weapon.EWeaponRoll.R2d6:
            TotalDamage += Random.Range(1, 6);
            TotalDamage += Random.Range(1, 6);
            break;
        }

        return(TotalDamage);
    }
Beispiel #2
0
    private bool WillEngageOnCombatOnMovement(Vector2 _MovementDirection)
    {
        if (_MovementDirection == Vector2.zero)
        {
            return(false);
        }

        Vector2 PositionToCheck = m_CurrentPosition + _MovementDirection;
        Actor   ActorToInteract = TurnBasedManager.s_Instance.WhatActorIsAt(PositionToCheck);

        if (ActorToInteract != null)
        {
            if (ActorToInteract is DynamicActor && ActorToInteract.ActorType != m_ActorType)
            {
                // need to get the attacker roll type!
                Weapon.EWeaponRoll RollType = Weapon.EWeaponRoll.R1d4;
                if (ActorType == EActorType.EAT_Player)
                {
                    RollType = ResourceLocator.instance.PlayerWeapon.RollType;
                }
                else if (ActorType == EActorType.EAT_Enemy)
                {
                    RollType = GetComponent <Enemy>().MonsterStat.DamageRoll;
                }

                TurnBasedManager.s_Instance.HandleCombat(this, (DynamicActor)ActorToInteract, RollType);
                return(true);
            }
        }

        return(false);
    }
Beispiel #3
0
    // TODO: Some way to get all actors around...
    // Add actor to list
    // remove actor from list

    // =================================================================================================
    //
    //  COMBAT
    //
    // =================================================================================================
    #region HANDLING COMBAT
    public void HandleCombat(DynamicActor _AttackingActor, DynamicActor _BeingAttackedActor, Weapon.EWeaponRoll AttackerRoll)
    {
        _AttackingActor.DealtDamage();
        int ExtraStr = 0;

        if (_AttackingActor.ActorType == EActorType.EAT_Player)
        {
            ExtraStr = ResourceLocator.instance.PlayerExtraStr;
        }

        int AttackerModifier = CombatHelpers.CalculateModifier(_AttackingActor.ActorStats.Strength + ExtraStr);

        int Damage = CombatHelpers.CalculateDamage(AttackerModifier, AttackerRoll);

        Damage = Mathf.Max(Damage, 0);

        _BeingAttackedActor.SufferedDamage(Damage);
        Debug.Log($"{_AttackingActor.ActorName} dealt {Damage} damage to {_BeingAttackedActor.ActorName}");
    }