-----------------------------------------------------------------------------
{-# LANGUAGE DataKinds               #-}
{-# LANGUAGE FlexibleInstances       #-}
{-# LANGUAGE MultiParamTypeClasses   #-}
{-# LANGUAGE OverloadedStrings       #-}
-----------------------------------------------------------------------------
module THREE.Object3D
  ( -- * Class
    Object3D (..)
  ) where
-----------------------------------------------------------------------------
import           Miso
-----------------------------------------------------------------------------
import           THREE.Euler           as THREE
import           THREE.Internal        as THREE
import           THREE.Vector3         as THREE
import           THREE.Matrix3         as THREE
import           THREE.Quaternion      as THREE
import           THREE.Matrix4         as THREE
import           THREE.Material        as THREE
import           THREE.Layers          as THREE
import           THREE.Raycaster       as THREE
import           THREE.AnimationClip   as THREE
import           THREE.EventDispatcher as THREE
-----------------------------------------------------------------------------
-- | https://threejs.org/docs/#api/en/core/Object3D
class EventDispatcher object => Object3D object where
  animations :: Property object AnimationClip
  animations = MisoString -> Property object AnimationClip
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"animations"
  castShadow :: Property object Bool
  castShadow = MisoString -> Property object Bool
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"castShadow"
  -- children :: (FromJSVal objects, Object3D objects) => Property object [objects]
  -- children = property "children"
  customDepthMaterial :: (Material material, FromJSVal material)  => Property object material
  customDepthMaterial = MisoString -> Property object material
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"customDepthMaterial"
  customDistanceMaterial :: (Material material, FromJSVal material) => Property object material
  customDistanceMaterial = MisoString -> Property object material
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"customDistanceMaterial"
  frustumCulled :: Property object Bool
  frustumCulled = MisoString -> Property object Bool
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"frustumCulled"
  id :: ReadOnly object Int
  id = MisoString -> ReadOnly object Int
forall object return.
(FromJSVal return, ToObject object) =>
MisoString -> ReadOnly object return
readonly MisoString
"id"
  isObject3D :: ReadOnly object Bool
  isObject3D = MisoString -> ReadOnly object Bool
forall object return.
(FromJSVal return, ToObject object) =>
MisoString -> ReadOnly object return
readonly MisoString
"isObject3D"
  layers :: Property object Layers
  layers = MisoString -> Property object Layers
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"layers"
  matrix :: Property object Matrix4
  matrix = MisoString -> Property object Matrix4
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"matrix"
  matrixAutoUpdate :: Property object Bool
  matrixAutoUpdate = MisoString -> Property object Bool
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"matrixAutoUpdate"
  matrixWorld :: Property object Matrix4
  matrixWorld = MisoString -> Property object Matrix4
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"matrixWorld"
  matrixWorldAutoUpdate :: Property object Bool
  matrixWorldAutoUpdate = MisoString -> Property object Bool
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"matrixWorldAutoUpdate"
  matrixWorldNeedsUpdate :: Property object Bool
  matrixWorldNeedsUpdate = MisoString -> Property object Bool
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"matrixWorldNeedsUpdate"
  modelViewMatrix :: Property object Matrix4
  modelViewMatrix = MisoString -> Property object Matrix4
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"modelViewMatrix"
  name :: Property object MisoString
  name = MisoString -> Property object MisoString
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"name"
  normalMatrix :: Property object Matrix3
  normalMatrix = MisoString -> Property object Matrix3
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"normalMatrix"
  onAfterRender :: Property object Function
  onAfterRender = MisoString -> Property object Function
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"onAfterRender"
  onAfterShadow :: Property object Function
  onAfterShadow = MisoString -> Property object Function
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"onAfterShadow"
  onBeforeRender :: Property object Function
  onBeforeRender = MisoString -> Property object Function
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"onBeforeRender"
  onBeforeShadow :: Property object Function
  onBeforeShadow = MisoString -> Property object Function
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"onBeforeShadow"
  parent :: (Object3D return, FromJSVal return) => Property object return
  parent = MisoString -> Property object return
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"parent"
  position :: Property object Vector3
  position = MisoString -> Property object Vector3
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"position"
  quaternion :: Property object Quaternion
  quaternion = MisoString -> Property object Quaternion
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"quaternion"
  receiveShadow :: Property object Bool
  receiveShadow = MisoString -> Property object Bool
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"receiveShadow"
  renderOrder :: Property object Double
  renderOrder = MisoString -> Property object Double
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"renderOrder"
  rotation :: Property object Euler
  rotation = MisoString -> Property object Euler
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"rotation"
  scale :: Property object Vector3
  scale = MisoString -> Property object Vector3
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"scale"
  up :: Property object Vector3
  up = MisoString -> Property object Vector3
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"up"
  userData :: Property object Object
  userData = MisoString -> Property object Object
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"userData"
  uuid :: Property object MisoString
  uuid = MisoString -> Property object MisoString
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"uuid"
  visible :: Property object Bool
  visible = MisoString -> Property object Bool
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"visible"
  defaultUp :: Property object Vector3
  defaultUp = MisoString -> Property object Vector3
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"DEFAULT_UP"
  defaultMatrixAutoUpdate :: Property object Bool
  defaultMatrixAutoUpdate = MisoString -> Property object Bool
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"DEFAULT_MATRIX_AUTO_UPDATE"
  defaultMatrixWorldAutoUpdate :: Property object Bool
  defaultMatrixWorldAutoUpdate = MisoString -> Property object Bool
forall object field.
(ToObject object, ToJSVal field, FromJSVal field) =>
MisoString -> Property object field
property MisoString
"DEFAULT_MATRIX_WORLD_AUTO_UPDATE"
  add :: (ToArgs arg, FromJSVal object, Object3D arg) => Method object arg object
  add = MisoString -> Method object arg object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"add"
  applyMatrix4 :: Method object Matrix4 ()
  applyMatrix4 = MisoString -> Method object Matrix4 ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"applyMatrix4"
  applyQuaternion :: (FromJSVal object) => Method object Quaternion object
  applyQuaternion = MisoString -> Method object Quaternion object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"applyQuaternion"
  attach :: (FromJSVal object, ToArgs arg) => Method object arg object
  attach = MisoString -> Method object arg object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"attach" 
  clear :: (ToArgs arg, FromJSVal object) => Method object arg object
  clear = MisoString -> Method object arg object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"clear"
  clone :: (FromJSVal object, Object3DCloneParams t, ToArgs t) => Method object t object
  clone = MisoString -> Method object t object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"clone" 
  copy :: (ToArgs object, FromJSVal object, Object3DCopyParams object t, ToArgs t) => Method object t object
  copy = MisoString -> Method object t object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"copy"
  -- The getObject* methods don't really make sense in Haskell. It can break the type safety like:
  -- myCamera <- mesh1 & getObjectByName "myGeometry" :: Three PerspectiveCamera
  --
  -- getObjectById :: (FromJSVal return, Object3D return) => Method object Int return
  -- getObjectById = method "getObjectById" 
  -- getObjectByName :: (FromJSVal return, Object3D return) => Method object MisoString return
  -- getObjectByName = method "getObjectByName" 
  -- getObjectByProperty :: (ToJSVal a, Object3D return, FromJSVal return) => Method object (MisoString, a) return
  -- getObjectByProperty = method  "getObjectByProperty"
  -- getObjectsByProperty :: (ToJSVal a) => Method object (MisoString, a, Maybe [Object]) [Object]
  -- getObjectsByProperty = method "getObjectsByProperty"
  getWorldPosition :: Method object Vector3 Vector3
  getWorldPosition = MisoString -> Method object Vector3 Vector3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"getWorldPosition"
  getWorldQuaternion :: Method object Quaternion Quaternion
  getWorldQuaternion = MisoString -> Method object Quaternion Quaternion
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"getWorldQuaternion"
  getWorldScale :: Method object Vector3 Vector3
  getWorldScale = MisoString -> Method object Vector3 Vector3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"getWorldScale"
  getWorldDirection :: Method object Vector3 Vector3
  getWorldDirection = MisoString -> Method object Vector3 Vector3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"getWorldDirection"
  localToWorld :: Method object Vector3 Vector3
  localToWorld = MisoString -> Method object Vector3 Vector3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"localToWorld"
  lookAt :: (ToArgs arg, Triplet arg) => Method object arg ()
  lookAt = MisoString -> Method object arg ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"lookAt" 
  raycast :: Method object (Raycaster, JSVal) ()
  raycast = MisoString -> Method object (Raycaster, JSVal) ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"raycast"
  remove :: (ToArgs arg, Object3D arg, FromJSVal object) => Method object arg object
  remove = MisoString -> Method object arg object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"remove" 
  removeFromParent :: (FromJSVal object) => Method object () object
  removeFromParent = MisoString -> Method object () object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"removeFromParent" 
  rotateOnAxis :: (FromJSVal object) => Method object (Vector3, Double) object
  rotateOnAxis = MisoString -> Method object (Vector3, Double) object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"rotateOnAxis" 
  rotateOnWorldAxis :: (FromJSVal object) => Method object (Vector3, Double) object
  rotateOnWorldAxis = MisoString -> Method object (Vector3, Double) object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"rotateOnWorldAxis" 
  rotateX :: (FromJSVal object) => Method object Double object
  rotateX = MisoString -> Method object Double object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"rotateX"
  rotateY :: (FromJSVal object) => Method object Double object
  rotateY = MisoString -> Method object Double object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"rotateY" 
  rotateZ :: (FromJSVal object) => Method object Double object
  rotateZ = MisoString -> Method object Double object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"rotateZ" 
  setRotationFromAxisAngle :: Method object (Vector3, Double) ()
  setRotationFromAxisAngle = MisoString -> Method object (Vector3, Double) ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"setRotationFromAxisAngle"
  setRotationFromEuler :: Method object Euler ()
  setRotationFromEuler = MisoString -> Method object Euler ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"setRotationFromEuler"
  setRotationFromMatrix :: Method object Matrix4 ()
  setRotationFromMatrix = MisoString -> Method object Matrix4 ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"setRotationFromMatrix"
  setRotationFromQuaternion :: Method object Quaternion ()
  setRotationFromQuaternion = MisoString -> Method object Quaternion ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"setRotationFromQuaternion"
  toJSON :: Method object Object Object
  toJSON = MisoString -> Method object Object Object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"toJSON"
  translateOnAxis :: (FromJSVal object) => Method object (Vector3, Double) object
  translateOnAxis = MisoString -> Method object (Vector3, Double) object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"translateOnAxis"
  translateX :: (FromJSVal object) => Method object Double object
  translateX = MisoString -> Method object Double object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"translateX"
  translateY :: (FromJSVal object) => Method object Double object
  translateY = MisoString -> Method object Double object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"translateY"
  translateZ :: (FromJSVal object) => Method object Double object
  translateZ = MisoString -> Method object Double object
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"translateZ"
  traverse :: Method object Function ()
  traverse = MisoString -> Method object Function ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"traverse"
  traverseVisible :: Method object Function ()
  traverseVisible = MisoString -> Method object Function ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"traverseVisible"
  traverseAncestors :: Method object Function ()
  traverseAncestors = MisoString -> Method object Function ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"traverseAncestors"
  updateMatrix :: Method object () ()
  updateMatrix = MisoString -> Method object () ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"updateMatrix"
  updateMatrixWorld :: Method object Bool ()
  updateMatrixWorld = MisoString -> Method object Bool ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method  MisoString
"updateMatrixWorld"
  updateWorldMatrix :: Method object (Bool, Bool) ()
  updateWorldMatrix = MisoString -> Method object (Bool, Bool) ()
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"updateWorldMatrix"
  worldToLocal :: Method object Vector3 Vector3
  worldToLocal = MisoString -> Method object Vector3 Vector3
forall object return args.
(FromJSVal return, ToArgs args, ToObject object) =>
MisoString -> Method object args return
method MisoString
"worldToLocal" 
-----------------------------------------------------------------------------
instance Object3D JSVal
-----------------------------------------------------------------------------
class Object3DCopyParams o t
instance Object3DCopyParams o o
instance Object3DCopyParams o (o, Bool)
-----------------------------------------------------------------------------
class Object3DCloneParams t
instance Object3DCloneParams ()
instance Object3DCloneParams Bool
-----------------------------------------------------------------------------