본문 바로가기
DirectX/[갠플] Maple Story 모작

22-07-20

by GameStudy 2022. 7. 20.

본 모작은 상업적 용도가 아닌, 공부 목적의 모작입니다.


 

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값이 증가된거처럼 보임.

 

'DirectX > [갠플] Maple Story 모작' 카테고리의 다른 글

22-07-27  (0) 2022.07.27
22-07-25  (0) 2022.07.25
22-07-23  (0) 2022.07.23
22-07-18  (0) 2022.07.18
22-07-17  (0) 2022.07.17

댓글