เพิ่มการรองรับอุปกรณ์เมาส์

ใช้ฟังก์ชันต่อไปนี้เพื่อเพิ่มการรองรับอุปกรณ์เมาส์ลงในเกมโดยใช้ไลบรารี Game Controller เราใช้คำว่าอุปกรณ์เมาส์ที่นี่เพื่ออธิบาย เมาส์แบบดั้งเดิม รวมถึงแทร็กแพดหรือแทร็กบอล

เพิ่มการเรียกกลับสถานะเมาส์

ไลบรารีตัวควบคุมเกมใช้การเรียกกลับสถานะเมาส์เพื่อแจ้งให้เกมทราบเมื่อมีการ เชื่อมต่อหรือยกเลิกการเชื่อมต่อเมาส์ โดยจะรองรับการเรียกกลับสถานะเมาส์ได้ครั้งละ 1 รายการเท่านั้น

  • หากต้องการลงทะเบียนการเรียกกลับสถานะเมาส์หรือแทนที่การเรียกกลับที่ลงทะเบียนไว้ก่อนหน้า ด้วยฟังก์ชันการเรียกกลับใหม่ ให้เรียกใช้ฟังก์ชัน Paddleboat_setMouseStatusCallback
  • หากต้องการนำการเรียกกลับที่ลงทะเบียนไว้ในปัจจุบันออก ให้ส่ง NULL หรือ nullptr ในพารามิเตอร์ statusCallback
  • พารามิเตอร์ userData เป็นตัวชี้ที่ไม่บังคับไปยังข้อมูลที่ผู้ใช้กำหนด ระบบจะส่งพารามิเตอร์ userData ไปยังฟังก์ชัน Callback ระบบจะเก็บตัวชี้นี้ไว้ภายในจนกว่าจะมีการเปลี่ยนแปลงโดยการเรียกใช้ Paddleboat_setMouseStatusCallback อีกครั้ง
void Paddleboat_setMouseStatusCallback(Paddleboat_MouseStatusCallback
  statusCallback, void *userData)

ลายเซ็นของฟังก์ชันสำหรับฟังก์ชัน Callback สถานะเมาส์มีดังนี้

typedef void (*Paddleboat_MouseStatusCallback)(const Paddleboat_MouseStatus
  mouseStatus, void *userData)

พารามิเตอร์ mouseStatus enum มีค่าที่เป็นไปได้ 3 ค่า ดังนี้

  • PADDLEBOAT_MOUSE_NONE: ขณะนี้ไม่ได้เชื่อมต่ออุปกรณ์เมาส์
  • PADDLEBOAT_MOUSE_CONTROLLER_EMULATED: คอนโทรลเลอร์ที่เชื่อมต่อจะจำลอง เมาส์
  • PADDLEBOAT_MOUSE_PHYSICAL: มีการเชื่อมต่ออุปกรณ์เมาส์จริงอย่างน้อย 1 เครื่อง (อุปกรณ์เหล่านี้รวมถึงเมาส์ ทัชแพด แทร็กบอล หรืออุปกรณ์อื่นๆ ที่คล้ายกัน)

พารามิเตอร์ userData มีพอยน์เตอร์ userData ที่ระบุในการเรียกใช้ Paddleboat_setMouseStatusCallback ครั้งสุดท้าย userData อาจเป็น NULL หรือ nullptr

คอนโทรลเลอร์บางตัวไม่ได้จำลองเมาส์ โดยตัวควบคุมอาจจำลองเมาส์โดยใช้แท่งอนาล็อกแท่งใดแท่งหนึ่งหรือใช้ทัชแพดในตัว

ไลบรารีตัวควบคุมเกมจะรายงานข้อมูลจากอุปกรณ์เมาส์เครื่องเดียวเท่านั้น อุปกรณ์เมาส์จริงจะมีความสำคัญมากกว่าอุปกรณ์เมาส์ของตัวควบคุมเสมือน หากเชื่อมต่อ เมาส์จริง ระบบจะใช้เมาส์จริงแทนเมาส์เสมือน ของคอนโทรลเลอร์ที่ใช้งานก่อนหน้านี้

อ่านข้อมูลเมาส์

เรียกใช้ฟังก์ชัน Paddleboat_getMouseStatus เพื่อดูสถานะของอุปกรณ์เมาส์

Paddleboat_MouseStatus Paddleboat_getMouseStatus()

ใช้ฟังก์ชัน Paddleboat_getMouseData เพื่อรับข้อมูลเมาส์ปัจจุบัน ฟังก์ชันนี้จะแสดงผล PADDLEBOAT_NO_ERROR หากอ่านข้อมูลสำเร็จ หรือแสดงรหัสข้อผิดพลาดที่เหมาะสม ในกรณีอื่นๆ

