module Drasil.GamePhysics.Expressions where

import Language.Drasil

import Drasil.GamePhysics.Unitals (massj, velj, torquej, forcej, angAccj)
import Data.Drasil.Quantities.Physics (time, momentOfInertia, 
    gravitationalAccel, angularVelocity)

transMotExpr :: PExpr
transMotExpr :: PExpr
transMotExpr = forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UnitalChunk
gravitationalAccel forall r. ExprC r => r -> r -> r
`addRe` (forall r f a.
(ExprC r, HasUID f, HasSymbol f, HasUID a, HasSymbol a) =>
f -> a -> r
apply1 UnitalChunk
forcej UnitalChunk
time forall r. ExprC r => r -> r -> r
$/ forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UnitalChunk
massj)

transMotExprDeriv1 :: (ModelExprC r, ExprC r) => r
transMotExprDeriv1 :: forall r. (ModelExprC r, ExprC r) => r
transMotExprDeriv1 = forall r. ModelExprC r => r -> r -> r
defines (forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UnitalChunk
angAccj) forall a b. (a -> b) -> a -> b
$ forall r c. (ModelExprC r, HasUID c, HasSymbol c) => r -> c -> r
deriv (forall r f a.
(ExprC r, HasUID f, HasSymbol f, HasUID a, HasSymbol a) =>
f -> a -> r
apply1 UnitalChunk
velj UnitalChunk
time) UnitalChunk
time

rotMotExpr :: PExpr
rotMotExpr :: PExpr
rotMotExpr = forall r f a.
(ExprC r, HasUID f, HasSymbol f, HasUID a, HasSymbol a) =>
f -> a -> r
apply1 UnitalChunk
torquej UnitalChunk
time forall r. ExprC r => r -> r -> r
$/ forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UnitalChunk
momentOfInertia

rotMotExprDeriv1 :: (ModelExprC r, ExprC r) => r
rotMotExprDeriv1 :: forall r. (ModelExprC r, ExprC r) => r
rotMotExprDeriv1 = forall r. ModelExprC r => r -> r -> r
defines (forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UnitalChunk
angAccj) forall a b. (a -> b) -> a -> b
$ forall r c. (ModelExprC r, HasUID c, HasSymbol c) => r -> c -> r
deriv (forall r f a.
(ExprC r, HasUID f, HasSymbol f, HasUID a, HasSymbol a) =>
f -> a -> r
apply1 UnitalChunk
angularVelocity UnitalChunk
time) UnitalChunk
time