summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMatthias Schiffer <matthias@gamezock.de>2010-04-10 13:21:04 +0200
committerMatthias Schiffer <matthias@gamezock.de>2010-04-10 13:21:04 +0200
commit083619cc87aa24b6ad32b92cf40798efc11d4ff9 (patch)
tree8d6a38c2619e7c1032b891a3d78862486f1162ab
parent6af7b89939100aa6cd978496b549eb5feb807e9c (diff)
downloadhtanks-083619cc87aa24b6ad32b92cf40798efc11d4ff9.tar
htanks-083619cc87aa24b6ad32b92cf40798efc11d4ff9.zip
WiimotePlayer: Use IR sensor for aiming
-rw-r--r--src/WiimotePlayer.hs32
1 files changed, 20 insertions, 12 deletions
diff --git a/src/WiimotePlayer.hs b/src/WiimotePlayer.hs
index 7804b26..035c975 100644
--- a/src/WiimotePlayer.hs
+++ b/src/WiimotePlayer.hs
@@ -8,11 +8,13 @@ import Control.Monad
import Data.Bits
import Data.Function (on)
import Data.List (sortBy)
+import Data.Maybe
import Data.Ratio ((%))
import Data.Typeable
import HWiid
import Player
+import Tank
data WiimotePlayer = WiimotePlayer Wiimote
@@ -36,30 +38,36 @@ instance Player WiimotePlayer where
let nx = ((fromIntegral . extNunchukStickX $ ext) - 0x80)/0x80
ny = ((fromIntegral . extNunchukStickY $ ext) - 0x80)/0x80
in if (nx*nx + ny*ny) < 0.4 then (x, y) else (x+nx, y+ny)
-
- --ax = aimx - (fromRational . toRational . tankX $ tank)
- --ay = aimy - (fromRational . toRational . tankY $ tank)
+
+ aim = handleIR state
+ aangle = if isJust aim
+ then
+ let aimx = fst $ fromJust aim
+ aimy = snd $ fromJust aim
+ ax = aimx - (fromRational . toRational . tankX $ tank)
+ ay = aimy - (fromRational . toRational . tankY $ tank)
+ in if (ax /= 0 || ay /= 0) then Just $ fromRational $ round ((atan2 ay ax)*1000000*180/pi)%1000000 else Nothing
+ else
+ Nothing
+
move = (mx /= 0 || my /= 0)
angle = atan2 my mx
moveangle = if move then Just $ fromRational $ round ((angle - (sin $ 8*x)/8)*1000000*180/pi)%1000000 else Nothing
-
-
- --aangle = if (ax /= 0 || ay /= 0) then Just $ fromRational $ round ((atan2 ay ax)*1000000*180/pi)%1000000 else Nothing
- when foo $ print $ handleIR state
- return (WiimotePlayer wiimote, moveangle, move, Nothing, shoot)
+ when foo $ print $ state
+ return (WiimotePlayer wiimote, moveangle, move, aangle, shoot)
irXScale :: Float
-irXScale = 1
+irXScale = 20
irXTranslate :: Float
-irXTranslate = 0
+irXTranslate = 0 + 7
irYScale :: Float
-irYScale = 1
+irYScale = 20
irYTranslate :: Float
-irYTranslate = 0
+irYTranslate = -10 + 8
handleIR :: WiimoteState -> Maybe (Float, Float)
handleIR state = handle $ sortIRSourcesByPos $ take 2 $ sortIRSourcesBySize $ stateIRSources state