diff options
| -rw-r--r-- | Spear.lkshw | 2 | ||||
| -rw-r--r-- | Spear/Math/Entity.hs | 3 | ||||
| -rw-r--r-- | Spear/Math/Spatial2.hs | 3 | ||||
| -rw-r--r-- | Spear/Physics/Rigid.hs | 2 | ||||
| -rw-r--r-- | Spear/Scene/GameObject.hs | 6 |
5 files changed, 15 insertions, 1 deletions
diff --git a/Spear.lkshw b/Spear.lkshw index ff27127..0705660 100644 --- a/Spear.lkshw +++ b/Spear.lkshw | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | Version of workspace file format: | 1 | Version of workspace file format: |
| 2 | 1 | 2 | 1 |
| 3 | Time of storage: | 3 | Time of storage: |
| 4 | "Sat Sep 1 11:10:35 CEST 2012" | 4 | "Sat Sep 1 12:38:49 CEST 2012" |
| 5 | Name of the workspace: | 5 | Name of the workspace: |
| 6 | "Spear" | 6 | "Spear" |
| 7 | File paths of contained packages: | 7 | File paths of contained packages: |
diff --git a/Spear/Math/Entity.hs b/Spear/Math/Entity.hs index f4e6515..2dc6965 100644 --- a/Spear/Math/Entity.hs +++ b/Spear/Math/Entity.hs | |||
| @@ -21,6 +21,9 @@ instance S.Spatial2 Entity where | |||
| 21 | strafeLeft f ent = ent { transform = M.translv (V.scale (-f) $ S.right ent) * transform ent } | 21 | strafeLeft f ent = ent { transform = M.translv (V.scale (-f) $ S.right ent) * transform ent } |
| 22 | strafeRight f ent = ent { transform = M.translv (V.scale f $ S.right ent) * transform ent } | 22 | strafeRight f ent = ent { transform = M.translv (V.scale f $ S.right ent) * transform ent } |
| 23 | rotate a ent = ent { transform = transform ent * M.rot a } | 23 | rotate a ent = ent { transform = transform ent * M.rot a } |
| 24 | setRotation a ent = | ||
| 25 | let t = transform ent | ||
| 26 | in ent { transform = M.translation t * M.rot a } | ||
| 24 | pos = M.position . transform | 27 | pos = M.position . transform |
| 25 | fwd = M.forward . transform | 28 | fwd = M.forward . transform |
| 26 | up = M.up . transform | 29 | up = M.up . transform |
diff --git a/Spear/Math/Spatial2.hs b/Spear/Math/Spatial2.hs index 51fa050..49ff3b7 100644 --- a/Spear/Math/Spatial2.hs +++ b/Spear/Math/Spatial2.hs | |||
| @@ -27,6 +27,9 @@ class Spatial2 s where | |||
| 27 | -- | Rotate the spatial. | 27 | -- | Rotate the spatial. |
| 28 | rotate :: Float -> s -> s | 28 | rotate :: Float -> s -> s |
| 29 | 29 | ||
| 30 | -- | Set the spatial's rotation. | ||
| 31 | setRotation :: Float -> s -> s | ||
| 32 | |||
| 30 | -- | Get the spatial position. | 33 | -- | Get the spatial position. |
| 31 | pos :: s -> Vector2 | 34 | pos :: s -> Vector2 |
| 32 | 35 | ||
diff --git a/Spear/Physics/Rigid.hs b/Spear/Physics/Rigid.hs index cc153ec..9147553 100644 --- a/Spear/Physics/Rigid.hs +++ b/Spear/Physics/Rigid.hs | |||
| @@ -41,6 +41,8 @@ instance Spatial2 RigidBody where | |||
| 41 | 41 | ||
| 42 | rotate angle = id | 42 | rotate angle = id |
| 43 | 43 | ||
| 44 | setRotation angle = id | ||
| 45 | |||
| 44 | pos = position | 46 | pos = position |
| 45 | 47 | ||
| 46 | fwd _ = unity | 48 | fwd _ = unity |
diff --git a/Spear/Scene/GameObject.hs b/Spear/Scene/GameObject.hs index d3b4e9e..2567e52 100644 --- a/Spear/Scene/GameObject.hs +++ b/Spear/Scene/GameObject.hs | |||
| @@ -106,6 +106,12 @@ instance S2.Spatial2 GameObject where | |||
| 106 | , angle = (angle go + a) `mod'` 360 | 106 | , angle = (angle go + a) `mod'` 360 |
| 107 | } | 107 | } |
| 108 | 108 | ||
| 109 | setRotation a go = | ||
| 110 | go | ||
| 111 | { transform = M3.translation (transform go) * M3.rot a | ||
| 112 | , angle = a | ||
| 113 | } | ||
| 114 | |||
| 109 | pos go = M3.position . transform $ go | 115 | pos go = M3.position . transform $ go |
| 110 | 116 | ||
| 111 | fwd go = M3.forward . transform $ go | 117 | fwd go = M3.forward . transform $ go |
