Esempio n. 1
0
    public float GetPower(UnitSO target)
    {
        float power = 0f;

        if (commandParams.GetSkill() != null)
        {
            if (commandParams.GetSkill().targeting.Equals(SkillTarget.SINGLE_ALLY) ||
                commandParams.GetSkill().targeting.Equals(SkillTarget.MULTIPLE_ALLIES))
            {
                power = commandParams.GetSkill().power;
            }
            else
            {
                power = -commandParams.GetSkill().power;
            }
        }
        else if (commandParams.GetItem().GetType() == typeof(ItemHealingSO))
        {
            power = ((ItemHealingSO)commandParams.GetItem()).power;
        }
        else if (commandParams.GetItem().GetType() == typeof(ItemOffensiveSO))
        {
            var   item     = (ItemOffensiveSO)commandParams.GetItem();
            float modifier = target.elementalWeakness[item.element];
            power = -item.power;
        }

        return(power);
    }
Esempio n. 2
0
 public override void Execute()
 {
     commandParams.GetTargets().ToList().ForEach(it => {
         new PlaySkillAnimationUseCase(it.unitId, commandParams.GetSkill().animationName).Execute();
     });
     SoundService.Instance.Play(skillSound);
     new HealUseCase(commandParams).Execute();
 }
Esempio n. 3
0
    public float Execute()
    {
        float total = 0;

        commandParams.GetTargets().ToList().ForEach(it => {
            total += DamageOne(commandParams.GetSubject(), it, commandParams.GetSkill());
        });

        return(total);
    }
    public override void OnStateEnter()
    {
        bool offensive = false;

        if (commandParams.GetItem() != null)
        {
            offensive = commandParams.GetItem().targeting.Equals(SINGLE_OPPONENT) || commandParams.GetItem().targeting.Equals(MULTIPLE_OPPONENTS);
        }
        else if (commandParams.GetSkill() != null)
        {
            offensive = commandParams.GetSkill().targeting.Equals(SINGLE_OPPONENT) || commandParams.GetSkill().targeting.Equals(MULTIPLE_OPPONENTS);
        }
        else
        {
            throw new System.Exception("SelectOneTargetState couldn't infer offensive intention of skill/item.");
        }
        targetSelector.Show(UnitUtil.GetUnitsFor(commandParams.GetSubject(), base.owner.allUnits, offensive));
        targetSelector.OnTargetClicked += Next;
        base.owner.UpdateDialogueText("Choose a target.");
    }
Esempio n. 5
0
    public override void Tick()
    {
        if (timer.Progress())
        {
            if (commandParams.GetSkill() != null)
            {
                ExecuteSkill();
                // Consume mana/energy
                UnitUtil.SubstractMana(commandParams.GetSubject(), commandParams.GetSkill());
            }
            else if (commandParams.GetItem() != null)
            {
                ExecuteItem();
                // Consume item
                UnitUtil.ConsumeItem(owner.GetInventory(), commandParams.GetItem());
            }


            owner.ChangeState(new ApplyBurnState(base.owner));
        }
    }
Esempio n. 6
0
    public override void Execute()
    {
        commandParams.GetTargets().ToList().ForEach(it => {
            new PlaySkillAnimationUseCase(it.unitId, commandParams.GetSkill().animationName).Execute();
        });
        SoundService.Instance.Play(skillSound);

        commandParams.GetTargets().ToList().ForEach(it =>
                                                    it.currentStatusEffect = it.currentStatusEffect.Where(status => status != StatusEffect.DEATH).ToArray()
                                                    );

        new HealUseCase(commandParams).Execute();
    }
Esempio n. 7
0
    public float Execute()
    {
        // Modifier should take into account resistances/weaknesess
        float modifier = 1;
        float power    = commandParams.GetSkill().power;
        // Decide between physical and magical attack+defense
        bool  isMagic = commandParams.GetSkill().isMagical;
        float attack  = isMagic? commandParams.GetSubject().finalMagicAttack : commandParams.GetSubject().finalAttack;
        float level   = commandParams.GetSubject().level;

        float formulaRes = ((2 * level / 5 + 2) * (power / 50) * (attack / 200) + 2) * modifier;

        commandParams.GetTargets().ToList().ForEach(it => {
            if (it.currentStatusEffect.Contains(StatusEffect.DEATH))
            {
                return; // If is dead, do not heal.
            }
            new ModifyHPUseCase(it, formulaRes).Execute();
            DamageLogger.Add(it.unitId, (int)formulaRes);
        });

        return(formulaRes);
    }