응애맘마조
230523 강의 본문
창 던지기 게임을 만들어오는 것이 강의이자 어제일자 과제였습니다.
#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)
{
}
코드입니다.
창이 날아가는 방향은 삼각함수의 탄젠트를 사용해서 날아가는 방향에 따라 기울어지고 중력에 의해 떨어지도록 구현했습니다.
읽어주셔서 감사합니다.