using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;
using UnityEditor;
using System;
public abstract class Buff{
public abstract void Apply(IBuffable<Buff> target);
}
public class PlayerBuff : Buff
{
public Player affectedPlayer { get; private set;}
public override void Apply(IBuffable<Buff> target)
{
affectedPlayer = (Player)target;
}
}
public class MagicBallBuff : Buff
{
public MagicBall affectedMagicBall { get; private set; }
public override void Apply(IBuffable<Buff> target)
{
affectedMagicBall = (MagicBall)target;
}
}
public class MagicMeteorBuff : Buff
{
public MagicMeteor affectedMagicMeteor { get; private set; }
public override void Apply(IBuffable<Buff> target)
{
affectedMagicMeteor = (MagicMeteor)target;
}
}
public class SkillCooldownBuff: Buff
{
public PlayerHUDController affectedHUDController { get; private set; }
public override void Apply(IBuffable<Buff> target)
{
affectedHUDController = (PlayerHUDController)target;
}
}
public class PlayerHealthIncreaseBuff: PlayerBuff
{
float playerHealthIncreasePercentage = 20.0f;
public override void Apply(IBuffable<Buff> target)
{
float addedBuff = affectedPlayer.playerBaseHeath * (playerHealthIncreasePercentage / 100.0f);
affectedPlayer.playerBonusHealth += (int)addedBuff;
base.Apply(target);
}
}
public class MagicBallAttacDamageBuff : MagicBallBuff
{
float magicBallAttackDamageIncreasePercentage = 50.0f;
public override void Apply(IBuffable<Buff> target)
{
float addedBuff = affectedMagicBall.magicBallBaseAttackDamage * (magicBallAttackDamageIncreasePercentage / 100.0f);
affectedMagicBall.magicBallExtraAttackDamage += (int)addedBuff;
base.Apply(target);
}
}
public class MagicMeteorAttackDamageBuff : MagicMeteorBuff
{
float magicMeteorAttackDamageIncreasePercentage = 25.0f;
public override void Apply(IBuffable<Buff> target)
{
float addedBuff = affectedMagicMeteor.magicMeteorBaseAttackDamage * (magicMeteorAttackDamageIncreasePercentage / 100.0f);
affectedMagicMeteor.magicMeteorExtraAttackDamage += (int)addedBuff;
base.Apply(target);
}
}
public class SkillCooldownReduce : SkillCooldownBuff
{
float skillCooldownDecreasePercentage = 40.0f;
public override void Apply(IBuffable<Buff> target)
{
float addedBuff = affectedHUDController.flashCastBaseCooldownTime * (skillCooldownDecreasePercentage/ 100.0f);
affectedHUDController.magicMeteorCastDecreaseCooldownTime += (int)addedBuff;
affectedHUDController.flashCastDecreaseCooldownTime += (int)addedBuff;
base.Apply(target);
}
}