오늘은 퍼즐 만든 부분을 리펙토링 해보았다.
퍼즐 상위 클래스로 공통적으로 필요한 자료, 공통 메소드를 묶어 상속 받아 사용식으로 구성했다.
먼저 2개의 퍼즐 로직은 목적지퍼즐, match3퍼즐로 구성되어있다.
//퍼즐 공통 정보
[SerializeField] protected LayerMask puzzleLayer;
[SerializeField] protected Color puzzleColor;
[SerializeField] private PuzzleType puzzleType;
public PuzzleType Type => puzzleType;
protected virtual void Start()
{
PuzzleManager.Instance?.RegisterPuzzle(this);
}
protected virtual void OnDestroy()
{
PuzzleManager.Instance?.UnregisterPuzzle(this);
}
/* 공통함수 */
//특정 레이어와 충돌 검사
protected bool IsCollisionWithLayer(GameObject obj, LayerMask layerMask)
{
return ((1 << obj.layer) & layerMask) != 0;
}
//다른 퍼즐과 색상 비교
protected bool IsSameColor(Puzzle otherPuzzle)
{
return otherPuzzle != null && otherPuzzle.puzzleColor == puzzleColor;
}
protected virtual void OnCollisionEnter(Collision collision) { }
protected virtual void OnCollisionExit(Collision collision) { }
protected virtual void OnTriggerEnter(Collider other) { }
protected virtual void OnTriggerExit(Collider other) { }
퍼즐에서 기본적으로 필요한 것들을 추상 클래스로 구현하였고, 하위에서 세부적으로 override해서 구현하는 방식을 적용해보았다.
하나 정도 더 퍼즐 로직을 만들어볼 예정이다.