Skip to content

Commit

Permalink
Add forms for abstract classes
Browse files Browse the repository at this point in the history
  • Loading branch information
Prown0 committed Dec 4, 2024
1 parent 93cddea commit 81a1bee
Show file tree
Hide file tree
Showing 4 changed files with 259 additions and 0 deletions.
73 changes: 73 additions & 0 deletions 302/Assets/Scripts/AbstractAnomalyController.cs
Original file line number Diff line number Diff line change
Expand Up @@ -140,3 +140,76 @@ protected virtual bool InitObjects()
return res;
}
}

/* 양식: 복사해서 사용하기.
// `AbstractAnomalyController`는 이상현상 컨트롤러에 관한 추상 클래스입니다.
//
// 만약 `AbstractAnomalyObject`를 가지는 오브젝트가 강의실 내에 있다면 이름을 `names`에 넣습니다.
// 만약 `AbstractAnomalyObject`를 가지는 오브젝트가 프리팹으로 돼 있다면 프리팹을 `prefabs`에 넣습니다.
// 그러면 알아서 강의실 내의 개체는 찾고, 프리팹은 instantiate합니다.
// 또, `StartAnomaly`에서는 모든 개체의 `StartAnomaly`를 호출하고,
// `ResetAnomaly`에서는 모든 개체의 `ResetAnomaly`를 호출합니다. (composite pattern이 이미 구현돼 있습니다.)
// 추가적으로 뭘 해야 한다면 오버라이드하면 됩니다.
public class MyClass : AbstractAnomalyController // TODO: 클래스 이름 수정하기.
{
// 클래스 이름
public override string Name { get; } = ""; // TODO: 클래스 이름 추가하기.
// `Awake` 메시지 용 메서드
protected override bool Awake_()
{
bool res = base.Awake_();
// TODO: `Awake` 메시지에서 해야할 것 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 필드를 초기화하는 메서드
protected override bool InitFields()
{
bool res = base.InitFields();
// TODO: 필드 초기화할 것 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 이상현상을 시작하는 메서드
public override bool StartAnomaly()
{
bool res = base.StartAnomaly();
// TODO: 이상현상 시작하는 코드 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 이상현상을 초기화하는 메서드
public override bool ResetAnomaly()
{
bool res = base.ResetAnomaly();
// TODO: 이상현상 초기화하는 코드 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 오브젝트를 초기화하는 메서드
protected override bool InitObjects()
{
bool res = base.InitObjects();
// TODO: 앞에서 말한 방식으로 초기화할 수 없는 오브젝트가 있다면 여기서 초기화하기.
// 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
} */
90 changes: 90 additions & 0 deletions 302/Assets/Scripts/AbstractAnomalyInteractable.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,93 @@ protected override bool InitFields()
return res;
}
}

/* 양식: 복사해서 사용하기.
// `AbstractAnomalyInteractable`은 상호작용 가능한 이상현상 개체에 관한 추상 클래스입니다.
//
// `OnInteract`는 기본적으로 한 번 상호작용하면 상호작용이 안되게 구현돼 있습니다.
// 그게 싫다면 오버라이드하면 됩니다.
//
// `CanInteract`는 상호작용이 가능한 상황에서, 플레이어가 상호작용 최대 거리 내에 있을 때만
// 상호작용이 가능하도록 구현돼 있습니다. 그게 싫다면 오버라이드하면 됩니다.
// 참고로 처음 이걸 사용하시면 `distanceInteractionMax`가 `0.0f`으로 설정돼 있을 수 있습니다.
// 그러면 상호작용이 아예 안되니 확인해주세요.
public class MyClass : AbstractAnomalyInteractable // TODO: 클래스 이름 수정하기.
{
// 클래스 이름
public override string Name { get; } = ""; // TODO: 클래스 이름 추가하기.
// 상호작용 프롬프트 텍스트 반환 (예: "E키를 눌러 책상 조사하기")
public override string GetInteractionPrompt()
{
string res = base.GetInteractionPrompt();
// TODO: 원하면 오버라이드 하기. 필요 없으면 지워도 됨.
return res;
}
// 상호작용 시 실행될 메서드
public virtual void OnInteract()
{
base.OnInteract();
// TODO: 원하면 오버라이드 하기. 필요 없으면 지워도 됨.
}
// 현재 상호작용 가능한지 여부 반환
public virtual bool CanInteract(float distance)
{
bool res = base.CanInteract(distance);
// TODO: 원하면 오버라이드 하기. 필요 없으면 지워도 됨.
return res;
}
// `Awake` 메시지 용 메서드
protected override bool Awake_()
{
bool res = base.Awake_();
// TODO: `Awake` 메시지에서 해야할 것 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 필드를 초기화하는 메서드
protected override bool InitFields()
{
bool res = base.InitFields();
// TODO: 필드 초기화할 것 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 이상현상을 시작하는 메서드
public override bool StartAnomaly()
{
bool res = base.StartAnomaly();
// TODO: 이상현상 시작하는 코드 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 이상현상을 초기화하는 메서드
public override bool ResetAnomaly()
{
bool res = base.ResetAnomaly();
// TODO: 이상현상 초기화하는 코드 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
} */
57 changes: 57 additions & 0 deletions 302/Assets/Scripts/AbstractAnomalyObject.cs
Original file line number Diff line number Diff line change
Expand Up @@ -23,3 +23,60 @@ public virtual bool ResetAnomaly()
return true;
}
}

