กลับมาดูโค้ดตัวเอง แล้วก็ตะลึงกับโค้ดที่เขียนซ้ำกันเยอะแยะมาก ลักษณะท่าทางมันก็จะประมาณนี้
private void ControllerRaycast(Vector3 origin, Quaternion rot) {
RaycastHit hit;
if (Physics.Raycast(origin, rot * Vector3.forward, out hit, 100f, culling))
// blah
if (Physics.Raycast(origin, rot * Vector3.forward, out hit, 100f, layerMask)) {
// blah
}
}อันที่จริงรู้สึกว่าจะ concern เรื่อง method ซ้ำมานานแล้ว แต่จำไม่ได้ว่าทำไมตอนนั้นไม่ทำ interface มาให้ class อื่น implement กัน แต่คงเป็นเพราะว่ามี method ชื่อเดียวกันนี้แหละ อันนึงมันรับ argument ไม่เหมือนพวก
วันนี้ก็จัดการรื้อซะเลย ทำ interface มาแล้วก็ implement interface นี้ซะ
ส่วนเรื่อง argument ไม่เหมือนกันก็แยกเป็น 2 interface ไปก่อน คิดว่าไม่ดีเท่าไหร่หรอก แต่ด้วย context มันต่างกันก็พอรับได้มั้ง จะเอามาใส่ใน interface เดียวกันก็แปลกๆที่เวลาจะใช้จะเลือกใช้แค่ method เดียวเท่านั้น
ก็จะได้ประมาณนี้
/// <summary>/// A simple controller raycast /// </summary> public interface IController { public void ControllerRaycast(InputDevice device); } /// <summary>/// Yet another simple controller raycast with line renderer /// </summary> public interface IRayController { public void ControllerRaycast(InputDevice device, LineRenderer line); }
แต่ท้ายที่สุดแล้วอยากทำเป็น callback มากกว่า ทำการ raycast ครั้งเดียว แล้วก็เรียก callback เอา
ถ้ามีเวลาก็จะมารื้อกันอีกรอบ 😂
ไม่มีความคิดเห็น:
แสดงความคิดเห็น