bool Paddleboat_getMouseData(Paddleboat_Mouse_Data *mouseData)

โครงสร้าง Paddleboat_Mouse_Data มีข้อมูลเกี่ยวกับสิ่งต่อไปนี้

  • การประทับเวลาเหตุการณ์อินพุตของเมาส์ล่าสุด
  • ตำแหน่งเคอร์เซอร์ปัจจุบัน
  • สถานะของปุ่มเมาส์
  • สถานะของล้อเมาส์
struct Paddleboat_Mouse_Data {
    uint64_t timestamp;
    uint32_t buttonsDown;
    int32_t mouseScrollDeltaH;
    int32_t mouseScrollDeltaV;
    float mouseX;
    float mouseY;
}
สมาชิกในบ้าน คำอธิบาย
timestamp การประทับเวลาของเหตุการณ์อินพุตของเมาส์ล่าสุด ค่าการประทับเวลาเป็นไมโครวินาทีนับตั้งแต่ Epoch ของนาฬิกา
buttonsDown ฟิลด์บิต โดยแต่ละบิตเริ่มต้นจากบิต 0 จะแสดงสถานะกดปุ่มหากตั้งค่าไว้
mouseX
mouseY
ตำแหน่งเมาส์ในพิกัดพิกเซล พิกัดตำแหน่งมีช่วงตั้งแต่ 0.0 ถึงความกว้างและความสูงของหน้าจอ
mouseScrollDeltaH
mouseScrollDeltaV
จำนวนเหตุการณ์ล้อเลื่อนของเมาส์สะสม : ตั้งแต่การเรียกใช้ครั้งก่อนไปจนถึง Paddleboat_getMouseData ค่าเหล่านี้ไม่รับประกันความแม่นยำ แต่จะให้ ข้อมูลเกี่ยวกับกิจกรรมของล้อเลื่อนใน ทิศทางใดทิศทางหนึ่งเท่านั้น เมาส์ส่วนใหญ่มีล้อเลื่อน 1 ล้อ ซึ่งรายงานใน mouseScrollDeltaV หากเมาส์มีล้อเลื่อนด้านข้าง ระบบจะรายงานใน mouseScrollDeltaH ระบบจะรีเซ็ตค่าเหล่านี้เป็น 0 ภายในหลังจากเรียกใช้ Paddleboat_getMouseData

ไลบรารี Game Controller จะกำหนดค่าคงที่บิตมาสก์สำหรับปุ่มเมาส์ใน paddleboat.hไฟล์ส่วนหัวของอินเทอร์เฟซ

enum Paddleboat_Mouse_Buttons {
    PADDLEBOAT_MOUSE_BUTTON_LEFT = (1U << 0),
    PADDLEBOAT_MOUSE_BUTTON_RIGHT = (1U << 1),
    PADDLEBOAT_MOUSE_BUTTON_MIDDLE = (1U << 2),
    PADDLEBOAT_MOUSE_BUTTON_BACK = (1U << 3),
    PADDLEBOAT_MOUSE_BUTTON_FORWARD = (1U << 4),
    PADDLEBOAT_MOUSE_BUTTON_6 = (1U << 5),
    PADDLEBOAT_MOUSE_BUTTON_7 = (1U << 6),
    PADDLEBOAT_MOUSE_BUTTON_8 = (1U << 7)
};

อุปกรณ์เมาส์จริงเทียบกับอุปกรณ์เมาส์เสมือน

Paddleboat_MouseStatus ของ PADDLEBOAT_MOUSE_CONTROLLER_EMULATED แสดงว่า ไม่มีอุปกรณ์เมาส์จริงและไลบรารีอุปกรณ์ควบคุมเกม จำลองเมาส์เสมือนโดยใช้ตัวควบคุมที่เชื่อมต่ออยู่ ระบบจะใช้ดัชนีของคอนโทรลเลอร์ที่เชื่อมต่อต่ำสุดซึ่งมีตั้งค่าแฟล็ก PADDLEBOAT_CONTROLLER_FLAG_VIRTUAL_MOUSE เป็นเมาส์เสมือน อุปกรณ์เมาส์เสมือนจะรับประกันการรายงานพิกัด mouseX และ mouseY เท่านั้น อุปกรณ์เมาส์เสมือนอาจรายงานการกดจากปุ่มเมาส์ปุ่มเดียว (ซ้าย) แต่ก็ไม่ได้รับประกันว่าจะรายงาน