Ejemplo n.º 1
0
    void GetDamage()
    {
        foreach (var target in data.targets)
        {
            //List<DamageClass> damages = new List<DamageClass>();
            int        damage   = Random.Range(item.Battle.dmg, (item.Battle.dmg + item.Battle.dmg_dice + 1));
            GameObject myTarget = null;
            switch (target.tag)
            {
            case "Enemy":
                if (target.TryGetComponent(out HolderDataEnemy enemy))
                {
                    myTarget = enemy.gameObject;
                }
                break;

            case "Player":
                if (target.TryGetComponent(out HolderDataCharacter character))
                {
                    myTarget = character.gameObject;
                }
                break;

            case "Ally":
                break;
            }
            List <DamageClass> damages = new List <DamageClass>();
            damages.Add(new DamageClass(damage, item.AttackElement));
            IPS_Functions.GetDamage(damages, myTarget);
        }
    }
Ejemplo n.º 2
0
    int Attack(HolderDataCharacter character, List <DamageClass> dmg)
    {
        var stats = character.character.currentStats;

        result = new IPS_Move();
        if (data.character.currentStats.HitChance())
        {
            if (stats.ParryChance())
            {
                //IPS_Functions.GetParry(character);
                return(0);
            }
            else if (stats.EvadeChance())
            {
                IPS_Functions.GetEvade();
                return(0);
            }
            IPS_Functions.GetDamage(dmg, character.gameObject);
        }
        else
        {
            IPS_Functions.GetMiss();
        }
        return(0);
    }
Ejemplo n.º 3
0
        public Weapon(int index, Characters character)
        {
            switch (index)
            {
            case 0:
                range         = character.currentStats.Battle.range;
                isWeapon      = 1;
                canUse        = true;
                missileFlight = MissileFlight.none;
                break;

            case 1:
                IWeapon w1 = null;
                if (character.Equipment.WeaponsSlot[0].Right.Length > 0)
                {
                    w1 = (IWeapon)character.Equipment.WeaponsSlot[0].Right[0].item;
                }
                if (w1 != null)
                {
                    range         = w1.Stats.Battle.range;
                    isWeapon      = IPS_Functions.isDistanceWeapon(w1);
                    canUse        = IPS_Functions.WeaponCanUse(w1);
                    missileFlight = w1.MissileFlight;
                }
                else
                {
                    range         = 0;
                    isWeapon      = 0;
                    canUse        = false;
                    missileFlight = MissileFlight.none;
                }
                break;

            case 2:
                IWeapon w2 = null;
                if (character.Equipment.WeaponsSlot[0].Left.Length > 0)
                {
                    w2 = (IWeapon)character.Equipment.WeaponsSlot[0].Left[0].item;
                }
                if (w2 != null)
                {
                    range         = w2.Stats.Battle.range;
                    isWeapon      = IPS_Functions.isDistanceWeapon(w2);
                    canUse        = IPS_Functions.WeaponCanUse(w2);
                    missileFlight = w2.MissileFlight;
                }
                else
                {
                    range         = 0;
                    isWeapon      = 0;
                    canUse        = false;
                    missileFlight = MissileFlight.none;
                }
                break;
            }
        }
Ejemplo n.º 4
0
 void AgentMove()
 {
     data.agent.SetDestination(data.target);
     IPS_Functions.MoveCost(data);
     IPS_Functions.PathRender(data, IPS_Functions.PathRenderType.Move);
     if (data.agent.remainingDistance == 0)
     {
         data.agent.isStopped = true;
     }
 }
Ejemplo n.º 5
0
        public int Logic()
        {
            Debug.Log("IPS: Logic");
            data.character.WeaponConsumeAmmo(index);
            if (isHit)
            {
                if (isParry)
                {
                    switch (data.character.GetWeaponCategory(index))
                    {
                    case IWeaponCategory.Bow:
                    case IWeaponCategory.Crossbow:
                    case IWeaponCategory.Shotgun:
                    case IWeaponCategory.Pistol:
                    case IWeaponCategory.Rifle:
                        break;

                    case IWeaponCategory.Hammer:
                    case IWeaponCategory.Katana:
                    case IWeaponCategory.Natural:
                    case IWeaponCategory.Shield:
                    case IWeaponCategory.Staff:
                    case IWeaponCategory.Sword:
                    case IWeaponCategory.Axe:
                    case IWeaponCategory.Wand:
                        if (isContrattack)
                        {
                            IPS_Functions.GetContrAttack();
                            return(0);
                        }
                        break;
                    }
                    IPS_Functions.GetParry();
                    return(0);
                }
                if (isEvade)
                {
                    IPS_Functions.GetEvade();
                    return(0);
                }
                SetStates(index);
                IPS_Functions.GetDamage(data.character.currentStats.GetDmg(index), target);
                if (targetAi != null)
                {
                    IPS_Functions.GetEffects(AtkState, targetAi);
                }
                else
                {
                    IPS_Functions.GetEffects(AtkState, targetPlayer);
                }
                return(0);
            }
            IPS_Functions.GetMiss();
            return(0);
        }
