{-# 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. -- Basic3D.hs -- | Basic functions for the Graphics3D module module HGamer3D.Graphics3D.Basic3D ( cameraLookAt, -- * Background Colour HGamer3D.Graphics3D.Basic3D.setBackgroundColour, -- * Resource locations -- $audioresource addResourceLocationMedia, addResourceZipfileMedia, addResourceLocationGUI ) where import HGamer3D.Data import HGamer3D.Bindings.Ogre.ClassCamera as Camera import HGamer3D.Bindings.Ogre.ClassViewport as Viewport import HGamer3D.Bindings.Ogre.ClassResourceGroupManager as ResourceGroupManager import HGamer3D.Graphics3D.Types -- Camera functions -- instance Position3D Camera where position3D (Camera c) = do pos <- Camera.getPosition c return (pos) positionTo3D (Camera c) pos = do Camera.setPosition2 c pos return () instance Direction3D Camera where direction3D (Camera c) = do d <- Camera.getDirection c return d directionTo3D (Camera c) v = do Camera.setDirection2 c v instance Orientation3D Camera where orientation3D (Camera c) = do q <- Camera.getOrientation c let uq = mkNormal q return uq orientationTo3D (Camera c) uq = do Camera.setOrientation c (fromNormal uq) return () -- | set the direction in a way, that the camera looks toward a specified point cameraLookAt :: Camera -> Vec3 -> IO () cameraLookAt (Camera c) v = do Camera.lookAt c v return () -- specific single function -- -- | sets the background colour of the 3d drawing window setBackgroundColour :: Viewport -> Colour -> IO () setBackgroundColour (Viewport viewport) bgColour = do Viewport.setBackgroundColour viewport bgColour -- locations of media in same folder as program resides -- -- | adds a resource location for 3D media (Ogre) addResourceLocationMedia :: Graphics3DSystem -- ^ the Graphics3D system object, returned by initGraphics3D -> String -- ^ path to new resource location, the path should identify a directory -> IO () addResourceLocationMedia g3ds path = do let (ResourceGroupManager rgm) = (g3dsResourceGroupManager g3ds) ResourceGroupManager.addResourceLocation rgm path "FileSystem" "General" False ResourceGroupManager.initialiseResourceGroup rgm "General" -- | adds a resource location for 3D media (Ogre) which is a zip file addResourceZipfileMedia :: Graphics3DSystem -- ^ the Graphics3D system object, returned by initGraphics3D -> String -- ^ path to new resource location, the path should identify a zip file -> IO () addResourceZipfileMedia g3ds path = do let (ResourceGroupManager rgm) = (g3dsResourceGroupManager g3ds) ResourceGroupManager.addResourceLocation rgm path "Zip" "General" False ResourceGroupManager.initialiseResourceGroup rgm "General" -- | adds a resource location for GUI media (CEGUI) which is a directory addResourceLocationGUI :: Graphics3DSystem -- ^ the Graphics3D system object, returned by initGraphics3D -> String -- ^ path to the directory with the GUI media in it -> String -- ^ category of GUI media, for example: Layout, Images, ... -> IO () addResourceLocationGUI g3ds path category = do let (ResourceGroupManager rgm) = (g3dsResourceGroupManager g3ds) ResourceGroupManager.addResourceLocation rgm path "FileSystem" category False ResourceGroupManager.initialiseResourceGroup rgm category