|
|
@@ -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 */ |