WIN32API FrameWork/원본

220509_WIN32API_6-3_총알 발사 - 스킬 쿨타임 구현

hyrule 2022. 5. 12. 14:39

<구현 순서>

1. 총알의 쿨타임을 저장할 '구조체'를 생성한다. 이 구조체에는 (float)총알의 쿨타임, (bool)현재 쿨타임에 진입했는지, (float)남은 쿨타임 시간 3가지 변수를 저장한다.

2. 이 쿨타임 구조체는 총알 발사 뿐만 아니라 스킬 시전에도 사용할 예정이므로, 이 스킬 쿨타임 구조체들을 저장할 배열(vector)을 생성한다.

3. 실제로 사용할 객체를 초기화할 때 구조체를 생성해 초기화( = {};) 하고, 쿨타임만 지정해 준다.

 cf)bool 타입은 초기화하면 false(0)이다.

4. 생성한 구조체를 배열에 삽입한다.

5. 스킬을 사용하면 쿨타입 진입 bool 변수를 true로 바꾸고, 남은 쿨타임 시간에 지정했던 쿨타임을 대입한다.

6. 이후 객체의 Update 함수 안에서 반복문을 통해 쿨타임을 계산한다. (if 쿨타임 -> 쿨타임 남은시간 - DeltaTime)

 - 남은 시간 <= 0이 되면, 쿨타임 진입 bool 변수를 다시 false로 바꿔 준다.

 

 

1. 총알의 쿨타임을 저장할 '구조체'를 생성한다. 이 구조체에는 (float)총알의 쿨타임, (bool)현재 쿨타임에 진입했는지, (float)남은 쿨타임 시간 3가지 변수를 저장한다.

struct SkillCoolDownInfo
{
	float CoolDown;
	float CoolDownLeft;
	bool CoolDownEnable;
};

 

 

2. 이 쿨타임 구조체는 총알 발사 뿐만 아니라 스킬 시전에도 사용할 예정이므로, 이 스킬 쿨타임 구조체들을 저장할 배열(vector)을 생성한다.

	//스킬들 쿨타임을 저장할 배열
	std::vector<SkillCoolDownInfo> m_VecCoolDown;

 

 

3. 실제로 사용할 객체를 초기화할 때 구조체를 생성해 초기화( = {};) 하고, 쿨타임만 지정해 준다.

 cf)bool 타입은 초기화하면 false(0)이다.

4. 생성한 구조체를 배열에 삽입한다.

	//쿨타임 지정해주기
	SkillCoolDownInfo GunFireCool = {};
	//구조체가 초기화될 떄 bool 변수는 무조건 false가 되므로 쿨타임만 등록해준다.
	GunFireCool.CoolDown = 0.3f;
	//총알 발사 쿨타임 정보를 첫 번째 배열에 등록한다.
	m_VecCoolDown.push_back(GunFireCool);

 

 

5. 스킬을 사용하면 쿨타입 진입 bool 변수를 true로 바꾸고, 남은 쿨타임 시간에 지정했던 쿨타임을 대입한다.

	if (m_VecCoolDown[0].CoolDownEnable)
		return;
		
	m_VecCoolDown[0].CoolDownEnable = true;
	m_VecCoolDown[0].CoolDownLeft = m_VecCoolDown[0].CoolDown;

 

 

6. 이후 객체의 Update 함수 안에서 반복문을 통해 쿨타임을 계산한다. (if 쿨타임 -> 쿨타임 남은시간 - DeltaTime)

 - 남은 시간 <= 0이 되면, 쿨타임 진입 bool 변수를 다시 false로 바꿔 준다.

	//쿨타임 배열을 순회하며 쿨타임 시간 계산
	size_t Size = m_VecCoolDown.size();

	for (size_t i = 0; i < Size; ++i)
	{
		if (m_VecCoolDown[i].CoolDownEnable)
		{
			m_VecCoolDown[i].CoolDownLeft -= DeltaTime;

			if (m_VecCoolDown[i].CoolDownLeft <= 0.f)
			{
				m_VecCoolDown[i].CoolDownEnable = false;
			}
		}
		
	}

 

 

 

< 결과 >

이젠 광클해도 총알이 0.3초당 한발만 나감.