응애맘마조

쿠키런 2탄 : 착지, 젤리 먹기, 타격 본문

공부/2D과제

쿠키런 2탄 : 착지, 젤리 먹기, 타격

TH.Wert 2023. 1. 25. 23:50

저번 1탄에 이어서 착지 모션과 젤리 아이템을 먹었을 때 사라지게 하는 것이 과제였습니다.

(타격 모션은 과제 내용이 아니었습니다.)

//main.h
#pragma once
enum class C_State
{
	RUN,
	JUMP,
	SLIDE
};

class Cookie
{
public:
	ObRect*		col;
	ObImage*	run;
	ObImage*	jump;
	ObImage*	slide;
	ObImage*	landing;

	C_State		state;

	float		gravity;
	bool		doubleJump;
	bool		isDamaged;
	float		damageTime;

public:
	Cookie();
	~Cookie();
	void Update();
	void Render();

	void TakeDamage();
};
//main.cpp
#include "stdafx.h"
#include "Main.h"

void Main::Init()
{
	test = 1.0f;

	for (int i = 0; i < FMAX; i++)
	{
		floor[i] = new ObImage(L"C_floor.png");
		floor[i]->scale = Vector2(floor[0]->imageSize.x, floor[0]->imageSize.y);
		floor[i]->pivot = OFFSET_LT;
		floor[i]->SetWorldPosX(-app.GetHalfWidth() + floor[0]->imageSize.x * i);
		floor[i]->SetWorldPosY(-app.GetHalfHeight() + floor[0]->imageSize.y);
		floor[i]->collision = COLLIDER::RECT;
	}

	for (int i = 0; i < JMAX; i++)
	{
		jelly[i] = new ObImage(L"C_jelly.png");
		jelly[i]->scale = Vector2(jelly[i]->imageSize.x, jelly[i]->imageSize.y);
		jelly[i]->SetWorldPosY(sinf(i * 12 * ToRadian) * 150.0f);
		jelly[i]->SetWorldPosX(80.0f * i);
		jelly[i]->collision = COLLIDER::CIRCLE;
	}

	cookie = new Cookie;
	time = 0.0f;
}

void Main::Release()
{	
	for (int i = 0; i < FMAX; i++)
	{
		SafeDelete(floor[i]);
	}
	for (int i = 0; i < JMAX; i++)
	{
		SafeDelete(jelly[i]);
	}
	SafeDelete(cookie);
}

void Main::Update()
{
	CAM->position += RIGHT * 100.0f * DELTA;
	
	for (int i = 0; i < FMAX; i++)
	{
		floor[i]->Update();
	}
	for (int i = 0; i < JMAX; i++)
	{
		jelly[i]->Update();
	}
	cookie->Update();
}

void Main::LateUpdate()
{
	for (int i = 0; i < FMAX; i++)
	{
		if (cookie->col->GetWorldPos().x - floor[i]->GetWorldPos().x > 650.0f)
		{
			floor[i]->MoveLocalPos(Vector2(FMAX * floor[i]->scale.x, 0.0f));
		}
	}

	for (int i = 0; i < JMAX; i++)
	{
		if (cookie->col->GetWorldPos().x - jelly[i]->GetWorldPos().x > 650.0f)
		{
			jelly[i]->MoveLocalPos(Vector2(80.0f * JMAX, 0.0f));
			jelly[i]->isVisible = true;
		}
	}

	for (int i = 0; i < JMAX; i++)
	{
		if (jelly[i]->Intersect(cookie->col))
		{
			jelly[i]->isVisible = false;
			cookie->TakeDamage();
		}
	}

	for (int i = 0; i < FMAX; i++)
	{
		if (floor[i]->Intersect(cookie->col->GetWorldPos()))
		{
			cookie->col->SetWorldPosY(-app.GetHalfHeight() + 140.0f);

			//jump -> run
			if (cookie->state == C_State::JUMP)
			{
				cookie->landing->isVisible = true;
				cookie->jump->isVisible = false;
				cookie->doubleJump = true;
	
				if (TIMER->GetTick(time, 0.3f))
				{
					cookie->state = C_State::RUN;
					cookie->run->isVisible = true;
					cookie->landing->isVisible = false;
					cookie->doubleJump = false;
				}
			}
		}
	}
}

void Main::Render()
{
	
	for (int i = 0; i < FMAX; i++)
	{
		floor[i]->Render();
	}
	for (int i = 0; i < JMAX; i++)
	{
		jelly[i]->Render();
	}
	cookie->Render();
}

void Main::ResizeScreen()
{
}

int WINAPI wWinMain(HINSTANCE instance, HINSTANCE prevInstance, LPWSTR param, int command)
{
    app.SetAppName(L"Game1");
    app.SetInstance(instance);
	app.InitWidthHeight(1600, 800.0f);
	WIN->Create();
	Main* main = new Main();
	int wParam = (int)WIN->Run(main);
	SafeDelete(main);
	WIN->Destroy();
	WIN->DeleteSingleton();
	
	return wParam;
}

코드입니다.

 

읽어주셔서 감사합니다.

'공부 > 2D과제' 카테고리의 다른 글

8방향 몬스터  (0) 2023.01.30
8방향 캐릭터  (0) 2023.01.27
쿠키런 1탄 : 달리기, 점프, 2단 점프, 슬라이드  (0) 2023.01.20
슬라이드 퍼즐  (2) 2023.01.18
이동 제한  (0) 2023.01.17