packages feed

HGamer3D-Graphics3D-0.3.0: HGamer3D/Graphics3D/Types.hs

{-# LANGUAGE FlexibleContexts #-}

-- This source file is part of HGamer3D
-- (A project to enable 3D game development in Haskell)
-- For the latest info, see http://www.hgamer3d.org
--
-- (c) 2011-2013 Peter Althainz
--
-- Licensed under the Apache License, Version 2.0 (the "License");
-- you may not use this file except in compliance with the License.
-- You may obtain a copy of the License at
--
--     http://www.apache.org/licenses/LICENSE-2.0
--
-- Unless required by applicable law or agreed to in writing, software
-- distributed under the License is distributed on an "AS IS" BASIS,
-- WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-- See the License for the specific language governing permissions and
-- limitations under the License.

-- Types.hs

-- | Basic types for the Graphics3D module
module HGamer3D.Graphics3D.Types (

  -- * Basic Engine Entities
  SceneManager (..),
  ResourceGroupManager (..),
  RootObject (..),
  Viewport (..),
  LogManager (..),
  TextureManager (..),
  Camera (..),
  RenderTarget (..),
  
  Graphics3DSystem (..),

  -- * Type Definitions
  Object3D (..),
  Material (..),
  Mesh (..),

) 

where

import HGamer3D.Data
import HGamer3D.Util

-- | The material. Define how an object is looking. Currently we have materials from resources
data Material = ResourceMaterial String -- ^ a named material, already installed as a resource

-- | The mesh. A mesh in HGamer3D is just that, a mesh loaded from a template, a manual mesh, or loaded from file. It comes with default
-- material, but 3D objects based on this can get other materials individually.
data Mesh = CubeMesh | -- ^ Cube Mesh-Type
            PlaneMesh | -- ^ Plane Mesh-Type
            SphereMesh | -- ^ Sphere Mesh-Type
            ResourceMesh String | -- ^ Mesh resource loaded from file
            ManualMesh String  -- ^ Manual Mesh-Type, identified by name

-- | The basic 3D object. Each object is a single instance, which can be displayed, moved, scaled, rotated, ...
-- Objects are created cloned from meshes (templates for ojbects) or manually, by manual object creation methods.
data Object3D = SingleObject3D Mesh HG3DClass | -- ^ a single object, consisting of a Mesh and a Node (Ogre)
                CombinedObject3D [Object3D] HG3DClass -- ^ a combined object,consisting of many objects and a node for the combined one
				
data SceneManager = SceneManager HG3DClass
data ResourceGroupManager = ResourceGroupManager HG3DClass
data RootObject = RootObject HG3DClass
data Viewport = Viewport HG3DClass
data TextureManager = TextureManager HG3DClass
data LogManager = LogManager HG3DClass
data Camera = Camera HG3DClass
data RenderTarget = RenderTarget HG3DClass

data Graphics3DSystem = Graphics3DSystem {
  g3dsRoot :: RootObject,
  g3dsSceneManager :: SceneManager,
  g3dsResourceGroupManager :: ResourceGroupManager,
  g3dsLogManager :: LogManager,
  g3dsTextureManager :: TextureManager,
  g3dsRenderTarget :: RenderTarget,
  g3dsUniqueName :: UniqueName
}