aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Spear/Scene/GameObject.hs22
1 files changed, 16 insertions, 6 deletions
diff --git a/Spear/Scene/GameObject.hs b/Spear/Scene/GameObject.hs
index a109a35..53a03b5 100644
--- a/Spear/Scene/GameObject.hs
+++ b/Spear/Scene/GameObject.hs
@@ -17,6 +17,7 @@ module Spear.Scene.GameObject
17, goUpdate 17, goUpdate
18, setAnimation 18, setAnimation
19, setAnimationSpeed 19, setAnimationSpeed
20, setAxis
20, withCollisioners 21, withCollisioners
21, setCollisioners 22, setCollisioners
22, setViewInverse 23, setViewInverse
@@ -132,13 +133,17 @@ instance S2.Spatial2 GameObject where
132 in go { transform = M3.transform (M3.right m) (M3.forward m) pos } 133 in go { transform = M3.transform (M3.right m) (M3.forward m) pos }
133 134
134 lookAt p go = 135 lookAt p go =
135 let position = S2.pos go 136 let position = S2.pos go
136 fwd = V2.normalise $ p - position 137 fwd = V2.normalise $ p - position
137 r = perp fwd 138 r = perp fwd
139 toDeg = (*(180/pi))
138 in 140 in
139 go 141 go
140 { transform = M3.transform r fwd position 142 { transform = M3.transform r fwd position
141 , angle = acos $ r `V2.dot` V2.unitx 143 , angle = (-180) +
144 if V2.y r > 0
145 then toDeg . acos $ r `V2.dot` V2.unitx
146 else (+180) . toDeg . acos $ r `V2.dot` (-V2.unitx)
142 } 147 }
143 148
144 149
@@ -206,7 +211,12 @@ setAnimation a go = case renderer go of
206setAnimationSpeed :: AM.AnimationSpeed -> GameObject -> GameObject 211setAnimationSpeed :: AM.AnimationSpeed -> GameObject -> GameObject
207setAnimationSpeed s go = case renderer go of 212setAnimationSpeed s go = case renderer go of
208 Left _ -> go 213 Left _ -> go
209 Right amr -> go { renderer = Right $ AM.setAnimationSpeed s amr } 214 Right amr -> go { renderer = Right $ AM.setAnimationSpeed s amr }
215
216
217-- | Set the game object's axis of rotation.
218setAxis :: Vector3 -> GameObject -> GameObject
219setAxis ax go = go { axis = ax }
210 220
211 221
212-- | Set the game object's collisioners. 222-- | Set the game object's collisioners.
@@ -238,7 +248,7 @@ goRender sprog aprog cam go =
238 transf = S2.transform go 248 transf = S2.transform go
239 normal = fastNormalMatrix modelview 249 normal = fastNormalMatrix modelview
240 modelview = case style of 250 modelview = case style of
241 RPG -> view * rpgTransform 0 a axis' (M3.position transf) viewI 251 RPG -> view * goRPGtransform go
242 PLT -> view * pltTransform transf 252 PLT -> view * pltTransform transf
243 in case renderer go of 253 in case renderer go of
244 Left smr -> 254 Left smr ->