Skip to content

Cursor UI


แนวคิดแบบเข้าใจง่าย

เมนู Minecraft ปกติเป็นหน้าต่างหีบ แต่ CradGacha สร้างเมนูจาก โฮโลแกรมที่ลอยในโลก และให้ผู้เล่นมี เคอร์เซอร์เมาส์เสมือน ที่ขยับด้วยเมาส์ เหมือน UI บนเดสก์ท็อปเป๊ะ ผู้เล่นชี้ไปที่ปุ่มแล้วคลิก

เพื่อให้รู้สึกถูกต้อง ปลั๊กอินจะ แช่กล้องไว้: ตอนเปิดเมนู วิวของผู้เล่นจะล็อกนิ่ง (เมนูจะได้ไม่สั่น) ขณะที่เมาส์ยังขยับเคอร์เซอร์ได้ การแช่นี้ใช้ packetevents จึงต้องมี packetevents

ศัพท์สำคัญ

ศัพท์ความหมาย
เคอร์เซอร์เสมือนตัวชี้เล็ก ๆ ที่คุณขยับด้วยเมาส์ ไม่ใช่เป้ากลางจอ vanilla แต่เป็น display entity ที่ปลั๊กอินขยับให้
พื้นที่คลิกได้สี่เหลี่ยมล่องหน (hitbox) ที่ผูกกับปุ่ม เมื่อเคอร์เซอร์อยู่ในนั้น = "hover" ปุ่มนั้น
Hoverเคอร์เซอร์อยู่บนปุ่ม ปุ่มจะเรืองแสงและมีเสียงติ๊ก
Clickคลิกซ้าย/ขวาขณะ hover แอ็กชันของปุ่มจะทำงาน (เลือกตู้/เปิด ฯลฯ)
Spectator freezeเทคนิคล็อกกล้องที่ทำให้วิวนิ่งขณะเมาส์ขยับเคอร์เซอร์

คลิกเกิดขึ้นยังไง (เบื้องหลัง)

  1. เมาส์หมุนหัวคุณ ปลั๊กอินอ่านการหมุนนั้นแล้วขยับเคอร์เซอร์
  2. ทุก tick มันเช็คว่าเคอร์เซอร์อยู่ในพื้นที่คลิกได้อันไหน
  3. เมื่อคุณคลิก มันรันแอ็กชันของพื้นที่ที่กำลัง hover

คุณไม่ต้องตั้งค่าอะไรเลย — มันทำงานเอง เลย์เอาต์ (ตำแหน่งปุ่ม) อยู่ใน theme.yml ส่วน ความรู้สึก (ความไว ขอบเขต) อยู่ใน cursor.yml (ดู การตั้งค่า)

ปรับความรู้สึก (cursor.yml)

yaml
sensitivity-x: 0.3   # เพิ่มถ้าเคอร์เซอร์ขยับซ้าย-ขวาช้า
sensitivity-y: 0.22
bounds: { min-x: -2.8, max-x: 2.8, min-y: -1.6, max-y: 1.8 }  # ระยะที่เคอร์เซอร์ไปได้
smoothing: 0.7       # 1.0 = ทันที/ดิบ, ต่ำลง = ลื่นขึ้น
  • เคอร์เซอร์ช้า / ไปไม่ถึงขอบ? เพิ่ม sensitivity-x และ/หรือขยาย bounds
  • เคอร์เซอร์กระตุก? ลด sensitivity หรือลด smoothing

ทำไมทุกอย่างสว่าง (ไม่มีโมเดลมืด)

ไอเทมและข้อความในเมนูอาจดูมืดถ้าปล่อยให้แสงในโลกมีผล CradGacha จึงตั้ง display ทุกตัว ให้ สว่างเต็ม 15/15 ในโค้ด ปุ่มและโมเดลรางวัลจึงดูคมเสมอ ไม่ว่าเวลาในเกมหรือผู้เล่นยืนตรงไหน เป็นอัตโนมัติ ไม่มีค่าให้ตั้ง

theme.yml ใน 1 นาที

theme.yml ควบคุม ว่าอะไรอยู่ตรงไหน และ ใช้รูป/ข้อความอะไร คุณย้ายปุ่ม เปลี่ยนข้อความ สลับรูป หรือเพิ่ม element ของคุณเองได้ — โดยไม่ต้องแตะโค้ด หลังแก้รัน /gacha reload

yaml
elements:
  btn_x10:
    type: glyph          # glyph (รูป) | text | item
    value: g_open_x10    # ชื่อรูป/glyph
    x: 1.85              # ซ้าย(-)/ขวา(+)
    y: -1.0              # ล่าง(-)/บน(+)
    scale: 0.425
    action: open_count   # คลิกแล้วทำอะไร
    param: "{crate}:10"  # เปิด 10 ใบของตู้ที่เลือก
    hitbox: { w: 0.42, h: 0.16 }

ดู reference เต็มที่ THEME-REFERENCE.md ในรากของ repo

ข้อจำกัด (เฉพาะฝั่งเซิร์ฟ)

มาจากการทำ cursor UI บนเซิร์ฟล้วน (ไม่มี client mod):

  • เคอร์เซอร์อาจไปไม่ถึง ขอบจอซ้าย/ขวา สุด (การนั่งบนจุดกล้องจำกัดมุมหันหัว) บรรเทาด้วยการเพิ่ม sensitivity-x / ขยาย bounds
  • อาจมี ดีเลย์เล็กน้อย (เซิร์ฟอัปเดต 20 ครั้ง/วิ เทียบกับ 60fps ของ client)
  • เป้ากลางจอ vanilla ซ่อนจากฝั่งเซิร์ฟไม่ได้ — ทำ crosshair.png โปร่งใสใน resource pack ถ้าอยากให้หาย

ถัดไป: หน้าผลรางวัล →