1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828182918301831183218331834183518361837183818391840184118421843184418451846184718481849185018511852185318541855185618571858185918601861186218631864186518661867186818691870187118721873187418751876187718781879188018811882188318841885188618871888188918901891189218931894189518961897189818991900190119021903190419051906190719081909191019111912191319141915191619171918191919201921192219231924192519261927192819291930193119321933193419351936193719381939194019411942194319441945194619471948194919501951195219531954195519561957195819591960196119621963196419651966196719681969197019711972197319741975197619771978197919801981198219831984198519861987198819891990199119921993199419951996199719981999200020012002200320042005200620072008200920102011201220132014201520162017201820192020202120222023202420252026202720282029203020312032203320342035203620372038203920402041204220432044204520462047204820492050205120522053205420552056205720582059206020612062206320642065206620672068206920702071207220732074207520762077207820792080208120822083208420852086208720882089209020912092209320942095209620972098209921002101210221032104210521062107210821092110211121122113211421152116211721182119212021212122212321242125212621272128212921302131213221332134213521362137213821392140214121422143214421452146214721482149215021512152215321542155215621572158215921602161216221632164216521662167216821692170217121722173217421752176217721782179218021812182218321842185218621872188218921902191219221932194219521962197219821992200220122022203220422052206220722082209221022112212221322142215221622172218221922202221222222232224222522262227222822292230223122322233223422352236223722382239224022412242224322442245224622472248224922502251225222532254225522562257225822592260226122622263226422652266226722682269227022712272227322742275227622772278227922802281228222832284228522862287228822892290229122922293229422952296229722982299230023012302230323042305230623072308230923102311231223132314231523162317231823192320232123222323232423252326232723282329233023312332233323342335233623372338233923402341234223432344234523462347234823492350235123522353235423552356235723582359236023612362236323642365236623672368236923702371237223732374237523762377237823792380238123822383238423852386238723882389239023912392239323942395239623972398239924002401240224032404240524062407240824092410241124122413241424152416241724182419242024212422242324242425242624272428242924302431243224332434243524362437243824392440244124422443244424452446244724482449245024512452245324542455245624572458245924602461246224632464246524662467246824692470247124722473247424752476247724782479248024812482248324842485248624872488248924902491249224932494249524962497249824992500250125022503250425052506250725082509251025112512251325142515251625172518251925202521252225232524252525262527252825292530253125322533253425352536253725382539254025412542254325442545254625472548254925502551255225532554255525562557255825592560256125622563256425652566256725682569257025712572257325742575257625772578257925802581258225832584258525862587258825892590259125922593259425952596259725982599260026012602260326042605260626072608260926102611261226132614261526162617261826192620262126222623262426252626262726282629263026312632263326342635263626372638263926402641264226432644264526462647264826492650265126522653265426552656265726582659266026612662266326642665266626672668266926702671267226732674267526762677267826792680268126822683268426852686268726882689269026912692269326942695269626972698269927002701270227032704270527062707270827092710271127122713271427152716271727182719272027212722272327242725272627272728272927302731273227332734273527362737273827392740274127422743274427452746274727482749275027512752275327542755275627572758275927602761276227632764276527662767276827692770277127722773277427752776277727782779278027812782278327842785278627872788278927902791279227932794279527962797279827992800280128022803280428052806280728082809281028112812281328142815281628172818281928202821282228232824282528262827282828292830283128322833283428352836283728382839284028412842284328442845284628472848284928502851285228532854285528562857285828592860286128622863286428652866286728682869287028712872287328742875287628772878287928802881288228832884288528862887288828892890289128922893289428952896289728982899290029012902290329042905290629072908290929102911291229132914291529162917291829192920292129222923292429252926292729282929293029312932293329342935293629372938293929402941294229432944294529462947294829492950295129522953295429552956295729582959296029612962296329642965296629672968296929702971297229732974297529762977297829792980298129822983298429852986298729882989299029912992299329942995299629972998299930003001300230033004300530063007300830093010301130123013301430153016301730183019302030213022302330243025302630273028302930303031303230333034303530363037303830393040304130423043304430453046304730483049305030513052305330543055305630573058305930603061306230633064306530663067306830693070307130723073307430753076307730783079308030813082308330843085308630873088308930903091309230933094309530963097309830993100310131023103310431053106310731083109311031113112311331143115311631173118311931203121312231233124312531263127312831293130313131323133313431353136313731383139314031413142314331443145314631473148314931503151315231533154315531563157315831593160316131623163316431653166316731683169317031713172317331743175317631773178317931803181318231833184318531863187318831893190319131923193319431953196319731983199320032013202320332043205320632073208320932103211321232133214321532163217321832193220322132223223322432253226322732283229323032313232323332343235323632373238323932403241324232433244324532463247324832493250325132523253325432553256325732583259326032613262326332643265326632673268326932703271327232733274327532763277327832793280328132823283328432853286328732883289329032913292329332943295329632973298329933003301330233033304330533063307330833093310331133123313331433153316331733183319332033213322332333243325332633273328332933303331333233333334333533363337333833393340334133423343334433453346334733483349335033513352335333543355335633573358335933603361336233633364336533663367336833693370337133723373337433753376337733783379338033813382338333843385338633873388338933903391339233933394339533963397339833993400340134023403340434053406340734083409341034113412341334143415341634173418341934203421342234233424342534263427342834293430343134323433343434353436343734383439344034413442344334443445344634473448344934503451345234533454345534563457345834593460346134623463346434653466346734683469347034713472347334743475347634773478347934803481348234833484348534863487348834893490349134923493349434953496349734983499350035013502350335043505350635073508350935103511351235133514351535163517351835193520352135223523352435253526352735283529353035313532353335343535353635373538353935403541354235433544354535463547354835493550355135523553355435553556355735583559356035613562356335643565356635673568356935703571357235733574357535763577357835793580358135823583358435853586358735883589359035913592359335943595359635973598359936003601360236033604360536063607360836093610361136123613361436153616361736183619362036213622362336243625362636273628362936303631363236333634363536363637363836393640364136423643364436453646364736483649365036513652365336543655365636573658365936603661366236633664366536663667366836693670367136723673367436753676367736783679368036813682368336843685368636873688368936903691369236933694369536963697369836993700370137023703370437053706370737083709371037113712371337143715371637173718371937203721372237233724372537263727372837293730373137323733373437353736373737383739374037413742374337443745374637473748374937503751375237533754375537563757375837593760376137623763376437653766376737683769377037713772377337743775377637773778377937803781378237833784378537863787378837893790379137923793379437953796 |
- /************************************************************************************
- Copyright : Copyright (c) Facebook Technologies, LLC and its affiliates. All rights reserved.
- Licensed under the Oculus Utilities SDK License Version 1.31 (the "License"); you may not use
- the Utilities SDK except in compliance with the License, which is provided at the time of installation
- or download, or which otherwise accompanies this software in either electronic or hard copy form.
- You may obtain a copy of the License at
- https://developer.oculus.com/licenses/utilities-1.31
- Unless required by applicable law or agreed to in writing, the Utilities SDK distributed
- under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF
- ANY KIND, either express or implied. See the License for the specific language governing
- permissions and limitations under the License.
- ************************************************************************************/
- using System;
- using System.Collections;
- using System.Collections.Generic;
- using System.Runtime.InteropServices;
- using UnityEngine;
- #if UNITY_2017_2_OR_NEWER
- using InputTracking = UnityEngine.XR.InputTracking;
- using Node = UnityEngine.XR.XRNode;
- using Settings = UnityEngine.XR.XRSettings;
- #else
- using InputTracking = UnityEngine.VR.InputTracking;
- using Node = UnityEngine.VR.VRNode;
- using Settings = UnityEngine.VR.VRSettings;
- #endif
- /// <summary>
- /// Provides a unified input system for Oculus controllers and gamepads.
- /// </summary>
- public static class OVRInput
- {
- [Flags]
- /// Virtual button mappings that allow the same input bindings to work across different controllers.
- public enum Button
- {
- None = 0, ///< Maps to RawButton: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- One = 0x00000001, ///< Maps to RawButton: [Gamepad, Touch, RTouch: A], [LTouch: X], [LTrackedRemote: LTouchpad], [RTrackedRemote: RTouchpad], [Touchpad, Remote: Start]
- Two = 0x00000002, ///< Maps to RawButton: [Gamepad, Touch, RTouch: B], [LTouch: Y], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: Back]
- Three = 0x00000004, ///< Maps to RawButton: [Gamepad, Touch: X], [LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Four = 0x00000008, ///< Maps to RawButton: [Gamepad, Touch: Y], [LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Start = 0x00000100, ///< Maps to RawButton: [Gamepad: Start], [Touch, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: Start], [RTouch: None]
- Back = 0x00000200, ///< Maps to RawButton: [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: Back], [Touch, LTouch, RTouch: None]
- PrimaryShoulder = 0x00001000, ///< Maps to RawButton: [Gamepad: LShoulder], [Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryIndexTrigger = 0x00002000, ///< Maps to RawButton: [Gamepad, Touch, LTouch, LTrackedRemote: LIndexTrigger], [RTouch, RTrackedRemote: RIndexTrigger], [Touchpad, Remote: None]
- PrimaryHandTrigger = 0x00004000, ///< Maps to RawButton: [Touch, LTouch: LHandTrigger], [RTouch: RHandTrigger], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryThumbstick = 0x00008000, ///< Maps to RawButton: [Gamepad, Touch, LTouch: LThumbstick], [RTouch: RThumbstick], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryThumbstickUp = 0x00010000, ///< Maps to RawButton: [Gamepad, Touch, LTouch: LThumbstickUp], [RTouch: RThumbstickUp], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryThumbstickDown = 0x00020000, ///< Maps to RawButton: [Gamepad, Touch, LTouch: LThumbstickDown], [RTouch: RThumbstickDown], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryThumbstickLeft = 0x00040000, ///< Maps to RawButton: [Gamepad, Touch, LTouch: LThumbstickLeft], [RTouch: RThumbstickLeft], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryThumbstickRight = 0x00080000, ///< Maps to RawButton: [Gamepad, Touch, LTouch: LThumbstickRight], [RTouch: RThumbstickRight], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryTouchpad = 0x00000400, ///< Maps to RawButton: [LTrackedRemote, Touchpad: LTouchpad], [RTrackedRemote: RTouchpad], [Gamepad, Touch, LTouch, RTouch, Remote: None]
- SecondaryShoulder = 0x00100000, ///< Maps to RawButton: [Gamepad: RShoulder], [Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryIndexTrigger = 0x00200000, ///< Maps to RawButton: [Gamepad, Touch: RIndexTrigger], [LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryHandTrigger = 0x00400000, ///< Maps to RawButton: [Touch: RHandTrigger], [Gamepad, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryThumbstick = 0x00800000, ///< Maps to RawButton: [Gamepad, Touch: RThumbstick], [LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryThumbstickUp = 0x01000000, ///< Maps to RawButton: [Gamepad, Touch: RThumbstickUp], [LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryThumbstickDown = 0x02000000, ///< Maps to RawButton: [Gamepad, Touch: RThumbstickDown], [LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryThumbstickLeft = 0x04000000, ///< Maps to RawButton: [Gamepad, Touch: RThumbstickLeft], [LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryThumbstickRight = 0x08000000, ///< Maps to RawButton: [Gamepad, Touch: RThumbstickRight], [LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryTouchpad = 0x00000800, ///< Maps to RawButton: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- DpadUp = 0x00000010, ///< Maps to RawButton: [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadUp], [Touch, LTouch, RTouch: None]
- DpadDown = 0x00000020, ///< Maps to RawButton: [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadDown], [Touch, LTouch, RTouch: None]
- DpadLeft = 0x00000040, ///< Maps to RawButton: [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadLeft], [Touch, LTouch, RTouch: None]
- DpadRight = 0x00000080, ///< Maps to RawButton: [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadRight], [Touch, LTouch, RTouch: None]
- Up = 0x10000000, ///< Maps to RawButton: [Gamepad, Touch, LTouch: LThumbstickUp], [RTouch: RThumbstickUp], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadUp]
- Down = 0x20000000, ///< Maps to RawButton: [Gamepad, Touch, LTouch: LThumbstickDown], [RTouch: RThumbstickDown], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadDown]
- Left = 0x40000000, ///< Maps to RawButton: [Gamepad, Touch, LTouch: LThumbstickLeft], [RTouch: RThumbstickLeft], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadLeft]
- Right = unchecked((int)0x80000000),///< Maps to RawButton: [Gamepad, Touch, LTouch: LThumbstickRight], [RTouch: RThumbstickRight], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadRight]
- Any = ~None, ///< Maps to RawButton: [Gamepad, Touch, LTouch, RTouch: Any]
- }
- [Flags]
- /// Raw button mappings that can be used to directly query the state of a controller.
- public enum RawButton
- {
- None = 0, ///< Maps to Physical Button: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- A = 0x00000001, ///< Maps to Physical Button: [Gamepad, Touch, RTouch: A], [LTrackedRemote: LIndexTrigger], [RTrackedRemote: RIndexTrigger], [LTouch, Touchpad, Remote: None]
- B = 0x00000002, ///< Maps to Physical Button: [Gamepad, Touch, RTouch: B], [LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- X = 0x00000100, ///< Maps to Physical Button: [Gamepad, Touch, LTouch: X], [RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Y = 0x00000200, ///< Maps to Physical Button: [Gamepad, Touch, LTouch: Y], [RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Start = 0x00100000, ///< Maps to Physical Button: [Gamepad, Touch, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: Start], [RTouch: None]
- Back = 0x00200000, ///< Maps to Physical Button: [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: Back], [Touch, LTouch, RTouch: None]
- LShoulder = 0x00000800, ///< Maps to Physical Button: [Gamepad: LShoulder], [Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LIndexTrigger = 0x10000000, ///< Maps to Physical Button: [Gamepad, Touch, LTouch, LTrackedRemote: LIndexTrigger], [RTouch, RTrackedRemote, Touchpad, Remote: None]
- LHandTrigger = 0x20000000, ///< Maps to Physical Button: [Touch, LTouch: LHandTrigger], [Gamepad, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LThumbstick = 0x00000400, ///< Maps to Physical Button: [Gamepad, Touch, LTouch: LThumbstick], [RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LThumbstickUp = 0x00000010, ///< Maps to Physical Button: [Gamepad, Touch, LTouch: LThumbstickUp], [RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LThumbstickDown = 0x00000020, ///< Maps to Physical Button: [Gamepad, Touch, LTouch: LThumbstickDown], [RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LThumbstickLeft = 0x00000040, ///< Maps to Physical Button: [Gamepad, Touch, LTouch: LThumbstickLeft], [RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LThumbstickRight = 0x00000080, ///< Maps to Physical Button: [Gamepad, Touch, LTouch: LThumbstickRight], [RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LTouchpad = 0x40000000, ///< Maps to Physical Button: [LTrackedRemote: LTouchpad], [Gamepad, Touch, LTouch, RTouch, RTrackedRemote, Touchpad, Remote: None]
- RShoulder = 0x00000008, ///< Maps to Physical Button: [Gamepad: RShoulder], [Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RIndexTrigger = 0x04000000, ///< Maps to Physical Button: [Gamepad, Touch, RTouch, RTrackedRemote: RIndexTrigger], [LTouch, LTrackedRemote, Touchpad, Remote: None]
- RHandTrigger = 0x08000000, ///< Maps to Physical Button: [Touch, RTouch: RHandTrigger], [Gamepad, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RThumbstick = 0x00000004, ///< Maps to Physical Button: [Gamepad, Touch, RTouch: RThumbstick], [LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RThumbstickUp = 0x00001000, ///< Maps to Physical Button: [Gamepad, Touch, RTouch: RThumbstickUp], [LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RThumbstickDown = 0x00002000, ///< Maps to Physical Button: [Gamepad, Touch, RTouch: RThumbstickDown], [LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RThumbstickLeft = 0x00004000, ///< Maps to Physical Button: [Gamepad, Touch, RTouch: RThumbstickLeft], [LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RThumbstickRight = 0x00008000, ///< Maps to Physical Button: [Gamepad, Touch, RTouch: RThumbstickRight], [LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RTouchpad = unchecked((int)0x80000000),///< Maps to Physical Button: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- DpadUp = 0x00010000, ///< Maps to Physical Button: [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadUp], [Touch, LTouch, RTouch: None]
- DpadDown = 0x00020000, ///< Maps to Physical Button: [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadDown], [Touch, LTouch, RTouch: None]
- DpadLeft = 0x00040000, ///< Maps to Physical Button: [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadLeft], [Touch, LTouch, RTouch: None]
- DpadRight = 0x00080000, ///< Maps to Physical Button: [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: DpadRight], [Touch, LTouch, RTouch: None]
- Any = ~None, ///< Maps to Physical Button: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: Any]
- }
- [Flags]
- /// Virtual capacitive touch mappings that allow the same input bindings to work across different controllers with capacitive touch support.
- public enum Touch
- {
- None = 0, ///< Maps to RawTouch: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- One = Button.One, ///< Maps to RawTouch: [Touch, RTouch: A], [LTouch: X], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Two = Button.Two, ///< Maps to RawTouch: [Touch, RTouch: B], [LTouch: Y], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Three = Button.Three, ///< Maps to RawTouch: [Touch: X], [Gamepad, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Four = Button.Four, ///< Maps to RawTouch: [Touch: Y], [Gamepad, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryIndexTrigger = Button.PrimaryIndexTrigger, ///< Maps to RawTouch: [Touch, LTouch: LIndexTrigger], [RTouch: RIndexTrigger], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryThumbstick = Button.PrimaryThumbstick, ///< Maps to RawTouch: [Touch, LTouch: LThumbstick], [RTouch: RThumbstick], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryThumbRest = 0x00001000, ///< Maps to RawTouch: [Touch, LTouch: LThumbRest], [RTouch: RThumbRest], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryTouchpad = Button.PrimaryTouchpad, ///< Maps to RawTouch: [LTrackedRemote, Touchpad: LTouchpad], [RTrackedRemote: RTouchpad], [Gamepad, Touch, LTouch, RTouch, Remote: None]
- SecondaryIndexTrigger = Button.SecondaryIndexTrigger, ///< Maps to RawTouch: [Touch: RIndexTrigger], [Gamepad, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryThumbstick = Button.SecondaryThumbstick, ///< Maps to RawTouch: [Touch: RThumbstick], [Gamepad, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryThumbRest = 0x00100000, ///< Maps to RawTouch: [Touch: RThumbRest], [Gamepad, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryTouchpad = Button.SecondaryTouchpad, ///< Maps to RawTouch: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Any = ~None, ///< Maps to RawTouch: [Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad: Any], [Gamepad, Remote: None]
- }
- [Flags]
- /// Raw capacitive touch mappings that can be used to directly query the state of a controller.
- public enum RawTouch
- {
- None = 0, ///< Maps to Physical Touch: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- A = RawButton.A, ///< Maps to Physical Touch: [Touch, RTouch: A], [Gamepad, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- B = RawButton.B, ///< Maps to Physical Touch: [Touch, RTouch: B], [Gamepad, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- X = RawButton.X, ///< Maps to Physical Touch: [Touch, LTouch: X], [Gamepad, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Y = RawButton.Y, ///< Maps to Physical Touch: [Touch, LTouch: Y], [Gamepad, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LIndexTrigger = 0x00001000, ///< Maps to Physical Touch: [Touch, LTouch: LIndexTrigger], [Gamepad, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LThumbstick = RawButton.LThumbstick, ///< Maps to Physical Touch: [Touch, LTouch: LThumbstick], [Gamepad, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LThumbRest = 0x00000800, ///< Maps to Physical Touch: [Touch, LTouch: LThumbRest], [Gamepad, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LTouchpad = RawButton.LTouchpad, ///< Maps to Physical Touch: [LTrackedRemote, Touchpad: LTouchpad], [Gamepad, Touch, LTouch, RTouch, RTrackedRemote, Remote: None]
- RIndexTrigger = 0x00000010, ///< Maps to Physical Touch: [Touch, RTouch: RIndexTrigger], [Gamepad, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RThumbstick = RawButton.RThumbstick, ///< Maps to Physical Touch: [Touch, RTouch: RThumbstick], [Gamepad, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RThumbRest = 0x00000008, ///< Maps to Physical Touch: [Touch, RTouch: RThumbRest], [Gamepad, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RTouchpad = RawButton.RTouchpad, ///< Maps to Physical Touch: [RTrackedRemote: RTouchpad], [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, Touchpad, Remote: None]
- Any = ~None, ///< Maps to Physical Touch: [Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad: Any], [Gamepad, Remote: None]
- }
- [Flags]
- /// Virtual near touch mappings that allow the same input bindings to work across different controllers with near touch support.
- /// A near touch uses the capacitive touch sensors of a controller to detect approximate finger proximity prior to a full touch being reported.
- public enum NearTouch
- {
- None = 0, ///< Maps to RawNearTouch: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryIndexTrigger = 0x00000001, ///< Maps to RawNearTouch: [Touch, LTouch: LIndexTrigger], [RTouch: RIndexTrigger], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryThumbButtons = 0x00000002, ///< Maps to RawNearTouch: [Touch, LTouch: LThumbButtons], [RTouch: RThumbButtons], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryIndexTrigger = 0x00000004, ///< Maps to RawNearTouch: [Touch: RIndexTrigger], [Gamepad, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryThumbButtons = 0x00000008, ///< Maps to RawNearTouch: [Touch: RThumbButtons], [Gamepad, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Any = ~None, ///< Maps to RawNearTouch: [Touch, LTouch, RTouch: Any], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- }
- [Flags]
- /// Raw near touch mappings that can be used to directly query the state of a controller.
- public enum RawNearTouch
- {
- None = 0, ///< Maps to Physical NearTouch: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LIndexTrigger = 0x00000001, ///< Maps to Physical NearTouch: [Touch, LTouch: Implies finger is in close proximity to LIndexTrigger.], [Gamepad, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LThumbButtons = 0x00000002, ///< Maps to Physical NearTouch: [Touch, LTouch: Implies thumb is in close proximity to LThumbstick OR X/Y buttons.], [Gamepad, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RIndexTrigger = 0x00000004, ///< Maps to Physical NearTouch: [Touch, RTouch: Implies finger is in close proximity to RIndexTrigger.], [Gamepad, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RThumbButtons = 0x00000008, ///< Maps to Physical NearTouch: [Touch, RTouch: Implies thumb is in close proximity to RThumbstick OR A/B buttons.], [Gamepad, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Any = ~None, ///< Maps to Physical NearTouch: [Touch, LTouch, RTouch: Any], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- }
- [Flags]
- /// Virtual 1-dimensional axis (float) mappings that allow the same input bindings to work across different controllers.
- public enum Axis1D
- {
- None = 0, ///< Maps to RawAxis1D: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryIndexTrigger = 0x01, ///< Maps to RawAxis1D: [Gamepad, Touch, LTouch: LIndexTrigger], [RTouch: RIndexTrigger], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryHandTrigger = 0x04, ///< Maps to RawAxis1D: [Touch, LTouch: LHandTrigger], [RTouch: RHandTrigger], [Gamepad, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryIndexTrigger = 0x02, ///< Maps to RawAxis1D: [Gamepad, Touch: RIndexTrigger], [LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryHandTrigger = 0x08, ///< Maps to RawAxis1D: [Touch: RHandTrigger], [Gamepad, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Any = ~None, ///< Maps to RawAxis1D: [Gamepad, Touch, LTouch, RTouch: Any], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- }
- [Flags]
- /// Raw 1-dimensional axis (float) mappings that can be used to directly query the state of a controller.
- public enum RawAxis1D
- {
- None = 0, ///< Maps to Physical Axis1D: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LIndexTrigger = 0x01, ///< Maps to Physical Axis1D: [Gamepad, Touch, LTouch: LIndexTrigger], [RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LHandTrigger = 0x04, ///< Maps to Physical Axis1D: [Touch, LTouch: LHandTrigger], [Gamepad, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RIndexTrigger = 0x02, ///< Maps to Physical Axis1D: [Gamepad, Touch, RTouch: RIndexTrigger], [LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RHandTrigger = 0x08, ///< Maps to Physical Axis1D: [Touch, RTouch: RHandTrigger], [Gamepad, LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Any = ~None, ///< Maps to Physical Axis1D: [Gamepad, Touch, LTouch, RTouch: Any], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- }
- [Flags]
- /// Virtual 2-dimensional axis (Vector2) mappings that allow the same input bindings to work across different controllers.
- public enum Axis2D
- {
- None = 0, ///< Maps to RawAxis2D: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryThumbstick = 0x01, ///< Maps to RawAxis2D: [Gamepad, Touch, LTouch: LThumbstick], [RTouch: RThumbstick], [LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- PrimaryTouchpad = 0x04, ///< Maps to RawAxis2D: [LTrackedRemote, Touchpad: LTouchpad], RTrackedRemote: RTouchpad], [Gamepad, Touch, LTouch, RTouch, Remote: None]
- SecondaryThumbstick = 0x02, ///< Maps to RawAxis2D: [Gamepad, Touch: RThumbstick], [LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- SecondaryTouchpad = 0x08, ///< Maps to RawAxis2D: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- Any = ~None, ///< Maps to RawAxis2D: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad: Any], [Remote: None]
- }
- [Flags]
- /// Raw 2-dimensional axis (Vector2) mappings that can be used to directly query the state of a controller.
- public enum RawAxis2D
- {
- None = 0, ///< Maps to Physical Axis2D: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LThumbstick = 0x01, ///< Maps to Physical Axis2D: [Gamepad, Touch, LTouch: LThumbstick], [RTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- LTouchpad = 0x04, ///< Maps to Physical Axis2D: [LTrackedRemote, Touchpad: LTouchpad], [Gamepad, Touch, LTouch, RTouch, RTrackedRemote, Remote: None]
- RThumbstick = 0x02, ///< Maps to Physical Axis2D: [Gamepad, Touch, RTouch: RThumbstick], [LTouch, LTrackedRemote, RTrackedRemote, Touchpad, Remote: None]
- RTouchpad = 0x08, ///< Maps to Physical Axis2D: [RTrackedRemote: RTouchpad], [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, Touchpad, Remote: None]
- Any = ~None, ///< Maps to Physical Axis2D: [Gamepad, Touch, LTouch, RTouch, LTrackedRemote, RTrackedRemote: Any], [Touchpad, Remote: None]
- }
- [Flags]
- /// OpenVR Controller State Enum
- public enum OpenVRButton : ulong
- {
- None = 0,
- Two = 0x0002,
- Thumbstick = 0x100000000,
- Grip = 0x0004,
- }
- [Flags]
- /// Identifies a controller which can be used to query the virtual or raw input state.
- public enum Controller
- {
- None = OVRPlugin.Controller.None, ///< Null controller.
- LTouch = OVRPlugin.Controller.LTouch, ///< Left Oculus Touch controller. Virtual input mapping differs from the combined L/R Touch mapping.
- RTouch = OVRPlugin.Controller.RTouch, ///< Right Oculus Touch controller. Virtual input mapping differs from the combined L/R Touch mapping.
- Touch = OVRPlugin.Controller.Touch, ///< Combined Left/Right pair of Oculus Touch controllers.
- Remote = OVRPlugin.Controller.Remote, ///< Oculus Remote controller.
- Gamepad = OVRPlugin.Controller.Gamepad, ///< Xbox 360 or Xbox One gamepad on PC. Generic gamepad on Android.
- Hands = OVRPlugin.Controller.Hands, ///< Left Hand provided by hand-tracking.
- LHand = OVRPlugin.Controller.LHand, ///< Left Hand provided by hand-tracking.
- RHand = OVRPlugin.Controller.RHand, ///< Right Hand provided by hand-tracking.
- Touchpad = OVRPlugin.Controller.Touchpad, ///< GearVR touchpad on Android.
- LTrackedRemote = OVRPlugin.Controller.LTrackedRemote, ///< Left GearVR tracked remote on Android.
- RTrackedRemote = OVRPlugin.Controller.RTrackedRemote, ///< Right GearVR tracked remote on Android.
- Active = OVRPlugin.Controller.Active, ///< Default controller. Represents the controller that most recently registered a button press from the user.
- All = OVRPlugin.Controller.All, ///< Represents the logical OR of all controllers.
- }
- public enum Handedness
- {
- Unsupported = OVRPlugin.Handedness.Unsupported,
- LeftHanded = OVRPlugin.Handedness.LeftHanded,
- RightHanded = OVRPlugin.Handedness.RightHanded,
- }
- private static readonly float AXIS_AS_BUTTON_THRESHOLD = 0.5f;
- private static readonly float AXIS_DEADZONE_THRESHOLD = 0.2f;
- private static List<OVRControllerBase> controllers;
- private static Controller activeControllerType = Controller.None;
- private static Controller connectedControllerTypes = Controller.None;
- private static OVRPlugin.Step stepType = OVRPlugin.Step.Render;
- private static int fixedUpdateCount = 0;
- private static bool _pluginSupportsActiveController = false;
- private static bool _pluginSupportsActiveControllerCached = false;
- private static System.Version _pluginSupportsActiveControllerMinVersion = new System.Version(1, 9, 0);
- private static bool pluginSupportsActiveController
- {
- get
- {
- if (!_pluginSupportsActiveControllerCached)
- {
- bool isSupportedPlatform = true;
- #if (UNITY_ANDROID && !UNITY_EDITOR) || UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
- isSupportedPlatform = false;
- #endif
- _pluginSupportsActiveController = isSupportedPlatform && (OVRPlugin.version >= _pluginSupportsActiveControllerMinVersion);
- _pluginSupportsActiveControllerCached = true;
- }
- return _pluginSupportsActiveController;
- }
- }
- /// <summary>
- /// Creates an instance of OVRInput.
- /// </summary>
- static OVRInput()
- {
- controllers = new List<OVRControllerBase>
- {
- #if UNITY_ANDROID && !UNITY_EDITOR
- new OVRControllerGamepadAndroid(),
- new OVRControllerTouchpad(),
- new OVRControllerLTrackedRemote(),
- new OVRControllerRTrackedRemote(),
- new OVRControllerTouch(),
- new OVRControllerLTouch(),
- new OVRControllerRTouch(),
- new OVRControllerHands(),
- new OVRControllerLHand(),
- new OVRControllerRHand(),
- #elif UNITY_STANDALONE_OSX || UNITY_EDITOR_OSX
- new OVRControllerGamepadMac(),
- #else
- new OVRControllerGamepadPC(),
- new OVRControllerTouch(),
- new OVRControllerLTouch(),
- new OVRControllerRTouch(),
- new OVRControllerRemote(),
- #endif
- };
- InitHapticInfo();
- }
- /// <summary>
- /// Updates the internal state of OVRInput. Must be called manually if used independently from OVRManager.
- /// </summary>
- public static void Update()
- {
- connectedControllerTypes = Controller.None;
- stepType = OVRPlugin.Step.Render;
- fixedUpdateCount = 0;
- if (OVRManager.loadedXRDevice == OVRManager.XRDevice.OpenVR)
- {
- UpdateXRControllerNodeIds();
- UpdateXRControllerHaptics();
- }
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- connectedControllerTypes |= controller.Update();
- if ((connectedControllerTypes & controller.controllerType) != 0)
- {
- RawButton rawButtonMask = RawButton.Any;
- RawTouch rawTouchMask = RawTouch.Any;
- if (Get(rawButtonMask, controller.controllerType)
- || Get(rawTouchMask, controller.controllerType))
- {
- activeControllerType = controller.controllerType;
- }
- }
- }
- if ((activeControllerType == Controller.LTouch) || (activeControllerType == Controller.RTouch))
- {
- if ((connectedControllerTypes & Controller.Touch) == Controller.Touch)
- {
- // If either Touch controller is Active and both Touch controllers are connected, set both to Active.
- activeControllerType = Controller.Touch;
- }
- }
- if ((activeControllerType == Controller.LHand) || (activeControllerType == Controller.RHand))
- {
- if ((connectedControllerTypes & Controller.Hands) == Controller.Hands)
- {
- // If either Hand controller is Active and both Hand controllers are connected, set both to Active.
- activeControllerType = Controller.Hands;
- }
- }
- if ((connectedControllerTypes & activeControllerType) == 0)
- {
- activeControllerType = Controller.None;
- }
- // Promote TrackedRemote to Active if one is connected and no other controller is active
- if (activeControllerType == Controller.None)
- {
- if ((connectedControllerTypes & Controller.RTrackedRemote) != 0)
- {
- activeControllerType = Controller.RTrackedRemote;
- }
- else if ((connectedControllerTypes & Controller.LTrackedRemote) != 0)
- {
- activeControllerType = Controller.LTrackedRemote;
- }
- }
- if ( OVRManager.loadedXRDevice == OVRManager.XRDevice.Oculus && pluginSupportsActiveController)
- {
- // override locally derived active and connected controllers if plugin provides more accurate data
- connectedControllerTypes = (OVRInput.Controller)OVRPlugin.GetConnectedControllers();
- activeControllerType = (OVRInput.Controller)OVRPlugin.GetActiveController();
- }
- else if (OVRManager.loadedXRDevice == OVRManager.XRDevice.OpenVR)
- {
- activeControllerType = connectedControllerTypes;
- }
- }
- /// <summary>
- /// Updates the internal physics state of OVRInput. Must be called manually if used independently from OVRManager.
- /// </summary>
- public static void FixedUpdate()
- {
- stepType = OVRPlugin.Step.Physics;
- double predictionSeconds = (double)fixedUpdateCount * Time.fixedDeltaTime / Mathf.Max(Time.timeScale, 1e-6f);
- fixedUpdateCount++;
- OVRPlugin.UpdateNodePhysicsPoses(0, predictionSeconds);
- }
- /// <summary>
- /// Returns true if the given Controller's orientation is currently tracked.
- /// Only supported for Oculus LTouch and RTouch controllers. Non-tracked controllers will return false.
- /// </summary>
- public static bool GetControllerOrientationTracked(OVRInput.Controller controllerType)
- {
- switch (controllerType)
- {
- case Controller.LTouch:
- case Controller.LTrackedRemote:
- case Controller.LHand:
- return OVRPlugin.GetNodeOrientationTracked(OVRPlugin.Node.HandLeft);
- case Controller.RTouch:
- case Controller.RTrackedRemote:
- case Controller.RHand:
- return OVRPlugin.GetNodeOrientationTracked(OVRPlugin.Node.HandRight);
- default:
- return false;
- }
- }
- /// <summary>
- /// Returns true if the given Controller's orientation is currently valid.
- /// Only supported for Oculus LTouch and RTouch controllers. Non-tracked controllers will return false.
- /// </summary>
- public static bool GetControllerOrientationValid(OVRInput.Controller controllerType)
- {
- switch (controllerType)
- {
- case Controller.LTouch:
- case Controller.LTrackedRemote:
- case Controller.LHand:
- return OVRPlugin.GetNodeOrientationValid(OVRPlugin.Node.HandLeft);
- case Controller.RTouch:
- case Controller.RTrackedRemote:
- case Controller.RHand:
- return OVRPlugin.GetNodeOrientationValid(OVRPlugin.Node.HandRight);
- default:
- return false;
- }
- }
- /// <summary>
- /// Returns true if the given Controller's position is currently tracked.
- /// Only supported for Oculus LTouch and RTouch controllers. Non-tracked controllers will return false.
- /// </summary>
- public static bool GetControllerPositionTracked(OVRInput.Controller controllerType)
- {
- switch (controllerType)
- {
- case Controller.LTouch:
- case Controller.LTrackedRemote:
- case Controller.LHand:
- return OVRPlugin.GetNodePositionTracked(OVRPlugin.Node.HandLeft);
- case Controller.RTouch:
- case Controller.RTrackedRemote:
- case Controller.RHand:
- return OVRPlugin.GetNodePositionTracked(OVRPlugin.Node.HandRight);
- default:
- return false;
- }
- }
- /// <summary>
- /// Returns true if the given Controller's position is currently valid.
- /// Only supported for Oculus LTouch and RTouch controllers. Non-tracked controllers will return false.
- /// </summary>
- public static bool GetControllerPositionValid(OVRInput.Controller controllerType)
- {
- switch (controllerType)
- {
- case Controller.LTouch:
- case Controller.LTrackedRemote:
- case Controller.LHand:
- return OVRPlugin.GetNodePositionValid(OVRPlugin.Node.HandLeft);
- case Controller.RTouch:
- case Controller.RTrackedRemote:
- case Controller.RHand:
- return OVRPlugin.GetNodePositionValid(OVRPlugin.Node.HandRight);
- default:
- return false;
- }
- }
- /// <summary>
- /// Gets the position of the given Controller local to its tracking space.
- /// Only supported for Oculus LTouch and RTouch controllers. Non-tracked controllers will return Vector3.zero.
- /// </summary>
- public static Vector3 GetLocalControllerPosition(OVRInput.Controller controllerType)
- {
- switch (controllerType)
- {
- case Controller.LTouch:
- case Controller.LTrackedRemote:
- case Controller.LHand:
- if (OVRManager.loadedXRDevice == OVRManager.XRDevice.Oculus)
- return OVRPlugin.GetNodePose(OVRPlugin.Node.HandLeft, stepType).ToOVRPose().position;
- else if (OVRManager.loadedXRDevice == OVRManager.XRDevice.OpenVR)
- return openVRControllerDetails[0].localPosition;
- else
- {
- Vector3 retVec;
- if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.LeftHand, NodeStatePropertyType.Position, OVRPlugin.Node.HandLeft, stepType, out retVec))
- return retVec;
- return Vector3.zero; //Will never be hit, but is a final fallback.
- }
- case Controller.RTouch:
- case Controller.RTrackedRemote:
- case Controller.RHand:
- if (OVRManager.loadedXRDevice == OVRManager.XRDevice.Oculus)
- return OVRPlugin.GetNodePose(OVRPlugin.Node.HandRight, stepType).ToOVRPose().position;
- else if (OVRManager.loadedXRDevice == OVRManager.XRDevice.OpenVR)
- return openVRControllerDetails[1].localPosition;
- else
- {
- Vector3 retVec;
- if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.RightHand, NodeStatePropertyType.Position, OVRPlugin.Node.HandRight, stepType, out retVec))
- return retVec;
- return Vector3.zero;
- }
- default:
- return Vector3.zero;
- }
- }
- /// <summary>
- /// Gets the linear velocity of the given Controller local to its tracking space.
- /// Only supported for Oculus LTouch and RTouch controllers. Non-tracked controllers will return Vector3.zero.
- /// </summary>
- public static Vector3 GetLocalControllerVelocity(OVRInput.Controller controllerType)
- {
- Vector3 velocity = Vector3.zero;
- switch (controllerType)
- {
- case Controller.LTouch:
- case Controller.LTrackedRemote:
- case Controller.LHand:
- if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.LeftHand, NodeStatePropertyType.Velocity, OVRPlugin.Node.HandLeft, stepType, out velocity))
- {
- return velocity;
- }
- else
- {
- return Vector3.zero;
- }
- case Controller.RTouch:
- case Controller.RTrackedRemote:
- case Controller.RHand:
- if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.RightHand, NodeStatePropertyType.Velocity, OVRPlugin.Node.HandRight, stepType, out velocity))
- {
- return velocity;
- }
- else
- {
- return Vector3.zero;
- }
- default:
- return Vector3.zero;
- }
- }
- /// <summary>
- /// Gets the linear acceleration of the given Controller local to its tracking space.
- /// Only supported for Oculus LTouch and RTouch controllers. Non-tracked controllers will return Vector3.zero.
- /// </summary>
- public static Vector3 GetLocalControllerAcceleration(OVRInput.Controller controllerType)
- {
- Vector3 accel = Vector3.zero;
- switch (controllerType)
- {
- case Controller.LTouch:
- case Controller.LTrackedRemote:
- case Controller.LHand:
- if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.LeftHand, NodeStatePropertyType.Acceleration, OVRPlugin.Node.HandLeft, stepType, out accel))
- {
- return accel;
- }
- else
- {
- return Vector3.zero;
- }
- case Controller.RTouch:
- case Controller.RTrackedRemote:
- case Controller.RHand:
- if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.RightHand, NodeStatePropertyType.Acceleration, OVRPlugin.Node.HandRight, stepType, out accel))
- {
- return accel;
- }
- else
- {
- return Vector3.zero;
- }
- default:
- return Vector3.zero;
- }
- }
- /// <summary>
- /// Gets the rotation of the given Controller local to its tracking space.
- /// Only supported for Oculus LTouch and RTouch controllers. Non-tracked controllers will return Quaternion.identity.
- /// </summary>
- public static Quaternion GetLocalControllerRotation(OVRInput.Controller controllerType)
- {
- switch (controllerType)
- {
- case Controller.LTouch:
- case Controller.LTrackedRemote:
- case Controller.LHand:
- if (OVRManager.loadedXRDevice == OVRManager.XRDevice.Oculus)
- return OVRPlugin.GetNodePose(OVRPlugin.Node.HandLeft, stepType).ToOVRPose().orientation;
- else if (OVRManager.loadedXRDevice == OVRManager.XRDevice.OpenVR)
- return openVRControllerDetails[0].localOrientation;
- else
- {
- Quaternion retQuat;
- if (OVRNodeStateProperties.GetNodeStatePropertyQuaternion(Node.LeftHand, NodeStatePropertyType.Orientation, OVRPlugin.Node.HandLeft, stepType, out retQuat))
- return retQuat;
- return Quaternion.identity;
- }
- case Controller.RTouch:
- case Controller.RTrackedRemote:
- case Controller.RHand:
- if (OVRManager.loadedXRDevice == OVRManager.XRDevice.Oculus)
- return OVRPlugin.GetNodePose(OVRPlugin.Node.HandRight, stepType).ToOVRPose().orientation;
- else if (OVRManager.loadedXRDevice == OVRManager.XRDevice.OpenVR)
- return openVRControllerDetails[1].localOrientation;
- else
- {
- Quaternion retQuat;
- if (OVRNodeStateProperties.GetNodeStatePropertyQuaternion(Node.RightHand, NodeStatePropertyType.Orientation, OVRPlugin.Node.HandRight, stepType, out retQuat))
- return retQuat;
- return Quaternion.identity;
- }
- default:
- return Quaternion.identity;
- }
- }
- /// <summary>
- /// Gets the angular velocity of the given Controller local to its tracking space in radians per second around each axis.
- /// Only supported for Oculus LTouch and RTouch controllers. Non-tracked controllers will return Vector3.zero.
- /// </summary>
- public static Vector3 GetLocalControllerAngularVelocity(OVRInput.Controller controllerType)
- {
- Vector3 velocity = Vector3.zero;
- switch (controllerType)
- {
- case Controller.LTouch:
- case Controller.LTrackedRemote:
- case Controller.LHand:
- if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.LeftHand, NodeStatePropertyType.AngularVelocity, OVRPlugin.Node.HandLeft, stepType, out velocity))
- {
- return velocity;
- }
- else
- {
- return Vector3.zero;
- }
- case Controller.RTouch:
- case Controller.RTrackedRemote:
- case Controller.RHand:
- if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.RightHand, NodeStatePropertyType.AngularVelocity, OVRPlugin.Node.HandRight, stepType, out velocity))
- {
- return velocity;
- }
- else
- {
- return Vector3.zero;
- }
- default:
- return Vector3.zero;
- }
- }
- /// <summary>
- /// Gets the angular acceleration of the given Controller local to its tracking space in radians per second per second around each axis.
- /// Only supported for Oculus LTouch and RTouch controllers. Non-tracked controllers will return Vector3.zero.
- /// </summary>
- public static Vector3 GetLocalControllerAngularAcceleration(OVRInput.Controller controllerType)
- {
- Vector3 accel = Vector3.zero;
- switch (controllerType)
- {
- case Controller.LTouch:
- case Controller.LTrackedRemote:
- case Controller.LHand:
- if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.LeftHand, NodeStatePropertyType.AngularAcceleration, OVRPlugin.Node.HandLeft, stepType, out accel))
- {
- return accel;
- }
- else
- {
- return Vector3.zero;
- }
- case Controller.RTouch:
- case Controller.RTrackedRemote:
- case Controller.RHand:
- if (OVRNodeStateProperties.GetNodeStatePropertyVector3(Node.RightHand, NodeStatePropertyType.AngularAcceleration, OVRPlugin.Node.HandRight, stepType, out accel))
- {
- return accel;
- }
- else
- {
- return Vector3.zero;
- }
- default:
- return Vector3.zero;
- }
- }
- /// <summary>
- /// Gets the dominant hand that the user has specified in settings, for mobile devices.
- /// </summary>
- public static Handedness GetDominantHand()
- {
- return (Handedness) OVRPlugin.GetDominantHand();
- }
- /// <summary>
- /// Gets the current state of the given virtual button mask with the given controller mask.
- /// Returns true if any masked button is down on any masked controller.
- /// </summary>
- public static bool Get(Button virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedButton(virtualMask, RawButton.None, controllerMask);
- }
- /// <summary>
- /// Gets the current state of the given raw button mask with the given controller mask.
- /// Returns true if any masked button is down on any masked controllers.
- /// </summary>
- public static bool Get(RawButton rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedButton(Button.None, rawMask, controllerMask);
- }
- private static bool GetResolvedButton(Button virtualMask, RawButton rawMask, Controller controllerMask)
- {
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawButton resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if (((RawButton)controller.currentState.Buttons & resolvedMask) != 0)
- {
- return true;
- }
- }
- }
- return false;
- }
- /// <summary>
- /// Gets the current down state of the given virtual button mask with the given controller mask.
- /// Returns true if any masked button was pressed this frame on any masked controller and no masked button was previously down last frame.
- /// </summary>
- public static bool GetDown(Button virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedButtonDown(virtualMask, RawButton.None, controllerMask);
- }
- /// <summary>
- /// Gets the current down state of the given raw button mask with the given controller mask.
- /// Returns true if any masked button was pressed this frame on any masked controller and no masked button was previously down last frame.
- /// </summary>
- public static bool GetDown(RawButton rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedButtonDown(Button.None, rawMask, controllerMask);
- }
- private static bool GetResolvedButtonDown(Button virtualMask, RawButton rawMask, Controller controllerMask)
- {
- bool down = false;
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawButton resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if (((RawButton)controller.previousState.Buttons & resolvedMask) != 0)
- {
- return false;
- }
- if ((((RawButton)controller.currentState.Buttons & resolvedMask) != 0)
- && (((RawButton)controller.previousState.Buttons & resolvedMask) == 0))
- {
- down = true;
- }
- }
- }
- return down;
- }
- /// <summary>
- /// Gets the current up state of the given virtual button mask with the given controller mask.
- /// Returns true if any masked button was released this frame on any masked controller and no other masked button is still down this frame.
- /// </summary>
- public static bool GetUp(Button virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedButtonUp(virtualMask, RawButton.None, controllerMask);
- }
- /// <summary>
- /// Gets the current up state of the given raw button mask with the given controller mask.
- /// Returns true if any masked button was released this frame on any masked controller and no other masked button is still down this frame.
- /// </summary>
- public static bool GetUp(RawButton rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedButtonUp(Button.None, rawMask, controllerMask);
- }
- private static bool GetResolvedButtonUp(Button virtualMask, RawButton rawMask, Controller controllerMask)
- {
- bool up = false;
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawButton resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if (((RawButton)controller.currentState.Buttons & resolvedMask) != 0)
- {
- return false;
- }
- if ((((RawButton)controller.currentState.Buttons & resolvedMask) == 0)
- && (((RawButton)controller.previousState.Buttons & resolvedMask) != 0))
- {
- up = true;
- }
- }
- }
- return up;
- }
- /// <summary>
- /// Gets the current state of the given virtual touch mask with the given controller mask.
- /// Returns true if any masked touch is down on any masked controller.
- /// </summary>
- public static bool Get(Touch virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedTouch(virtualMask, RawTouch.None, controllerMask);
- }
- /// <summary>
- /// Gets the current state of the given raw touch mask with the given controller mask.
- /// Returns true if any masked touch is down on any masked controllers.
- /// </summary>
- public static bool Get(RawTouch rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedTouch(Touch.None, rawMask, controllerMask);
- }
- private static bool GetResolvedTouch(Touch virtualMask, RawTouch rawMask, Controller controllerMask)
- {
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawTouch resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if (((RawTouch)controller.currentState.Touches & resolvedMask) != 0)
- {
- return true;
- }
- }
- }
- return false;
- }
- /// <summary>
- /// Gets the current down state of the given virtual touch mask with the given controller mask.
- /// Returns true if any masked touch was pressed this frame on any masked controller and no masked touch was previously down last frame.
- /// </summary>
- public static bool GetDown(Touch virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedTouchDown(virtualMask, RawTouch.None, controllerMask);
- }
- /// <summary>
- /// Gets the current down state of the given raw touch mask with the given controller mask.
- /// Returns true if any masked touch was pressed this frame on any masked controller and no masked touch was previously down last frame.
- /// </summary>
- public static bool GetDown(RawTouch rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedTouchDown(Touch.None, rawMask, controllerMask);
- }
- private static bool GetResolvedTouchDown(Touch virtualMask, RawTouch rawMask, Controller controllerMask)
- {
- bool down = false;
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawTouch resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if (((RawTouch)controller.previousState.Touches & resolvedMask) != 0)
- {
- return false;
- }
- if ((((RawTouch)controller.currentState.Touches & resolvedMask) != 0)
- && (((RawTouch)controller.previousState.Touches & resolvedMask) == 0))
- {
- down = true;
- }
- }
- }
- return down;
- }
- /// <summary>
- /// Gets the current up state of the given virtual touch mask with the given controller mask.
- /// Returns true if any masked touch was released this frame on any masked controller and no other masked touch is still down this frame.
- /// </summary>
- public static bool GetUp(Touch virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedTouchUp(virtualMask, RawTouch.None, controllerMask);
- }
- /// <summary>
- /// Gets the current up state of the given raw touch mask with the given controller mask.
- /// Returns true if any masked touch was released this frame on any masked controller and no other masked touch is still down this frame.
- /// </summary>
- public static bool GetUp(RawTouch rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedTouchUp(Touch.None, rawMask, controllerMask);
- }
- private static bool GetResolvedTouchUp(Touch virtualMask, RawTouch rawMask, Controller controllerMask)
- {
- bool up = false;
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawTouch resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if (((RawTouch)controller.currentState.Touches & resolvedMask) != 0)
- {
- return false;
- }
- if ((((RawTouch)controller.currentState.Touches & resolvedMask) == 0)
- && (((RawTouch)controller.previousState.Touches & resolvedMask) != 0))
- {
- up = true;
- }
- }
- }
- return up;
- }
- /// <summary>
- /// Gets the current state of the given virtual near touch mask with the given controller mask.
- /// Returns true if any masked near touch is down on any masked controller.
- /// </summary>
- public static bool Get(NearTouch virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedNearTouch(virtualMask, RawNearTouch.None, controllerMask);
- }
- /// <summary>
- /// Gets the current state of the given raw near touch mask with the given controller mask.
- /// Returns true if any masked near touch is down on any masked controllers.
- /// </summary>
- public static bool Get(RawNearTouch rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedNearTouch(NearTouch.None, rawMask, controllerMask);
- }
- private static bool GetResolvedNearTouch(NearTouch virtualMask, RawNearTouch rawMask, Controller controllerMask)
- {
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawNearTouch resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if (((RawNearTouch)controller.currentState.NearTouches & resolvedMask) != 0)
- {
- return true;
- }
- }
- }
- return false;
- }
- /// <summary>
- /// Gets the current down state of the given virtual near touch mask with the given controller mask.
- /// Returns true if any masked near touch was pressed this frame on any masked controller and no masked near touch was previously down last frame.
- /// </summary>
- public static bool GetDown(NearTouch virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedNearTouchDown(virtualMask, RawNearTouch.None, controllerMask);
- }
- /// <summary>
- /// Gets the current down state of the given raw near touch mask with the given controller mask.
- /// Returns true if any masked near touch was pressed this frame on any masked controller and no masked near touch was previously down last frame.
- /// </summary>
- public static bool GetDown(RawNearTouch rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedNearTouchDown(NearTouch.None, rawMask, controllerMask);
- }
- private static bool GetResolvedNearTouchDown(NearTouch virtualMask, RawNearTouch rawMask, Controller controllerMask)
- {
- bool down = false;
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawNearTouch resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if (((RawNearTouch)controller.previousState.NearTouches & resolvedMask) != 0)
- {
- return false;
- }
- if ((((RawNearTouch)controller.currentState.NearTouches & resolvedMask) != 0)
- && (((RawNearTouch)controller.previousState.NearTouches & resolvedMask) == 0))
- {
- down = true;
- }
- }
- }
- return down;
- }
- /// <summary>
- /// Gets the current up state of the given virtual near touch mask with the given controller mask.
- /// Returns true if any masked near touch was released this frame on any masked controller and no other masked near touch is still down this frame.
- /// </summary>
- public static bool GetUp(NearTouch virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedNearTouchUp(virtualMask, RawNearTouch.None, controllerMask);
- }
- /// <summary>
- /// Gets the current up state of the given raw near touch mask with the given controller mask.
- /// Returns true if any masked near touch was released this frame on any masked controller and no other masked near touch is still down this frame.
- /// </summary>
- public static bool GetUp(RawNearTouch rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedNearTouchUp(NearTouch.None, rawMask, controllerMask);
- }
- private static bool GetResolvedNearTouchUp(NearTouch virtualMask, RawNearTouch rawMask, Controller controllerMask)
- {
- bool up = false;
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawNearTouch resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if (((RawNearTouch)controller.currentState.NearTouches & resolvedMask) != 0)
- {
- return false;
- }
- if ((((RawNearTouch)controller.currentState.NearTouches & resolvedMask) == 0)
- && (((RawNearTouch)controller.previousState.NearTouches & resolvedMask) != 0))
- {
- up = true;
- }
- }
- }
- return up;
- }
- /// <summary>
- /// Gets the current state of the given virtual 1-dimensional axis mask on the given controller mask.
- /// Returns the value of the largest masked axis across all masked controllers. Values range from 0 to 1.
- /// </summary>
- public static float Get(Axis1D virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedAxis1D(virtualMask, RawAxis1D.None, controllerMask);
- }
- /// <summary>
- /// Gets the current state of the given raw 1-dimensional axis mask on the given controller mask.
- /// Returns the value of the largest masked axis across all masked controllers. Values range from 0 to 1.
- /// </summary>
- public static float Get(RawAxis1D rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedAxis1D(Axis1D.None, rawMask, controllerMask);
- }
- private static float GetResolvedAxis1D(Axis1D virtualMask, RawAxis1D rawMask, Controller controllerMask)
- {
- float maxAxis = 0.0f;
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (OVRManager.loadedXRDevice != OVRManager.XRDevice.Oculus)
- controller.shouldApplyDeadzone = false;
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawAxis1D resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if ((RawAxis1D.LIndexTrigger & resolvedMask) != 0)
- {
- float axis = controller.currentState.LIndexTrigger;
- if (controller.shouldApplyDeadzone)
- axis = CalculateDeadzone(axis, AXIS_DEADZONE_THRESHOLD);
- maxAxis = CalculateAbsMax(maxAxis, axis);
- }
- if ((RawAxis1D.RIndexTrigger & resolvedMask) != 0)
- {
- float axis = controller.currentState.RIndexTrigger;
- if (controller.shouldApplyDeadzone)
- axis = CalculateDeadzone(axis, AXIS_DEADZONE_THRESHOLD);
- maxAxis = CalculateAbsMax(maxAxis, axis);
- }
- if ((RawAxis1D.LHandTrigger & resolvedMask) != 0)
- {
- float axis = controller.currentState.LHandTrigger;
- if (controller.shouldApplyDeadzone)
- axis = CalculateDeadzone(axis, AXIS_DEADZONE_THRESHOLD);
- maxAxis = CalculateAbsMax(maxAxis, axis);
- }
- if ((RawAxis1D.RHandTrigger & resolvedMask) != 0)
- {
- float axis = controller.currentState.RHandTrigger;
- if (controller.shouldApplyDeadzone)
- axis = CalculateDeadzone(axis, AXIS_DEADZONE_THRESHOLD);
- maxAxis = CalculateAbsMax(maxAxis, axis);
- }
- }
- }
- return maxAxis;
- }
- /// <summary>
- /// Gets the current state of the given virtual 2-dimensional axis mask on the given controller mask.
- /// Returns the vector of the largest masked axis across all masked controllers. Values range from -1 to 1.
- /// </summary>
- public static Vector2 Get(Axis2D virtualMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedAxis2D(virtualMask, RawAxis2D.None, controllerMask);
- }
- /// <summary>
- /// Gets the current state of the given raw 2-dimensional axis mask on the given controller mask.
- /// Returns the vector of the largest masked axis across all masked controllers. Values range from -1 to 1.
- /// </summary>
- public static Vector2 Get(RawAxis2D rawMask, Controller controllerMask = Controller.Active)
- {
- return GetResolvedAxis2D(Axis2D.None, rawMask, controllerMask);
- }
- private static Vector2 GetResolvedAxis2D(Axis2D virtualMask, RawAxis2D rawMask, Controller controllerMask)
- {
- Vector2 maxAxis = Vector2.zero;
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (OVRManager.loadedXRDevice != OVRManager.XRDevice.Oculus)
- controller.shouldApplyDeadzone = false;
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- RawAxis2D resolvedMask = rawMask | controller.ResolveToRawMask(virtualMask);
- if ((RawAxis2D.LThumbstick & resolvedMask) != 0)
- {
- Vector2 axis = new Vector2(
- controller.currentState.LThumbstick.x,
- controller.currentState.LThumbstick.y);
- if (controller.shouldApplyDeadzone)
- axis = CalculateDeadzone(axis, AXIS_DEADZONE_THRESHOLD);
- maxAxis = CalculateAbsMax(maxAxis, axis);
- }
- if ((RawAxis2D.LTouchpad & resolvedMask) != 0)
- {
- Vector2 axis = new Vector2(
- controller.currentState.LTouchpad.x,
- controller.currentState.LTouchpad.y);
- //if (controller.shouldApplyDeadzone)
- // axis = CalculateDeadzone(axis, AXIS_DEADZONE_THRESHOLD);
- maxAxis = CalculateAbsMax(maxAxis, axis);
- }
- if ((RawAxis2D.RThumbstick & resolvedMask) != 0)
- {
- Vector2 axis = new Vector2(
- controller.currentState.RThumbstick.x,
- controller.currentState.RThumbstick.y);
- if (controller.shouldApplyDeadzone)
- axis = CalculateDeadzone(axis, AXIS_DEADZONE_THRESHOLD);
- maxAxis = CalculateAbsMax(maxAxis, axis);
- }
- if ((RawAxis2D.RTouchpad & resolvedMask) != 0)
- {
- Vector2 axis = new Vector2(
- controller.currentState.RTouchpad.x,
- controller.currentState.RTouchpad.y);
- //if (controller.shouldApplyDeadzone)
- // axis = CalculateDeadzone(axis, AXIS_DEADZONE_THRESHOLD);
- maxAxis = CalculateAbsMax(maxAxis, axis);
- }
- }
- }
- return maxAxis;
- }
- /// <summary>
- /// Returns a mask of all currently connected controller types.
- /// </summary>
- public static Controller GetConnectedControllers()
- {
- return connectedControllerTypes;
- }
- /// <summary>
- /// Returns true if the specified controller type is currently connected.
- /// </summary>
- public static bool IsControllerConnected(Controller controller)
- {
- return (connectedControllerTypes & controller) == controller;
- }
- /// <summary>
- /// Returns the current active controller type.
- /// </summary>
- public static Controller GetActiveController()
- {
- return activeControllerType;
- }
- private static void StartVibration(float amplitude, float duration, Node controllerNode)
- {
- int index = (controllerNode == Node.LeftHand) ? 0 : 1;
- hapticInfos[index].hapticsDurationPlayed = 0.0f;
- hapticInfos[index].hapticAmplitude = amplitude;
- hapticInfos[index].hapticsDuration = duration;
- hapticInfos[index].playingHaptics = (amplitude != 0.0f);
- hapticInfos[index].node = controllerNode;
- if (amplitude <= 0.0f || duration <= 0.0f)
- {
- hapticInfos[index].playingHaptics = false;
- }
- }
- private static int NUM_HAPTIC_CHANNELS = 2;
- private static HapticInfo[] hapticInfos;
- private static float OPENVR_MAX_HAPTIC_AMPLITUDE = 4000.0f;
- private static float HAPTIC_VIBRATION_DURATION_SECONDS = 2.0f;
- private static String OPENVR_TOUCH_NAME = "oculus_touch";
- private static String OPENVR_VIVE_CONTROLLER_NAME = "vive_controller";
- private static String OPENVR_WINDOWSMR_CONTROLLER_NAME = "holographic_controller";
- [Flags]
- /// OpenVR Controller Enum
- public enum OpenVRController : ulong
- {
- Unknown = 0,
- OculusTouch = 1,
- ViveController = 2,
- WindowsMRController = 3
- }
- [StructLayout(LayoutKind.Sequential)]
- public struct OpenVRControllerDetails
- {
- public OVR.OpenVR.VRControllerState_t state;
- public OpenVRController controllerType;
- public uint deviceID;
- public Vector3 localPosition; //Position relative to Tracking Space
- public Quaternion localOrientation; //Orientation relative to Tracking Space
- }
- public static OpenVRControllerDetails[] openVRControllerDetails = new OpenVRControllerDetails[2];
- private class HapticInfo
- {
- public bool playingHaptics;
- public float hapticsDurationPlayed;
- public float hapticsDuration;
- public float hapticAmplitude;
- public Node node;
- }
- /// <summary>
- /// Sets OpenVR left and right controller poses local to tracking space
- /// </summary>
- public static void SetOpenVRLocalPose(Vector3 leftPos, Vector3 rightPos, Quaternion leftRot, Quaternion rightRot)
- {
- openVRControllerDetails[0].localPosition = leftPos;
- openVRControllerDetails[0].localOrientation = leftRot;
- openVRControllerDetails[1].localPosition = rightPos;
- openVRControllerDetails[1].localOrientation = rightRot;
- }
- /// <summary>
- /// Accesses OpenVR properties about a given deviceID. Especially useful for differentiating per type of OpenVR device (i.e. Oculus, Vive)
- /// </summary>
- public static string GetOpenVRStringProperty(OVR.OpenVR.ETrackedDeviceProperty prop, uint deviceId = OVR.OpenVR.OpenVR.k_unTrackedDeviceIndex_Hmd)
- {
- OVR.OpenVR.ETrackedPropertyError error = OVR.OpenVR.ETrackedPropertyError.TrackedProp_Success;
- OVR.OpenVR.CVRSystem system = OVR.OpenVR.OpenVR.System;
- if (system != null)
- {
- uint capacity = system.GetStringTrackedDeviceProperty(deviceId, prop, null, 0, ref error);
- if (capacity > 1)
- {
- var result = new System.Text.StringBuilder((int)capacity);
- system.GetStringTrackedDeviceProperty(deviceId, prop, result, capacity, ref error);
- return result.ToString();
- }
- return (error != OVR.OpenVR.ETrackedPropertyError.TrackedProp_Success) ? error.ToString() : "<unknown>";
- }
- return "";
- }
- /// <summary>
- /// Associates OpenVR device IDs with left and right motion controllers, for later haptic playback.
- /// </summary>
- private static void UpdateXRControllerNodeIds()
- {
- if (OVRManager.loadedXRDevice == OVRManager.XRDevice.OpenVR)
- {
- openVRControllerDetails[0].deviceID = OVR.OpenVR.OpenVR.k_unMaxTrackedDeviceCount;
- openVRControllerDetails[1].deviceID = OVR.OpenVR.OpenVR.k_unMaxTrackedDeviceCount;
- OVR.OpenVR.CVRSystem system = OVR.OpenVR.OpenVR.System;
- if (system != null)
- {
- for (uint id = 0; id < OVR.OpenVR.OpenVR.k_unMaxTrackedDeviceCount; id++)
- {
- OVR.OpenVR.ETrackedDeviceClass deviceClass = system.GetTrackedDeviceClass(id);
- if (deviceClass == OVR.OpenVR.ETrackedDeviceClass.Controller && system.IsTrackedDeviceConnected(id))
- {
- OpenVRController controllerType;
- String controllerName = GetOpenVRStringProperty(OVR.OpenVR.ETrackedDeviceProperty.Prop_ControllerType_String, id);
- if (controllerName == OPENVR_TOUCH_NAME)
- controllerType = OpenVRController.OculusTouch;
- else if (controllerName == OPENVR_VIVE_CONTROLLER_NAME)
- controllerType = OpenVRController.ViveController;
- else if (controllerName == OPENVR_WINDOWSMR_CONTROLLER_NAME)
- controllerType = OpenVRController.WindowsMRController;
- else
- controllerType = OpenVRController.Unknown;
- OVR.OpenVR.ETrackedControllerRole role = system.GetControllerRoleForTrackedDeviceIndex(id);
- if (role == OVR.OpenVR.ETrackedControllerRole.LeftHand)
- {
- system.GetControllerState(id, ref openVRControllerDetails[0].state, (uint)Marshal.SizeOf(typeof(OVR.OpenVR.VRControllerState_t)));
- openVRControllerDetails[0].deviceID = id;
- openVRControllerDetails[0].controllerType = controllerType;
- connectedControllerTypes |= Controller.LTouch;
- }
- else if (role == OVR.OpenVR.ETrackedControllerRole.RightHand)
- {
- system.GetControllerState(id, ref openVRControllerDetails[1].state, (uint)Marshal.SizeOf(typeof(OVR.OpenVR.VRControllerState_t)));
- openVRControllerDetails[1].deviceID = id;
- openVRControllerDetails[1].controllerType = controllerType;
- connectedControllerTypes |= Controller.RTouch;
- }
- }
- }
- }
- }
- }
- /// <summary>
- /// Runs once a frame to update cross-platform haptic playback
- /// </summary>
- private static void UpdateXRControllerHaptics()
- {
- if (OVRManager.loadedXRDevice == OVRManager.XRDevice.OpenVR)
- {
- for (int i = 0; i < NUM_HAPTIC_CHANNELS; i++)
- {
- if (hapticInfos[i].playingHaptics)
- {
- hapticInfos[i].hapticsDurationPlayed += Time.deltaTime;
- PlayHapticImpulse(hapticInfos[i].hapticAmplitude, hapticInfos[i].node);
- if (hapticInfos[i].hapticsDurationPlayed >= hapticInfos[i].hapticsDuration)
- {
- hapticInfos[i].playingHaptics = false;
- }
- }
- }
- }
- }
- private static void InitHapticInfo()
- {
- hapticInfos = new HapticInfo[NUM_HAPTIC_CHANNELS];
- for (int i = 0; i < NUM_HAPTIC_CHANNELS; i++)
- {
- hapticInfos[i] = new HapticInfo();
- }
- }
- private static void PlayHapticImpulse(float amplitude, Node deviceNode)
- {
- OVR.OpenVR.CVRSystem system = OVR.OpenVR.OpenVR.System;
- if (system != null && amplitude != 0.0f)
- {
- uint controllerId = (deviceNode == Node.LeftHand) ? openVRControllerDetails[0].deviceID : openVRControllerDetails[1].deviceID;
- if (IsValidOpenVRDevice(controllerId))
- system.TriggerHapticPulse(controllerId, 0, (char)(OPENVR_MAX_HAPTIC_AMPLITUDE * amplitude));
- }
- }
- private static bool IsValidOpenVRDevice(uint deviceId)
- {
- return (deviceId >= 0 && deviceId < OVR.OpenVR.OpenVR.k_unMaxTrackedDeviceCount);
- }
- /// <summary>
- /// Activates vibration with the given frequency and amplitude with the given controller mask.
- /// Ignored on controllers that do not support vibration. Expected values range from 0 to 1.
- /// </summary>
- public static void SetControllerVibration(float frequency, float amplitude, Controller controllerMask = Controller.Active)
- {
- if (OVRManager.loadedXRDevice == OVRManager.XRDevice.Oculus)
- {
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- controller.SetControllerVibration(frequency, amplitude);
- }
- }
- }
- else if (OVRManager.loadedXRDevice == OVRManager.XRDevice.OpenVR)
- {
- if (controllerMask == Controller.LTouch || controllerMask == Controller.RTouch)
- {
- Node controllerNode = (controllerMask == Controller.LTouch) ? Node.LeftHand : Node.RightHand;
- StartVibration(amplitude, HAPTIC_VIBRATION_DURATION_SECONDS, controllerNode);
- }
- }
- }
- /// <summary>
- /// Triggers a recenter to realign the specified controller's virtual pose with the user's real-world pose.
- /// Only applicable to controllers that require recentering, such as the GearVR Controller.
- /// Ignored for controllers that do not require recentering.
- /// </summary>
- public static void RecenterController(Controller controllerMask = Controller.Active)
- {
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- controller.RecenterController();
- }
- }
- }
- /// <summary>
- /// Returns true if the specified controller was recentered this frame.
- /// Only applicable to controllers that require recentering, such as the GearVR Controller.
- /// Returns false for controllers that do not require recentering.
- /// </summary>
- public static bool GetControllerWasRecentered(Controller controllerMask = Controller.Active)
- {
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- bool wasRecentered = false;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- wasRecentered |= controller.WasRecentered();
- }
- }
- return wasRecentered;
- }
- /// <summary>
- /// Returns the number of times the controller has been recentered this session.
- /// Useful for detecting recenter events and resetting state such as arm model simulations, etc.
- /// Wraps around to 0 after 255.
- /// Only applicable to controllers that require recentering, such as the GearVR Controller.
- /// Returns 0 for controllers that do not require recentering.
- /// </summary>
- public static byte GetControllerRecenterCount(Controller controllerMask = Controller.Active)
- {
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- byte recenterCount = 0;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- recenterCount = controller.GetRecenterCount();
- break;
- }
- }
- return recenterCount;
- }
- /// <summary>
- /// Returns the battery percentage remaining for the specified controller. Values range from 0 to 100.
- /// Only applicable to controllers that report battery level, such as the GearVR Controller.
- /// Returns 0 for controllers that do not report battery level.
- /// </summary>
- public static byte GetControllerBatteryPercentRemaining(Controller controllerMask = Controller.Active)
- {
- if ((controllerMask & Controller.Active) != 0)
- controllerMask |= activeControllerType;
- byte battery = 0;
- for (int i = 0; i < controllers.Count; i++)
- {
- OVRControllerBase controller = controllers[i];
- if (ShouldResolveController(controller.controllerType, controllerMask))
- {
- battery = controller.GetBatteryPercentRemaining();
- break;
- }
- }
- return battery;
- }
- private static Vector2 CalculateAbsMax(Vector2 a, Vector2 b)
- {
- float absA = a.sqrMagnitude;
- float absB = b.sqrMagnitude;
- if (absA >= absB)
- return a;
- return b;
- }
- private static float CalculateAbsMax(float a, float b)
- {
- float absA = (a >= 0) ? a : -a;
- float absB = (b >= 0) ? b : -b;
- if (absA >= absB)
- return a;
- return b;
- }
- private static Vector2 CalculateDeadzone(Vector2 a, float deadzone)
- {
- if (a.sqrMagnitude <= (deadzone * deadzone))
- return Vector2.zero;
- a *= ((a.magnitude - deadzone) / (1.0f - deadzone));
- if (a.sqrMagnitude > 1.0f)
- return a.normalized;
- return a;
- }
- private static float CalculateDeadzone(float a, float deadzone)
- {
- float mag = (a >= 0) ? a : -a;
- if (mag <= deadzone)
- return 0.0f;
- a *= (mag - deadzone) / (1.0f - deadzone);
- if ((a * a) > 1.0f)
- return (a >= 0) ? 1.0f : -1.0f;
- return a;
- }
- private static bool ShouldResolveController(Controller controllerType, Controller controllerMask)
- {
- bool isValid = false;
- if ((controllerType & controllerMask) == controllerType)
- {
- isValid = true;
- }
- // If the mask requests both Touch controllers, reject the individual touch controllers.
- if (((controllerMask & Controller.Touch) == Controller.Touch)
- && ((controllerType & Controller.Touch) != 0)
- && ((controllerType & Controller.Touch) != Controller.Touch))
- {
- isValid = false;
- }
- // If the mask requests both Hands, reject the individual hands.
- if (((controllerMask & Controller.Hands) == Controller.Hands)
- && ((controllerType & Controller.Hands) != 0)
- && ((controllerType & Controller.Hands) != Controller.Hands))
- {
- isValid = false;
- }
- return isValid;
- }
- private abstract class OVRControllerBase
- {
- public class VirtualButtonMap
- {
- public RawButton None = RawButton.None;
- public RawButton One = RawButton.None;
- public RawButton Two = RawButton.None;
- public RawButton Three = RawButton.None;
- public RawButton Four = RawButton.None;
- public RawButton Start = RawButton.None;
- public RawButton Back = RawButton.None;
- public RawButton PrimaryShoulder = RawButton.None;
- public RawButton PrimaryIndexTrigger = RawButton.None;
- public RawButton PrimaryHandTrigger = RawButton.None;
- public RawButton PrimaryThumbstick = RawButton.None;
- public RawButton PrimaryThumbstickUp = RawButton.None;
- public RawButton PrimaryThumbstickDown = RawButton.None;
- public RawButton PrimaryThumbstickLeft = RawButton.None;
- public RawButton PrimaryThumbstickRight = RawButton.None;
- public RawButton PrimaryTouchpad = RawButton.None;
- public RawButton SecondaryShoulder = RawButton.None;
- public RawButton SecondaryIndexTrigger = RawButton.None;
- public RawButton SecondaryHandTrigger = RawButton.None;
- public RawButton SecondaryThumbstick = RawButton.None;
- public RawButton SecondaryThumbstickUp = RawButton.None;
- public RawButton SecondaryThumbstickDown = RawButton.None;
- public RawButton SecondaryThumbstickLeft = RawButton.None;
- public RawButton SecondaryThumbstickRight = RawButton.None;
- public RawButton SecondaryTouchpad = RawButton.None;
- public RawButton DpadUp = RawButton.None;
- public RawButton DpadDown = RawButton.None;
- public RawButton DpadLeft = RawButton.None;
- public RawButton DpadRight = RawButton.None;
- public RawButton Up = RawButton.None;
- public RawButton Down = RawButton.None;
- public RawButton Left = RawButton.None;
- public RawButton Right = RawButton.None;
- public RawButton ToRawMask(Button virtualMask)
- {
- RawButton rawMask = 0;
- if (virtualMask == Button.None)
- return RawButton.None;
- if ((virtualMask & Button.One) != 0)
- rawMask |= One;
- if ((virtualMask & Button.Two) != 0)
- rawMask |= Two;
- if ((virtualMask & Button.Three) != 0)
- rawMask |= Three;
- if ((virtualMask & Button.Four) != 0)
- rawMask |= Four;
- if ((virtualMask & Button.Start) != 0)
- rawMask |= Start;
- if ((virtualMask & Button.Back) != 0)
- rawMask |= Back;
- if ((virtualMask & Button.PrimaryShoulder) != 0)
- rawMask |= PrimaryShoulder;
- if ((virtualMask & Button.PrimaryIndexTrigger) != 0)
- rawMask |= PrimaryIndexTrigger;
- if ((virtualMask & Button.PrimaryHandTrigger) != 0)
- rawMask |= PrimaryHandTrigger;
- if ((virtualMask & Button.PrimaryThumbstick) != 0)
- rawMask |= PrimaryThumbstick;
- if ((virtualMask & Button.PrimaryThumbstickUp) != 0)
- rawMask |= PrimaryThumbstickUp;
- if ((virtualMask & Button.PrimaryThumbstickDown) != 0)
- rawMask |= PrimaryThumbstickDown;
- if ((virtualMask & Button.PrimaryThumbstickLeft) != 0)
- rawMask |= PrimaryThumbstickLeft;
- if ((virtualMask & Button.PrimaryThumbstickRight) != 0)
- rawMask |= PrimaryThumbstickRight;
- if ((virtualMask & Button.PrimaryTouchpad) != 0)
- rawMask |= PrimaryTouchpad;
- if ((virtualMask & Button.SecondaryShoulder) != 0)
- rawMask |= SecondaryShoulder;
- if ((virtualMask & Button.SecondaryIndexTrigger) != 0)
- rawMask |= SecondaryIndexTrigger;
- if ((virtualMask & Button.SecondaryHandTrigger) != 0)
- rawMask |= SecondaryHandTrigger;
- if ((virtualMask & Button.SecondaryThumbstick) != 0)
- rawMask |= SecondaryThumbstick;
- if ((virtualMask & Button.SecondaryThumbstickUp) != 0)
- rawMask |= SecondaryThumbstickUp;
- if ((virtualMask & Button.SecondaryThumbstickDown) != 0)
- rawMask |= SecondaryThumbstickDown;
- if ((virtualMask & Button.SecondaryThumbstickLeft) != 0)
- rawMask |= SecondaryThumbstickLeft;
- if ((virtualMask & Button.SecondaryThumbstickRight) != 0)
- rawMask |= SecondaryThumbstickRight;
- if ((virtualMask & Button.SecondaryTouchpad) != 0)
- rawMask |= SecondaryTouchpad;
- if ((virtualMask & Button.DpadUp) != 0)
- rawMask |= DpadUp;
- if ((virtualMask & Button.DpadDown) != 0)
- rawMask |= DpadDown;
- if ((virtualMask & Button.DpadLeft) != 0)
- rawMask |= DpadLeft;
- if ((virtualMask & Button.DpadRight) != 0)
- rawMask |= DpadRight;
- if ((virtualMask & Button.Up) != 0)
- rawMask |= Up;
- if ((virtualMask & Button.Down) != 0)
- rawMask |= Down;
- if ((virtualMask & Button.Left) != 0)
- rawMask |= Left;
- if ((virtualMask & Button.Right) != 0)
- rawMask |= Right;
- return rawMask;
- }
- }
- public class VirtualTouchMap
- {
- public RawTouch None = RawTouch.None;
- public RawTouch One = RawTouch.None;
- public RawTouch Two = RawTouch.None;
- public RawTouch Three = RawTouch.None;
- public RawTouch Four = RawTouch.None;
- public RawTouch PrimaryIndexTrigger = RawTouch.None;
- public RawTouch PrimaryThumbstick = RawTouch.None;
- public RawTouch PrimaryThumbRest = RawTouch.None;
- public RawTouch PrimaryTouchpad = RawTouch.None;
- public RawTouch SecondaryIndexTrigger = RawTouch.None;
- public RawTouch SecondaryThumbstick = RawTouch.None;
- public RawTouch SecondaryThumbRest = RawTouch.None;
- public RawTouch SecondaryTouchpad = RawTouch.None;
- public RawTouch ToRawMask(Touch virtualMask)
- {
- RawTouch rawMask = 0;
- if (virtualMask == Touch.None)
- return RawTouch.None;
- if ((virtualMask & Touch.One) != 0)
- rawMask |= One;
- if ((virtualMask & Touch.Two) != 0)
- rawMask |= Two;
- if ((virtualMask & Touch.Three) != 0)
- rawMask |= Three;
- if ((virtualMask & Touch.Four) != 0)
- rawMask |= Four;
- if ((virtualMask & Touch.PrimaryIndexTrigger) != 0)
- rawMask |= PrimaryIndexTrigger;
- if ((virtualMask & Touch.PrimaryThumbstick) != 0)
- rawMask |= PrimaryThumbstick;
- if ((virtualMask & Touch.PrimaryThumbRest) != 0)
- rawMask |= PrimaryThumbRest;
- if ((virtualMask & Touch.PrimaryTouchpad) != 0)
- rawMask |= PrimaryTouchpad;
- if ((virtualMask & Touch.SecondaryIndexTrigger) != 0)
- rawMask |= SecondaryIndexTrigger;
- if ((virtualMask & Touch.SecondaryThumbstick) != 0)
- rawMask |= SecondaryThumbstick;
- if ((virtualMask & Touch.SecondaryThumbRest) != 0)
- rawMask |= SecondaryThumbRest;
- if ((virtualMask & Touch.SecondaryTouchpad) != 0)
- rawMask |= SecondaryTouchpad;
- return rawMask;
- }
- }
- public class VirtualNearTouchMap
- {
- public RawNearTouch None = RawNearTouch.None;
- public RawNearTouch PrimaryIndexTrigger = RawNearTouch.None;
- public RawNearTouch PrimaryThumbButtons = RawNearTouch.None;
- public RawNearTouch SecondaryIndexTrigger = RawNearTouch.None;
- public RawNearTouch SecondaryThumbButtons = RawNearTouch.None;
- public RawNearTouch ToRawMask(NearTouch virtualMask)
- {
- RawNearTouch rawMask = 0;
- if (virtualMask == NearTouch.None)
- return RawNearTouch.None;
- if ((virtualMask & NearTouch.PrimaryIndexTrigger) != 0)
- rawMask |= PrimaryIndexTrigger;
- if ((virtualMask & NearTouch.PrimaryThumbButtons) != 0)
- rawMask |= PrimaryThumbButtons;
- if ((virtualMask & NearTouch.SecondaryIndexTrigger) != 0)
- rawMask |= SecondaryIndexTrigger;
- if ((virtualMask & NearTouch.SecondaryThumbButtons) != 0)
- rawMask |= SecondaryThumbButtons;
- return rawMask;
- }
- }
- public class VirtualAxis1DMap
- {
- public RawAxis1D None = RawAxis1D.None;
- public RawAxis1D PrimaryIndexTrigger = RawAxis1D.None;
- public RawAxis1D PrimaryHandTrigger = RawAxis1D.None;
- public RawAxis1D SecondaryIndexTrigger = RawAxis1D.None;
- public RawAxis1D SecondaryHandTrigger = RawAxis1D.None;
- public RawAxis1D ToRawMask(Axis1D virtualMask)
- {
- RawAxis1D rawMask = 0;
- if (virtualMask == Axis1D.None)
- return RawAxis1D.None;
- if ((virtualMask & Axis1D.PrimaryIndexTrigger) != 0)
- rawMask |= PrimaryIndexTrigger;
- if ((virtualMask & Axis1D.PrimaryHandTrigger) != 0)
- rawMask |= PrimaryHandTrigger;
- if ((virtualMask & Axis1D.SecondaryIndexTrigger) != 0)
- rawMask |= SecondaryIndexTrigger;
- if ((virtualMask & Axis1D.SecondaryHandTrigger) != 0)
- rawMask |= SecondaryHandTrigger;
- return rawMask;
- }
- }
- public class VirtualAxis2DMap
- {
- public RawAxis2D None = RawAxis2D.None;
- public RawAxis2D PrimaryThumbstick = RawAxis2D.None;
- public RawAxis2D PrimaryTouchpad = RawAxis2D.None;
- public RawAxis2D SecondaryThumbstick = RawAxis2D.None;
- public RawAxis2D SecondaryTouchpad = RawAxis2D.None;
- public RawAxis2D ToRawMask(Axis2D virtualMask)
- {
- RawAxis2D rawMask = 0;
- if (virtualMask == Axis2D.None)
- return RawAxis2D.None;
- if ((virtualMask & Axis2D.PrimaryThumbstick) != 0)
- rawMask |= PrimaryThumbstick;
- if ((virtualMask & Axis2D.PrimaryTouchpad) != 0)
- rawMask |= PrimaryTouchpad;
- if ((virtualMask & Axis2D.SecondaryThumbstick) != 0)
- rawMask |= SecondaryThumbstick;
- if ((virtualMask & Axis2D.SecondaryTouchpad) != 0)
- rawMask |= SecondaryTouchpad;
- return rawMask;
- }
- }
- public Controller controllerType = Controller.None;
- public VirtualButtonMap buttonMap = new VirtualButtonMap();
- public VirtualTouchMap touchMap = new VirtualTouchMap();
- public VirtualNearTouchMap nearTouchMap = new VirtualNearTouchMap();
- public VirtualAxis1DMap axis1DMap = new VirtualAxis1DMap();
- public VirtualAxis2DMap axis2DMap = new VirtualAxis2DMap();
- public OVRPlugin.ControllerState4 previousState = new OVRPlugin.ControllerState4();
- public OVRPlugin.ControllerState4 currentState = new OVRPlugin.ControllerState4();
- public bool shouldApplyDeadzone = true;
- public OVRControllerBase()
- {
- ConfigureButtonMap();
- ConfigureTouchMap();
- ConfigureNearTouchMap();
- ConfigureAxis1DMap();
- ConfigureAxis2DMap();
- }
- public virtual Controller Update()
- {
- OVRPlugin.ControllerState4 state;
- if (OVRManager.loadedXRDevice == OVRManager.XRDevice.OpenVR && ( (controllerType & Controller.Touch) != 0) )
- state = GetOpenVRControllerState(controllerType);
- else
- state = OVRPlugin.GetControllerState4((uint)controllerType);
- if (state.LIndexTrigger >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LIndexTrigger;
- if (state.LHandTrigger >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LHandTrigger;
- if (state.LThumbstick.y >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LThumbstickUp;
- if (state.LThumbstick.y <= -AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LThumbstickDown;
- if (state.LThumbstick.x <= -AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LThumbstickLeft;
- if (state.LThumbstick.x >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LThumbstickRight;
- if (state.RIndexTrigger >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RIndexTrigger;
- if (state.RHandTrigger >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RHandTrigger;
- if (state.RThumbstick.y >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RThumbstickUp;
- if (state.RThumbstick.y <= -AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RThumbstickDown;
- if (state.RThumbstick.x <= -AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RThumbstickLeft;
- if (state.RThumbstick.x >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RThumbstickRight;
- previousState = currentState;
- currentState = state;
- return ((Controller)currentState.ConnectedControllers & controllerType);
- }
- private OVRPlugin.ControllerState4 GetOpenVRControllerState(Controller controllerType)
- {
- OVRPlugin.ControllerState4 state = new OVRPlugin.ControllerState4();
- if ((controllerType & Controller.LTouch) == Controller.LTouch && IsValidOpenVRDevice(openVRControllerDetails[0].deviceID))
- {
- OVR.OpenVR.VRControllerState_t leftControllerState = openVRControllerDetails[0].state;
- if ((leftControllerState.ulButtonPressed & ((ulong)OpenVRButton.Two)) == (ulong)OpenVRButton.Two)
- state.Buttons |= (uint)RawButton.Y;
- if ((leftControllerState.ulButtonPressed & ((ulong)OpenVRButton.Thumbstick)) == (ulong)OpenVRButton.Thumbstick)
- state.Buttons |= (uint)RawButton.LThumbstick;
- state.LIndexTrigger = leftControllerState.rAxis1.x;
- if (openVRControllerDetails[0].controllerType == OpenVRController.OculusTouch || openVRControllerDetails[0].controllerType == OpenVRController.ViveController)
- {
- state.LThumbstick.x = leftControllerState.rAxis0.x;
- state.LThumbstick.y = leftControllerState.rAxis0.y;
- }
- else if (openVRControllerDetails[0].controllerType == OpenVRController.WindowsMRController)
- {
- state.LThumbstick.x = leftControllerState.rAxis2.x;
- state.LThumbstick.y = leftControllerState.rAxis2.y;
- }
- if (openVRControllerDetails[0].controllerType == OpenVRController.OculusTouch)
- state.LHandTrigger = leftControllerState.rAxis2.x;
- else if (openVRControllerDetails[0].controllerType == OpenVRController.ViveController || openVRControllerDetails[0].controllerType == OpenVRController.WindowsMRController)
- state.LHandTrigger = ((leftControllerState.ulButtonPressed & ((ulong)OpenVRButton.Grip)) == ((ulong)OpenVRButton.Grip)) ? 1 : 0;
- }
- if ((controllerType & Controller.RTouch) == Controller.RTouch && IsValidOpenVRDevice(openVRControllerDetails[1].deviceID))
- {
- OVR.OpenVR.VRControllerState_t rightControllerState = openVRControllerDetails[1].state;
- if ((rightControllerState.ulButtonPressed & ((ulong)OpenVRButton.Two)) == (ulong)OpenVRButton.Two)
- state.Buttons |= (uint)RawButton.B;
- if ((rightControllerState.ulButtonPressed & ((ulong)OpenVRButton.Thumbstick)) == (ulong)OpenVRButton.Thumbstick)
- state.Buttons |= (uint)RawButton.RThumbstick;
- state.RIndexTrigger = rightControllerState.rAxis1.x;
- if (openVRControllerDetails[1].controllerType == OpenVRController.OculusTouch || openVRControllerDetails[1].controllerType == OpenVRController.ViveController)
- {
- state.RThumbstick.x = rightControllerState.rAxis0.x;
- state.RThumbstick.y = rightControllerState.rAxis0.y;
- }
- else if (openVRControllerDetails[1].controllerType == OpenVRController.WindowsMRController)
- {
- state.RThumbstick.x = rightControllerState.rAxis2.x;
- state.RThumbstick.y = rightControllerState.rAxis2.y;
- }
- if (openVRControllerDetails[1].controllerType == OpenVRController.OculusTouch)
- state.RHandTrigger = rightControllerState.rAxis2.x;
- else if (openVRControllerDetails[1].controllerType == OpenVRController.ViveController || openVRControllerDetails[1].controllerType == OpenVRController.WindowsMRController)
- state.RHandTrigger = ((rightControllerState.ulButtonPressed & ((ulong)OpenVRButton.Grip)) == ((ulong)OpenVRButton.Grip)) ? 1 : 0;
- }
- return state;
- }
- public virtual void SetControllerVibration(float frequency, float amplitude)
- {
- OVRPlugin.SetControllerVibration((uint)controllerType, frequency, amplitude);
- }
- public virtual void RecenterController()
- {
- OVRPlugin.RecenterTrackingOrigin(OVRPlugin.RecenterFlags.Controllers);
- }
- public virtual bool WasRecentered()
- {
- return false;
- }
- public virtual byte GetRecenterCount()
- {
- return 0;
- }
- public virtual byte GetBatteryPercentRemaining()
- {
- return 0;
- }
- public abstract void ConfigureButtonMap();
- public abstract void ConfigureTouchMap();
- public abstract void ConfigureNearTouchMap();
- public abstract void ConfigureAxis1DMap();
- public abstract void ConfigureAxis2DMap();
- public RawButton ResolveToRawMask(Button virtualMask)
- {
- return buttonMap.ToRawMask(virtualMask);
- }
- public RawTouch ResolveToRawMask(Touch virtualMask)
- {
- return touchMap.ToRawMask(virtualMask);
- }
- public RawNearTouch ResolveToRawMask(NearTouch virtualMask)
- {
- return nearTouchMap.ToRawMask(virtualMask);
- }
- public RawAxis1D ResolveToRawMask(Axis1D virtualMask)
- {
- return axis1DMap.ToRawMask(virtualMask);
- }
- public RawAxis2D ResolveToRawMask(Axis2D virtualMask)
- {
- return axis2DMap.ToRawMask(virtualMask);
- }
- }
- private class OVRControllerTouch : OVRControllerBase
- {
- public OVRControllerTouch()
- {
- controllerType = Controller.Touch;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.A;
- buttonMap.Two = RawButton.B;
- buttonMap.Three = RawButton.X;
- buttonMap.Four = RawButton.Y;
- buttonMap.Start = RawButton.Start;
- buttonMap.Back = RawButton.None;
- buttonMap.PrimaryShoulder = RawButton.None;
- buttonMap.PrimaryIndexTrigger = RawButton.LIndexTrigger;
- buttonMap.PrimaryHandTrigger = RawButton.LHandTrigger;
- buttonMap.PrimaryThumbstick = RawButton.LThumbstick;
- buttonMap.PrimaryThumbstickUp = RawButton.LThumbstickUp;
- buttonMap.PrimaryThumbstickDown = RawButton.LThumbstickDown;
- buttonMap.PrimaryThumbstickLeft = RawButton.LThumbstickLeft;
- buttonMap.PrimaryThumbstickRight = RawButton.LThumbstickRight;
- buttonMap.PrimaryTouchpad = RawButton.None;
- buttonMap.SecondaryShoulder = RawButton.None;
- buttonMap.SecondaryIndexTrigger = RawButton.RIndexTrigger;
- buttonMap.SecondaryHandTrigger = RawButton.RHandTrigger;
- buttonMap.SecondaryThumbstick = RawButton.RThumbstick;
- buttonMap.SecondaryThumbstickUp = RawButton.RThumbstickUp;
- buttonMap.SecondaryThumbstickDown = RawButton.RThumbstickDown;
- buttonMap.SecondaryThumbstickLeft = RawButton.RThumbstickLeft;
- buttonMap.SecondaryThumbstickRight = RawButton.RThumbstickRight;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.None;
- buttonMap.DpadDown = RawButton.None;
- buttonMap.DpadLeft = RawButton.None;
- buttonMap.DpadRight = RawButton.None;
- buttonMap.Up = RawButton.LThumbstickUp;
- buttonMap.Down = RawButton.LThumbstickDown;
- buttonMap.Left = RawButton.LThumbstickLeft;
- buttonMap.Right = RawButton.LThumbstickRight;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.A;
- touchMap.Two = RawTouch.B;
- touchMap.Three = RawTouch.X;
- touchMap.Four = RawTouch.Y;
- touchMap.PrimaryIndexTrigger = RawTouch.LIndexTrigger;
- touchMap.PrimaryThumbstick = RawTouch.LThumbstick;
- touchMap.PrimaryThumbRest = RawTouch.LThumbRest;
- touchMap.PrimaryTouchpad = RawTouch.None;
- touchMap.SecondaryIndexTrigger = RawTouch.RIndexTrigger;
- touchMap.SecondaryThumbstick = RawTouch.RThumbstick;
- touchMap.SecondaryThumbRest = RawTouch.RThumbRest;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.LIndexTrigger;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.LThumbButtons;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.RIndexTrigger;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.RThumbButtons;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.LIndexTrigger;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.LHandTrigger;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.RIndexTrigger;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.RHandTrigger;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.LThumbstick;
- axis2DMap.PrimaryTouchpad = RawAxis2D.None;
- axis2DMap.SecondaryThumbstick = RawAxis2D.RThumbstick;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- public override bool WasRecentered()
- {
- return ((currentState.LRecenterCount + currentState.RRecenterCount) != (previousState.LRecenterCount + previousState.RRecenterCount));
- }
- public override byte GetRecenterCount()
- {
- return (byte)(currentState.LRecenterCount + currentState.RRecenterCount);
- }
- public override byte GetBatteryPercentRemaining()
- {
- byte leftBattery = currentState.LBatteryPercentRemaining;
- byte rightBattery = currentState.RBatteryPercentRemaining;
- byte minBattery = (leftBattery <= rightBattery) ? leftBattery : rightBattery;
- return minBattery;
- }
- }
- private class OVRControllerLTouch : OVRControllerBase
- {
- public OVRControllerLTouch()
- {
- controllerType = Controller.LTouch;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.X;
- buttonMap.Two = RawButton.Y;
- buttonMap.Three = RawButton.None;
- buttonMap.Four = RawButton.None;
- buttonMap.Start = RawButton.Start;
- buttonMap.Back = RawButton.None;
- buttonMap.PrimaryShoulder = RawButton.None;
- buttonMap.PrimaryIndexTrigger = RawButton.LIndexTrigger;
- buttonMap.PrimaryHandTrigger = RawButton.LHandTrigger;
- buttonMap.PrimaryThumbstick = RawButton.LThumbstick;
- buttonMap.PrimaryThumbstickUp = RawButton.LThumbstickUp;
- buttonMap.PrimaryThumbstickDown = RawButton.LThumbstickDown;
- buttonMap.PrimaryThumbstickLeft = RawButton.LThumbstickLeft;
- buttonMap.PrimaryThumbstickRight = RawButton.LThumbstickRight;
- buttonMap.PrimaryTouchpad = RawButton.None;
- buttonMap.SecondaryShoulder = RawButton.None;
- buttonMap.SecondaryIndexTrigger = RawButton.None;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.None;
- buttonMap.SecondaryThumbstickUp = RawButton.None;
- buttonMap.SecondaryThumbstickDown = RawButton.None;
- buttonMap.SecondaryThumbstickLeft = RawButton.None;
- buttonMap.SecondaryThumbstickRight = RawButton.None;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.None;
- buttonMap.DpadDown = RawButton.None;
- buttonMap.DpadLeft = RawButton.None;
- buttonMap.DpadRight = RawButton.None;
- buttonMap.Up = RawButton.LThumbstickUp;
- buttonMap.Down = RawButton.LThumbstickDown;
- buttonMap.Left = RawButton.LThumbstickLeft;
- buttonMap.Right = RawButton.LThumbstickRight;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.X;
- touchMap.Two = RawTouch.Y;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.LIndexTrigger;
- touchMap.PrimaryThumbstick = RawTouch.LThumbstick;
- touchMap.PrimaryThumbRest = RawTouch.LThumbRest;
- touchMap.PrimaryTouchpad = RawTouch.None;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.LIndexTrigger;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.LThumbButtons;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.LIndexTrigger;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.LHandTrigger;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.None;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.LThumbstick;
- axis2DMap.PrimaryTouchpad = RawAxis2D.None;
- axis2DMap.SecondaryThumbstick = RawAxis2D.None;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- public override bool WasRecentered()
- {
- return (currentState.LRecenterCount != previousState.LRecenterCount);
- }
- public override byte GetRecenterCount()
- {
- return currentState.LRecenterCount;
- }
- public override byte GetBatteryPercentRemaining()
- {
- return currentState.LBatteryPercentRemaining;
- }
- }
- private class OVRControllerRTouch : OVRControllerBase
- {
- public OVRControllerRTouch()
- {
- controllerType = Controller.RTouch;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.A;
- buttonMap.Two = RawButton.B;
- buttonMap.Three = RawButton.None;
- buttonMap.Four = RawButton.None;
- buttonMap.Start = RawButton.None;
- buttonMap.Back = RawButton.None;
- buttonMap.PrimaryShoulder = RawButton.None;
- buttonMap.PrimaryIndexTrigger = RawButton.RIndexTrigger;
- buttonMap.PrimaryHandTrigger = RawButton.RHandTrigger;
- buttonMap.PrimaryThumbstick = RawButton.RThumbstick;
- buttonMap.PrimaryThumbstickUp = RawButton.RThumbstickUp;
- buttonMap.PrimaryThumbstickDown = RawButton.RThumbstickDown;
- buttonMap.PrimaryThumbstickLeft = RawButton.RThumbstickLeft;
- buttonMap.PrimaryThumbstickRight = RawButton.RThumbstickRight;
- buttonMap.PrimaryTouchpad = RawButton.None;
- buttonMap.SecondaryShoulder = RawButton.None;
- buttonMap.SecondaryIndexTrigger = RawButton.None;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.None;
- buttonMap.SecondaryThumbstickUp = RawButton.None;
- buttonMap.SecondaryThumbstickDown = RawButton.None;
- buttonMap.SecondaryThumbstickLeft = RawButton.None;
- buttonMap.SecondaryThumbstickRight = RawButton.None;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.None;
- buttonMap.DpadDown = RawButton.None;
- buttonMap.DpadLeft = RawButton.None;
- buttonMap.DpadRight = RawButton.None;
- buttonMap.Up = RawButton.RThumbstickUp;
- buttonMap.Down = RawButton.RThumbstickDown;
- buttonMap.Left = RawButton.RThumbstickLeft;
- buttonMap.Right = RawButton.RThumbstickRight;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.A;
- touchMap.Two = RawTouch.B;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.RIndexTrigger;
- touchMap.PrimaryThumbstick = RawTouch.RThumbstick;
- touchMap.PrimaryThumbRest = RawTouch.RThumbRest;
- touchMap.PrimaryTouchpad = RawTouch.None;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.RIndexTrigger;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.RThumbButtons;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.RIndexTrigger;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.RHandTrigger;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.None;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.RThumbstick;
- axis2DMap.PrimaryTouchpad = RawAxis2D.None;
- axis2DMap.SecondaryThumbstick = RawAxis2D.None;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- public override bool WasRecentered()
- {
- return (currentState.RRecenterCount != previousState.RRecenterCount);
- }
- public override byte GetRecenterCount()
- {
- return currentState.RRecenterCount;
- }
- public override byte GetBatteryPercentRemaining()
- {
- return currentState.RBatteryPercentRemaining;
- }
- }
- private class OVRControllerHands : OVRControllerBase
- {
- public OVRControllerHands()
- {
- controllerType = Controller.Hands;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.A;
- buttonMap.Two = RawButton.None;
- buttonMap.Three = RawButton.X;
- buttonMap.Four = RawButton.None;
- buttonMap.Start = RawButton.None;
- buttonMap.Back = RawButton.None;
- buttonMap.PrimaryShoulder = RawButton.None;
- buttonMap.PrimaryIndexTrigger = RawButton.None;
- buttonMap.PrimaryHandTrigger = RawButton.None;
- buttonMap.PrimaryThumbstick = RawButton.None;
- buttonMap.PrimaryThumbstickUp = RawButton.None;
- buttonMap.PrimaryThumbstickDown = RawButton.None;
- buttonMap.PrimaryThumbstickLeft = RawButton.None;
- buttonMap.PrimaryThumbstickRight = RawButton.None;
- buttonMap.PrimaryTouchpad = RawButton.None;
- buttonMap.SecondaryShoulder = RawButton.None;
- buttonMap.SecondaryIndexTrigger = RawButton.None;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.None;
- buttonMap.SecondaryThumbstickUp = RawButton.None;
- buttonMap.SecondaryThumbstickDown = RawButton.None;
- buttonMap.SecondaryThumbstickLeft = RawButton.None;
- buttonMap.SecondaryThumbstickRight = RawButton.None;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.None;
- buttonMap.DpadDown = RawButton.None;
- buttonMap.DpadLeft = RawButton.None;
- buttonMap.DpadRight = RawButton.None;
- buttonMap.Up = RawButton.None;
- buttonMap.Down = RawButton.None;
- buttonMap.Left = RawButton.None;
- buttonMap.Right = RawButton.None;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.None;
- touchMap.Two = RawTouch.None;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.None;
- touchMap.PrimaryThumbstick = RawTouch.None;
- touchMap.PrimaryThumbRest = RawTouch.None;
- touchMap.PrimaryTouchpad = RawTouch.None;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.None;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.None;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.None;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.None;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.None;
- axis2DMap.PrimaryTouchpad = RawAxis2D.None;
- axis2DMap.SecondaryThumbstick = RawAxis2D.None;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- public override bool WasRecentered()
- {
- return ((currentState.LRecenterCount + currentState.RRecenterCount) != (previousState.LRecenterCount + previousState.RRecenterCount));
- }
- public override byte GetRecenterCount()
- {
- return (byte)(currentState.LRecenterCount + currentState.RRecenterCount);
- }
- public override byte GetBatteryPercentRemaining()
- {
- byte leftBattery = currentState.LBatteryPercentRemaining;
- byte rightBattery = currentState.RBatteryPercentRemaining;
- byte minBattery = (leftBattery <= rightBattery) ? leftBattery : rightBattery;
- return minBattery;
- }
- }
- private class OVRControllerLHand : OVRControllerBase
- {
- public OVRControllerLHand()
- {
- controllerType = Controller.LHand;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.X;
- buttonMap.Two = RawButton.None;
- buttonMap.Three = RawButton.None;
- buttonMap.Four = RawButton.None;
- buttonMap.Start = RawButton.None;
- buttonMap.Back = RawButton.None;
- buttonMap.PrimaryShoulder = RawButton.None;
- buttonMap.PrimaryIndexTrigger = RawButton.None;
- buttonMap.PrimaryHandTrigger = RawButton.None;
- buttonMap.PrimaryThumbstick = RawButton.None;
- buttonMap.PrimaryThumbstickUp = RawButton.None;
- buttonMap.PrimaryThumbstickDown = RawButton.None;
- buttonMap.PrimaryThumbstickLeft = RawButton.None;
- buttonMap.PrimaryThumbstickRight = RawButton.None;
- buttonMap.PrimaryTouchpad = RawButton.None;
- buttonMap.SecondaryShoulder = RawButton.None;
- buttonMap.SecondaryIndexTrigger = RawButton.None;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.None;
- buttonMap.SecondaryThumbstickUp = RawButton.None;
- buttonMap.SecondaryThumbstickDown = RawButton.None;
- buttonMap.SecondaryThumbstickLeft = RawButton.None;
- buttonMap.SecondaryThumbstickRight = RawButton.None;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.None;
- buttonMap.DpadDown = RawButton.None;
- buttonMap.DpadLeft = RawButton.None;
- buttonMap.DpadRight = RawButton.None;
- buttonMap.Up = RawButton.None;
- buttonMap.Down = RawButton.None;
- buttonMap.Left = RawButton.None;
- buttonMap.Right = RawButton.None;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.None;
- touchMap.Two = RawTouch.None;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.None;
- touchMap.PrimaryThumbstick = RawTouch.None;
- touchMap.PrimaryThumbRest = RawTouch.None;
- touchMap.PrimaryTouchpad = RawTouch.None;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.None;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.None;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.None;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.None;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.None;
- axis2DMap.PrimaryTouchpad = RawAxis2D.None;
- axis2DMap.SecondaryThumbstick = RawAxis2D.None;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- public override bool WasRecentered()
- {
- return (currentState.LRecenterCount != previousState.LRecenterCount);
- }
- public override byte GetRecenterCount()
- {
- return currentState.LRecenterCount;
- }
- public override byte GetBatteryPercentRemaining()
- {
- return currentState.LBatteryPercentRemaining;
- }
- }
- private class OVRControllerRHand : OVRControllerBase
- {
- public OVRControllerRHand()
- {
- controllerType = Controller.RHand;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.A;
- buttonMap.Two = RawButton.None;
- buttonMap.Three = RawButton.None;
- buttonMap.Four = RawButton.None;
- buttonMap.Start = RawButton.None;
- buttonMap.Back = RawButton.None;
- buttonMap.PrimaryShoulder = RawButton.None;
- buttonMap.PrimaryIndexTrigger = RawButton.None;
- buttonMap.PrimaryHandTrigger = RawButton.None;
- buttonMap.PrimaryThumbstick = RawButton.None;
- buttonMap.PrimaryThumbstickUp = RawButton.None;
- buttonMap.PrimaryThumbstickDown = RawButton.None;
- buttonMap.PrimaryThumbstickLeft = RawButton.None;
- buttonMap.PrimaryThumbstickRight = RawButton.None;
- buttonMap.PrimaryTouchpad = RawButton.None;
- buttonMap.SecondaryShoulder = RawButton.None;
- buttonMap.SecondaryIndexTrigger = RawButton.None;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.None;
- buttonMap.SecondaryThumbstickUp = RawButton.None;
- buttonMap.SecondaryThumbstickDown = RawButton.None;
- buttonMap.SecondaryThumbstickLeft = RawButton.None;
- buttonMap.SecondaryThumbstickRight = RawButton.None;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.None;
- buttonMap.DpadDown = RawButton.None;
- buttonMap.DpadLeft = RawButton.None;
- buttonMap.DpadRight = RawButton.None;
- buttonMap.Up = RawButton.None;
- buttonMap.Down = RawButton.None;
- buttonMap.Left = RawButton.None;
- buttonMap.Right = RawButton.None;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.None;
- touchMap.Two = RawTouch.None;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.None;
- touchMap.PrimaryThumbstick = RawTouch.None;
- touchMap.PrimaryThumbRest = RawTouch.None;
- touchMap.PrimaryTouchpad = RawTouch.None;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.None;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.None;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.None;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.None;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.None;
- axis2DMap.PrimaryTouchpad = RawAxis2D.None;
- axis2DMap.SecondaryThumbstick = RawAxis2D.None;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- public override bool WasRecentered()
- {
- return (currentState.RRecenterCount != previousState.RRecenterCount);
- }
- public override byte GetRecenterCount()
- {
- return currentState.RRecenterCount;
- }
- public override byte GetBatteryPercentRemaining()
- {
- return currentState.RBatteryPercentRemaining;
- }
- }
- private class OVRControllerRemote : OVRControllerBase
- {
- public OVRControllerRemote()
- {
- controllerType = Controller.Remote;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.Start;
- buttonMap.Two = RawButton.Back;
- buttonMap.Three = RawButton.None;
- buttonMap.Four = RawButton.None;
- buttonMap.Start = RawButton.Start;
- buttonMap.Back = RawButton.Back;
- buttonMap.PrimaryShoulder = RawButton.None;
- buttonMap.PrimaryIndexTrigger = RawButton.None;
- buttonMap.PrimaryHandTrigger = RawButton.None;
- buttonMap.PrimaryThumbstick = RawButton.None;
- buttonMap.PrimaryThumbstickUp = RawButton.None;
- buttonMap.PrimaryThumbstickDown = RawButton.None;
- buttonMap.PrimaryThumbstickLeft = RawButton.None;
- buttonMap.PrimaryThumbstickRight = RawButton.None;
- buttonMap.PrimaryTouchpad = RawButton.None;
- buttonMap.SecondaryShoulder = RawButton.None;
- buttonMap.SecondaryIndexTrigger = RawButton.None;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.None;
- buttonMap.SecondaryThumbstickUp = RawButton.None;
- buttonMap.SecondaryThumbstickDown = RawButton.None;
- buttonMap.SecondaryThumbstickLeft = RawButton.None;
- buttonMap.SecondaryThumbstickRight = RawButton.None;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.DpadUp;
- buttonMap.DpadDown = RawButton.DpadDown;
- buttonMap.DpadLeft = RawButton.DpadLeft;
- buttonMap.DpadRight = RawButton.DpadRight;
- buttonMap.Up = RawButton.DpadUp;
- buttonMap.Down = RawButton.DpadDown;
- buttonMap.Left = RawButton.DpadLeft;
- buttonMap.Right = RawButton.DpadRight;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.None;
- touchMap.Two = RawTouch.None;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.None;
- touchMap.PrimaryThumbstick = RawTouch.None;
- touchMap.PrimaryThumbRest = RawTouch.None;
- touchMap.PrimaryTouchpad = RawTouch.None;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.None;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.None;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.None;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.None;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.None;
- axis2DMap.PrimaryTouchpad = RawAxis2D.None;
- axis2DMap.SecondaryThumbstick = RawAxis2D.None;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- }
- private class OVRControllerGamepadPC : OVRControllerBase
- {
- public OVRControllerGamepadPC()
- {
- controllerType = Controller.Gamepad;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.A;
- buttonMap.Two = RawButton.B;
- buttonMap.Three = RawButton.X;
- buttonMap.Four = RawButton.Y;
- buttonMap.Start = RawButton.Start;
- buttonMap.Back = RawButton.Back;
- buttonMap.PrimaryShoulder = RawButton.LShoulder;
- buttonMap.PrimaryIndexTrigger = RawButton.LIndexTrigger;
- buttonMap.PrimaryHandTrigger = RawButton.None;
- buttonMap.PrimaryThumbstick = RawButton.LThumbstick;
- buttonMap.PrimaryThumbstickUp = RawButton.LThumbstickUp;
- buttonMap.PrimaryThumbstickDown = RawButton.LThumbstickDown;
- buttonMap.PrimaryThumbstickLeft = RawButton.LThumbstickLeft;
- buttonMap.PrimaryThumbstickRight = RawButton.LThumbstickRight;
- buttonMap.PrimaryTouchpad = RawButton.None;
- buttonMap.SecondaryShoulder = RawButton.RShoulder;
- buttonMap.SecondaryIndexTrigger = RawButton.RIndexTrigger;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.RThumbstick;
- buttonMap.SecondaryThumbstickUp = RawButton.RThumbstickUp;
- buttonMap.SecondaryThumbstickDown = RawButton.RThumbstickDown;
- buttonMap.SecondaryThumbstickLeft = RawButton.RThumbstickLeft;
- buttonMap.SecondaryThumbstickRight = RawButton.RThumbstickRight;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.DpadUp;
- buttonMap.DpadDown = RawButton.DpadDown;
- buttonMap.DpadLeft = RawButton.DpadLeft;
- buttonMap.DpadRight = RawButton.DpadRight;
- buttonMap.Up = RawButton.LThumbstickUp;
- buttonMap.Down = RawButton.LThumbstickDown;
- buttonMap.Left = RawButton.LThumbstickLeft;
- buttonMap.Right = RawButton.LThumbstickRight;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.None;
- touchMap.Two = RawTouch.None;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.None;
- touchMap.PrimaryThumbstick = RawTouch.None;
- touchMap.PrimaryThumbRest = RawTouch.None;
- touchMap.PrimaryTouchpad = RawTouch.None;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.None;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.LIndexTrigger;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.None;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.RIndexTrigger;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.LThumbstick;
- axis2DMap.PrimaryTouchpad = RawAxis2D.None;
- axis2DMap.SecondaryThumbstick = RawAxis2D.RThumbstick;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- }
- private class OVRControllerGamepadMac : OVRControllerBase
- {
- /// <summary> An axis on the gamepad. </summary>
- private enum AxisGPC
- {
- None = -1,
- LeftXAxis = 0,
- LeftYAxis,
- RightXAxis,
- RightYAxis,
- LeftTrigger,
- RightTrigger,
- DPad_X_Axis,
- DPad_Y_Axis,
- Max,
- };
- /// <summary> A button on the gamepad. </summary>
- public enum ButtonGPC
- {
- None = -1,
- A = 0,
- B,
- X,
- Y,
- Up,
- Down,
- Left,
- Right,
- Start,
- Back,
- LStick,
- RStick,
- LeftShoulder,
- RightShoulder,
- Max
- };
- private bool initialized = false;
- public OVRControllerGamepadMac()
- {
- controllerType = Controller.Gamepad;
- initialized = OVR_GamepadController_Initialize();
- }
- ~OVRControllerGamepadMac()
- {
- if (!initialized)
- return;
- OVR_GamepadController_Destroy();
- }
- public override Controller Update()
- {
- if (!initialized)
- {
- return Controller.None;
- }
- OVRPlugin.ControllerState4 state = new OVRPlugin.ControllerState4();
- bool result = OVR_GamepadController_Update();
- if (result)
- state.ConnectedControllers = (uint)Controller.Gamepad;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.A))
- state.Buttons |= (uint)RawButton.A;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.B))
- state.Buttons |= (uint)RawButton.B;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.X))
- state.Buttons |= (uint)RawButton.X;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.Y))
- state.Buttons |= (uint)RawButton.Y;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.Up))
- state.Buttons |= (uint)RawButton.DpadUp;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.Down))
- state.Buttons |= (uint)RawButton.DpadDown;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.Left))
- state.Buttons |= (uint)RawButton.DpadLeft;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.Right))
- state.Buttons |= (uint)RawButton.DpadRight;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.Start))
- state.Buttons |= (uint)RawButton.Start;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.Back))
- state.Buttons |= (uint)RawButton.Back;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.LStick))
- state.Buttons |= (uint)RawButton.LThumbstick;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.RStick))
- state.Buttons |= (uint)RawButton.RThumbstick;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.LeftShoulder))
- state.Buttons |= (uint)RawButton.LShoulder;
- if (OVR_GamepadController_GetButton((int)ButtonGPC.RightShoulder))
- state.Buttons |= (uint)RawButton.RShoulder;
- state.LThumbstick.x = OVR_GamepadController_GetAxis((int)AxisGPC.LeftXAxis);
- state.LThumbstick.y = OVR_GamepadController_GetAxis((int)AxisGPC.LeftYAxis);
- state.RThumbstick.x = OVR_GamepadController_GetAxis((int)AxisGPC.RightXAxis);
- state.RThumbstick.y = OVR_GamepadController_GetAxis((int)AxisGPC.RightYAxis);
- state.LIndexTrigger = OVR_GamepadController_GetAxis((int)AxisGPC.LeftTrigger);
- state.RIndexTrigger = OVR_GamepadController_GetAxis((int)AxisGPC.RightTrigger);
- if (state.LIndexTrigger >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LIndexTrigger;
- if (state.LHandTrigger >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LHandTrigger;
- if (state.LThumbstick.y >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LThumbstickUp;
- if (state.LThumbstick.y <= -AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LThumbstickDown;
- if (state.LThumbstick.x <= -AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LThumbstickLeft;
- if (state.LThumbstick.x >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.LThumbstickRight;
- if (state.RIndexTrigger >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RIndexTrigger;
- if (state.RHandTrigger >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RHandTrigger;
- if (state.RThumbstick.y >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RThumbstickUp;
- if (state.RThumbstick.y <= -AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RThumbstickDown;
- if (state.RThumbstick.x <= -AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RThumbstickLeft;
- if (state.RThumbstick.x >= AXIS_AS_BUTTON_THRESHOLD)
- state.Buttons |= (uint)RawButton.RThumbstickRight;
- previousState = currentState;
- currentState = state;
- return ((Controller)currentState.ConnectedControllers & controllerType);
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.A;
- buttonMap.Two = RawButton.B;
- buttonMap.Three = RawButton.X;
- buttonMap.Four = RawButton.Y;
- buttonMap.Start = RawButton.Start;
- buttonMap.Back = RawButton.Back;
- buttonMap.PrimaryShoulder = RawButton.LShoulder;
- buttonMap.PrimaryIndexTrigger = RawButton.LIndexTrigger;
- buttonMap.PrimaryHandTrigger = RawButton.None;
- buttonMap.PrimaryThumbstick = RawButton.LThumbstick;
- buttonMap.PrimaryThumbstickUp = RawButton.LThumbstickUp;
- buttonMap.PrimaryThumbstickDown = RawButton.LThumbstickDown;
- buttonMap.PrimaryThumbstickLeft = RawButton.LThumbstickLeft;
- buttonMap.PrimaryThumbstickRight = RawButton.LThumbstickRight;
- buttonMap.PrimaryTouchpad = RawButton.None;
- buttonMap.SecondaryShoulder = RawButton.RShoulder;
- buttonMap.SecondaryIndexTrigger = RawButton.RIndexTrigger;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.RThumbstick;
- buttonMap.SecondaryThumbstickUp = RawButton.RThumbstickUp;
- buttonMap.SecondaryThumbstickDown = RawButton.RThumbstickDown;
- buttonMap.SecondaryThumbstickLeft = RawButton.RThumbstickLeft;
- buttonMap.SecondaryThumbstickRight = RawButton.RThumbstickRight;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.DpadUp;
- buttonMap.DpadDown = RawButton.DpadDown;
- buttonMap.DpadLeft = RawButton.DpadLeft;
- buttonMap.DpadRight = RawButton.DpadRight;
- buttonMap.Up = RawButton.LThumbstickUp;
- buttonMap.Down = RawButton.LThumbstickDown;
- buttonMap.Left = RawButton.LThumbstickLeft;
- buttonMap.Right = RawButton.LThumbstickRight;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.None;
- touchMap.Two = RawTouch.None;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.None;
- touchMap.PrimaryThumbstick = RawTouch.None;
- touchMap.PrimaryThumbRest = RawTouch.None;
- touchMap.PrimaryTouchpad = RawTouch.None;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.None;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.LIndexTrigger;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.None;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.RIndexTrigger;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.LThumbstick;
- axis2DMap.PrimaryTouchpad = RawAxis2D.None;
- axis2DMap.SecondaryThumbstick = RawAxis2D.RThumbstick;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- public override void SetControllerVibration(float frequency, float amplitude)
- {
- int gpcNode = 0;
- float gpcFrequency = frequency * 200.0f; //Map frequency from 0-1 CAPI range to 0-200 GPC range
- float gpcStrength = amplitude;
- OVR_GamepadController_SetVibration(gpcNode, gpcStrength, gpcFrequency);
- }
- private const string DllName = "OVRGamepad";
- [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
- private static extern bool OVR_GamepadController_Initialize();
- [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
- private static extern bool OVR_GamepadController_Destroy();
- [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
- private static extern bool OVR_GamepadController_Update();
- [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
- private static extern float OVR_GamepadController_GetAxis(int axis);
- [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
- private static extern bool OVR_GamepadController_GetButton(int button);
- [DllImport(DllName, CallingConvention = CallingConvention.Cdecl)]
- private static extern bool OVR_GamepadController_SetVibration(int node, float strength, float frequency);
- }
- private class OVRControllerGamepadAndroid : OVRControllerBase
- {
- public OVRControllerGamepadAndroid()
- {
- controllerType = Controller.Gamepad;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.A;
- buttonMap.Two = RawButton.B;
- buttonMap.Three = RawButton.X;
- buttonMap.Four = RawButton.Y;
- buttonMap.Start = RawButton.Start;
- buttonMap.Back = RawButton.Back;
- buttonMap.PrimaryShoulder = RawButton.LShoulder;
- buttonMap.PrimaryIndexTrigger = RawButton.LIndexTrigger;
- buttonMap.PrimaryHandTrigger = RawButton.None;
- buttonMap.PrimaryThumbstick = RawButton.LThumbstick;
- buttonMap.PrimaryThumbstickUp = RawButton.LThumbstickUp;
- buttonMap.PrimaryThumbstickDown = RawButton.LThumbstickDown;
- buttonMap.PrimaryThumbstickLeft = RawButton.LThumbstickLeft;
- buttonMap.PrimaryThumbstickRight = RawButton.LThumbstickRight;
- buttonMap.PrimaryTouchpad = RawButton.None;
- buttonMap.SecondaryShoulder = RawButton.RShoulder;
- buttonMap.SecondaryIndexTrigger = RawButton.RIndexTrigger;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.RThumbstick;
- buttonMap.SecondaryThumbstickUp = RawButton.RThumbstickUp;
- buttonMap.SecondaryThumbstickDown = RawButton.RThumbstickDown;
- buttonMap.SecondaryThumbstickLeft = RawButton.RThumbstickLeft;
- buttonMap.SecondaryThumbstickRight = RawButton.RThumbstickRight;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.DpadUp;
- buttonMap.DpadDown = RawButton.DpadDown;
- buttonMap.DpadLeft = RawButton.DpadLeft;
- buttonMap.DpadRight = RawButton.DpadRight;
- buttonMap.Up = RawButton.LThumbstickUp;
- buttonMap.Down = RawButton.LThumbstickDown;
- buttonMap.Left = RawButton.LThumbstickLeft;
- buttonMap.Right = RawButton.LThumbstickRight;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.None;
- touchMap.Two = RawTouch.None;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.None;
- touchMap.PrimaryThumbstick = RawTouch.None;
- touchMap.PrimaryThumbRest = RawTouch.None;
- touchMap.PrimaryTouchpad = RawTouch.None;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.None;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.LIndexTrigger;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.None;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.RIndexTrigger;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.LThumbstick;
- axis2DMap.PrimaryTouchpad = RawAxis2D.None;
- axis2DMap.SecondaryThumbstick = RawAxis2D.RThumbstick;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- }
- private class OVRControllerTouchpad : OVRControllerBase
- {
- private OVRPlugin.Vector2f moveAmount;
- private float maxTapMagnitude = 0.1f;
- private float minMoveMagnitude = 0.15f;
- public OVRControllerTouchpad()
- {
- controllerType = Controller.Touchpad;
- }
- public override Controller Update()
- {
- Controller res = base.Update();
- if (GetDown(RawTouch.LTouchpad, OVRInput.Controller.Touchpad))
- {
- moveAmount = currentState.LTouchpad;
- }
- if (GetUp(RawTouch.LTouchpad, OVRInput.Controller.Touchpad))
- {
- moveAmount.x = previousState.LTouchpad.x - moveAmount.x;
- moveAmount.y = previousState.LTouchpad.y - moveAmount.y;
- Vector2 move = new Vector2(moveAmount.x, moveAmount.y);
- float moveMag = move.magnitude;
- if (moveMag < maxTapMagnitude)
- {
- // Emit Touchpad Tap
- currentState.Buttons |= (uint)RawButton.Start;
- currentState.Buttons |= (uint)RawButton.LTouchpad;
- }
- else if (moveMag >= minMoveMagnitude)
- {
- move.Normalize();
- // Left/Right
- if (Mathf.Abs(move.x) > Mathf.Abs(move.y))
- {
- if (move.x < 0.0f)
- {
- currentState.Buttons |= (uint)RawButton.DpadLeft;
- }
- else
- {
- currentState.Buttons |= (uint)RawButton.DpadRight;
- }
- }
- // Up/Down
- else
- {
- if (move.y < 0.0f)
- {
- currentState.Buttons |= (uint)RawButton.DpadDown;
- }
- else
- {
- currentState.Buttons |= (uint)RawButton.DpadUp;
- }
- }
- }
- }
- return res;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.LTouchpad;
- buttonMap.Two = RawButton.Back;
- buttonMap.Three = RawButton.None;
- buttonMap.Four = RawButton.None;
- buttonMap.Start = RawButton.Start;
- buttonMap.Back = RawButton.Back;
- buttonMap.PrimaryShoulder = RawButton.None;
- buttonMap.PrimaryIndexTrigger = RawButton.None;
- buttonMap.PrimaryHandTrigger = RawButton.None;
- buttonMap.PrimaryThumbstick = RawButton.None;
- buttonMap.PrimaryThumbstickUp = RawButton.None;
- buttonMap.PrimaryThumbstickDown = RawButton.None;
- buttonMap.PrimaryThumbstickLeft = RawButton.None;
- buttonMap.PrimaryThumbstickRight = RawButton.None;
- buttonMap.PrimaryTouchpad = RawButton.LTouchpad;
- buttonMap.SecondaryShoulder = RawButton.None;
- buttonMap.SecondaryIndexTrigger = RawButton.None;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.None;
- buttonMap.SecondaryThumbstickUp = RawButton.None;
- buttonMap.SecondaryThumbstickDown = RawButton.None;
- buttonMap.SecondaryThumbstickLeft = RawButton.None;
- buttonMap.SecondaryThumbstickRight = RawButton.None;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.DpadUp;
- buttonMap.DpadDown = RawButton.DpadDown;
- buttonMap.DpadLeft = RawButton.DpadLeft;
- buttonMap.DpadRight = RawButton.DpadRight;
- buttonMap.Up = RawButton.DpadUp;
- buttonMap.Down = RawButton.DpadDown;
- buttonMap.Left = RawButton.DpadLeft;
- buttonMap.Right = RawButton.DpadRight;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.LTouchpad;
- touchMap.Two = RawTouch.None;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.None;
- touchMap.PrimaryThumbstick = RawTouch.None;
- touchMap.PrimaryThumbRest = RawTouch.None;
- touchMap.PrimaryTouchpad = RawTouch.LTouchpad;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.None;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.None;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.None;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.None;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.None;
- axis2DMap.PrimaryTouchpad = RawAxis2D.LTouchpad;
- axis2DMap.SecondaryThumbstick = RawAxis2D.None;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- }
- private class OVRControllerLTrackedRemote : OVRControllerBase
- {
- private bool emitSwipe;
- private OVRPlugin.Vector2f moveAmount;
- private float minMoveMagnitude = 0.3f;
- public OVRControllerLTrackedRemote()
- {
- controllerType = Controller.LTrackedRemote;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.LTouchpad;
- buttonMap.Two = RawButton.Back;
- buttonMap.Three = RawButton.None;
- buttonMap.Four = RawButton.None;
- buttonMap.Start = RawButton.Start;
- buttonMap.Back = RawButton.Back;
- buttonMap.PrimaryShoulder = RawButton.None;
- buttonMap.PrimaryIndexTrigger = RawButton.LIndexTrigger;
- buttonMap.PrimaryHandTrigger = RawButton.LHandTrigger;
- buttonMap.PrimaryThumbstick = RawButton.None;
- buttonMap.PrimaryThumbstickUp = RawButton.None;
- buttonMap.PrimaryThumbstickDown = RawButton.None;
- buttonMap.PrimaryThumbstickLeft = RawButton.None;
- buttonMap.PrimaryThumbstickRight = RawButton.None;
- buttonMap.PrimaryTouchpad = RawButton.LTouchpad;
- buttonMap.SecondaryShoulder = RawButton.None;
- buttonMap.SecondaryIndexTrigger = RawButton.None;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.None;
- buttonMap.SecondaryThumbstickUp = RawButton.None;
- buttonMap.SecondaryThumbstickDown = RawButton.None;
- buttonMap.SecondaryThumbstickLeft = RawButton.None;
- buttonMap.SecondaryThumbstickRight = RawButton.None;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.DpadUp;
- buttonMap.DpadDown = RawButton.DpadDown;
- buttonMap.DpadLeft = RawButton.DpadLeft;
- buttonMap.DpadRight = RawButton.DpadRight;
- buttonMap.Up = RawButton.DpadUp;
- buttonMap.Down = RawButton.DpadDown;
- buttonMap.Left = RawButton.DpadLeft;
- buttonMap.Right = RawButton.DpadRight;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.LTouchpad;
- touchMap.Two = RawTouch.None;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.LIndexTrigger;
- touchMap.PrimaryThumbstick = RawTouch.None;
- touchMap.PrimaryThumbRest = RawTouch.None;
- touchMap.PrimaryTouchpad = RawTouch.LTouchpad;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.None;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.LIndexTrigger;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.LHandTrigger;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.None;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.None;
- axis2DMap.PrimaryTouchpad = RawAxis2D.LTouchpad;
- axis2DMap.SecondaryThumbstick = RawAxis2D.None;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- public override Controller Update()
- {
- Controller res = base.Update();
- if (GetDown(RawTouch.LTouchpad, OVRInput.Controller.LTrackedRemote))
- {
- emitSwipe = true;
- moveAmount = currentState.LTouchpad;
- }
- if (GetDown(RawButton.LTouchpad, OVRInput.Controller.LTrackedRemote))
- {
- emitSwipe = false;
- }
- if (GetUp(RawTouch.LTouchpad, OVRInput.Controller.LTrackedRemote) && emitSwipe)
- {
- emitSwipe = false;
- moveAmount.x = previousState.LTouchpad.x - moveAmount.x;
- moveAmount.y = previousState.LTouchpad.y - moveAmount.y;
- Vector2 move = new Vector2(moveAmount.x, moveAmount.y);
- if (move.magnitude >= minMoveMagnitude)
- {
- move.Normalize();
- // Left/Right
- if (Mathf.Abs(move.x) > Mathf.Abs(move.y))
- {
- if (move.x < 0.0f)
- {
- currentState.Buttons |= (uint)RawButton.DpadLeft;
- }
- else
- {
- currentState.Buttons |= (uint)RawButton.DpadRight;
- }
- }
- // Up/Down
- else
- {
- if (move.y < 0.0f)
- {
- currentState.Buttons |= (uint)RawButton.DpadDown;
- }
- else
- {
- currentState.Buttons |= (uint)RawButton.DpadUp;
- }
- }
- }
- }
- return res;
- }
- public override bool WasRecentered()
- {
- return (currentState.LRecenterCount != previousState.LRecenterCount);
- }
- public override byte GetRecenterCount()
- {
- return currentState.LRecenterCount;
- }
- public override byte GetBatteryPercentRemaining()
- {
- return currentState.LBatteryPercentRemaining;
- }
- }
- private class OVRControllerRTrackedRemote : OVRControllerBase
- {
- private bool emitSwipe;
- private OVRPlugin.Vector2f moveAmount;
- private float minMoveMagnitude = 0.3f;
- public OVRControllerRTrackedRemote()
- {
- controllerType = Controller.RTrackedRemote;
- }
- public override void ConfigureButtonMap()
- {
- buttonMap.None = RawButton.None;
- buttonMap.One = RawButton.RTouchpad;
- buttonMap.Two = RawButton.Back;
- buttonMap.Three = RawButton.None;
- buttonMap.Four = RawButton.None;
- buttonMap.Start = RawButton.Start;
- buttonMap.Back = RawButton.Back;
- buttonMap.PrimaryShoulder = RawButton.None;
- buttonMap.PrimaryIndexTrigger = RawButton.RIndexTrigger;
- buttonMap.PrimaryHandTrigger = RawButton.RHandTrigger;
- buttonMap.PrimaryThumbstick = RawButton.None;
- buttonMap.PrimaryThumbstickUp = RawButton.None;
- buttonMap.PrimaryThumbstickDown = RawButton.None;
- buttonMap.PrimaryThumbstickLeft = RawButton.None;
- buttonMap.PrimaryThumbstickRight = RawButton.None;
- buttonMap.PrimaryTouchpad = RawButton.RTouchpad;
- buttonMap.SecondaryShoulder = RawButton.None;
- buttonMap.SecondaryIndexTrigger = RawButton.None;
- buttonMap.SecondaryHandTrigger = RawButton.None;
- buttonMap.SecondaryThumbstick = RawButton.None;
- buttonMap.SecondaryThumbstickUp = RawButton.None;
- buttonMap.SecondaryThumbstickDown = RawButton.None;
- buttonMap.SecondaryThumbstickLeft = RawButton.None;
- buttonMap.SecondaryThumbstickRight = RawButton.None;
- buttonMap.SecondaryTouchpad = RawButton.None;
- buttonMap.DpadUp = RawButton.DpadUp;
- buttonMap.DpadDown = RawButton.DpadDown;
- buttonMap.DpadLeft = RawButton.DpadLeft;
- buttonMap.DpadRight = RawButton.DpadRight;
- buttonMap.Up = RawButton.DpadUp;
- buttonMap.Down = RawButton.DpadDown;
- buttonMap.Left = RawButton.DpadLeft;
- buttonMap.Right = RawButton.DpadRight;
- }
- public override void ConfigureTouchMap()
- {
- touchMap.None = RawTouch.None;
- touchMap.One = RawTouch.RTouchpad;
- touchMap.Two = RawTouch.None;
- touchMap.Three = RawTouch.None;
- touchMap.Four = RawTouch.None;
- touchMap.PrimaryIndexTrigger = RawTouch.RIndexTrigger;
- touchMap.PrimaryThumbstick = RawTouch.None;
- touchMap.PrimaryThumbRest = RawTouch.None;
- touchMap.PrimaryTouchpad = RawTouch.RTouchpad;
- touchMap.SecondaryIndexTrigger = RawTouch.None;
- touchMap.SecondaryThumbstick = RawTouch.None;
- touchMap.SecondaryThumbRest = RawTouch.None;
- touchMap.SecondaryTouchpad = RawTouch.None;
- }
- public override void ConfigureNearTouchMap()
- {
- nearTouchMap.None = RawNearTouch.None;
- nearTouchMap.PrimaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.PrimaryThumbButtons = RawNearTouch.None;
- nearTouchMap.SecondaryIndexTrigger = RawNearTouch.None;
- nearTouchMap.SecondaryThumbButtons = RawNearTouch.None;
- }
- public override void ConfigureAxis1DMap()
- {
- axis1DMap.None = RawAxis1D.None;
- axis1DMap.PrimaryIndexTrigger = RawAxis1D.RIndexTrigger;
- axis1DMap.PrimaryHandTrigger = RawAxis1D.RHandTrigger;
- axis1DMap.SecondaryIndexTrigger = RawAxis1D.None;
- axis1DMap.SecondaryHandTrigger = RawAxis1D.None;
- }
- public override void ConfigureAxis2DMap()
- {
- axis2DMap.None = RawAxis2D.None;
- axis2DMap.PrimaryThumbstick = RawAxis2D.None;
- axis2DMap.PrimaryTouchpad = RawAxis2D.RTouchpad;
- axis2DMap.SecondaryThumbstick = RawAxis2D.None;
- axis2DMap.SecondaryTouchpad = RawAxis2D.None;
- }
- public override Controller Update()
- {
- Controller res = base.Update();
- if (GetDown(RawTouch.RTouchpad, OVRInput.Controller.RTrackedRemote))
- {
- emitSwipe = true;
- moveAmount = currentState.RTouchpad;
- }
- if (GetDown(RawButton.RTouchpad, OVRInput.Controller.RTrackedRemote))
- {
- emitSwipe = false;
- }
- if (GetUp(RawTouch.RTouchpad, OVRInput.Controller.RTrackedRemote) && emitSwipe)
- {
- emitSwipe = false;
- moveAmount.x = previousState.RTouchpad.x - moveAmount.x;
- moveAmount.y = previousState.RTouchpad.y - moveAmount.y;
- Vector2 move = new Vector2(moveAmount.x, moveAmount.y);
- if (move.magnitude >= minMoveMagnitude)
- {
- move.Normalize();
- // Left/Right
- if (Mathf.Abs(move.x) > Mathf.Abs(move.y))
- {
- if (move.x < 0.0f)
- {
- currentState.Buttons |= (uint)RawButton.DpadLeft;
- }
- else
- {
- currentState.Buttons |= (uint)RawButton.DpadRight;
- }
- }
- // Up/Down
- else
- {
- if (move.y < 0.0f)
- {
- currentState.Buttons |= (uint)RawButton.DpadDown;
- }
- else
- {
- currentState.Buttons |= (uint)RawButton.DpadUp;
- }
- }
- }
- }
- return res;
- }
- public override bool WasRecentered()
- {
- return (currentState.RRecenterCount != previousState.RRecenterCount);
- }
- public override byte GetRecenterCount()
- {
- return currentState.RRecenterCount;
- }
- public override byte GetBatteryPercentRemaining()
- {
- return currentState.RBatteryPercentRemaining;
- }
- }
- }
|