| @@ -0,0 +1,311 @@ | |||
| // | |||
| // Copyright © 2009-2015 Benjamin "Touky" Huet <huet.benjamin@gmail.com> | |||
| // | |||
| // This program is free software. It comes without any warranty, to | |||
| // the extent permitted by applicable law. You can redistribute it | |||
| // and/or modify it under the terms of the Do What the Fuck You Want | |||
| // to Public License, Version 2, as published by the WTFPL Task Force. | |||
| // See http://www.wtfpl.net/ for more details. | |||
| // | |||
| #pragma once | |||
| namespace lol | |||
| { | |||
| enum | |||
| { | |||
| IPT_MV_KBOARD = 0, | |||
| IPT_MV_MOUSE, | |||
| INPUT_MAX | |||
| }; | |||
| enum MVKeyboardList | |||
| { | |||
| KEY_CAM_RESET = 0, | |||
| KEY_CAM_POS, | |||
| KEY_CAM_FOV, | |||
| KEY_CAM_UP, | |||
| KEY_CAM_DOWN, | |||
| KEY_CAM_LEFT, | |||
| KEY_CAM_RIGHT, | |||
| KEY_MESH_NEXT, | |||
| KEY_MESH_PREV, | |||
| KEY_F1, | |||
| KEY_F2, | |||
| KEY_F3, | |||
| KEY_F4, | |||
| KEY_F5, | |||
| KEY_ESC, | |||
| KEY_MAX | |||
| }; | |||
| enum MVMouseKeyList | |||
| { | |||
| MSE_CAM_ROT = KEY_MAX, | |||
| MSE_CAM_POS, | |||
| MSE_CAM_FOV, | |||
| MSE_FOCUS, | |||
| MSE_MAX | |||
| }; | |||
| enum MVMouseAxisList | |||
| { | |||
| MSEX_CAM_Y = 0, | |||
| MSEX_CAM_X, | |||
| MSEX_MAX | |||
| }; | |||
| #define MAX_KEYS MSE_MAX | |||
| #define MAX_AXIS MSEX_MAX | |||
| //MeshViewerInput --------------------------------------------------------- | |||
| struct MeshViewerKeyInputBase : public StructSafeEnum | |||
| { | |||
| enum Type | |||
| { | |||
| KBD_BEG = 0, | |||
| Exit = KBD_BEG, | |||
| KBD_END, | |||
| MSE_BEG = KBD_END, | |||
| LeftClick = MSE_BEG, | |||
| RightClick, | |||
| MiddleClick, | |||
| Focus, | |||
| MSE_END, | |||
| MAX = MSE_END, | |||
| }; | |||
| protected: | |||
| virtual bool BuildEnumMap(map<int64_t, String>& enum_map) | |||
| { | |||
| enum_map[Exit] = g_name_key_Escape; | |||
| enum_map[LeftClick] = g_name_mouse_key_left; | |||
| enum_map[RightClick] = g_name_mouse_key_right; | |||
| enum_map[MiddleClick] = g_name_mouse_key_middle; | |||
| enum_map[Focus] = g_name_mouse_key_in_screen; | |||
| return true; | |||
| } | |||
| }; | |||
| typedef SafeEnum<MeshViewerKeyInputBase> MeshViewerKeyInput; | |||
| #define ALL_FEATURES 1 | |||
| #define NO_SC_SETUP 0 | |||
| enum GizmoType | |||
| { | |||
| GZ_Editor = 0, | |||
| GZ_LightPos, | |||
| GZ_LightDir, | |||
| GZ_MAX | |||
| }; | |||
| struct LightData | |||
| { | |||
| LightData(vec3 pos, vec4 col) | |||
| { | |||
| m_pos = pos; | |||
| m_col = col; | |||
| } | |||
| vec3 m_pos; | |||
| vec4 m_col; | |||
| }; | |||
| //ViewerObject ---------------------------------------------------------------- | |||
| class ViewerObject | |||
| { | |||
| public: | |||
| ViewerObject() { } | |||
| virtual ~ViewerObject() { } | |||
| protected: | |||
| }; | |||
| //EasyMeshViewerObject -------------------------------------------------------- | |||
| class EasyMeshViewerObject : public ViewerObject | |||
| { | |||
| public: | |||
| EasyMeshViewerObject() | |||
| : ViewerObject() { } | |||
| EasyMeshViewerObject(EasyMesh const& mesh) | |||
| : EasyMeshViewerObject() | |||
| { | |||
| Init(mesh); | |||
| } | |||
| virtual ~EasyMeshViewerObject() { } | |||
| void Init(EasyMesh const& mesh) | |||
| { | |||
| m_mesh = mesh; | |||
| } | |||
| protected: | |||
| EasyMesh m_mesh; | |||
| }; | |||
| //MeshViewerLoadJob ----------------------------------------------------------- | |||
| class MeshViewerLoadJob : public ThreadJob | |||
| { | |||
| friend class BaseThreadManager; | |||
| typedef ThreadJob super; | |||
| public: | |||
| inline MeshViewerLoadJob() : ThreadJob() { } | |||
| inline MeshViewerLoadJob(String const& path) | |||
| : ThreadJob(ThreadJobType::WORK_TODO), m_path(path) { } | |||
| virtual ~MeshViewerLoadJob() { } | |||
| virtual void RetrieveResult(class MeshViewer* app) { } | |||
| protected: | |||
| virtual bool DoWork() { return super::DoWork(); } | |||
| protected: | |||
| String m_path; | |||
| }; | |||
| //EasyMeshLoadJob ------------------------------------------------------------- | |||
| class EasyMeshLoadJob : public MeshViewerLoadJob | |||
| { | |||
| friend class BaseThreadManager; | |||
| typedef EasyMeshLoadJob super; | |||
| public: | |||
| inline EasyMeshLoadJob() : MeshViewerLoadJob() { } | |||
| inline EasyMeshLoadJob(String const& path) | |||
| : MeshViewerLoadJob(path) { } | |||
| virtual ~EasyMeshLoadJob() { } | |||
| static MeshViewerLoadJob* GetInstance(String const& path); | |||
| virtual void RetrieveResult(class MeshViewer* app); | |||
| protected: | |||
| static bool Check(String const& path) { return path.contains(".easymesh"); } | |||
| virtual bool DoWork(); | |||
| protected: | |||
| EasyMeshLuaLoader m_loader; | |||
| array<EasyMeshViewerObject*> m_meshes; | |||
| }; | |||
| //MeshViewer ------------------------------------------------------------------ | |||
| class MeshViewer : public WorldEntity | |||
| { | |||
| typedef WorldEntity super; | |||
| public: | |||
| MeshViewer(char const *file_name = "data/meshviewer.easymesh.lua"); | |||
| ~MeshViewer(); | |||
| void Start(); | |||
| void Stop(); | |||
| MeshViewerLoadJob* GetLoadJob(String const& path); | |||
| void AddViewerObj(ViewerObject* obj) { m_objs << obj; } | |||
| virtual void TickGame(float seconds); | |||
| virtual void TickDraw(float seconds, Scene &scene); | |||
| bool KeyReleased(MVKeyboardList index); | |||
| bool KeyPressed(MVKeyboardList index); | |||
| bool KeyDown(MVKeyboardList index); | |||
| bool KeyReleased(MVMouseKeyList index); | |||
| bool KeyPressed(MVMouseKeyList index); | |||
| bool KeyDown(MVMouseKeyList index); | |||
| float AxisValue(MVMouseAxisList index); | |||
| void Prepare(); | |||
| void Unprepare(); | |||
| void Update(float seconds); | |||
| void Draw(float seconds, Scene &scene); | |||
| private: | |||
| //Main stuff -------------------------------------------------------------- | |||
| bool m_init = false; | |||
| bool m_first_tick = false; | |||
| InputProfile m_profile; | |||
| Camera * m_camera = nullptr; | |||
| SceneSetup* m_ssetup = nullptr; | |||
| SceneSetupLuaLoader m_setup_loader; | |||
| //File data | |||
| String m_file_name; | |||
| FileUpdateStatus* m_file_status; | |||
| //Object data | |||
| array<ViewerObject*> m_objs; | |||
| //Entities listing | |||
| array<Entity*> m_entities; | |||
| //Input | |||
| Controller* m_controller = nullptr; | |||
| //Thread stuff | |||
| FileUpdateTester* m_file_check = nullptr; | |||
| DefaultThreadManager* m_file_loader = nullptr; | |||
| //OLD --------------------------------------------------------------------- | |||
| array<LightData> m_light_datas; | |||
| short m_input_usage; | |||
| mat4 m_mat; | |||
| mat4 m_mat_prev; | |||
| //Camera Setup | |||
| float m_reset_timer; | |||
| float m_fov; | |||
| float m_fov_mesh; | |||
| float m_fov_speed; | |||
| float m_zoom; | |||
| float m_zoom_mesh; | |||
| float m_zoom_speed; | |||
| vec2 m_rot; | |||
| vec2 m_rot_mesh; | |||
| vec2 m_rot_speed; | |||
| vec2 m_pos; | |||
| vec2 m_pos_mesh; | |||
| vec2 m_pos_speed; | |||
| vec2 m_hist_scale; | |||
| vec2 m_hist_scale_mesh; | |||
| vec2 m_hist_scale_speed; | |||
| vec2 m_screen_offset; | |||
| //Mesh update timer | |||
| float m_build_timer; | |||
| float m_build_time; | |||
| //Mesh infos | |||
| vec2 m_render_max; | |||
| int m_mesh_render; | |||
| int m_mesh_id; | |||
| float m_mesh_id1; | |||
| array<EasyMesh*, EasyMesh*> m_meshes; | |||
| array<EasyMesh*> m_gizmos; | |||
| //File data | |||
| array<String> m_cmdlist; | |||
| float m_stream_update_time; | |||
| float m_stream_update_timer; | |||
| //misc datas | |||
| Shader * m_texture_shader; | |||
| TileSet * m_default_texture; | |||
| Texture * m_texture; | |||
| ShaderUniform m_texture_uni; | |||
| }; | |||
| } /* namespace lol */ | |||