Ejemplo n.º 6
0
 public IPlayerState Execute()
 {
     if (!endAction)
     {
         WeaponInRange();
         result = Target();
     }
     else
     {
         if (!data.agent.isStopped)
         {
             IPS_Functions.PathRender(data, IPS_Functions.PathRenderType.Move);
             if (data.agent.remainingDistance == 0)
             {
                 data.agent.isStopped = true;
             }
             return(null);
         }
     }
     return(result);
 }
Ejemplo n.º 7
0
    void AttackCost()
    {
        switch (data.slotIndex)
        {
        case 0:
            data.cost += 1;
            break;

        case 1:
            data.cost += IPS_Functions.WeaponCost((IWeapon)data.character.Equipment.WeaponsSlot[0].Right[0].item);
            break;

        case 2:
            data.cost += IPS_Functions.WeaponCost((IWeapon)data.character.Equipment.WeaponsSlot[0].Left[0].item);
            break;

        case 3:
            data.cost += IPS_Functions.WeaponCost((IWeapon)data.character.Equipment.WeaponsSlot[0].Right[0].item);
            data.cost += IPS_Functions.WeaponCost((IWeapon)data.character.Equipment.WeaponsSlot[0].Left[0].item);
            break;
        }
    }
Ejemplo n.º 8
0
    void WeaponInRange()
    {
        float posDistance = Vector3.Distance(data.target, data.agent.transform.position);

        IPS_Functions.Weapons weapons = data.weapons;
        float maxRange = weapons.HighRange();

        canAttack = true;

        // 0 - brak akcji, 1 - atak, 2 - podejście i atak
        int[] w = new int[3];
        data.slotIndex = 0;
        if (weapons.w1 != null && weapons.w1.canUse)
        {
            switch (weapons.w1.isWeapon)
            {
            case 1:
                w[1] = NoneRayHit(posDistance, weapons.w1.range);
                break;

            case 2:
                switch (weapons.w1.missileFlight)
                {
                case MissileFlight.curve:
                    w[1] = CurveRayHit(posDistance, weapons.w1.range);
                    break;

                case MissileFlight.simply:
                    w[1] = SimplyRayHit(posDistance, weapons.w1.range);
                    break;
                }
                break;
            }
        }
        if (weapons.w2 != null && weapons.w2.canUse)
        {
            Debug.Log(weapons.w2.canUse + " " + weapons.w2.isWeapon + " " + weapons.w2.missileFlight);
            switch (weapons.w2.isWeapon)
            {
            case 1:
                w[2] = NoneRayHit(posDistance, weapons.w2.range);
                break;

            case 2:
                switch (weapons.w2.missileFlight)
                {
                case MissileFlight.curve:
                    w[2] = CurveRayHit(posDistance, weapons.w2.range);
                    break;

                case MissileFlight.simply:
                    w[2] = SimplyRayHit(posDistance, weapons.w2.range);
                    break;
                }
                break;
            }
        }
        if (weapons.fist.canUse)
        {
            w[0] = NoneRayHit(posDistance, weapons.fist.range);
        }
        switch (w[1])
        {
        case 0:
            break;

        case 1:
            data.slotIndex += 1;
            break;

        case 2:
            if (w[2] != 1)
            {
                data.slotIndex += 1;
            }
            break;
        }
        switch (w[2])
        {
        case 0:
            break;

        case 1:
            data.slotIndex += 2;
            break;

        case 2:
            if (w[1] != 1)
            {
                data.slotIndex += 2;
            }
            break;
        }
        if (w[0] == 0 && data.slotIndex == 0)
        {
            data.slotIndex = -1;
        }

        Debug.Log("w0: " + w[0] + " w1: " + w[1] + " w2: " + w[2]);

        if (w.Count(x => x == 1) > 0)
        {
            ResetPath();
            IPS_Functions.PathRenderAttack(data, weapons);
        }
        else
        {
            if (w.Count(x => x == 2) > 0)
            {
                IPS_Functions.PathRender(data, IPS_Functions.PathRenderType.Move_Attack);
                if (weapons.DistanceAttack())
                {
                    canAttack = false;
                }
                else
                {
                    data.agent.SetDestination(hitTarget);
                }
            }
            else
            {
                ResetPath();
                canAttack = false;
            }
        }
        IPS_Functions.MoveCost(data);
        AttackCost();
    }