From 69699e5f732221026a0f2842add89fb9e0281699 Mon Sep 17 00:00:00 2001 From: Patrice Vignola Date: Sat, 22 Aug 2015 00:45:35 -0400 Subject: [PATCH] Add the character movement depending on the camera rotation --- Assets/ControllerMapper.asset | Bin 0 -> 4360 bytes Assets/ControllerMapper.asset.meta | 8 + Assets/Editor.meta | 9 + Assets/Editor/InputHandler.meta | 9 + .../CreateControllerMapperAsset.cs | 21 ++ .../CreateControllerMapperAsset.cs.meta | 12 + Assets/Materials/ChildMaterial.mat | Bin 4956 -> 4956 bytes Assets/Plugins.meta | 9 + Assets/Plugins/x86.meta | 9 + Assets/Plugins/x86/XInputDotNetPure.dll | Bin 0 -> 9728 bytes Assets/Plugins/x86/XInputDotNetPure.dll.meta | 14 ++ Assets/Plugins/x86/XInputInterface.dll | Bin 0 -> 61952 bytes Assets/Plugins/x86/XInputInterface.dll.meta | 6 + Assets/Plugins/x86_64.meta | 9 + Assets/Plugins/x86_64/XInputDotNetPure.dll | Bin 0 -> 9216 bytes .../Plugins/x86_64/XInputDotNetPure.dll.meta | 14 ++ Assets/Plugins/x86_64/XInputInterface.dll | Bin 0 -> 68608 bytes .../Plugins/x86_64/XInputInterface.dll.meta | 6 + Assets/Prefabs/Child.prefab | Bin 6420 -> 8804 bytes Assets/Prefabs/InputManager.prefab | Bin 0 -> 4460 bytes Assets/Prefabs/InputManager.prefab.meta | 8 + Assets/Scenes/PatScene.unity | Bin 12156 -> 17444 bytes Assets/Scripts/Child.cs | 31 +++ Assets/Scripts/Child.cs.meta | 12 + Assets/Scripts/ChildController.cs | 56 ++++- Assets/Scripts/InputHandler.meta | 9 + .../Scripts/InputHandler/ControllerManager.cs | 196 +++++++++++++++++ .../InputHandler/ControllerManager.cs.meta | 12 + .../InputHandler/ControllerMapperAsset.cs | 197 +++++++++++++++++ .../ControllerMapperAsset.cs.meta | 12 + Assets/Scripts/InputHandler/InputConstants.cs | 19 ++ .../InputHandler/InputConstants.cs.meta | 12 + Assets/Scripts/InputHandler/InputContext.cs | 70 ++++++ .../Scripts/InputHandler/InputContext.cs.meta | 8 + Assets/Scripts/InputHandler/InputManager.cs | 98 +++++++++ .../Scripts/InputHandler/InputManager.cs.meta | 12 + Assets/Scripts/InputHandler/InputMapper.cs | 205 ++++++++++++++++++ .../Scripts/InputHandler/InputMapper.cs.meta | 8 + .../Scripts/InputHandler/InputMapperAsset.cs | 20 ++ .../InputHandler/InputMapperAsset.cs.meta | 12 + Assets/Scripts/InputHandler/MappedInput.cs | 23 ++ .../Scripts/InputHandler/MappedInput.cs.meta | 8 + .../InputHandler/XboxInputConstants.cs | 43 ++++ .../InputHandler/XboxInputConstants.cs.meta | 12 + ProjectSettings/ProjectSettings.asset | Bin 35008 -> 36157 bytes ProjectSettings/ProjectVersion.txt | 2 +- 46 files changed, 1200 insertions(+), 11 deletions(-) create mode 100644 Assets/ControllerMapper.asset create mode 100644 Assets/ControllerMapper.asset.meta create mode 100644 Assets/Editor.meta create mode 100644 Assets/Editor/InputHandler.meta create mode 100644 Assets/Editor/InputHandler/CreateControllerMapperAsset.cs create mode 100644 Assets/Editor/InputHandler/CreateControllerMapperAsset.cs.meta create mode 100644 Assets/Plugins.meta create mode 100644 Assets/Plugins/x86.meta create mode 100644 Assets/Plugins/x86/XInputDotNetPure.dll create mode 100644 Assets/Plugins/x86/XInputDotNetPure.dll.meta create mode 100644 Assets/Plugins/x86/XInputInterface.dll create mode 100644 Assets/Plugins/x86/XInputInterface.dll.meta create mode 100644 Assets/Plugins/x86_64.meta create mode 100644 Assets/Plugins/x86_64/XInputDotNetPure.dll create mode 100644 Assets/Plugins/x86_64/XInputDotNetPure.dll.meta create mode 100644 Assets/Plugins/x86_64/XInputInterface.dll create mode 100644 Assets/Plugins/x86_64/XInputInterface.dll.meta create mode 100644 Assets/Prefabs/InputManager.prefab create mode 100644 Assets/Prefabs/InputManager.prefab.meta create mode 100644 Assets/Scripts/Child.cs create mode 100644 Assets/Scripts/Child.cs.meta create mode 100644 Assets/Scripts/InputHandler.meta create mode 100644 Assets/Scripts/InputHandler/ControllerManager.cs create mode 100644 Assets/Scripts/InputHandler/ControllerManager.cs.meta create mode 100644 Assets/Scripts/InputHandler/ControllerMapperAsset.cs create mode 100644 Assets/Scripts/InputHandler/ControllerMapperAsset.cs.meta create mode 100644 Assets/Scripts/InputHandler/InputConstants.cs create mode 100644 Assets/Scripts/InputHandler/InputConstants.cs.meta create mode 100644 Assets/Scripts/InputHandler/InputContext.cs create mode 100644 Assets/Scripts/InputHandler/InputContext.cs.meta create mode 100644 Assets/Scripts/InputHandler/InputManager.cs create mode 100644 Assets/Scripts/InputHandler/InputManager.cs.meta create mode 100644 Assets/Scripts/InputHandler/InputMapper.cs create mode 100644 Assets/Scripts/InputHandler/InputMapper.cs.meta create mode 100644 Assets/Scripts/InputHandler/InputMapperAsset.cs create mode 100644 Assets/Scripts/InputHandler/InputMapperAsset.cs.meta create mode 100644 Assets/Scripts/InputHandler/MappedInput.cs create mode 100644 Assets/Scripts/InputHandler/MappedInput.cs.meta create mode 100644 Assets/Scripts/InputHandler/XboxInputConstants.cs create mode 100644 Assets/Scripts/InputHandler/XboxInputConstants.cs.meta diff --git a/Assets/ControllerMapper.asset b/Assets/ControllerMapper.asset new file mode 100644 index 0000000000000000000000000000000000000000..c3741bedb315dd362fa5f69361da3a844ec87c91 GIT binary patch literal 4360 zcmeH~Ic(HG7=?dlHy8JP-}e~^5bk3)ANM)@;3I_fw8s7F`)KK1ePsoTG@cfP+q@}uod&->oxcOG8)RJ{Ie{)0#L zgWZUGjKcU@M@rj7N}Pu-TI7yANl57>#*#pc(}lkxBjDpuSD`T0LF)@<&Oo2>i3o3i z&O-E=wbs%zZd6I>U7%APiI3{kM0ixE)^JC*KxZ(};Tq|feCi`Ssx!uLM;;;1Gtl7~ zjzw|O`rPP4CpdHGIfp)EvF`U^-SOZ&%6*uinC8)SarKN&2lSsohyL@DIwckFG{R37 z^2y{W@`UnvF6JJa7U=WInbX*UgDf8OMg0firm)c^^DV>X}BY+ z(B6W=JZGVnoB!(1Hr&>qLyn8abzcSfQ)jM;PpbU)pie%}@MeS}Xr$hSyp7F9+B8*IW6oAXobJ zR{kpuuayy8-_z(b|5d1UKDPd9!)^UFWt{tm`)aM>TE7>4>aR20)?aV9t=~|_L;Veg zC&fqm8VdC{lHbHRi|s$|gMi!qZz7NJf3u0V{pUW_`gZC6DnR|Ca&R{@g;J z`EN%Z=l>4FZGU!_@z9@LhTHz{Hr&pi_lI8B*56ykL;Zb*C*>~M_fVLBiaf^uwBfe@ zym#XK-*4h=|62^V^KS)@^S_Ne#{YK1?fu_DeHCx(A28hZ=U^ER{pmE^_WzLKwm$zq z;`~2c#zXxh0q^ei3%gs-=X|fwI^?_gV$RF&mHxABxjy$m3mV-SKa0l69&c#Bm-pQv zUxKF)rDN3h1+~Z{m=TYl{W0`!fE9s$JQMHPysiqwF zGrk*0sdiC407OzhpEGH7)Zv-H?NVS*KOYqTI{ZS_MAG#1^Q`+z+f#S*uTH;h{V+SB zhAKZ52PzI!9H=-@aiHSBe{w)Qf1%Afd?xeLlCKU0udmN7bY%txT=V$G8G2AN~S4CA(); + AssetDatabase.CreateAsset(asset, "Assets/ControllerMapper.asset"); + AssetDatabase.SaveAssets(); + + EditorUtility.FocusProjectWindow(); + + Selection.activeObject = asset; + } + } +} \ No newline at end of file diff --git a/Assets/Editor/InputHandler/CreateControllerMapperAsset.cs.meta b/Assets/Editor/InputHandler/CreateControllerMapperAsset.cs.meta new file mode 100644 index 0000000..b030eaf --- /dev/null +++ b/Assets/Editor/InputHandler/CreateControllerMapperAsset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 37a276da6a074c149a173094095c1e94 +timeCreated: 1434958498 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Materials/ChildMaterial.mat b/Assets/Materials/ChildMaterial.mat index 874f1fec16844617442ecbef389b445cd3e61a5f..ff3fa900bc36893ce066a1ac189e65c62b4d78a7 100644 GIT binary patch delta 38 rcmcbkc1LZ4l&};70~-SaL%ef-PJR&sg8=_|yL&CGY(RLjiLeF$+2RZy delta 38 lcmcbkc1LZ4l(1BTJsSf9L%ef-PJR)P!O&n2!;?*fH2}=X30?pI diff --git a/Assets/Plugins.meta b/Assets/Plugins.meta new file mode 100644 index 0000000..c8171b5 --- /dev/null +++ b/Assets/Plugins.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: b8cbf66babec0bc45aaff94731a97758 +folderAsset: yes +timeCreated: 1440215282 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86.meta b/Assets/Plugins/x86.meta new file mode 100644 index 0000000..58e77ae --- /dev/null +++ b/Assets/Plugins/x86.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d5a17b4fbbb9c794fb163e397e963e00 +folderAsset: yes +timeCreated: 1434857820 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86/XInputDotNetPure.dll b/Assets/Plugins/x86/XInputDotNetPure.dll new file mode 100644 index 0000000000000000000000000000000000000000..f44f947e3d5881f560d7bbab514508b854a76915 GIT binary patch literal 9728 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 Q{r%Tj{cr2~|Bb+Z0a(NorvLx| literal 0 HcmV?d00001 diff --git a/Assets/Plugins/x86/XInputDotNetPure.dll.meta b/Assets/Plugins/x86/XInputDotNetPure.dll.meta new file mode 100644 index 0000000..bd05672 --- /dev/null +++ b/Assets/Plugins/x86/XInputDotNetPure.dll.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: c4e96c35cd46f534592ecc07b608e110 +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86/XInputInterface.dll b/Assets/Plugins/x86/XInputInterface.dll new file mode 100644 index 0000000000000000000000000000000000000000..7efa8fa6ce5c9ccbd1c40dedff02fe03d0c30101 GIT binary patch literal 61952 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/x86_64/XInputDotNetPure.dll.meta b/Assets/Plugins/x86_64/XInputDotNetPure.dll.meta new file mode 100644 index 0000000..b1b839c --- /dev/null +++ b/Assets/Plugins/x86_64/XInputDotNetPure.dll.meta @@ -0,0 +1,14 @@ +fileFormatVersion: 2 +guid: b9f05caccaeb48146ae995df3ed431ab +PluginImporter: + serializedVersion: 1 + iconMap: {} + executionOrder: {} + isPreloaded: 0 + platformData: + Any: + enabled: 1 + settings: {} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Plugins/x86_64/XInputInterface.dll b/Assets/Plugins/x86_64/XInputInterface.dll new file mode 100644 index 0000000000000000000000000000000000000000..8a2d76416795b4bc63e9ff7aa3c57ac0a34a667b GIT binary patch literal 68608 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 literal 0 HcmV?d00001 diff --git a/Assets/Plugins/x86_64/XInputInterface.dll.meta b/Assets/Plugins/x86_64/XInputInterface.dll.meta new file mode 100644 index 0000000..bae1129 --- /dev/null +++ b/Assets/Plugins/x86_64/XInputInterface.dll.meta @@ -0,0 +1,6 @@ +fileFormatVersion: 2 +guid: ea895df4f09804d47ac0a43ce22418cb +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Prefabs/Child.prefab b/Assets/Prefabs/Child.prefab index d2b5146d54478c90bafba7ffe486265f082d098e..beacf7f4de78ee709575c576f2b523739e46f872 100644 GIT binary patch delta 1706 zcmeHHU2IfU5T4WBc9-oBt+c&c*Po?Owe6pQ61q&})Uyo#Duuat8^=K@ekQJD zK29&=Ck5?rxQ2W+4363$+Bpyicn$CJ4#|0rlCm$4X zYJod)c!Aaz{bw{B``@Bz^SDsiA7UNZgG}U?m&#hA>r?uuVfR@HV;3P&a^hU;$z8W+ z8fK4w7oWYjuXJPoe&g*|?mYd}#m>Q>mY&B}gh9IhyP-v*|DhXls%+Vrrh%$R7hm3r zqm$qI$GYY=X%&}NzVmY%I)9X@gbC|mei5sgAK0)|1Y}KRNQ7nHqlspD#kY**YCq&b zFXa7RE!WJxc%lKO7`F$%cR5A}>*zT~0}e&JyMSX1{)$HnxEhUu{{Y8X%Q%{j(J1-@ zf7ZpfsM&xG2{4nUYaomUMO_>-_A;wDkQxm(z#sTn0mo=yZ8Vc+;)Qf#R8E(*8f)}S zhK2{@ww`1bvyvkz-7aXGGR70O{*sv;Wm8|K-?WTjJ!@`-W@Qa~XF8>44c2gcR_%PAoABv42`iOOuE_gyLB@;YK&v7G;jMcNJoMvpK;U(Q;0+o_S1>yYKe)_hBN3ZE@z9 zOIsmCU!8Dm7ueRz7`~u3iJUTzCx0!4Q0;LKbDjBh4+mvuRROarqZ4pZP*FxZX!_&D zd#^roZ{Mj0^}8E8@0;MgysZ4A$7=GwJbo;4>)P(7KPFxDNOIk0UsL(I({EX)$38uO zs|2uovwn@d84So*HNWu58}&V{s2Hnw6MwIwsB^`#RT~NP&iwviU~0+gz?6JX+u}pi zaCunH1nXotI3&DsPq2HT8VmaJi-A>qubfub9+N{_sr)?H!l`Rzb%R$uc38PWIjOBu QIxfN0oA{Wu(%(?=CjlW@QUCw| delta 309 zcmaFjGQ~)RfkA8+1B0Xp0|Ns;kbMD2Gnncb=ozIMGW`4h|34!e1HwWoH0cDL~8u#{d5VDF&BQ${>n?Ve&y)>G}>v1_l!#M-hx6 zDsDxB^e`|S0LldbX-6=I$Sp|!&I*zf09pmo_mUZeA#w}|>wz*rhr>ZpYH@yPQF3ar zeraB2No9OeX=YAIW?pzLWpRb14RK13HAkUSqPMlGx-03JHu%lNl8)Cs!$2O?FTcnarWY0|4loMC$+m diff --git a/Assets/Prefabs/InputManager.prefab b/Assets/Prefabs/InputManager.prefab new file mode 100644 index 0000000000000000000000000000000000000000..d58fb1d98b28bdbda81f9e43bf3b4da549815c24 GIT binary patch literal 4460 zcmd^CTWnNC82(SU+X5;DK?Ol>)`UPL;i7UAw%i+Ax-JDT5t~DMx?Sk*sb>$BnxH2! z@}LQCCPov3#+VR@Bu0ZTULH))2Yr$kO@Ie6U}8{w(8PrLeKTivXO@lO%@|KJoipG0 z=bM@TpKtzIk&c%|W{!$ThsX?6A`h)txnkAuO1UvPIq9_mKt1{1YZs>%)_45*>Z&ux z_a*s{t}Ng4Vs~~L?mH9H1S5W5BsCuG#ou1mpgkj(Z1iK8=2u zt}u<;<05)Bo?YNS1s?jJA@vev@2!MCS%}Xho+F-7ex8RuoX?%aRmsTXusw*v_N*H2 z3Hev2{IiKC?9<}#-$gt}+~sFHoAKXM!#y>hrD$_Lb5Iy)#&{iGF(>7-xi#F~C-(yP zlzofX{+XBJ`FtF0+&)x_!)W`FIH*)hVP%t)2X>T3gYIp3$@}pLUV6Kp9LV={J+-|s zu(faR?tW1nJG(1mhvQyB;NYw?qfm&i;YI zorXvM%j!6f=rcOpMR2rHhZFs}I^5{j)sc~f*zMe1+@Vy5R#~fx{#(F}It<9%R^r;Sw>r-eA+T_;OzBN%tirfBC>QK1$PaodtAD-%l zpQqOE>8W)eaFLu^R}WV5Y-+b4t#4Ij<$=5%1lD zVFlH0f4n!Sju?yXYS&;~8V}SYf0&vlo|O5=YaC#F(@rHiiHH zQqg5>4vN-@O{OeD@LJ>@1aB>H2Adnl#@DB~N=24EH!=rPyr#JeuUE*lc^luf*1bpJKD^4L`+Z_<7jvN0XwZ*z_Ud z9tsqj#@$1KsmS2priUHpNwH~MA9m)7L$Mj$7AM7~aZkuIf;M@y*gO@-3y7oPVX`60 z_}V;+YPe3Z&!NpYE>^hc40j8u5kd_I{n0`g`!TYo9FYlmL7u08iRZ&=N#SXG53m3q zw~mxXhoXRL-hmvelwJtKxGx&Q`&C@`qaxP2R@26GhMcZw+J`J4z$Uy z?v#n*ak8MgQz~2s+T5|orTJTBAKsY-$upI>vd_u{)_VwT&XZYF+qbD~XXdHyl_F0v6BDBd*A#46NXP)X#nPZ=J#c$?Wzf-n5cR>o-=6@;Wr;wZR*R!U}U(cE@ ze?4nzKfD57u1Vb~Ifl4?;Kn!p;f6Qys%K3duh(HmKTycpKI8a-Le{t&FACY%@gZ*0}zyauRLwn5;>`Qpko!3z>bikj=UlSv>r$@=40GxQ4qt z-0yl^m*@T(?nw{E{W@)Tvd-Z^h=O7NKyNry8ZHfLt(ONHn*EVqsSbxxIqyT;%;JqV zX}3!itRZgC@q|MZ`%y87Wi0*1OSp{tqlW_t4;%~z<3cbTfPat&Ng*hQKu zN7oak3C@+BemUq<6sm5=uV`w-hDD=S1<3EbFx(V;Fg?UCp4MCg&%)G;v1NYV@C0pUMtjo3Zn3w4~DU z#B3nHh}kL;}|>ECO)Pc{m}Rr`$oL6ZPr2i FzX2d!e=7h0 literal 0 HcmV?d00001 diff --git a/Assets/Prefabs/InputManager.prefab.meta b/Assets/Prefabs/InputManager.prefab.meta new file mode 100644 index 0000000..7e77ed1 --- /dev/null +++ b/Assets/Prefabs/InputManager.prefab.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 158e745881137e04ca2086294f44d74c +timeCreated: 1440215386 +licenseType: Free +NativeFormatImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scenes/PatScene.unity b/Assets/Scenes/PatScene.unity index 0cdf9a3d4a152e5078a50cc0778ae102524ed6a3..bcf66ca173cadfa13d7b522c02b3351246d04e75 100644 GIT binary patch delta 4437 zcma)8YiwLc6`tAkBdwi>^Ku?-V>?b_JNCx*I*wh4v##wVF1Fa%aVS*9T(7TpH|*|p z@7_3Zq1vS)RZ0sqTvci-kc>b@K!1?>2StJwqzaW%pyE+kNR(DWghU{v5>l%QYQAso zV|R^HXXNpn^UZn9IWy<%e?I%&OR_yy_0*tJaqTf^*fEveC6oZ8%CPJmX|^V$d7RZ>FCSouV-MhYoL z0H?u*Khd<$r{V?Yle?TfXMHO%vp(9c( z1V#QZY0PR&4v&98t%X=mFyi2U0{>}{h{o~;TU%e7L!{J@A}HR%5qE>549KP;d?+CD zXR${MH9lUZ`1gV)|7J{jAwh+p!#l+mAD4pGKL?uDw>o$Z0s+|p<(%Bu<_nZMw7m#_ z4vOdy4Kw17VJUtKM`uCP(H%Y>C~$!Ub9w<7 z)$rVsT8f+F=ccl{HJq7F#&ktnnw5;*qgk=Um|LpE&{~h6{PA0V z{q>ig?tJVg-~8vx|9xiZ_Zxr>F<6)!EKObb+AjqgWtFNW^{SS%s9I95Y6;e;C0K8+ zooWH|%32Zz)`!VVvzCy-yQ_49nd6>xao$x=4{Hf=WG-<$nL;}3zf?4TEE=`Uj}z;| z(fH+i5sgoF%|6zC*U=ZQzfwNA^!~$q@?XT{72x1$2E0OhE2S~l3aORHVfnikbG74m z#cAbnJU!lVyplNqJ&ZNu?u5lD1#aohv9Ac(PbOzWBaNx5WyHbHf(rfyKe&t7|xzHlkqqt(~|>6 zW=_B0s3=a*;=;zKb~IcI3h|8i!jHdK^XS#|zaC%uK)!pKRpeKg%+gzd%O^T>bc&Uk zh|Kel0aftG$wNYk3WC={ctd%KI2jz`yhKN_X7_anRIXK|HVci#tMYxzgWo zdXCqlsLU}?CeC1u$g37|o6lb^=24kH51NkNPF&3jRi`{hRY!I4Vn-<>1xmDp&nIyL z697F`_a;xgqS(`A-WwJ+DJqo#&rx-4xCi_coTQ`PwQ(GB^s^gKKd+4w3FrstH%E1E zRx#k+o0SImf;+)LYMQM2M)F(`U3P{J2ZbBxC3?Mus)6lss)}ne2>VrlXpvXV`pD9CcObqneda zi(-*1)Ecw8Y0Vd-!qUvRZi!iUkD_8u8%~|mg)wy&tqUCtttE}8^X;0KgQxHB`{^Bh$A0tr>yeq6ivDmo`*U2OWA>&)O?ISZoq9Ql ztGL@_33J*(dUC|TPmHLMP4Y5@E&zvbqAk?b+s@HJ&cawrejcop4|RuoIeNN%*_>Lf zrQjiOu>!VrgpM3hD$tmV#!ckM4F2MB55P3G7s+rLWaV7t>G&$(?jU z?HfGr3a*GSJS`YxB=FM{KOxm`Gi4}@)Nffwu7&t}<+eQ7xVSZxkantdt4c91f8(#T8g_=ipk}r_!J3F4zG&TJEZU` zPQ<0X>co=8;gvG3%Q2%VEu-6~LMKob%6550kRg@$r@mMpYl0WsrL-RmZQGDPMwqA& zFWh6l(-tll6trjCwxa>ENWF6acX9s)Pn`>0IoLAjK}v!DFAr74V#FiWoJ3%5oVQ7??onfxw)Bp`m5+0uA-etJ!;)H~VwvGHx~z`pdLAN^*(> zGam!PW)?FZM#i4Wg67(4x@#`Sf;8=5W?-lV(m->7`2T;9m>yKlf@N}@xs=!q76yhC zpfHdEVu%t3rpaLzIg>YADr{!5Ok)N)1qn3RLpUH>;ULgiKpKK48#?PxK48f@S;2*6 J^8vdQMgZ;hI$Qt% diff --git a/Assets/Scripts/Child.cs b/Assets/Scripts/Child.cs new file mode 100644 index 0000000..9ff814d --- /dev/null +++ b/Assets/Scripts/Child.cs @@ -0,0 +1,31 @@ +using UnityEngine; +using System.Collections; + +[RequireComponent(typeof(Rigidbody))] +public class Child : MonoBehaviour +{ + public float Speed = 10f; + + private Rigidbody _rb; + + void Awake() + { + _rb = GetComponent(); + } + + public void Move(float xValue, float zValue) + { + // We move the child depending on the camera orientation + + Vector3 forwardDir = Camera.main.transform.forward; + Vector3 rightDir = Camera.main.transform.right; + + forwardDir.y = 0f; + forwardDir *= zValue * Speed; + + rightDir.y = 0f; + rightDir *= xValue * Speed; + + _rb.velocity = forwardDir + rightDir; + } +} diff --git a/Assets/Scripts/Child.cs.meta b/Assets/Scripts/Child.cs.meta new file mode 100644 index 0000000..b0fffb2 --- /dev/null +++ b/Assets/Scripts/Child.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: dd2c12784e85d194ca7216a12233e1fa +timeCreated: 1440215984 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/ChildController.cs b/Assets/Scripts/ChildController.cs index 10198a7..cc9a375 100644 --- a/Assets/Scripts/ChildController.cs +++ b/Assets/Scripts/ChildController.cs @@ -1,15 +1,51 @@ using UnityEngine; using System.Collections; +using InputHandler; -public class CharacterController : MonoBehaviour { +[RequireComponent(typeof(Child))] +public class ChildController : MonoBehaviour +{ + public enum Player { One, Two, Three, Four } + + public Player PlayerNumber; + + private Child _child; + + void Awake() + { + InputManager.Instance.PushActiveContext("Gameplay", (int)PlayerNumber); + InputManager.Instance.AddCallback((int)PlayerNumber, HandlePlayerInput); + + _child = GetComponent(); + } + + private void HandlePlayerInput(MappedInput input) + { + if (this == null) return; + + float xValue = 0f; + + if (input.Ranges.ContainsKey("MoveLeft")) + { + xValue = -input.Ranges["MoveLeft"]; + } + else if (input.Ranges.ContainsKey("MoveRight")) + { + xValue = input.Ranges["MoveRight"]; + } + + float zValue = 0f; + + if (input.Ranges.ContainsKey("MoveForward")) + { + zValue = input.Ranges["MoveForward"]; + } + else if (input.Ranges.ContainsKey("MoveBackward")) + { + zValue = -input.Ranges["MoveBackward"]; + } + + _child.Move(xValue, zValue); + } - // Use this for initialization - void Start () { - - } - - // Update is called once per frame - void Update () { - - } } diff --git a/Assets/Scripts/InputHandler.meta b/Assets/Scripts/InputHandler.meta new file mode 100644 index 0000000..8fe520f --- /dev/null +++ b/Assets/Scripts/InputHandler.meta @@ -0,0 +1,9 @@ +fileFormatVersion: 2 +guid: d6e2ccb4aa280a04297ff5048cde5ee1 +folderAsset: yes +timeCreated: 1434183356 +licenseType: Free +DefaultImporter: + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/InputHandler/ControllerManager.cs b/Assets/Scripts/InputHandler/ControllerManager.cs new file mode 100644 index 0000000..f911a9e --- /dev/null +++ b/Assets/Scripts/InputHandler/ControllerManager.cs @@ -0,0 +1,196 @@ +using UnityEngine; +using System.Collections; +using XInputDotNetPure; +using System.Collections.Generic; + +namespace InputHandler +{ + public class ControllerManager : InputManager + { + private bool[] _initialSetupDone; + private PlayerIndex[] _playerIndexes; + private GamePadState[] _gamePadPreviousStates; + private GamePadState[] _gamePadStates; + + protected override void InitialSetup() + { + _initialSetupDone = new bool[MAX_PLAYER_COUNT]; + _playerIndexes = new PlayerIndex[MAX_PLAYER_COUNT]; + _gamePadPreviousStates = new GamePadState[MAX_PLAYER_COUNT]; + _gamePadStates = new GamePadState[MAX_PLAYER_COUNT]; + + for (int i = 0; i < MAX_PLAYER_COUNT; i++) + { + _gamePadStates[i] = GamePad.GetState(_playerIndexes[i]); + } + } + + protected override void MapInputs() + { + for (int i = 0; i < MAX_PLAYER_COUNT; i++) + { + _gamePadPreviousStates[i] = _gamePadStates[i]; + _gamePadStates[i] = GamePad.GetState(_playerIndexes[i]); + + if (!_gamePadPreviousStates[i].IsConnected || !_initialSetupDone[i]) + { + _initialSetupDone[i] = true; + + if (_gamePadStates[i].IsConnected) + { + _playerIndexes[i] = (PlayerIndex)i; + + Debug.Log(string.Format("GamePad {0} is ready", _playerIndexes[i])); + } + } + + MapPlayerInput(_inputMappers[i], _gamePadStates[i], _gamePadPreviousStates[i]); + } + } + + // TODO: Maybe reduce it to only the inputs actually used in the game? + private void MapPlayerInput(InputMapper inputMapper, GamePadState state, GamePadState previousState) + { + foreach (int axisInt in InputMapperAsset.GetMappedXboxAxis()) + { + MapXboxAxis(axisInt, inputMapper, state); + } + + foreach (int buttonInt in InputMapperAsset.GetMappedXboxButtons()) + { + MapXboxButton(buttonInt, inputMapper, state, previousState); + } + + // TODO: Put the following code into another class, so we can have 2 distinct XboxManager and KeyboardManager classes + + // We map only the keyboard keys that are going to be used in the game + + foreach (int key in InputMapperAsset.GetMappedKeyboardKeys()) + { + inputMapper.SetRawButtonState(100 + key, Input.GetKey((KeyCode)key), Input.GetKey((KeyCode)key) && !Input.GetKeyDown((KeyCode)key)); + } + + foreach (int key in InputMapperAsset.GetMappedKeyboardKeysAxis()) + { + float value = Input.GetKey((KeyCode)key) ? 1f : 0f; + + inputMapper.SetRawAxisValue(100 + key, value); + } + } + + private void MapXboxButton(int buttonInt, InputMapper inputMapper, GamePadState state, GamePadState previousState) + { + XboxInputConstants.Buttons button = (XboxInputConstants.Buttons)buttonInt; + + bool pressed = false; + bool previouslyPressed = false; + + switch (button) + { + case XboxInputConstants.Buttons.A: + pressed = state.Buttons.A == ButtonState.Pressed; + previouslyPressed = previousState.Buttons.A == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.B: + pressed = state.Buttons.B == ButtonState.Pressed; + previouslyPressed = previousState.Buttons.B == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.X: + pressed = state.Buttons.X == ButtonState.Pressed; + previouslyPressed = previousState.Buttons.X == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.Y: + pressed = state.Buttons.Y == ButtonState.Pressed; + previouslyPressed = previousState.Buttons.Y == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.LeftShoulder: + pressed = state.Buttons.LeftShoulder == ButtonState.Pressed; + previouslyPressed = previousState.Buttons.LeftShoulder == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.RightShoulder: + pressed = state.Buttons.RightShoulder == ButtonState.Pressed; + previouslyPressed = previousState.Buttons.RightShoulder == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.Back: + pressed = state.Buttons.Back == ButtonState.Pressed; + previouslyPressed = previousState.Buttons.Back == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.Start: + pressed = state.Buttons.Start == ButtonState.Pressed; + previouslyPressed = previousState.Buttons.Start == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.LeftStick: + pressed = state.Buttons.LeftStick == ButtonState.Pressed; + previouslyPressed = previousState.Buttons.LeftStick == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.RightStick: + pressed = state.Buttons.RightStick == ButtonState.Pressed; + previouslyPressed = previousState.Buttons.RightStick == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.DPadLeft: + pressed = state.DPad.Left == ButtonState.Pressed; + previouslyPressed = previousState.DPad.Left == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.DPadRight: + pressed = state.DPad.Right == ButtonState.Pressed; + previouslyPressed = previousState.DPad.Right == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.DPadUp: + pressed = state.DPad.Up == ButtonState.Pressed; + previouslyPressed = previousState.DPad.Up == ButtonState.Pressed; + break; + case XboxInputConstants.Buttons.DPadDown: + pressed = state.DPad.Down == ButtonState.Pressed; + previouslyPressed = previousState.DPad.Down == ButtonState.Pressed; + break; + } + + inputMapper.SetRawButtonState(buttonInt, pressed, previouslyPressed); + } + + private void MapXboxAxis(int axisInt, InputMapper inputMapper, GamePadState state) + { + XboxInputConstants.Axis axis = (XboxInputConstants.Axis)axisInt; + + float value = 0f; + + switch (axis) + { + case XboxInputConstants.Axis.LeftStickLeft: + // If the left stick X value is negative, we keep it and take its absolute value + value = state.ThumbSticks.Left.X < 0f ? -state.ThumbSticks.Left.X : 0f; + break; + case XboxInputConstants.Axis.LeftStickRight: + // If the left stick X value is positive, we keep it + value = state.ThumbSticks.Left.X > 0f ? state.ThumbSticks.Left.X : 0f; + break; + case XboxInputConstants.Axis.LeftStickDown: + value = state.ThumbSticks.Left.Y < 0f ? -state.ThumbSticks.Left.Y : 0f; + break; + case XboxInputConstants.Axis.LeftStickUp: + value = state.ThumbSticks.Left.Y > 0f ? state.ThumbSticks.Left.Y : 0f; + break; + case XboxInputConstants.Axis.RightStickLeft: + value = state.ThumbSticks.Right.X < 0f ? -state.ThumbSticks.Right.X : 0f; + break; + case XboxInputConstants.Axis.RightStickRight: + value = state.ThumbSticks.Right.X > 0f ? state.ThumbSticks.Right.X : 0f; + break; + case XboxInputConstants.Axis.RightStickDown: + value = state.ThumbSticks.Right.Y < 0f ? -state.ThumbSticks.Right.Y : 0f; + break; + case XboxInputConstants.Axis.RightStickUp: + value = state.ThumbSticks.Right.Y > 0f ? state.ThumbSticks.Right.Y : 0f; + break; + case XboxInputConstants.Axis.TriggerLeft: + value = state.Triggers.Left; + break; + case XboxInputConstants.Axis.TriggerRight: + value = state.Triggers.Right; + break; + } + + inputMapper.SetRawAxisValue(axisInt, value); + } + } +} diff --git a/Assets/Scripts/InputHandler/ControllerManager.cs.meta b/Assets/Scripts/InputHandler/ControllerManager.cs.meta new file mode 100644 index 0000000..f25f973 --- /dev/null +++ b/Assets/Scripts/InputHandler/ControllerManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 6e33ba5066fe01747b2722e6f089a2ba +timeCreated: 1436627825 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: -50 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/InputHandler/ControllerMapperAsset.cs b/Assets/Scripts/InputHandler/ControllerMapperAsset.cs new file mode 100644 index 0000000..bf77e1d --- /dev/null +++ b/Assets/Scripts/InputHandler/ControllerMapperAsset.cs @@ -0,0 +1,197 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace InputHandler +{ + // TODO: REFACTOR THE WHOLE CLASS, IT STINKS + + [SerializeField] + public class ControllerMapperAsset : InputMapperAsset + { + [Serializable] + public class XboxContext + { + public string name; + public XboxAction[] ButtonActions; + public XboxRange[] AxisRanges; + public XboxState[] ButtonStates; + } + + [Serializable] + public class XboxAction + { + public string name; + public XboxInputConstants.Buttons[] XboxButtons; + public KeyCode[] KeyboardKeys; + } + + [Serializable] + public class XboxRange + { + public string name; + public XboxInputConstants.Axis[] Axis; + public KeyCode[] KeyboardKeys; + } + + [Serializable] + public class XboxState + { + public string name; + public XboxInputConstants.Buttons[] XboxButtons; + public KeyCode[] KeyboardKeys; + } + + public XboxContext[] Contexts; + + // TODO: Temporary + private List _mappedKeyboardKeysAxis; + private List _mappedKeyboardKeys; + private List _mappedXboxAxis; + private List _mappedXboxButtons; + + // Context -> InputMap + public override Dictionary GetMappedContexts() + { + _mappedKeyboardKeys = new List(); + _mappedKeyboardKeysAxis = new List(); + _mappedXboxButtons = new List(); + _mappedXboxAxis = new List(); + + Dictionary mappedContexts = new Dictionary(); + + foreach (XboxContext xboxContext in Contexts) + { + InputMap inputMap = new InputMap(); + + inputMap.ButtonsToActionsMap = new List[xboxContext.ButtonActions.Length]; + inputMap.ButtonsToStatesMap = new List[xboxContext.ButtonStates.Length]; + inputMap.AxisToRangesMap = new List[xboxContext.AxisRanges.Length]; + + for (int i = 0; i < xboxContext.ButtonActions.Length; i++) + { + XboxAction buttonAction = xboxContext.ButtonActions[i]; + + inputMap.ButtonsToActionsMap[i] = new List(); + + foreach (XboxInputConstants.Buttons xboxButton in buttonAction.XboxButtons) + { + // TODO: We need to manage this in the InputMapper side + inputMap.ButtonsToActionsMap[i].Add(new InputToActionMap { action = buttonAction.name, input = (int)xboxButton }); + + if (!_mappedXboxButtons.Contains((int)xboxButton)) + { + _mappedXboxButtons.Add((int)xboxButton); + } + } + + // Keyboard part + foreach (KeyCode key in buttonAction.KeyboardKeys) + { + // TODO: Find a way to not add 100 to the code (for now, it's necessary since there are overlaps with the xbox enum) + inputMap.ButtonsToActionsMap[i].Add(new InputToActionMap { action = buttonAction.name, input = 100 + (int)key }); + + // TODO: Temporary + if (!_mappedKeyboardKeys.Contains((int)key)) + { + _mappedKeyboardKeys.Add((int)key); + } + } + } + + for (int i = 0; i < xboxContext.ButtonStates.Length; i++) + { + XboxState buttonState = xboxContext.ButtonStates[i]; + + inputMap.ButtonsToStatesMap[i] = new List(); + + foreach (XboxInputConstants.Buttons xboxButton in buttonState.XboxButtons) + { + // TODO: We need to manage this in the InputMapper side + inputMap.ButtonsToStatesMap[i].Add(new InputToActionMap() { action = buttonState.name, input = (int)xboxButton }); + + if (!_mappedXboxButtons.Contains((int)xboxButton)) + { + _mappedXboxButtons.Add((int)xboxButton); + } + } + + // Keyboard part + foreach (KeyCode key in buttonState.KeyboardKeys) + { + // TODO: Find a way to not add 100 to the code (for now, it's necessary since there are overlaps with the xbox enum) + inputMap.ButtonsToStatesMap[i].Add(new InputToActionMap { action = buttonState.name, input = 100 + (int)key }); + + // TODO: Temporary + if (!_mappedKeyboardKeys.Contains((int)key)) + { + _mappedKeyboardKeys.Add((int)key); + } + } + } + + for (int i = 0; i < xboxContext.AxisRanges.Length; i++) + { + XboxRange axisRange = xboxContext.AxisRanges[i]; + + inputMap.AxisToRangesMap[i] = new List(); + + foreach (XboxInputConstants.Axis xboxAxis in axisRange.Axis) + { + // TODO: We need to manage this in the InputMapper side + inputMap.AxisToRangesMap[i].Add(new InputToActionMap() { action = axisRange.name, input = (int)xboxAxis }); + + if (!_mappedXboxAxis.Contains((int)xboxAxis)) + { + _mappedXboxAxis.Add((int)xboxAxis); + } + } + + // Keyboard part + foreach (KeyCode key in axisRange.KeyboardKeys) + { + // TODO: Find a way to not add 100 to the code (for now, it's necessary since there are overlaps with the xbox enum) + inputMap.AxisToRangesMap[i].Add(new InputToActionMap { action = axisRange.name, input = 100 + (int)key }); + + // TODO: Temporary + if (!_mappedKeyboardKeysAxis.Contains((int)key)) + { + _mappedKeyboardKeysAxis.Add((int)key); + } + } + } + + InputContext context = new InputContext(xboxContext.name, inputMap); + + mappedContexts.Add(xboxContext.name, context); + } + + return mappedContexts; + } + + // TODO: Probably temporary, until we find a better way and all the classes are refactored + + // Utility method to be used by the ControllerManager class + public override List GetMappedKeyboardKeysAxis() + { + return _mappedKeyboardKeysAxis; + } + + // Utility method to be used by the ControllerManager class + public override List GetMappedKeyboardKeys() + { + return _mappedKeyboardKeys; + } + + public override List GetMappedXboxAxis() + { + return _mappedXboxAxis; + } + + public override List GetMappedXboxButtons() + { + return _mappedXboxButtons; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/InputHandler/ControllerMapperAsset.cs.meta b/Assets/Scripts/InputHandler/ControllerMapperAsset.cs.meta new file mode 100644 index 0000000..aedca80 --- /dev/null +++ b/Assets/Scripts/InputHandler/ControllerMapperAsset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 539aad81a9327404e8e67bb53c540d91 +timeCreated: 1436387267 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/InputHandler/InputConstants.cs b/Assets/Scripts/InputHandler/InputConstants.cs new file mode 100644 index 0000000..0b823e8 --- /dev/null +++ b/Assets/Scripts/InputHandler/InputConstants.cs @@ -0,0 +1,19 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; + +namespace InputHandler +{ + public struct InputMap + { + public List[] ButtonsToActionsMap; + public List[] ButtonsToStatesMap; + public List[] AxisToRangesMap; + } + + public struct InputToActionMap + { + public int input; + public string action; + } +} diff --git a/Assets/Scripts/InputHandler/InputConstants.cs.meta b/Assets/Scripts/InputHandler/InputConstants.cs.meta new file mode 100644 index 0000000..5bc8258 --- /dev/null +++ b/Assets/Scripts/InputHandler/InputConstants.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: baa0e457a4ff21a4a8eb7d57efeef697 +timeCreated: 1434996179 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/InputHandler/InputContext.cs b/Assets/Scripts/InputHandler/InputContext.cs new file mode 100644 index 0000000..1ca6d92 --- /dev/null +++ b/Assets/Scripts/InputHandler/InputContext.cs @@ -0,0 +1,70 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace InputHandler +{ + public class InputContext + { + private Dictionary _mappedButtons; + private Dictionary _mappedStates; + private Dictionary _mappedAxis; + + private string _name; + + public string Name + { + get { return _name; } + } + + + public InputContext(string contextName, InputMap inputMap) + { + _name = contextName; + + _mappedButtons = new Dictionary(); + _mappedStates = new Dictionary(); + _mappedAxis = new Dictionary(); + + foreach (List buttonsToActionsMap in inputMap.ButtonsToActionsMap) + { + foreach (InputToActionMap buttonToActionMap in buttonsToActionsMap) + { + _mappedButtons.Add(buttonToActionMap.input, buttonToActionMap.action); + } + } + + foreach (List buttonsToStatesMap in inputMap.ButtonsToStatesMap) + { + foreach (InputToActionMap buttonToStateMap in buttonsToStatesMap) + { + _mappedStates.Add(buttonToStateMap.input, buttonToStateMap.action); + } + } + + foreach (List axisToRangesMap in inputMap.AxisToRangesMap) + { + foreach (InputToActionMap axisToRangeMap in axisToRangesMap) + { + _mappedAxis.Add(axisToRangeMap.input, axisToRangeMap.action); + } + } + } + + public string GetActionForButton(int button) + { + return _mappedButtons.ContainsKey(button) ? _mappedButtons[button] : null; + } + + public string GetStateForButton(int button) + { + return _mappedStates.ContainsKey(button) ? _mappedStates[button] : null; + } + + public string GetRangeForAxis(int axis) + { + return _mappedAxis.ContainsKey(axis) ? _mappedAxis[axis] : null; + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/InputHandler/InputContext.cs.meta b/Assets/Scripts/InputHandler/InputContext.cs.meta new file mode 100644 index 0000000..dc2aa61 --- /dev/null +++ b/Assets/Scripts/InputHandler/InputContext.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 4d99cd0919594864482148f723dfa8e2 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Scripts/InputHandler/InputManager.cs b/Assets/Scripts/InputHandler/InputManager.cs new file mode 100644 index 0000000..2c0e292 --- /dev/null +++ b/Assets/Scripts/InputHandler/InputManager.cs @@ -0,0 +1,98 @@ +using UnityEngine; +using System.Collections; +using XInputDotNetPure; +using System; +using System.Collections.Generic; + +namespace InputHandler +{ + public abstract class InputManager : MonoBehaviour + { + public static InputManager Instance + { + get + { + return _instance; + } + } + + private static InputManager _instance; + + protected InputMapper[] _inputMappers; + + public int MAX_PLAYER_COUNT = 2; + public InputMapperAsset InputMapperAsset; + + protected abstract void InitialSetup(); + protected abstract void MapInputs(); + + void Awake() + { + if (_instance != null) + { + Destroy(gameObject); + } + else + { + _instance = this; + + _inputMappers = new InputMapper[MAX_PLAYER_COUNT]; + + Dictionary mappedContexts = InputMapperAsset.GetMappedContexts(); + + for (int i = 0; i < MAX_PLAYER_COUNT; i++) + { + _inputMappers[i] = new InputMapper(mappedContexts); + } + + // Do the needed initial setup in the derived classes + InitialSetup(); + } + } + + void Update() + { + // Do the input mapping here in the derived classes + MapInputs(); + + for (int i = 0; i < _inputMappers.Length; i++) + { + _inputMappers[i].Dispatch(); + } + } + + public void AddCallback(int playerIndex, Action action) + { + _inputMappers[playerIndex].AddCallback(action); + } + + public void PushActiveContext(string name, int playerIndex) + { + _inputMappers[playerIndex].PushActiveContext(name); + } + + public void PopActiveContext(int playerIndex) + { + // TODO: Give the choice to remove an active context not on top + _inputMappers[playerIndex].PopActiveContext(); + } + + public void ClearContexts() + { + // For now, all input mappers are gonna have the same contexts at the same time + + for (int i = 0; i < _inputMappers.Length; i++) + { + _inputMappers[i].ClearActiveContexts(); + } + } + + void LateUpdate() + { + for (int i = 0; i < _inputMappers.Length; i++) + { + _inputMappers[i].ResetInputs(); + } + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/InputHandler/InputManager.cs.meta b/Assets/Scripts/InputHandler/InputManager.cs.meta new file mode 100644 index 0000000..7e29a63 --- /dev/null +++ b/Assets/Scripts/InputHandler/InputManager.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 967b7f4e180b49f4fb6f53702c67aa34 +timeCreated: 1436627825 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: -100 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/InputHandler/InputMapper.cs b/Assets/Scripts/InputHandler/InputMapper.cs new file mode 100644 index 0000000..25dc580 --- /dev/null +++ b/Assets/Scripts/InputHandler/InputMapper.cs @@ -0,0 +1,205 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +/* + Strongly inspired from Mike Lewis' excellent post about input handling + http://www.gamedev.net/blog/355/entry-2250186-designing-a-robust-input-handling-system-for-games/ +*/ + +namespace InputHandler +{ + public class InputMapper + { + // Right now, the only active context is the peek of the stack, but when we will need multiple contexts at once, this is going to be useful + private Dictionary _contexts; + private Stack _activeContexts; + + private List> _callbacks; + + private MappedInput _currentFrameMappedInput; + + public InputMapper(Dictionary contexts) + { + _contexts = contexts; + _activeContexts = new Stack(); + _callbacks = new List>(); + _currentFrameMappedInput = new MappedInput(); + } + + public void Dispatch() + { + foreach (Action callback in _callbacks) + { + callback(_currentFrameMappedInput); + } + } + + public void PushActiveContext(string name) + { + InputContext context = _contexts[name]; + + if (_activeContexts.Count == 0 || _activeContexts.Peek().Name != name) + { + _activeContexts.Push(context); + } + } + + public void PopActiveContext() + { + if (_activeContexts.Count != 0) + { + _activeContexts.Pop(); + } + } + + public void ClearActiveContexts() + { + _activeContexts.Clear(); + } + + public void AddCallback(Action callback) + { + _callbacks.Add(callback); + } + + public void SetRawButtonState(int button, bool pressed, bool previouslyPressed) + { + string action = GetActionForButton(button); + string state = GetStateForButton(button); + + if (pressed) + { + if (!previouslyPressed && action != null) + { + _currentFrameMappedInput.Actions.Add(action); + return; + } + + if (state != null) + { + _currentFrameMappedInput.States.Add(state); + return; + } + } + + // Uncomment if we start to have problems + //RemoveButtonFromLists(button); + } + + public void SetRawAxisValue(int axis, float value) + { + // TODO: Have contexts for every single player? + + // TODO: Use the commented code below instead when we will want multiple contexts to be available at the same time (maybe for when the player holds a weapon?). We'll keep it simple for now. + + /* + foreach (InputContext activeContext in _activeContexts) + { + InputConstants.Ranges range = activeContext.GetRangeForAxis(axis); + + if (range != InputConstants.Ranges.None) + { + // We only want the first active "range behaviour" of the player to handle the ranges values, since we don't want multiple actions to react to it + _mappedInputs[playerIndex].Ranges[range] = value; + break; + } + }*/ + + if (value != 0f) + { + string range = null; + + if (_activeContexts.Count != 0) + { + range = _activeContexts.Peek().GetRangeForAxis(axis); + } + + if (range != null) + { + _currentFrameMappedInput.Ranges[range] = value; + } + } + } + + public void ResetInputs() + { + _currentFrameMappedInput.Clear(); + } + + #region Helper methods + + private string GetActionForButton(int button) + { + // TODO: Have contexts for every single player? + + // TODO: Use the commented code below instead when we will want multiple contexts to be available at the same time (maybe for when the player holds a weapon?). We'll keep it simple for now. + + /* + foreach (InputContext activeContext in _activeContexts) + { + InputConstants.Actions action = activeContext.GetActionForButton(button); + + if (action != InputConstants.Actions.None) + { + return action; + } + }*/ + + string action = null; + + if (_activeContexts.Count != 0) + { + action = _activeContexts.Peek().GetActionForButton(button); + } + + return action; + } + + private string GetStateForButton(int button) + { + // TODO: Have contexts for every single player? + + // TODO: Use the commented code below instead when we will want multiple contexts to be available at the same time (maybe for when the player holds a weapon?). We'll keep it simple for now. + + /* + foreach (InputContext activeContext in _activeContexts) + { + InputConstants.States state = activeContext.GetStateForButton(button); + + if (state != InputConstants.States.None) + { + return state; + } + }*/ + + string state = null; + + if (_activeContexts.Count != 0) + { + state = _activeContexts.Peek().GetStateForButton(button); + } + + return state; + } + + private void RemoveButtonFromLists(int button) + { + string action = GetActionForButton(button); + string state = GetStateForButton(button); + + if (action != null) + { + _currentFrameMappedInput.Actions.Remove(action); + } + + if (state != null) + { + _currentFrameMappedInput.States.Remove(state); + } + } + + #endregion + } +} diff --git a/Assets/Scripts/InputHandler/InputMapper.cs.meta b/Assets/Scripts/InputHandler/InputMapper.cs.meta new file mode 100644 index 0000000..f760acc --- /dev/null +++ b/Assets/Scripts/InputHandler/InputMapper.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: 586455317dda0b543a30eff647db722e +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Scripts/InputHandler/InputMapperAsset.cs b/Assets/Scripts/InputHandler/InputMapperAsset.cs new file mode 100644 index 0000000..f9bbbaa --- /dev/null +++ b/Assets/Scripts/InputHandler/InputMapperAsset.cs @@ -0,0 +1,20 @@ +using UnityEngine; +using System.Collections; +using System; +using System.Collections.Generic; + +namespace InputHandler +{ + public abstract class InputMapperAsset : ScriptableObject + { + public enum InputTypes { Action, State, Range } + + public abstract Dictionary GetMappedContexts(); + + // TODO: Probably temporary, until we find a better way and all the classes are refactored + public abstract List GetMappedKeyboardKeysAxis(); + public abstract List GetMappedKeyboardKeys(); + public abstract List GetMappedXboxAxis(); + public abstract List GetMappedXboxButtons(); + } +} \ No newline at end of file diff --git a/Assets/Scripts/InputHandler/InputMapperAsset.cs.meta b/Assets/Scripts/InputHandler/InputMapperAsset.cs.meta new file mode 100644 index 0000000..beec650 --- /dev/null +++ b/Assets/Scripts/InputHandler/InputMapperAsset.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 3a5ffa04260e8db4a9eab84c1e6b11ae +timeCreated: 1434962375 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/Assets/Scripts/InputHandler/MappedInput.cs b/Assets/Scripts/InputHandler/MappedInput.cs new file mode 100644 index 0000000..b244bce --- /dev/null +++ b/Assets/Scripts/InputHandler/MappedInput.cs @@ -0,0 +1,23 @@ +using UnityEngine; +using System.Collections; +using System.Collections.Generic; +using System; + +namespace InputHandler +{ + // Specific to the game + public class MappedInput + { + // We use hashets for the actions and the states because we just need to check if they are in the collection, and not retrieve them + public HashSet Actions = new HashSet(); + public HashSet States = new HashSet(); + public Dictionary Ranges = new Dictionary(); + + public void Clear() + { + Actions.Clear(); + States.Clear(); + Ranges.Clear(); + } + } +} \ No newline at end of file diff --git a/Assets/Scripts/InputHandler/MappedInput.cs.meta b/Assets/Scripts/InputHandler/MappedInput.cs.meta new file mode 100644 index 0000000..40b9d51 --- /dev/null +++ b/Assets/Scripts/InputHandler/MappedInput.cs.meta @@ -0,0 +1,8 @@ +fileFormatVersion: 2 +guid: d5fe308a0d85530408827f4357cc1ff5 +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: diff --git a/Assets/Scripts/InputHandler/XboxInputConstants.cs b/Assets/Scripts/InputHandler/XboxInputConstants.cs new file mode 100644 index 0000000..e5ab19d --- /dev/null +++ b/Assets/Scripts/InputHandler/XboxInputConstants.cs @@ -0,0 +1,43 @@ +using UnityEngine; +using System.Collections; + +namespace InputHandler +{ + //TODO: When we will be ready to read raw inputs from a file, we need this to simply be generic "BUTTON_ONE, BUTTON_TWO, etc." + + public class XboxInputConstants + { + // These buttons will eventually map to controls saved in a file + public enum Buttons + { + A, + B, + X, + Y, + LeftShoulder, + RightShoulder, + Back, + Start, + LeftStick, + RightStick, + DPadLeft, + DPadRight, + DPadUp, + DPadDown, + } + + public enum Axis + { + LeftStickLeft, + LeftStickRight, + LeftStickUp, + LeftStickDown, + RightStickLeft, + RightStickRight, + RightStickUp, + RightStickDown, + TriggerLeft, + TriggerRight + } + } +} diff --git a/Assets/Scripts/InputHandler/XboxInputConstants.cs.meta b/Assets/Scripts/InputHandler/XboxInputConstants.cs.meta new file mode 100644 index 0000000..c9ed15d --- /dev/null +++ b/Assets/Scripts/InputHandler/XboxInputConstants.cs.meta @@ -0,0 +1,12 @@ +fileFormatVersion: 2 +guid: 4b46fefecf9412e46bdad7c26a00d537 +timeCreated: 1436628179 +licenseType: Free +MonoImporter: + serializedVersion: 2 + defaultReferences: [] + executionOrder: 0 + icon: {instanceID: 0} + userData: + assetBundleName: + assetBundleVariant: diff --git a/ProjectSettings/ProjectSettings.asset b/ProjectSettings/ProjectSettings.asset index 89df263bd7b809b163a3a57e2d72c7016a6f331d..52c12ea6844109fa04afd10976ddf293db6f1ca9 100644 GIT binary patch literal 36157 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 H@}K_)hzku$ literal 35008 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