diff --git a/302/Assets/Scripts/AbstractAnomalyController.cs b/302/Assets/Scripts/AbstractAnomalyController.cs index d695b72..dc9a0a3 100644 --- a/302/Assets/Scripts/AbstractAnomalyController.cs +++ b/302/Assets/Scripts/AbstractAnomalyController.cs @@ -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; + } +} */ diff --git a/302/Assets/Scripts/AbstractAnomalyInteractable.cs b/302/Assets/Scripts/AbstractAnomalyInteractable.cs index a383274..afdd510 100644 --- a/302/Assets/Scripts/AbstractAnomalyInteractable.cs +++ b/302/Assets/Scripts/AbstractAnomalyInteractable.cs @@ -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; + } +} */ diff --git a/302/Assets/Scripts/AbstractAnomalyObject.cs b/302/Assets/Scripts/AbstractAnomalyObject.cs index 20349a0..903110e 100644 --- a/302/Assets/Scripts/AbstractAnomalyObject.cs +++ b/302/Assets/Scripts/AbstractAnomalyObject.cs @@ -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; + } +} */ diff --git a/302/Assets/Scripts/AbstractBehaviour.cs b/302/Assets/Scripts/AbstractBehaviour.cs index 7568b67..9e1eaa8 100644 --- a/302/Assets/Scripts/AbstractBehaviour.cs +++ b/302/Assets/Scripts/AbstractBehaviour.cs @@ -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; + } +} */