본 모작은 상업적 용도가 아닌, 공부 목적의 모작입니다.
2.1 레벨 변경 조건
- Login 레벨에서는 로그인 버튼을 클릭할 경우.
- 나머지 레벨들은 포탈과의 충돌 && 위 화살표키 누르는 경우.
2.2 레벨 변경 전후 일어나야 하는 일
- Veil 클래스 생성 후, 상수 버퍼 Color와 해당 클래스의 Color 멤버를 -Link()
-Link() 함수는 엔진 프로그래머분이 따로 구현해두심.
- 그리고 델타 타임에 따라 알파 값이 달라지면 됨. 그럼 알파블랜딩 가능.
- 그러나, 무작정 해버리면 알파 블랜딩이 동시에 일어날 수 있음.
포탈을 타고 다음 맵으로 가면, 이전 맵의 페이드 아웃과 다음 맵의 페이드 인이 겹침.
- 이를 해결하기 위해서 큐 자료를 이용함.
이전 알파 블랜딩 효과가 끝날 때까지 기다리는 역할.
// <hide/>
// Veil.h
#pragma once
#include <GameEngineCore/GameEngineActor.h>
#include <queue>
enum class VEIL_EFFECT
{
NONE,
FADE_IN,
FADE_OUT,
};
// 설명 :
class GameEngineDefaultRenderer;
class Veil : public GameEngineActor
{
private:
GameEngineDefaultRenderer* mpRenderer;
float4 mf4Size;
float4 mf4Color;
static VEIL_EFFECT meVeilEffect;
static std::queue<VEIL_EFFECT> mqVeilEffectJobQueue;
public:
// Constrcutor & Destructor
Veil();
~Veil();
// Deleted function
Veil(const Veil& _Other) = delete;
Veil(Veil&& _Other) noexcept = delete;
Veil& operator=(const Veil& _Other) = delete;
Veil& operator=(Veil&& _Other) noexcept = delete;
void SetColor(float4 _fColor) { mf4Color = _fColor; }
float4 GetColor() { return mf4Color; }
static void SetVeilEffect(VEIL_EFFECT _VeilEffect)
{
mqVeilEffectJobQueue.push(_VeilEffect);
}
protected:
void Start() override;
void Update(float _DeltaTime) override;
void End() override;
};
// <hide/>
// Veil.cpp
#include "PreCompile.h"
#include "Veil.h"
#include <GameEngineCore/GameEngineDefaultRenderer.h>
#include <GameEngineBase/GameEngineWindow.h>
#include <GameEngineCore/GameEngineLevel.h>
#include <GameEngineCore/GameEngineCamera.h>
VEIL_EFFECT Veil::meVeilEffect;
std::queue<VEIL_EFFECT> Veil::mqVeilEffectJobQueue;
Veil::Veil()
: mpRenderer(nullptr)
, mf4Size()
, mf4Color()
{
}
Veil::~Veil()
{
}
void Veil::Start()
{
float4 windowSize = GameEngineWindow::GetScale();
mpRenderer = CreateComponent<GameEngineDefaultRenderer>();
mpRenderer->SetPipeLine("Color");
mpRenderer->GetTransform().SetLocalScale({ windowSize.x, windowSize.y, 1 });
mpRenderer->ShaderResources.SetConstantBufferLink("ResultColor", mf4Color);
}
void Veil::Update(float _DeltaTime)
{
if (true == mqVeilEffectJobQueue.empty())
{
return;
}
meVeilEffect = mqVeilEffectJobQueue.front();
if (VEIL_EFFECT::FADE_IN == meVeilEffect)
{
mf4Color.a -= 0.5f * _DeltaTime;
if (mf4Color.a <= 0.f)
{
mf4Color.a = 0.f;
mqVeilEffectJobQueue.pop();
}
}
if (VEIL_EFFECT::FADE_OUT == meVeilEffect)
{
mf4Color.a += 0.5f * _DeltaTime;
if (1.f <= mf4Color.a)
{
mf4Color.a = 1.f;
mqVeilEffectJobQueue.pop();
}
}
}
void Veil::End()
{
}
2.3 캐릭터 좌우 애니메이션 및 점프
- 기존에는 좌측 애니메이션 밖에 없었음.
그러나 다렉에선 텍스쳐의 uv 좌표를 음수로 바꾸면, 기존 텍스쳐를 반전시킬 수 있음.
- 이에 따라 엔진 프로그래머분이 해당 함수를 정의해주심.
- 그러나, 점프에서 조금 이상한 부분이 발견됨.
분명 점프용 텍스쳐는 색상이 올바른데, 인게임 내에선 점프시에 R값이 증가된거처럼 보임.
댓글