Vui hơn với ES ...
Hiện tại, tôi có một vài hệ thống:
- Trình kết xuất (Thuộc tính kết xuất, Thuộc tính chuyển đổi)
- Chuyển động (thuộc tính Movable, thuộc tính Transform, thuộc tính kết xuất [cho các hộp giới hạn, v.v.))
- Đầu vào (thuộc tính InputReceiver)
- Vân vân.
Tôi đang thêm phát hiện va chạm. Suy nghĩ đầu tiên của tôi là thêm một hệ thống mới thực hiện va chạm. Tôi có ý nghĩa với việc giữ cho thiết bị này tách biệt khỏi Motion
hệ thống vì không phải tất cả những thứ chuyển động hoặc hoạt hình đều nhất thiết phải tham gia phát hiện va chạm - máy ảnh, sương mù, v.v. - nhưng dường như điều đó Collision
và Motion
phụ thuộc lẫn nhau.
Khi Motion
di chuyển một thực thể, phép biến đổi cần được xác nhận Collision
và chuyển động bị hủy hoặc điều chỉnh (nảy, dừng tại một bức tường, v.v.).
Một cách khác là tạo một thuộc tính Collidable duy trì tham chiếu đến một đối tượng va chạm - kd-tree, octree, v.v. được chia sẻ giữa các thực thể có thể va chạm với nhau. Các Motion
hệ thống sau đó sẽ kiểm tra các thuộc tính đó, và sử dụng nó để kiểm tra hoặc điều chỉnh phong trào.
Từ góc độ mã, đó là một giải pháp chấp nhận được. Tuy nhiên, từ quan điểm kiến trúc ECS, có vẻ như nó đang đẩy logic vào Motion
hệ thống không áp dụng cho tất cả các thực thể có Movable
thuộc tính.
Tôi cũng có thể lưu trữ một vector chuyển động trong Movable
thuộc tính, và có Collider
hệ thống điều chỉnh Transform
khi cần thiết, nhưng điều đó sẽ liên quan đến việc sao chép chức năng giữa Motion
và Collider
, hoặc gọi lại từ Collider
đến Motion
với một số dữ liệu về vị trí va chạm và bề mặt dữ liệu cho thư bị trả lại / phản xạ, vv .
Điều này có thể thuộc nhóm "hack trường hợp đặc biệt" nhưng tôi muốn nhận một số thông tin đầu vào từ những người đã xử lý việc này trước đây mà không tạo ra một tấn mã trường hợp cạnh.
Câu hỏi Một cách tốt để tránh sự kết hợp chặt chẽ giữa các hệ thống chuyển động và va chạm khi dường như chúng đòi hỏi kiến thức về nhau?