using System.Collections;
using System.Collections.Generic;
using UnityEngine;
public enum StackType { Add, Cover }
public class Buff
{
public string name;
public int status;
public float power;
public float duration;
public StackType stackType;
public bool isApplying = false;
public Buff(string name, int status, float power, float duration, StackType stackType)
{
this.name = name;
this.status = status;
this.power = power;
this.duration = duration;
this.stackType = stackType;
}
}
public struct BuffList
{
public static readonly Buff TEST_EXTRA_SPEED
= new Buff(nameof(TEST_EXTRA_SPEED), STATUS.EXTRA_SPEED, 10, 3, StackType.Add);
public static readonly Buff TEST_SPEED_MULT
= new Buff(nameof(TEST_SPEED_MULT), STATUS.SPEED_MULTIPLIER, 0.5f, 3, StackType.Add);
public static readonly Buff TEST_DAMAGE
= new Buff(nameof(TEST_DAMAGE), STATUS.EXTRA_DAMAGE, 10, 2, StackType.Add);
}
public struct STATUS
{
public const int DEFAULT_SPEED = 0;
public const int EXTRA_SPEED = 1;
public const int SPEED_MULTIPLIER = 2;
public const int EXTRA_DAMAGE = 3;
public const int COUNT = 4;
}
public class Entity : MonoBehaviour
{
public List<Buff> buffList = new List<Buff>();
public float[] status = new float[STATUS.COUNT];
public float speed
{
get
{
return (status[STATUS.DEFAULT_SPEED] + status[STATUS.EXTRA_SPEED]) * status[STATUS.SPEED_MULTIPLIER];
}
}
public float damage;
private void Start()
{
}
public void GivingBuff(Buff buff)
{
StartCoroutine(ApplyBuff(buff));
}
private IEnumerator ApplyBuff(Buff buff)
{
AddBuff(buff);
yield return new WaitForSeconds(buff.duration);
RemoveBuff(buff);
}
private void AddBuff(Buff buff)
{
buffList.Add(buff);
SetStatus(buff.status, buff.power);
buff.isApplying = true;
}
private void RemoveBuff(Buff buff)
{
if(buffList.Remove(buff) == true)
{
buff.isApplying = false;
SetStatus(buff.status, -buff.power);
}
}
private void SetStatus(int status, float power)
{
this.status[status] += power;
}
}
์ฐ์ต์ผ์ ๋ฒํ ์์คํ ๋ง๋ค์ด๋ณด๊ณ ์์.
๋ฒํ ์ค์ฒฉ ์ฒ๋ฆฌ๋ฅผ ๋ง๋ค๊ณ ์ถ์๋ฐ, ๋น์ฅ ์ผ๋ฐ์ ์ธ ์ค์ฒฉ์ ๋จ. (๊ฐ ๋ฒํ๊ฐ ๋ฅ๋ ฅ์น๋ฅผ ์ฃผ๊ณ , ์ผ์ ์๊ฐ ์ดํ ๋ค์ ๋นผ์๋ ์ค์ฒฉ)
๊ทผ๋ฐ ๋ฒํ๊ฐ ์ฌ๋ฌ๊ฐ ์์ ๋ ๊ฐ์ฅ ํฐ ๋ฒํ ํ๋๋ง ์ ์ฉํ๊ฒ๋ ํด๋ณด๊ณ ์ถ์๋ฐ, ์ด๋ป๊ฒ ํด์ผํ ์ง ๋ชจ๋ฅด๊ฒ ์.
๋ฒํ์ค์ ํ3 ์ฒด๋ ฅ 10 ์ฌ๋ฆฌ๋ A ๋ฒํ ํ1 ์ฒด๋ ฅ 12 ์ฌ๋ฆฌ๋ B ๋ฒํ ์์ผ๋ฉด ์ด๋ป๊ฒ ๋?
๋ A์ B ์ค A๊ฐ ๊ฐ๋ ฅํ์ง๋ง ์ง์์๊ฐ์ด ์งฆ๊ณ B๋ ์๋์ ์ผ๋ก ์ฝํ์ง๋ง ์ง์์๊ฐ์ด ๊ธธ๋ฉด ์ด์บ๋?
์ผ๋ฐ์ ์ธ ์ค์ฒฉ(StackType.Add) ์ด๋ผ๋ฉด ํ 3, ์ฒด๋ ฅ 10 ์ฆ๊ฐ ํ 1, ์ฒด๋ ฅ 12 ์ฆ๊ฐ ๊ฐ๊ฐ ์ ์ฉ๋๋ค๊ฐ ์ง์์๊ฐ ๋๋๋ฉด ๊ฐ๊ฐ ํด์ ๋จ ๋ด๊ฐ ๊ตฌํํด๋ณด๋ ค๋ ์ค์ฒฉ (StackType.Cover)์ ํ 3์ฆ๊ฐ, ์ฒด๋ ฅ 12 ์ฆ๊ฐ๋ง ์ ์ฉ๋๊ฒ ํ๊ณ ์ถ์๊ฒ. ๋ง์ฝ ๋์ค์ A๋ฒํ๊ฐ ๋จผ์ ์ข ๋ฃ๋๋ค๋ฉด B๋ฒํ์ ์ง์์๊ฐ๋์ ํ 1์ด ์ ์ฉ๋ ๊ฒ์. ๋ ์ค๋ช ์ข๊ฐ์ด ๋ชปํ๋ค ๋ฏธ์ํ๋ค
ใ ใ ใฑใ ์์ฌ์ฝ๋ ์ข ์ง๋ด
๊ธฐ์กด ์ฝ๋๋ฅผ ์์ ๊ฐ์์์ด๋ ๋ฌธ์ ์๋ค! ์ด์ฐจํผ ์ฐ์ต์ด๊ณ ์์งํ ์ด๊ฒ๋ ์์ด์. ๊ณ ๋ง์
๋ฏธ์ํ๋ค ๋ชจ๋ฅด๊ฒ ๋ค GG
ํด๋น ๋๊ธ์ ์ญ์ ๋์์ต๋๋ค.
๋ชจ๋ฅด๊ฒ ์ด ๋ด๊ฐ ์ง์ค๋ ฅ์ด ๋ง์ด ๋ถ์กฑํ๊ฐ๋ด ๋์ ์ง์จ๋ค