응애맘마조

230523 강의 본문

공부/3D강의

230523 강의

TH.Wert 2023. 5. 23. 21:08

창 던지기 게임을 만들어오는 것이 강의이자 어제일자 과제였습니다.

#pragma once

class Scene2 : public Scene
{
private:
	Camera* Cam;
	Grid*	grid;
	Actor*  player;
	Actor*  spear;
	bool	isFire;
	float   gravity;

public:
	Scene2();
	~Scene2();
	virtual void Init() override;
	virtual void Release() override; //해제
	virtual void Update() override;
	virtual void LateUpdate() override;//갱신
	virtual void Render() override;
	virtual void PreRender() override;
	virtual void ResizeScreen() override;

	void Animation(GameObject* root);
};
#include "stdafx.h"
#include "Solar.h"
#include "Scene2.h"

Scene2::Scene2()
{

}

Scene2::~Scene2()
{
 
}

void Scene2::Init()
{

    Cam = Camera::Create();
    Cam->LoadFile("Cam.xml");
    Camera::main = Cam;
    Cam->width = App.GetWidth();
    Cam->height = App.GetHeight();
    Cam->viewport.width = App.GetWidth();
    Cam->viewport.height = App.GetHeight();

    grid =  Grid::Create();
  
    player = Actor::Create();
    player->LoadFile("Human.xml");
    spear = Actor::Create();
    spear->LoadFile("Spear.xml");
    isFire = false;
    player->Find("SpearSoket")->rotation.x = -PI * 0.25f;
}

void Scene2::Release()
{
    Cam->SaveFile("Cam.xml");
    Cam->Release();
}


void Scene2::Update()
{
    Camera::ControlMainCam();

    //debug
    ImGui::Text("FPS: %d", TIMER->GetFramePerSecond());

    //Hierarchy
    ImGui::Begin("Hierarchy");
    grid->RenderHierarchy();
    player->RenderHierarchy();
    spear->RenderHierarchy();
    Cam->RenderHierarchy();
    ImGui::End();

    if (isFire)
    {
        gravity += 3.5f * DELTA;
       
        Vector3 velocity
            = player->Find("SpearSoket")->GetForward() * 20.0f - UP * gravity;
        // 0 ~ -90   -45
        Camera::main = (Camera*)spear->Find("Camera");
        spear->MoveWorldPos(velocity * DELTA);

        spear->Find("Spear")->rotation.x
            = -atan2f(velocity.y, velocity.z);

        cout << spear->Find("Spear")->rotation.x << endl;
    }
    else
    {
        Camera::main = (Camera*)player->Find("BackCam");
        spear->SetWorldPos(player->Find("SpearSoket")->GetWorldPos());
    }
    if (INPUT->KeyDown(VK_SPACE))
    {
        isFire = not isFire;
        gravity = 0.0f;
       
    }
    if (INPUT->KeyPress(VK_UP))
    {
        player->MoveWorldPos(player->GetForward() * 10 * DELTA);
    }
    
    Cam->Update();
    grid->Update();
    player->Update();
    spear->Update();
}

void Scene2::LateUpdate()
{
   
}

void Scene2::Render()
{
    Camera::main->Set();

    grid->Render();
    player->Render();
    spear->Render();
}

void Scene2::PreRender()
{
}

void Scene2::ResizeScreen()
{
    Cam->width = App.GetWidth();
    Cam->height = App.GetHeight();
    Cam->viewport.width = App.GetWidth();
    Cam->viewport.height = App.GetHeight();
}

void Scene2::Animation(GameObject* root)
{
      
}

코드입니다.

창이 날아가는 방향은 삼각함수의 탄젠트를 사용해서 날아가는 방향에 따라 기울어지고 중력에 의해 떨어지도록 구현했습니다.

 

읽어주셔서 감사합니다.

'공부 > 3D강의' 카테고리의 다른 글

230525 강의  (0) 2023.05.25
230524 강의  (0) 2023.05.24
230522 강의  (0) 2023.05.22
230519 강의  (0) 2023.05.19
230518 강의  (0) 2023.05.18