Moin,
ich will euch hier kurz eine kleine OpenSource-Bibliothek vorstellen, die ich im Zuge der Splatter-Portierung geschrieben habe.
SNIIS (Gesundheit!)
Simple Non-Intrusive Input Library
Link:
https://github.com/Schrompf/sniis
Lizenz: WTFPL oder vergleichbare
Funktion:
SNIIS stellt alle Arten von Eingabegeräten auf den Desktop-Plattformen Windows/Linux/MacOSX zur Verfügung. Unterstützt werden mehrere Mäuse und Tastaturen sowie natürlich alle GamePads, Controller, Joysticks. Deren Eingabeelemente können dann mittels Action Mapping auf abstrakte Eingabekanäle abgebildet werden, um halt die klassische Neubelegung der Steuerung zu ermöglichen. Im Detail:
- mehrere Mäuse und Tastaturen auf Win/Mac/Linux mit sauberer Nutzer-Integration - kein Suchen mehr, was denn nun die erste Maus ist, wie z.B. bei Trine :-)
- Non-Intrusive - übernimmt *nicht* die Game Message Loop. Braucht deswegen aber gelegentlich externe Informationen, um arbeiten zu können.
- einfacher Build - einfach ein Rudel C++-Files mit dem Projekt mitkompilieren, zur Benutzung ein einzelnes Include ohne weitere Abhängigkeiten.
- einfacher Code - kein AbstractFactoryAdaptorPattern-Mist. Ich meine Dich, OIS.
- Action Mapping, also Abbildung von Eingabeelementen auf Spielaktionen, mit Kreuzübersetzung zwischen analogen und digitalen Controls
- optional mit Tastenwiederholung
- optional mit menschenlesbaren Namen für die Eingabeelemente, z.B. für's Optionsmenü, wo man die Steuerung neu belegen kann
Ursprung:
Das Ganze ist umfangreich basiert auf Object-Oriented Input System, was ich bald ein Jahrzehnt lang vorher benutzt habe. Das musste ich aber für "Mehrere Mäuse/Tastaturen" bereits kräftig umbauen, habe außerdem den XInput-Patch für saubere XBox-Controller-Unterstützung integrieren müssen, und Tilman/Sternmull hat damals das ActionMapping noch obendrauf gepflanzt. Und spätestens, als ich OIS dann unter Linux benutzen wollte und der nur noch in Crashes gerannt ist wegen der Konkurrenz um irgendwelche Systemnachrichten, war's vorbei damit.
Probleme:
Einige. Ich hoffe da auf den OpenSource-Effekt.
- fehlende Tastenbenamung auf OSX
- fehlende Benamung aller anderen Controls, also Maus und Joysticks
- unsaubere Übersetzung von HID-Buttons auf Virtual Keys unter OSX
- unschöne RawInput-Nachrichtenbesorgung auf Windows - kommt man da irgendwie eigenständig ran?
- noch völlig unfertige C-API
Andere Libs:
- ManyMouse - feines kleines Ding, angenehm unprätentiös, aber halt nur für Mäuse, und kein Remapping
- "Simple cross-platform gamepad library" von TigSource - ebenso kleines feines Ding, aber halt nur GamePads/Joysticks/usw., kein Action Mapping
- und halt OIS - quasi tot, ziemlich "objektorientiert" verbastelt, konnte nur einen Teil von dem, was ich brauchte