/* 양식: 복사해서 사용하기.
// `AbstractAnomalyObject`는 이상현상 개체에 관한 추상 클래스입니다.
//
// `StartAnomaly`는 이상현상을 시작할 때 불리고, `ResetAnomaly`는 이상현상을 초기화할 때 불립니다.
// `Log` 등, `AbstractBehaviour`에서의 메서드도 사용 가능합니다.
public class MyClass : AbstractAnomalyObject // TODO: 클래스 이름 수정하기.
{
// 클래스 이름
public override string Name { get; } = ""; // TODO: 클래스 이름 추가하기.
// `Awake` 메시지 용 메서드
protected override bool Awake_()
{
bool res = base.Awake_();
// TODO: `Awake` 메시지에서 해야할 것 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 필드를 초기화하는 메서드
protected override bool InitFields()
{
bool res = base.InitFields();
// TODO: 필드 초기화할 것 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 이상현상을 시작하는 메서드
public override bool StartAnomaly()
{
bool res = base.StartAnomaly();
// TODO: 이상현상 시작하는 코드 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 이상현상을 초기화하는 메서드
public override bool ResetAnomaly()
{
bool res = base.ResetAnomaly();
// TODO: 이상현상 초기화하는 코드 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
} */
39 changes: 39 additions & 0 deletions 302/Assets/Scripts/AbstractBehaviour.cs
Original file line number Diff line number Diff line change
Expand Up @@ -70,3 +70,42 @@ protected void Log(string message, int mode = 0)
}
}
}

/* 양식: 복사해서 사용하기.
// `AbstractBehaviour`는 편의를 위해 만든 추상 클래스입니다.
//
// 필드 초기화하는 것, `Awake` 메시지에 추가적으로 해야할 것을 따로 메서드로 뺐습니다.
//
// `Log` 메서드로 로깅도 편하게 만들었는데, `Debug.Log()` 형태가 아니라 그냥 `Log()`로 쓰면
// 앞에 `[{클래스 이름}]`의 형태로 어디서 불렀는지를 알아서 붙여 줍니다.
// `Log(..., mode: 1)`로 `Debug.LogWarning(...)`을, `Log(..., mode: 2)`로 `Debug.LogError(...)`를
// 부를 수도 있습니다.
public class MyClass : AbstractBehaviour // TODO: 클래스 이름 수정하기.
{
// 클래스 이름
public override string Name { get; } = ""; // TODO: 클래스 이름 추가하기.
// `Awake` 메시지 용 메서드
protected override bool Awake_()
{
bool res = base.Awake_();
// TODO: `Awake` 메시지에서 해야할 것 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
// 필드를 초기화하는 메서드
protected override bool InitFields()
{
bool res = base.InitFields();
// TODO: 필드 초기화할 것 넣기. 없으면 메서드를 아예 지워도 됨.
// 함수가 제대로 작동했으면 `true`를, 아니면 `false`를 반환.
return res;
}
} */

0 comments on commit 81a1bee

Please sign in to comment.