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 = UnitalChunk -> r
forall c. (HasUID c, HasSymbol c) => c -> r
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UnitalChunk
gravitationalAccel r -> r -> r
forall r. ExprC r => r -> r -> r
$+ (UnitalChunk -> UnitalChunk -> r
forall r f a.
(ExprC r, HasUID f, HasSymbol f, HasUID a, HasSymbol a) =>
f -> a -> r
apply1 UnitalChunk
forcej UnitalChunk
time r -> r -> r
forall r. ExprC r => r -> r -> r
$/ UnitalChunk -> r
forall c. (HasUID c, HasSymbol c) => c -> 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 = r -> r -> r
forall r. ModelExprC r => r -> r -> r
defines (UnitalChunk -> r
forall c. (HasUID c, HasSymbol c) => c -> r
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UnitalChunk
angAccj) (r -> r) -> r -> r
forall a b. (a -> b) -> a -> b
$ r -> UnitalChunk -> r
forall c. (HasUID c, HasSymbol c) => r -> c -> r
forall r c. (ModelExprC r, HasUID c, HasSymbol c) => r -> c -> r
deriv (UnitalChunk -> UnitalChunk -> r
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 = UnitalChunk -> UnitalChunk -> r
forall r f a.
(ExprC r, HasUID f, HasSymbol f, HasUID a, HasSymbol a) =>
f -> a -> r
apply1 UnitalChunk
torquej UnitalChunk
time r -> r -> r
forall r. ExprC r => r -> r -> r
$/ UnitalChunk -> r
forall c. (HasUID c, HasSymbol c) => c -> 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 = r -> r -> r
forall r. ModelExprC r => r -> r -> r
defines (UnitalChunk -> r
forall c. (HasUID c, HasSymbol c) => c -> r
forall r c. (ExprC r, HasUID c, HasSymbol c) => c -> r
sy UnitalChunk
angAccj) (r -> r) -> r -> r
forall a b. (a -> b) -> a -> b
$ r -> UnitalChunk -> r
forall c. (HasUID c, HasSymbol c) => r -> c -> r
forall r c. (ModelExprC r, HasUID c, HasSymbol c) => r -> c -> r
deriv (UnitalChunk -> UnitalChunk -> r
forall r f a.
(ExprC r, HasUID f, HasSymbol f, HasUID a, HasSymbol a) =>
f -> a -> r
apply1 UnitalChunk
angularVelocity UnitalChunk
time) UnitalChunk
time