diff options
Diffstat (limited to 'source/gameengine/Ketsji/KX_KetsjiEngine.h')
-rw-r--r-- | source/gameengine/Ketsji/KX_KetsjiEngine.h | 316 |
1 files changed, 316 insertions, 0 deletions
diff --git a/source/gameengine/Ketsji/KX_KetsjiEngine.h b/source/gameengine/Ketsji/KX_KetsjiEngine.h new file mode 100644 index 00000000000..4246bc28b50 --- /dev/null +++ b/source/gameengine/Ketsji/KX_KetsjiEngine.h @@ -0,0 +1,316 @@ +/* + * $Id$ + * + * ***** BEGIN GPL/BL DUAL LICENSE BLOCK ***** + * + * This program is free software; you can redistribute it and/or + * modify it under the terms of the GNU General Public License + * as published by the Free Software Foundation; either version 2 + * of the License, or (at your option) any later version. The Blender + * Foundation also sells licenses for use in proprietary software under + * the Blender License. See http://www.blender.org/BL/ for information + * about this. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software Foundation, + * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + * + * The Original Code is Copyright (C) 2001-2002 by NaN Holding BV. + * All rights reserved. + * + * The Original Code is: all of this file. + * + * Contributor(s): none yet. + * + * ***** END GPL/BL DUAL LICENSE BLOCK ***** + * + */ +#ifndef __KX_KETSJI_ENGINE +#define __KX_KETSJI_ENGINE + +#include "MT_CmMatrix4x4.h" +#include "MT_Matrix4x4.h" +#include "STR_String.h" +#include "KX_ISystem.h" +#include "KX_Scene.h" +#include "KX_Python.h" +#include "KX_WorldInfo.h" +#include <vector> +#include <set> + +class KX_TimeCategoryLogger; + +#define LEFT_EYE 1 +#define RIGHT_EYE 2 + +enum KX_ExitRequestMode +{ + KX_EXIT_REQUEST_NO_REQUEST = 0, + KX_EXIT_REQUEST_QUIT_GAME, + KX_EXIT_REQUEST_RESTART_GAME, + KX_EXIT_REQUEST_START_OTHER_GAME, + KX_EXIT_REQUEST_NO_SCENES_LEFT, + KX_EXIT_REQUEST_BLENDER_ESC, + KX_EXIT_REQUEST_OUTSIDE, + KX_EXIT_REQUEST_MAX +}; + +class KX_KetsjiEngine +{ + +private: + class RAS_ICanvas* m_canvas; // 2D Canvas (2D Rendering Device Context) + class RAS_IRasterizer* m_rasterizer; // 3D Rasterizer (3D Rendering) + class KX_ISystem* m_kxsystem; + class RAS_IRenderTools* m_rendertools; + class KX_ISceneConverter* m_sceneconverter; + class NG_NetworkDeviceInterface* m_networkdevice; + class SND_IAudioDevice* m_audiodevice; + PyObject* m_pythondictionary; + class SCA_IInputDevice* m_keyboarddevice; + class SCA_IInputDevice* m_mousedevice; + + /** Lists of scenes scheduled to be removed at the end of the frame. */ + std::set<STR_String> m_removingScenes; + /** Lists of overley scenes scheduled to be added at the end of the frame. */ + std::set<STR_String> m_addingOverlayScenes; + /** Lists of background scenes scheduled to be added at the end of the frame. */ + std::set<STR_String> m_addingBackgroundScenes; + /** Lists of scenes scheduled to be replaced at the end of the frame. */ + std::set<std::pair<STR_String,STR_String> > m_replace_scenes; + + /* The current list of scenes. */ + KX_SceneList m_scenes; + /* State variable recording the presence of object debug info in the current scene list. */ + bool m_propertiesPresent; + + bool m_bInitialized; + int m_activecam; + bool m_bFixedTime; + + bool m_firstframe; + double m_previoustime; + double m_missedtime; + double m_lasttime; // old style time + double m_dtime; + std::vector<double> m_deltatimes; + + int m_exitcode; + STR_String m_exitstring; + /** + * Some drawing parameters, the drawing mode + * (wire/flat/texture), and the camera zoom + * factor. + */ + int m_drawingmode; + float m_cameraZoom; + + bool m_overrideCam; + STR_String m_overrideSceneName; + + bool m_overrideCamUseOrtho; + MT_CmMatrix4x4 m_overrideCamProjMat; + MT_CmMatrix4x4 m_overrideCamViewMat; + + bool m_stereo; + int m_curreye; + + /** Categories for profiling display. */ + typedef enum + { + tc_first = 0, + tc_physics = 0, + tc_logic, + tc_network, + tc_scenegraph, + tc_sound, + tc_rasterizer, + tc_services, // time spend in miscelaneous activities + tc_overhead, // profile info drawing overhead + tc_outside, // time spend outside main loop + tc_numCategories + } KX_TimeCategory; + + /** Time logger. */ + KX_TimeCategoryLogger* m_logger; + + /** Labels for profiling display. */ + static const char m_profileLabels[tc_numCategories][15]; + /** Show the framerate on the game display? */ + bool m_show_framerate; + /** Show profiling info on the game display? */ + bool m_show_profile; + /** Show any debug (scene) object properties on the game display? */ + bool m_showProperties; + /** Show background behind text for readability? */ + bool m_showBackground; + + bool m_show_debug_properties; + + /** Hide cursor every frame? */ + bool m_hideCursor; + + /** Override framing bars color? */ + bool m_overrideFrameColor; + /** Red component of framing bar color. */ + float m_overrideFrameColorR; + /** Green component of framing bar color. */ + float m_overrideFrameColorG; + /** Blue component of framing bar color. */ + float m_overrideFrameColorB; + + double CalculateAverage(double newdeltatime); + + void SetupRenderFrame(KX_Scene *scene); + void RenderFrame(KX_Scene* scene); + void RenderDebugProperties(); + void SetBackGround(KX_WorldInfo* worldinfo); + void SetWorldSettings(KX_WorldInfo* worldinfo); + void DoSound(KX_Scene* scene); + +public: + + KX_KetsjiEngine(class KX_ISystem* system); + virtual ~KX_KetsjiEngine(); + + // set the devices and stuff. the client must take care of creating these + void SetKeyboardDevice(SCA_IInputDevice* keyboarddevice); + void SetMouseDevice(SCA_IInputDevice* mousedevice); + void SetNetworkDevice(NG_NetworkDeviceInterface* networkdevice); + void SetAudioDevice(SND_IAudioDevice* audiodevice); + void SetCanvas(RAS_ICanvas* canvas); + void SetRenderTools(RAS_IRenderTools* rendertools); + void SetRasterizer(RAS_IRasterizer* rasterizer); + void SetPythonDictionary(PyObject* pythondictionary); + void SetSceneConverter(KX_ISceneConverter* sceneconverter); + + void NextFrame(); + void Render(); + + void StartEngine(); + void StopEngine(); + void Export(const STR_String& filename); + + void RequestExit(int exitrequestmode); + void SetNameNextGame(const STR_String& nextgame); + int GetExitCode(); + const STR_String& GetExitString(); + + KX_SceneList* CurrentScenes(); + KX_Scene* FindScene(const STR_String& scenename); + void AddScene(class KX_Scene* scene); + void ConvertAndAddScene(const STR_String& scenename,bool overlay); + + void RemoveScene(const STR_String& scenename); + void ReplaceScene(const STR_String& oldscene,const STR_String& newscene); + void SuspendScene(const STR_String& scenename); + void ResumeScene(const STR_String& scenename); + + void SetDrawType(int drawingtype); + void SetCameraZoom(float camzoom); + + void EnableCameraOverride(const STR_String& forscene); + + void SetCameraOverrideUseOrtho(bool useOrtho); + void SetCameraOverrideProjectionMatrix(const MT_CmMatrix4x4& mat); + void SetCameraOverrideViewMatrix(const MT_CmMatrix4x4& mat); + + /** + * Sets display of all frames. + * @param bUseFixedTime New setting for display all frames. + */ + void SetUseFixedTime(bool bUseFixedTime); + + /** + * Returns display of all frames. + * @return Current setting for display all frames. + */ + bool GetUseFixedTime(void) const; + + /** + * Activates or deactivates timing information display. + * @param frameRate Display for frame rate on or off. + * @param profile Display for individual components on or off. + * @param properties Display of scene object debug properties on or off. + */ + void SetTimingDisplay(bool frameRate, bool profile, bool properties); + + /** + * Returns status of timing information display. + * @param frameRate Display for frame rate on or off. + * @param profile Display for individual components on or off. + * @param properties Display of scene object debug properties on or off. + */ + void GetTimingDisplay(bool& frameRate, bool& profile, bool& properties) const; + + /** + * Sets cursor hiding on every frame. + * @param hideCursor Turns hiding on or off. + */ + void SetHideCursor(bool hideCursor); + + /** + * Returns the current setting for cursor hiding. + * @return The current setting for cursor hiding. + */ + bool GetHideCursor(void) const; + + /** + * Enables/disables the use of the framing bar color of the Blender file's scenes. + * @param overrideFrameColor The new setting. + */ + void SetUseOverrideFrameColor(bool overrideFrameColor); + + /** + * Enables/disables the use of the framing bar color of the Blender file's scenes. + * @param useSceneFrameColor The new setting. + */ + bool GetUseOverrideFrameColor(void) const; + + /** + * Set the color used for framing bar color instead of the one in the Blender file's scenes. + * @param r Red component of the override color. + * @param g Green component of the override color. + * @param b Blue component of the override color. + */ + void SetOverrideFrameColor(float r, float g, float b); + + /** + * Returns the color used for framing bar color instead of the one in the Blender file's scenes. + * @param r Red component of the override color. + * @param g Green component of the override color. + * @param b Blue component of the override color. + */ + void GetOverrideFrameColor(float& r, float& g, float& b) const; + +protected: + /** + * Processes all scheduled scene activity. + * At the end, if the scene lists have changed, + * SceneListsChanged(void) is called. + * @see SceneListsChanged(void). + */ + void ProcessScheduledScenes(void); + + /** + * This method is invoked when the scene lists have changed. + */ + void SceneListsChanged(void); + + void RemoveScheduledScenes(void); + void AddScheduledScenes(void); + void ReplaceScheduledScenes(void); + void PostProcessScene(class KX_Scene* scene); + KX_Scene* CreateScene(const STR_String& scenename); + + bool BeginFrame(); + void EndFrame(); +}; + +#endif //__KX_KETSJI_ENGINE + |