본문 바로가기

My review/코드 리뷰 [GML]

바람냥님의 Perfect Platformer 소스 리뷰

오브젝트 <O_player>
===========================================================================================
이벤트 {Create}:
===========================================================================================
grav, g_dir chrlghk
jump, jump_opp, j_min, j_max, j_delay 초기화
mspd, s_friction 초기화
g_spd, _delayt, _jumpt, _spd초기화
ground 초기화

{Step}:
임시 변수 glen, tlen 선언 및 초기화
#region <Jump>
-----------------------------------------------------------------------------------------
만일 jump!=0이고 _delayt!=-1이면{
	만일 vk_space 키보드가 체크될 시{
    _delayt 값 추가
    _jumpt = lerp(j_min, j_max, _delayt/j_delay)
    만일 _delayt = j_delay 이면 {
    	_delayt 값 재설정
    }
    만일 스페이스가 떼어질 시 {
    	_delayt를 재설정
    }
}
아니면 만일 (jump <= (jump_opp-1)이고 키보드가 눌릴 시(vk_space)
	{
    	jump값 추가
        _jumpt를 j_min으로 재설정
        _delayt 초기화
    } g_spd 초기화
    
    
만일 (_jumpt > g_spd) {
	만일 ~가 아닐시 (x + lengthdir_x(-_jumpt, g_dir), 
    				y+lengthdir_y(-_jumpt, g_dir)의 위치가 빈 경우
   {
   		g_spd 초기화
        _jumpt 초기화
        _delayt는 재설정
        솔리드 컨택 이동 함수(g_dir + 180 방향(*g_dir의 반대방향)으로, -1(*최대거리 파라미터))
   }
}

만일 vk_down이 눌리고 ground!=-1이면 {
	임시 변수 _index 선언 및 초기화
    만약 _index가 o_block2, o_block3, o_block4가 아닐시
    { y 값 이동}
}

g_spd는 grav만큼 추가
tlen은 - (점프가 0이 아닌지 여부) * _jumpt + g_spd;

만일 x, y에서 tlen만큼 g_dir방향으로의 간격에 위치가 비어있을 시 
{
	x값 추가
    y값 추가
    ground 값 초기화
}
아니면 {솔리드 컨택이동함수( g_dir, -1)}

만일 x,y에서 g_dir방향으로 1만큼의 거리에
	p_block이란 obj이 없을 시가 아니면 {
    임시 inst = instance_place(체크위치x, 체크된 y, p_block)
    만일 inst값이 noone이 아니면
    {
    	만일 inst가 solid일시
        	{ground는 inst}
        아니면
        	{ground 초기화(*이 경우 초기 값으로 되돌아감을 글자 압축 관계상 초기화라고 지칭.)}
    }
    만일 ground가 -1이 아니면 {
    	jump, g_spd, _jumpt 초기화(*마찬가지)
       	만일 ceil(x), y의 위치가 비어 있지 않으면 {x 값 재설정}
        만일 x, ceil(y)의  ``    ``   ``	``	 {y 값 재설정}
        만일 floor(x), y의 ``	  ``   ``	``	 {x 값 재설정}
        만일 x, floor(y)의 ``	  ``   ``	``	 {y 값 재설정}
   }
 }
 
 만일 엔터가 눌렸을 시
 {g_dir 값 추가}
 ------------------------------------------------------------------------------------------
 # end region

 # region <Move> 
 ------------------------------------------------------------------------------------------
 만일 (( - 키보드 체크(vk_left)+키보드 체크(vk_right)이 0이 아니면) 
 	{ spd는 ( 		 ``			+ 			``		) * mspd; }
 만일 (_spd < 0)이면   _spd는 (_spd + s_friction과 0중 최소값)
 아니면 _spd > 0 일 때 _spd는 (_spd - s_friction, 0 중 최댓값)
 
 if (x,y)에서 g_dir+90 방향으로 _spd만큼의 거리의 위치가 빌 시 
 {
   x 값 추가
   y 값 추가
 }
 아니면
 { 솔리드컨택이동 ( g_dir+90*sign(_spd), abs(_spd));}
 ------------------------------------------------------------------------------------------
 #end region

 

리뷰한 소스 원 링크: https://cafe.naver.com/crazygm

'My review > 코드 리뷰 [GML]' 카테고리의 다른 글

GML 리뷰의 원칙  (0) 2022.03.19