@@ -81,7 +81,6 @@ demos/lol.js/lol.js | |||
doc/samples/benchsuite | |||
doc/samples/bluenoise | |||
doc/samples/btphystest | |||
doc/samples/meshviewer/meshviewer | |||
doc/samples/sandbox/sample | |||
doc/samples/math/pi | |||
doc/samples/math/poly | |||
@@ -269,7 +269,6 @@ AC_CONFIG_FILES( | |||
doc/doxygen.cfg | |||
doc/samples/Makefile | |||
doc/samples/math/Makefile | |||
doc/samples/meshviewer/Makefile | |||
doc/samples/sandbox/Makefile | |||
doc/tutorial/Makefile | |||
tools/Makefile | |||
@@ -1,7 +1,7 @@ | |||
include $(top_srcdir)/build/autotools/common.am | |||
SUBDIRS = math meshviewer sandbox | |||
SUBDIRS = math sandbox | |||
bench: benchsuite$(EXEEXT) | |||
./benchsuite$(EXEEXT) | |||
@@ -1,19 +0,0 @@ | |||
include $(top_srcdir)/build/autotools/common.am | |||
if BUILD_SAMPLES | |||
if LOL_USE_GL | |||
noinst_PROGRAMS = meshviewer | |||
endif | |||
endif | |||
meshviewer_SOURCES = meshviewer.cpp meshviewer.h \ | |||
scenesetup.cpp scenesetup.h \ | |||
shinymvtexture.lolfx shinyfur.lolfx | |||
meshviewer_CPPFLAGS = $(AM_CPPFLAGS) | |||
meshviewer_DEPENDENCIES = @LOL_DEPS@ @LOL_LUA_DEPS@ | |||
meshviewer_LDFLAGS = $(AM_LDFLAGS) @LOL_LUA_DEPS@ | |||
if LOL_USE_EMSCRIPTEN | |||
meshviewer_LDFLAGS += -s EXPORTED_FUNCTIONS="['_main', '_C_Send']" | |||
endif | |||
@@ -1,106 +0,0 @@ | |||
//------------------------------------------------------------------------- | |||
//Command vars operations | |||
//------------------------------------------------------------------------- | |||
CmdVar("[ ]", ["Opens a new scope,\nevery operations between the braces\nwill only be done to the vertices added\nsince the start of this scope."]); | |||
CmdVar("float", ["Fraction value", "0.0"]); | |||
CmdVar("int", ["No decimal value", "0"]); | |||
CmdVar("bool", ["Boolean value", "true/false", "1/0"]); | |||
CmdVar("color", ["Red/Green/Blue/{Alpha}", | |||
"HEXA: #ABC{D}", " #AABBCC{DD}", | |||
"FLOAT: f f f f", " (f f f f)", " (f)"]); | |||
CmdVar("vec3", ["X/Y/Z as float", " f f f", "(f f f)", "(f)"]); | |||
CmdVar("vec2", ["X/Y/Z as float", " f f", "(f f)", "(f)"]); | |||
//------------------------------------------------------------------------- | |||
//Mesh CSG operations | |||
//------------------------------------------------------------------------- | |||
CmdType(["csgu", "csgunion"], "Performs a Union operation as :\n(current_scope_outside + new_scope_Outside)", [CmdArg("[ ]", "New scope")]); | |||
CmdType(["csgs", "csgsubstract"], "Performs a Substract operation as :\n(current_scope_Outside + new_scope_Inside-inverted)", [CmdArg("[ ]", "New scope")]); | |||
CmdType(["csgsl", "csgsubstractloss"], "Performs a Substract operation without keeping the new_scope part", [CmdArg("[ ]", "New scope")]); | |||
CmdType(["csga", "csgand"], "Performs an And operation as :\n(current_scope_Inside + new_scope__Inside)", [CmdArg("[ ]", "New scope")]); | |||
CmdType(["csgx", "csgxor"], "Performs a Xor operation as :\n(current_scope_Outside + current_scope_Inside-inverted + new_scope_Outside + new_scope_Inside-inverted)", [CmdArg("[ ]", "New scope")]); | |||
//------------------------------------------------------------------------- | |||
//Mesh Base operations | |||
//------------------------------------------------------------------------- | |||
CmdType(["tsw", "tglscalewind"], "When active, on negative-scaling,\nnormal-vector correction will not occur\nDefault : Inactive"); | |||
CmdType(["tqw", "tglquadweight"], "When active, quad will have a fifth center vertex\nDefault : Inactive"); | |||
CmdType(["tpbn", "tglpstbuildnormal"], "When active, normal will be only computed after all the command\nDefault : Inactive"); | |||
CmdType(["tvnc", "tglvertnocleanup"], "When active, vertices cleanup will not be done at the end of all the commands\nDefault : Inactive"); | |||
CmdType(["sc", "setcolor"], "Set A & B color", [CmdArg("color", "color")]); | |||
CmdType(["sca", "setcolora"], "Set A color", [CmdArg("color", "color")]); | |||
CmdType(["scb", "setcolorb"], "Set B color", [CmdArg("color", "color")]); | |||
CmdType(["scv", "setcolorv"], "Set the color of all vertices in this scope", [CmdArg("color", "color")]); | |||
CmdType(["lp", "loop"], "Performs a loop with the code in the braces.\nDoesn't open a new scope.", [CmdArg("int", "loopnb"), CmdArg("[ ]", "Loop command")]); | |||
//------------------------------------------------------------------------- | |||
//Vertices operations | |||
//------------------------------------------------------------------------- | |||
CmdType(["vm", "vertmerge"], "Will merge all the same face vertices"); | |||
CmdType(["vs", "vertseparate"], "Will separate all the same face vertices"); | |||
//------------------------------------------------------------------------- | |||
//Mesh transform operations | |||
//------------------------------------------------------------------------- | |||
CmdType(["tx", "translatex"], "Translate vertices along the X axis", [CmdArg("float", "n")]); | |||
CmdType(["ty", "translatey"], "Translate vertices along the Y axis", [CmdArg("float", "n")]); | |||
CmdType(["tz", "translatez"], "Translate vertices along the Z axis", [CmdArg("float", "n")]); | |||
CmdType(["t", "translate"], "Translate vertices", [CmdArg("vec3", "v")]); | |||
CmdType(["rx", "rotatex"], "Rotate vertices along the X axis", [CmdArg("float", "degree")]); | |||
CmdType(["ry", "rotatey"], "Rotate vertices along the Y axis", [CmdArg("float", "degree")]); | |||
CmdType(["rz", "rotatez"], "Rotate vertices along the Z axis", [CmdArg("float", "degree")]); | |||
CmdType(["r", "rotate"], "Rotate vertices along the given axis", [CmdArg("float", "degree"), CmdArg("vec3", "axis")]); | |||
CmdType(["rj", "radialjitter"], "Randomly move vertices along Origin-to-vertex as f(vtx) = vtx + o2v * (1.0 + rand(r))", [CmdArg("float", "r")]); | |||
CmdType(["tax", "taperx"], "multiply axis y/z by f(x)\nf(z) = z * (1.0 + (nz * f(x) + xoff))\nf(x) = absolute ? abs_x : x", [CmdArg("float", "ny"), CmdArg("float", "nz"), CmdArg("float", "xoff", "0.0"), CmdArg("bool", "absolute", "true")]); | |||
CmdType(["tay", "tapery"], "multiply axis x/z by f(y)\nf(x) = x * (1.0 + (nx * f(y) + yoff))\nf(y) = absolute ? abs_y : y", [CmdArg("float", "nx"), CmdArg("float", "nz"), CmdArg("float", "yoff", "0.0"), CmdArg("bool", "absolute", "true")]); | |||
CmdType(["taz", "taperz"], "multiply axis x/y by f(z)\nf(y) = y * (1.0 + (ny * f(z) + zoff))\nf(z) = absolute ? abs_z : z", [CmdArg("float", "nx"), CmdArg("float", "ny"), CmdArg("float", "zoff", "0.0"), CmdArg("bool", "absolute", "true")]); | |||
CmdType(["twx", "twistx"], "Twist vertices around x axis with x as rotation value\nf(p) = (RotateX(x * t + toff) * p)", [CmdArg("float", "t"), CmdArg("float", "toff", "0.0")]); | |||
CmdType(["twy", "twisty"], "Twist vertices around y axis with y as rotation value\nf(p) = (RotateY(y * t + toff) * p)", [CmdArg("float", "t"), CmdArg("float", "toff", "0.0")]); | |||
CmdType(["twz", "twistz"], "Twist vertices around z axis with z as rotation value\nf(p) = (RotateZ(z * t + toff) * p)", [CmdArg("float", "t"), CmdArg("float", "toff", "0.0")]); | |||
CmdType(["shx", "shearx"], "Shear vertices using x value as shear quantity\nf(z) = z + (nz * f(x) + xoff)\nf(x) = absolute ? abs_x : x", [CmdArg("float", "ny"), CmdArg("float", "nz"), CmdArg("float", "xoff", "0.0"), CmdArg("bool", "absolute", "true")]); | |||
CmdType(["shy", "sheary"], "Shear vertices using y value as shear quantity\nf(x) = x + (nx * f(y) + yoff)\nf(y) = absolute ? abs_y : y", [CmdArg("float", "nx"), CmdArg("float", "nz"), CmdArg("float", "yoff", "0.0"), CmdArg("bool", "absolute", "true")]); | |||
CmdType(["shz", "shearz"], "Shear vertices using z value as shear quantity\nf(y) = y + (ny * f(z) + zoff)\nf(z) = absolute ? abs_z : z", [CmdArg("float", "nx"), CmdArg("float", "ny"), CmdArg("float", "zoff", "0.0"), CmdArg("bool", "absolute", "true")]); | |||
CmdType(["stx", "stretchx"], "Stretch vertices using x value as stretch quantity\nf(z) = z + (pow(x, nz) + xoff)", [CmdArg("float", "ny"), CmdArg("float", "nz"), CmdArg("float", "xoff", "0.0")]); | |||
CmdType(["sty", "stretchy"], "Stretch vertices using y value as stretch quantity\nf(x) = x + (pow(y, nx) + yoff)", [CmdArg("float", "nx"), CmdArg("float", "nz"), CmdArg("float", "yoff", "0.0")]); | |||
CmdType(["stz", "stretchz"], "Stretch vertices using z value as stretch quantity\nf(y) = y + (pow(z, ny) + zoff)", [CmdArg("float", "nx"), CmdArg("float", "ny"), CmdArg("float", "zoff", "0.0")]); | |||
CmdType(["bdxy", "bendxy"], "Bend vertices using x as bend quantity along y axis\nf(p) = (RotateY(x * t + toff) * p)", [CmdArg("float", "t"), CmdArg("float", "toff", "0.0")]); | |||
CmdType(["bdxz", "bendxz"], "Bend vertices using x as bend quantity along z axis\nf(p) = (RotateZ(x * t + toff) * p)", [CmdArg("float", "t"), CmdArg("float", "toff", "0.0")]); | |||
CmdType(["bdyx", "bendyx"], "Bend vertices using y as bend quantity along x axis\nf(p) = (RotateX(y * t + toff) * p)", [CmdArg("float", "t"), CmdArg("float", "toff", "0.0")]); | |||
CmdType(["bdyz", "bendyz"], "Bend vertices using y as bend quantity along z axis\nf(p) = (RotateZ(y * t + toff) * p)", [CmdArg("float", "t"), CmdArg("float", "toff", "0.0")]); | |||
CmdType(["bdzx", "bendzx"], "Bend vertices using z as bend quantity along x axis\nf(p) = (RotateX(z * t + toff) * p)", [CmdArg("float", "t"), CmdArg("float", "toff", "0.0")]); | |||
CmdType(["bdzy", "bendzy"], "Bend vertices using z as bend quantity along y axis\nf(p) = (RotateY(z * t + toff) * p)", [CmdArg("float", "t"), CmdArg("float", "toff", "0.0")]); | |||
CmdType(["sx", "scalex"], "Scale vertices", [CmdArg("vec3", "s")]); | |||
CmdType(["sy", "scaley"], "Scale vertices", [CmdArg("vec3", "s")]); | |||
CmdType(["sz", "scalez"], "Scale vertices", [CmdArg("vec3", "s")]); | |||
CmdType(["s", "scale"], "Uniformly Scale vertices", [CmdArg("float", "s")]); | |||
CmdType(["dup", "duplicate"], "Duplicate scope mesh and apply commands in the brackets.", [CmdArg("[ ]", "")]); | |||
CmdType(["mx", "mirrorx"], "Mirror vertices through X-plane"); | |||
CmdType(["my", "mirrory"], "Mirror vertices through Y-plane"); | |||
CmdType(["mz", "mirrorz"], "Mirror vertices through Z-plane"); | |||
CmdType(["ch", "chamfer"], "DOES NOT WORK: Performs a chamfer operation", [CmdArg("float", "f")]); | |||
CmdType(["splt", "splittriangle"], "split triangles in 4 smaller ones", [CmdArg("int", "pass")]); | |||
CmdType(["smth", "smooth"], "Smooth the mesh by subdivising it", [CmdArg("int", "pass"), CmdArg("int", "split_per_pass"), CmdArg("int", "smooth_per_pass")]); | |||
//------------------------------------------------------------------------- | |||
//Mesh shape operations | |||
//------------------------------------------------------------------------- | |||
CmdType(["ac", "addcylinder"], "Cylinder centered on (0,0,0) with BBox:\nMin: [-.5 * max(d1, d2),-.5 * h,-.5 * max(d1, d2)]\nMax: [ .5 * max(d1, d2), .5 * h, .5 * max(d1, d2)]", | |||
[CmdArg("int", "nsides"), CmdArg("float", "h"), CmdArg("float", "d1"), CmdArg("float", "d2", "d1"), | |||
CmdArg("bool", "dualsides", "false"), CmdArg("bool", "smooth", "false"), CmdArg("bool", "close", "false")]); | |||
CmdType(["asph", "addsphere"], "Sphere centered on (0,0,0) with BBox:\nMin: [-.5 * d]\nMax: [ .5 * d]", [CmdArg("int", "ndivisions"), CmdArg("float", "d")]); | |||
CmdType(["acap", "addcapsule"], "Capsule centered on (0,0,0) with BBox:\nMin: [-.5 * d,-(.5 * d + h),-.5 * d]\nMax: [ .5 * d, (.5 * d + h), .5 * d]", [CmdArg("int", "ndivisions"), CmdArg("float", "h"), CmdArg("float", "d")]); | |||
CmdType(["ato", "addtorus"], "Torus centered on (0,0,0) with BBox:\nMax: [-.5 * d2]\nMax: [ .5 * d2]", [CmdArg("int", "ndivisions"), CmdArg("float", "d1"), CmdArg("float", "d2")]); | |||
CmdType(["ab", "addbox"], "Box centered on (0,0,0) with BBox:\nMin: [-.5 * size]\nMax: [ .5 * size]", [CmdArg("vec3", "size"), CmdArg("float", "chamf", "0.0")]); | |||
CmdType(["ascb", "addsmoothchamfbox"], "Box centered on (0,0,0) with BBox:\nMin: [-.5 * size]\nMax: [ .5 * size]", [CmdArg("vec3", "size"), CmdArg("float", "chamf")]); | |||
CmdType(["afcb", "addflatchamfbox"], "Box centered on (0,0,0) with BBox:\nMin: [-.5 * size]\nMax: [ .5 * size]", [CmdArg("vec3", "size"), CmdArg("float", "chamf")]); | |||
CmdType(["as", "addstar"], "Append a Star centered on (0,0,0)\nContained in a disc of max(d1, d2) diameter.", | |||
[CmdArg("int", "nbranches"), CmdArg("float", "d1"), CmdArg("float", "d2"), | |||
CmdArg("bool", "fade", "false"), CmdArg("bool", "fade2", "false")]); | |||
CmdType(["aes", "addexpandedstar"], "Star centered on (0,0,0)\nContained in a disc of max(max(d1, d2), max(d1 + extrad, d2 + extrad)) diameter.\nExpanded star branches use Color2.", | |||
[CmdArg("int", "nbranches"), CmdArg("float", "d1"), CmdArg("float", "d2"), CmdArg("float", "extrad", "0.0")]); | |||
CmdType(["ad", "adddisc"], "Disc centered on (0,0,0) with d diameter.", [CmdArg("int", "nsides"), CmdArg("float", "d"), CmdArg("bool", "fade", "false")]); | |||
CmdType(["at", "addtriangle"], "Triangle centered on (0,0,0)\nContained in a disc of d diameter.", [CmdArg("float", "d"), CmdArg("bool", "fade", "false")]); | |||
CmdType(["aq", "addquad"], "Quad centered on (0,0,0) with BBox:\nMin: [-size * .5f, 0,-size * .5f]\nMax: [ size * .5f, 0, size * .5f]", [CmdArg("float", "size"), CmdArg("bool", "fade", "false")]); | |||
CmdType(["acg", "addcog"], "Gear centered on (0,0,0) with BBox:\nMin: [-.5 * max(d1, d2),-.5 * h,-.5 * max(d1, d2)]\nMax: [ .5 * max(d1, d2), .5 * h, .5 * max(d1, d2)]", | |||
[CmdArg("float", "h"), CmdArg("vec2", "d10d20"), CmdArg("vec2", "d11d21"), CmdArg("vec2", "d12d22"), | |||
CmdArg("float", "sidemul", "0.0"), CmdArg("bool", "offset", "false")]); |
@@ -1,10 +0,0 @@ | |||
[Debug] | |||
Pos=60,60 | |||
Size=400,400 | |||
Collapsed=0 | |||
[Camera Setup] | |||
Pos=60,60 | |||
Size=307,314 | |||
Collapsed=0 | |||
@@ -1,344 +0,0 @@ | |||
// | |||
// Lol Engine — EasyMesh tutorial | |||
// | |||
// Copyright © 2009—2015 Benjamin “Touky” Huet <huet.benjamin@gmail.com> | |||
// © 2012—2018 Sam Hocevar <sam@hocevar.net> | |||
// | |||
// Lol Engine 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 | |||
#include <string> | |||
#include <map> | |||
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(std::map<int64_t, std::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() { } | |||
ViewerObject(std::string const& name) : m_name(name) { } | |||
virtual ~ViewerObject() { } | |||
virtual void tick_draw(float seconds, Scene &scene) { } | |||
std::string GetName() { return m_name; } | |||
protected: | |||
std::string m_name; | |||
}; | |||
//EasyMeshViewerObject -------------------------------------------------------- | |||
class EasyMeshViewerObject : public ViewerObject | |||
{ | |||
typedef ViewerObject super; | |||
public: | |||
EasyMeshViewerObject() | |||
: ViewerObject() { } | |||
EasyMeshViewerObject(std::string const& name, EasyMesh const& mesh) | |||
: ViewerObject(name) | |||
{ | |||
Init(name, mesh); | |||
} | |||
virtual ~EasyMeshViewerObject() { } | |||
virtual void tick_draw(float seconds, Scene &scene); | |||
void Init(std::string const& name, EasyMesh const& mesh) | |||
{ | |||
m_name = name; | |||
m_mesh = mesh; | |||
} | |||
protected: | |||
EasyMesh m_mesh; | |||
}; | |||
//MeshViewerLoadJob ----------------------------------------------------------- | |||
class MeshViewerLoadJob : public ThreadJob | |||
{ | |||
friend class BaseThreadManager; | |||
typedef ThreadJob super; | |||
public: | |||
inline MeshViewerLoadJob() : ThreadJob() { } | |||
inline MeshViewerLoadJob(std::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: | |||
std::string m_path; | |||
}; | |||
//EasyMeshLoadJob ------------------------------------------------------------- | |||
class EasyMeshLoadJob : public MeshViewerLoadJob | |||
{ | |||
friend class BaseThreadManager; | |||
typedef EasyMeshLoadJob super; | |||
public: | |||
inline EasyMeshLoadJob() : MeshViewerLoadJob() { } | |||
inline EasyMeshLoadJob(std::string const& path) | |||
: MeshViewerLoadJob(path) { } | |||
virtual ~EasyMeshLoadJob() { } | |||
static MeshViewerLoadJob* GetInstance(std::string const& path); | |||
virtual void RetrieveResult(class MeshViewer* app); | |||
protected: | |||
static bool Check(std::string const& path) { return path.find(".easymesh") != std::string::npos; } | |||
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(); | |||
void UpdateSceneSetup(bool only_destroy = false); | |||
MeshViewerLoadJob* GetLoadJob(std::string const& path); | |||
void AddViewerObj(ViewerObject* obj) { m_objs << obj; } | |||
virtual void tick_game(float seconds); | |||
virtual void tick_draw(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; | |||
Text* m_text = nullptr; | |||
//ImGui stuff | |||
bool m_menu_cam_useage = true; | |||
float m_menu_cam_fov = radians(40.f); | |||
vec3 m_menu_cam_pos = vec3(20.f, 45.f, 45.f); | |||
int m_menu_mesh_idx = 0; | |||
array<char const *> m_menu_mesh_names_char; | |||
array<std::string> m_menu_mesh_names_str; | |||
//Scene setup data | |||
SceneSetupLuaLoader m_ssetup_loader; | |||
FileUpdateStatus *m_ssetup_file_status = nullptr; | |||
std::string m_ssetup_file_name; | |||
std::string m_ssetup_name; | |||
std::map<std::string, SceneSetup*> m_ssetups; | |||
//File data | |||
std::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 --------------------------------------------------------------------- | |||
SceneSetup *m_ssetup = nullptr; | |||
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<std::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 */ |
@@ -1,88 +0,0 @@ | |||
<?xml version="1.0" encoding="utf-8"?> | |||
<Project DefaultTargets="Build" ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> | |||
<PropertyGroup Label="LolMacros"> | |||
<LolDir Condition="Exists('$(SolutionDir)\lol')">$(SolutionDir)\lol</LolDir> | |||
<LolDir Condition="!Exists('$(SolutionDir)\lol')">$(SolutionDir)</LolDir> | |||
</PropertyGroup> | |||
<ItemGroup Label="ProjectConfigurations"> | |||
<ProjectConfiguration Include="Debug|ORBIS"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>ORBIS</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Debug|Win32"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>Win32</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Debug|x64"> | |||
<Configuration>Debug</Configuration> | |||
<Platform>x64</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|ORBIS"> | |||
<Configuration>Release</Configuration> | |||
<Platform>ORBIS</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|Win32"> | |||
<Configuration>Release</Configuration> | |||
<Platform>Win32</Platform> | |||
</ProjectConfiguration> | |||
<ProjectConfiguration Include="Release|x64"> | |||
<Configuration>Release</Configuration> | |||
<Platform>x64</Platform> | |||
</ProjectConfiguration> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ClCompile Include="meshviewer.cpp" /> | |||
<ClCompile Include="scenesetup.cpp" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ProjectReference Include="$(LolDir)\src\lol-core.vcxproj"> | |||
<Project>{9e62f2fe-3408-4eae-8238-fd84238ceeda}</Project> | |||
</ProjectReference> | |||
<ProjectReference Condition="'$(enable_bullet)'!='no'" Include="$(LolDir)\src\3rdparty\lol-bullet.vcxproj"> | |||
<Project>{83d3b207-c601-4025-8f41-01dedc354661}</Project> | |||
</ProjectReference> | |||
<ProjectReference Include="$(LolDir)\src\3rdparty\lol-lua.vcxproj"> | |||
<Project>{d84021ca-b233-4e0f-8a52-071b83bbccc4}</Project> | |||
</ProjectReference> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<None Include="../data/mesh-buffer.txt"> | |||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Release|Win32'">true</ExcludedFromBuild> | |||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> | |||
</None> | |||
<None Include="..\data\meshviewer.easymesh.lua"> | |||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> | |||
</None> | |||
<None Include="..\data\meshviewer.init.lua"> | |||
<ExcludedFromBuild Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">true</ExcludedFromBuild> | |||
</None> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<LolFxCompile Include="shinyfur.lolfx" /> | |||
<LolFxCompile Include="shinymvtexture.lolfx" /> | |||
</ItemGroup> | |||
<ItemGroup> | |||
<ClInclude Include="meshviewer.h" /> | |||
<ClInclude Include="scenesetup.h" /> | |||
</ItemGroup> | |||
<PropertyGroup Label="Globals"> | |||
<ProjectGuid>{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}</ProjectGuid> | |||
<ConfigurationType>Application</ConfigurationType> | |||
<Keyword>Win32Proj</Keyword> | |||
</PropertyGroup> | |||
<Import Project="$(LolDir)\build\msbuild\lol.config.props" /> | |||
<ImportGroup Label="ExtensionSettings"> | |||
<Import Project="$(LolDir)\build\msbuild\lolfx.props" /> | |||
</ImportGroup> | |||
<ImportGroup Label="PropertySheets"> | |||
<Import Project="$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props" Condition="exists('$(UserRootDir)\Microsoft.Cpp.$(Platform).user.props')" Label="LocalAppDataPlatform" /> | |||
<Import Project="$(LolDir)\build\msbuild\lol.vars.props" /> | |||
</ImportGroup> | |||
<PropertyGroup Label="UserMacros" /> | |||
<Import Project="$(LolDir)\build\msbuild\lol.rules.props" /> | |||
<ItemDefinitionGroup /> | |||
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> | |||
<ImportGroup Label="ExtensionTargets"> | |||
<Import Project="$(LolDir)\build\msbuild\lolfx.targets" /> | |||
</ImportGroup> | |||
</Project> |
@@ -1,313 +0,0 @@ | |||
// | |||
// Lol Engine — Mesh viewer | |||
// | |||
// Copyright © 2003—2015 Benjamin “Touky” Huet <huet.benjamin@gmail.com> | |||
// © 2013—2018 Sam Hocevar <sam@hocevar.net> | |||
// | |||
// Lol Engine 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. | |||
// | |||
#if HAVE_CONFIG_H | |||
# include "config.h" | |||
#endif | |||
#include <lol/engine.h> | |||
#include <lol/lua.h> | |||
#include <string> | |||
#include <map> | |||
#include "scenesetup.h" | |||
namespace lol | |||
{ | |||
//----------------------------------------------------------------------------- | |||
//CTor/DTor | |||
SceneSetup::SceneSetup(std::string const& name) | |||
{ | |||
m_name = name; | |||
m_clear_color = vec4(vec3::zero, 1.f); | |||
m_show_gizmo = true; | |||
m_show_lights = true; | |||
} | |||
//---- | |||
SceneSetup::~SceneSetup() | |||
{ | |||
Shutdown(true); | |||
} | |||
//----------------------------------------------------------------------------- | |||
bool SceneSetup::Startup() | |||
{ | |||
for (int i = 0; i < m_lights.count(); i++) | |||
Ticker::Ref(m_lights[i]); | |||
return true; | |||
} | |||
//----------------------------------------------------------------------------- | |||
bool SceneSetup::Shutdown(bool destroy) | |||
{ | |||
for (int i = 0; i < m_lights.count(); i++) | |||
if (m_lights[i]->IsTicked()) | |||
Ticker::Unref(m_lights[i]); | |||
if (destroy) | |||
m_lights.clear(); | |||
return true; | |||
} | |||
//----------------------------------------------------------------------------- | |||
void SceneSetup::AddLight(LightType type) | |||
{ | |||
m_last_cmd = SceneSetup::Command::AddLight; | |||
m_lights << new Light(); | |||
m_lights.last()->SetType(type); | |||
} | |||
//----------------------------------------------------------------------------- | |||
void SceneSetup::SetupScene() | |||
{ | |||
m_last_cmd = SceneSetup::Command::SetupScene; | |||
} | |||
//----------------------------------------------------------------------------- | |||
void SceneSetup::SetPosition(vec3 const& v) | |||
{ | |||
switch (m_last_cmd.ToScalar()) | |||
{ | |||
case SceneSetup::Command::AddLight: | |||
m_lights.last()->SetPosition(v); | |||
break; | |||
} | |||
} | |||
//----------------------------------------------------------------------------- | |||
void SceneSetup::SetLookAt(vec3 const& v) | |||
{ | |||
switch (m_last_cmd.ToScalar()) | |||
{ | |||
case SceneSetup::Command::AddLight: | |||
//TODO: Do better | |||
m_lights.last()->SetPosition(v - m_lights.last()->GetPosition()); | |||
break; | |||
} | |||
} | |||
//----------------------------------------------------------------------------- | |||
void SceneSetup::SetColor(vec4 const& c) | |||
{ | |||
switch (m_last_cmd.ToScalar()) | |||
{ | |||
case SceneSetup::Command::AddLight: | |||
m_lights.last()->SetColor(c); | |||
break; | |||
case SceneSetup::Command::SetupScene: | |||
m_clear_color = c; | |||
break; | |||
} | |||
} | |||
//----------------------------------------------------------------------------- | |||
void SceneSetup::Show(SceneSetup::Display const& d) | |||
{ | |||
Set(d, DisplayFlag::On); | |||
} | |||
//----------------------------------------------------------------------------- | |||
void SceneSetup::Hide(SceneSetup::Display const& d) | |||
{ | |||
Set(d, DisplayFlag::Off); | |||
} | |||
//----------------------------------------------------------------------------- | |||
void SceneSetup::Toggle(SceneSetup::Display const& d) | |||
{ | |||
Set(d, DisplayFlag::Toggle); | |||
} | |||
//----------------------------------------------------------------------------- | |||
void SceneSetup::Set(SceneSetup::Display const& d, DisplayFlag const& f) | |||
{ | |||
bool value = f == DisplayFlag::On ? true : false; | |||
switch (m_last_cmd.ToScalar()) | |||
{ | |||
case SceneSetup::Command::SetupScene: | |||
switch (d.ToScalar()) | |||
{ | |||
case SceneSetup::Display::Gizmo: | |||
m_show_gizmo = f == DisplayFlag::Toggle ? !m_show_gizmo : value; | |||
break; | |||
case SceneSetup::Display::Light: | |||
m_show_lights = f == DisplayFlag::Toggle ? !m_show_lights : value; | |||
break; | |||
} | |||
break; | |||
} | |||
} | |||
//----------------------------------------------------------------------------- | |||
SceneSetupLuaObject::SceneSetupLuaObject(std::string const& name) : LuaObject() | |||
{ | |||
m_setup = new SceneSetup(name); | |||
SceneSetupLuaLoader::RegisterSetup(m_setup); | |||
} | |||
//----------------------------------------------------------------------------- | |||
SceneSetupLuaObject::~SceneSetupLuaObject() | |||
{ | |||
} | |||
//----------------------------------------------------------------------------- | |||
SceneSetupLuaObject* SceneSetupLuaObject::New(lua_State* l, int arg_nb) | |||
{ | |||
UNUSED(arg_nb); | |||
auto s = LuaStack::Begin(l); | |||
auto n = s.Get<std::string>(); | |||
return new SceneSetupLuaObject(n); | |||
} | |||
//-- Setup command ------------------------------------------------------------ | |||
int SceneSetupLuaObject::AddLight(lua_State* l) | |||
{ | |||
auto s = LuaStack::Begin(l); | |||
auto o = s.GetPtr<SceneSetupLuaObject>(); | |||
auto t = s.Get<std::string>(); | |||
o->m_setup->AddLight(FindValue<LightType>(t)); | |||
return s.End(); | |||
} | |||
int SceneSetupLuaObject::SetupScene(lua_State* l) | |||
{ | |||
auto s = LuaStack::Begin(l); | |||
auto o = s.GetPtr<SceneSetupLuaObject>(); | |||
o->m_setup->SetupScene(); | |||
return s.End(); | |||
} | |||
//-- main funcs --------------------------------------------------------------- | |||
int SceneSetupLuaObject::SetPosition(lua_State* l) | |||
{ | |||
auto s = LuaStack::Begin(l); | |||
auto o = s.GetPtr<SceneSetupLuaObject>(); | |||
auto c = s.Get<vec3>(); | |||
o->m_setup->SetPosition(c); | |||
return s.End(); | |||
} | |||
int SceneSetupLuaObject::SetLookAt(lua_State* l) | |||
{ | |||
auto s = LuaStack::Begin(l); | |||
auto o = s.GetPtr<SceneSetupLuaObject>(); | |||
auto c = s.Get<vec3>(); | |||
o->m_setup->SetLookAt(c); | |||
return s.End(); | |||
} | |||
int SceneSetupLuaObject::SetColor(lua_State* l) | |||
{ | |||
auto s = LuaStack::Begin(l); | |||
auto o = s.GetPtr<SceneSetupLuaObject>(); | |||
auto c = s.Get<vec4>(); | |||
o->m_setup->SetColor(c); | |||
return s.End(); | |||
} | |||
int SceneSetupLuaObject::Show(lua_State* l) | |||
{ | |||
auto s = LuaStack::Begin(l); | |||
auto o = s.GetPtr<SceneSetupLuaObject>(); | |||
auto e = s.GetEnum<SceneSetup::DisplayBase>(); | |||
o->m_setup->Show(e); | |||
return s.End(); | |||
} | |||
int SceneSetupLuaObject::Hide(lua_State* l) | |||
{ | |||
auto s = LuaStack::Begin(l); | |||
auto o = s.GetPtr<SceneSetupLuaObject>(); | |||
auto e = s.GetEnum<SceneSetup::DisplayBase>(); | |||
o->m_setup->Hide(e); | |||
return s.End(); | |||
} | |||
int SceneSetupLuaObject::Toggle(lua_State* l) | |||
{ | |||
auto s = LuaStack::Begin(l); | |||
auto o = s.GetPtr<SceneSetupLuaObject>(); | |||
auto e = s.GetEnum<SceneSetup::DisplayBase>(); | |||
o->m_setup->Toggle(e); | |||
return s.End(); | |||
} | |||
//----------------------------------------------------------------------------- | |||
const LuaObjectLibrary* SceneSetupLuaObject::GetLib() | |||
{ | |||
typedef SceneSetupLuaObject SSLO; | |||
static const LuaObjectLibrary lib = LuaObjectLibrary( | |||
"SceneSetup", | |||
//Statics | |||
{ { nullptr, nullptr } }, | |||
//Methods | |||
{ | |||
//----------------------------------------------------------------- | |||
{ "AddLight", AddLight }, | |||
{ "Setup", SetupScene }, | |||
//-- main funcs | |||
{ "Position", SetPosition }, | |||
{ "LookAt", SetLookAt }, | |||
{ "Color", SetColor }, | |||
{ "Show", Show }, | |||
{ "Hide", Hide }, | |||
{ "Toggle", Toggle }, | |||
}, | |||
//Variables | |||
{ { nullptr, nullptr, nullptr } }); | |||
return &lib; | |||
} | |||
//----------------------------------------------------------------------------- | |||
std::map<std::string, SceneSetup*> SceneSetupLuaLoader::m_setups; | |||
SceneSetupLuaLoader::SceneSetupLuaLoader() : LuaLoader() | |||
{ | |||
lua_State* l = GetLuaState(); | |||
LuaObjectHelper::Register<SceneSetupLuaObject>(l); | |||
} | |||
//----------------------------------------------------------------------------- | |||
SceneSetupLuaLoader::~SceneSetupLuaLoader() { } | |||
//----------------------------------------------------------------------------- | |||
static array<SceneSetupLuaObject*> g_instances; | |||
void SceneSetupLuaLoader::Store(LuaObject* obj) | |||
{ | |||
SceneSetupLuaObject* ezm = static_cast<SceneSetupLuaObject*>(obj); | |||
g_instances << ezm; | |||
} | |||
//----------------------------------------------------------------------------- | |||
array<SceneSetupLuaObject*>& SceneSetupLuaLoader::GetInstances() | |||
{ | |||
return g_instances; | |||
} | |||
//----------------------------------------------------------------------------- | |||
void SceneSetupLuaLoader::RegisterSetup(SceneSetup* setup) | |||
{ | |||
m_setups[setup->m_name] = setup; | |||
} | |||
//----------------------------------------------------------------------------- | |||
bool SceneSetupLuaLoader::GetRegisteredSetups(std::map<std::string, SceneSetup*>& setups) | |||
{ | |||
setups = m_setups; | |||
return m_setups.size() > 0; | |||
} | |||
//----------------------------------------------------------------------------- | |||
bool SceneSetupLuaLoader::GetLoadedSetups(std::map<std::string, SceneSetup*>& setups) | |||
{ | |||
return GetRegisteredSetups(setups); | |||
} | |||
} /* namespace lol */ |
@@ -1,227 +0,0 @@ | |||
// | |||
// Lol Engine — Mesh viewer | |||
// | |||
// Copyright © 2003—2015 Benjamin “Touky” Huet <huet.benjamin@gmail.com> | |||
// © 2013—2018 Sam Hocevar <sam@hocevar.net> | |||
// | |||
// Lol Engine 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 | |||
// | |||
// The Scene setup class | |||
// ---------------- | |||
// | |||
#include <string> | |||
#include <map> | |||
namespace lol | |||
{ | |||
//----------------------------------------------------------------------------- | |||
class SceneSetup | |||
{ | |||
friend class SceneSetupLuaLoader; | |||
friend class SceneSetupLuaObject; | |||
public: | |||
//CTor/DTor | |||
SceneSetup() : SceneSetup("default") { } | |||
SceneSetup(std::string const& name); | |||
~SceneSetup(); | |||
static std::string GetName() { return "<scenesetup>"; } | |||
//-- | |||
bool Startup(); | |||
bool Shutdown(bool destroy=false); | |||
//-- Setup command | |||
void AddLight(LightType type); | |||
void SetupScene(); | |||
//-- main funcs | |||
void SetPosition(vec3 const& v); | |||
void SetLookAt(vec3 const& v); | |||
void SetColor(vec4 const& c); | |||
//------------------------------------------------------------------------- | |||
struct DisplayBase : public StructSafeEnum | |||
{ | |||
enum Type | |||
{ | |||
Gizmo, | |||
Light, | |||
Max | |||
}; | |||
protected: | |||
virtual bool BuildEnumMap(std::map<int64_t, std::string>& enum_map) | |||
{ | |||
enum_map[Gizmo] = "Gizmo"; | |||
enum_map[Light] = "Light"; | |||
return true; | |||
} | |||
}; | |||
typedef SafeEnum<DisplayBase> Display; | |||
void Show(Display const& d); | |||
void Hide(Display const& d); | |||
void Toggle(Display const& d); | |||
protected: | |||
void Set(Display const& d, DisplayFlag const& f); | |||
protected: | |||
//------------------------------------------------------------------------- | |||
struct CommandBase : public StructSafeEnum | |||
{ | |||
enum Type | |||
{ | |||
AddLight, | |||
SetupScene, | |||
Max | |||
}; | |||
protected: | |||
virtual bool BuildEnumMap(std::map<int64_t, std::string>& enum_map) | |||
{ | |||
enum_map[AddLight] = "AddLight"; | |||
enum_map[SetupScene] = "SetupScene"; | |||
return true; | |||
} | |||
}; | |||
typedef SafeEnum<CommandBase> Command; | |||
public: | |||
//-- | |||
std::string m_name; | |||
Command m_last_cmd; | |||
vec4 m_clear_color; | |||
array<Light *> m_lights; | |||
array<std::string, std::string> m_custom_cmd; | |||
bool m_show_gizmo; | |||
bool m_show_lights; | |||
}; | |||
//----------------------------------------------------------------------------- | |||
class SceneSetupLuaObject : public LuaObject | |||
{ | |||
public: | |||
//------------------------------------------------------------------------- | |||
SceneSetupLuaObject(std::string const& name); | |||
virtual ~SceneSetupLuaObject(); | |||
//------------------------------------------------------------------------- | |||
static SceneSetupLuaObject* New(lua_State* l, int arg_nb); | |||
static const LuaObjectLibrary* GetLib(); | |||
//------------------------------------------------------------------------- | |||
public: | |||
//-- Setup command | |||
static int AddLight(lua_State* l); | |||
static int SetupScene(lua_State* l); | |||
//-- main funcs | |||
static int SetPosition(lua_State* l); | |||
static int SetLookAt(lua_State* l); | |||
static int SetColor(lua_State* l); | |||
static int Show(lua_State* l); | |||
static int Hide(lua_State* l); | |||
static int Toggle(lua_State* l); | |||
//-- Setup command | |||
void AddLight(LightType type); | |||
void SetupScene(); | |||
//-- main funcs | |||
void SetPosition(vec3& v); | |||
void SetLookAt(vec3& v); | |||
void SetColor(vec4& c); | |||
void Show(SceneSetup::Display const& d); | |||
void Hide(SceneSetup::Display const& d); | |||
void Toggle(SceneSetup::Display const& d); | |||
private: | |||
SceneSetup* m_setup = nullptr; | |||
}; | |||
//----------------------------------------------------------------------------- | |||
class SceneSetupLuaLoader : public LuaLoader | |||
{ | |||
friend class SceneSetupLuaObject; | |||
public: | |||
SceneSetupLuaLoader(); | |||
virtual ~SceneSetupLuaLoader(); | |||
//Virtual Store lua object ------------------------------------------------ | |||
virtual void Store(LuaObject* obj); | |||
array<SceneSetupLuaObject*>& GetInstances(); | |||
//------------------------------------------------------------------------- | |||
protected: | |||
static void RegisterSetup(SceneSetup* setup); | |||
static bool GetRegisteredSetups(std::map<std::string, SceneSetup*>& setups); | |||
public: | |||
bool GetLoadedSetups(std::map<std::string, SceneSetup*>& setups); | |||
private: | |||
static std::map<std::string, SceneSetup*> m_setups; | |||
}; | |||
/* | |||
addlight { return token::T_ADDLIGHT; } | |||
position { return token::T_OBJPOSITION; } | |||
lookat { return token::T_OBJLOOKAT; } | |||
color { return token::T_OBJCOLOR; } | |||
clearcolor { return token::T_CLEARCOLOR; } | |||
showgizmo { return token::T_SHOWGIZMO; } | |||
showlight { return token::T_SHOWLIGHT; } | |||
custom { return token::T_CUSTOMCMD; } | |||
custom { return token::T_CUSTOMCMD; } | |||
light_command: | |||
T_ADDLIGHT { uc.m_sstp.m_lights << new Light(); uc.m_last_cmd = "ADDLIGHT"; } | |||
| T_ADDLIGHT fv { uc.m_sstp.m_lights << new Light(); uc.m_last_cmd = "ADDLIGHT"; | |||
uc.m_sstp.m_lights.last()->SetType(LightType($2)); } | |||
| T_ADDLIGHT svv { uc.m_sstp.m_lights << new Light(); uc.m_last_cmd = "ADDLIGHT"; | |||
uc.m_sstp.m_lights.last()->SetType(FindValue<LightType>($2)); } | |||
; | |||
setup_command: | |||
T_OBJPOSITION v3 { if (uc.m_last_cmd == "ADDLIGHT") | |||
uc.m_sstp.m_lights.last()->SetPosition(vec3($2[0], $2[1], $2[2])); } | |||
| T_OBJLOOKAT v3 { if (uc.m_last_cmd == "ADDLIGHT") | |||
{ | |||
} } | |||
| T_OBJCOLOR v4{ if (uc.m_last_cmd == "ADDLIGHT") | |||
uc.m_sstp.m_lights.last()->SetColor(vec4($2[0], $2[1], $2[2], $2[3])); } | |||
| T_OBJCOLOR COLOR{ uint32_t x = $2; | |||
ivec4 v(x >> 24, (x >> 16) & 0xff, (x >> 8) & 0xff, x & 0xff); | |||
vec4 vv = vec4(v) * (1.f / 255.f); | |||
if (uc.m_last_cmd == "ADDLIGHT") | |||
uc.m_sstp.m_lights.last()->SetColor(vv); } | |||
; | |||
scene_command: | |||
T_CLEARCOLOR v4{ uc.m_sstp.m_clear_color = vec4($2[0], $2[1], $2[2], $2[3]); } | |||
T_CLEARCOLOR v3{ uc.m_sstp.m_clear_color = vec4($2[0], $2[1], $2[2], 1.f); } | |||
| T_CLEARCOLOR COLOR{ uint32_t x = $2; ivec4 v(x >> 24, (x >> 16) & 0xff, (x >> 8) & 0xff, x & 0xff); | |||
uc.m_sstp.m_clear_color = vec4(v) * (1.f / 255.f); } | |||
| T_SHOWGIZMO bv{ uc.m_sstp.m_show_gizmo = $2; } | |||
| T_SHOWLIGHT bv{ uc.m_sstp.m_show_lights = $2; } | |||
; | |||
custom_command: | |||
T_CUSTOMCMD svv sv{ uc.m_sstp.m_custom_cmd.push($2, $3); } | |||
; | |||
*/ | |||
} /* namespace lol */ | |||
@@ -1,21 +0,0 @@ | |||
//------------------------------------------------------------------------- | |||
//Command vars operations | |||
//------------------------------------------------------------------------- | |||
CmdVar("float", ["Fraction value", "0.0"]); | |||
CmdVar("int", ["No decimal value", "0"]); | |||
CmdVar("bool", ["Boolean value", "true/false", "1/0"]); | |||
CmdVar("color", ["Red/Green/Blue/{Alpha}", | |||
"HEXA: #ABC{D}", " #AABBCC{DD}", | |||
"FLOAT: f f f f", " (f f f f)", " (f)"]); | |||
CmdVar("vec3", ["X/Y/Z as float", " f f f", "(f f f)", "(f)"]); | |||
//------------------------------------------------------------------------- | |||
//scene operations | |||
//------------------------------------------------------------------------- | |||
CmdType(["addlight"], "Add a light to the scene.\nUse other commands after this one to fully setup.", [CmdArg("float", "type")]); | |||
CmdType(["position"], "Set a position.\nWhen put after a light, sets its position.", [CmdArg("vec3", "pos")]); | |||
CmdType(["color"], "Set a color.", [CmdArg("color", "color")]); | |||
CmdType(["clearcolor"], "Sets the color used for screen clearing.", [CmdArg("color", "color")]); | |||
CmdType(["showgizmo"], "If true, show the axis gizmo.", [CmdArg("bool", "show")]); | |||
CmdType(["showlight"], "If true, show the light locations.", [CmdArg("bool", "show")]); | |||
@@ -1,117 +0,0 @@ | |||
[vert.glsl] | |||
#version 130 | |||
in vec3 in_position; | |||
in vec3 in_Normal; | |||
in vec4 in_color; | |||
uniform mat4 u_modelview; | |||
uniform mat4 u_view; | |||
uniform mat4 u_projection; | |||
uniform mat3 u_normalmat; | |||
uniform float u_damage; | |||
out vec4 pass_vertex; /* View space */ | |||
out vec3 pass_tnormal; | |||
out vec4 pass_color; | |||
void main(void) | |||
{ | |||
vec4 vertex = vec4(in_position + (in_Normal * u_damage), 1.0); | |||
float dam_perc = u_damage / (0.1 * 40); | |||
vec3 vGravity = vec3(0.0, -0.981, 0.0) * 2.0; | |||
float k = pow(dam_perc, 3); | |||
vertex = u_modelview * vertex + u_view * vec4(vGravity * k, 1.0); | |||
vec3 tnorm = normalize(u_normalmat * in_Normal); | |||
pass_vertex = vertex; | |||
pass_tnormal = tnorm; | |||
pass_color = in_color; | |||
gl_Position = u_projection * vertex; | |||
} | |||
[frag.glsl] | |||
#version 130 | |||
#if defined GL_ES | |||
precision highp float; | |||
#endif | |||
in vec4 pass_vertex; /* View space */ | |||
in vec3 pass_tnormal; | |||
in vec4 pass_color; | |||
uniform mat4 u_view; | |||
uniform mat4 u_inv_view; | |||
uniform mat4 u_inv_modelview; | |||
uniform float u_damage; | |||
//Light list | |||
uniform vec4 u_lights[8 * 2]; | |||
void main(void) | |||
{ | |||
/* Material properties */ | |||
vec3 specular_reflect = vec3(0.8, 0.75, 0.4); | |||
float specular_power = 60.0; | |||
/* World properties */ | |||
vec3 ambient = vec3(0.7, 0.7, 0.7); | |||
vec3 specular = vec3(0.0, 0.0, 0.0); | |||
vec3 diffuse = vec3(0.0, 0.0, 0.0); | |||
/* Light precalculations */ | |||
vec3 v = normalize(-pass_vertex.xyz); | |||
/* Apply lighting */ | |||
for (int i = 0; i < 8; i++) | |||
{ | |||
vec4 pos = u_lights[i * 2]; | |||
vec4 color = u_lights[i * 2 + 1]; | |||
vec3 s, r; | |||
if (pos.w > 0.0) | |||
{ | |||
/* Point light -- no attenuation yet */ | |||
s = normalize((u_view * pos).xyz - pass_vertex.xyz); | |||
r = reflect(-s, pass_tnormal); | |||
} | |||
else | |||
{ | |||
/* Directional light */ | |||
s = normalize(-pos.xyz); | |||
r = reflect(s, pass_tnormal); | |||
} | |||
float sdotn = max(dot(s, pass_tnormal), 0.0); | |||
diffuse += color.xyz * sdotn; | |||
if (sdotn > 0.0) | |||
specular += color.xyz * specular_reflect | |||
* pow(max(dot(r, v), 0.0), specular_power); | |||
} | |||
vec3 light = ambient + diffuse + specular; | |||
vec4 world_vertex = u_inv_modelview * pass_vertex; | |||
vec4 world_normal = u_inv_modelview * vec4(pass_tnormal, 1.0); | |||
float dam_perc = u_damage / (0.1 * 40); | |||
float PI = 3.14159265358979323846264; | |||
dam_perc = (sin(PI * (dam_perc - 0.5)) * 0.5 + 0.5); | |||
dam_perc *= dam_perc; | |||
dam_perc = 1.0 - dam_perc; | |||
float mod = 2.0; | |||
float transp = dam_perc; | |||
/* | |||
abs(sin(world_vertex.x * mod) * dam_perc * 0.5 + 0.5) * | |||
abs(sin(world_vertex.y * mod) * dam_perc * 0.5 + 0.5) * | |||
abs(sin(world_vertex.z * mod) * dam_perc * 0.5 + 0.5) | |||
*/ | |||
//vec4 real_color = mix(pass_color, vec4(1.2, 1.2, 1.2, 1.0), u_damage); | |||
// - u_damage | |||
gl_FragColor = pass_color * vec4(light, (u_damage == 0)?(1.0):(transp)); | |||
} | |||
@@ -1,98 +0,0 @@ | |||
[vert.glsl] | |||
#version 130 | |||
in vec3 in_position; | |||
in vec3 in_Normal; | |||
in vec4 in_color; | |||
in vec2 in_texcoord; | |||
uniform mat4 u_modelview; | |||
uniform mat4 u_view; | |||
uniform mat4 u_projection; | |||
uniform mat3 u_normalmat; | |||
out vec4 pass_vertex; /* View space */ | |||
out vec3 pass_tnormal; | |||
out vec4 pass_color; | |||
out vec2 pass_texcoord; | |||
void main(void) | |||
{ | |||
vec4 vertex = u_modelview * vec4(in_position, 1.0); | |||
vec3 tnorm = normalize(u_normalmat * in_Normal); | |||
pass_vertex = vertex; | |||
pass_tnormal = tnorm; | |||
pass_color = in_color; | |||
pass_texcoord = in_texcoord; | |||
gl_Position = u_projection * vertex; | |||
} | |||
[frag.glsl] | |||
#version 130 | |||
#if defined GL_ES | |||
precision highp float; | |||
#endif | |||
in vec4 pass_vertex; /* View space */ | |||
in vec3 pass_tnormal; | |||
in vec4 pass_color; | |||
in vec2 pass_texcoord; | |||
uniform mat4 u_view; | |||
uniform mat4 u_inv_view; | |||
uniform mat4 u_inv_modelview; | |||
uniform sampler2D u_Texture; | |||
//Light list | |||
uniform vec4 u_lights[8 * 2]; | |||
void main(void) | |||
{ | |||
/* Material properties */ | |||
vec3 specular_reflect = vec3(0.8, 0.75, 0.4); | |||
float specular_power = 60.0; | |||
/* World properties */ | |||
vec3 ambient = vec3(0.7, 0.7, 0.7); | |||
vec3 specular = vec3(0.0, 0.0, 0.0); | |||
vec3 diffuse = vec3(0.0, 0.0, 0.0); | |||
/* Light precalculations */ | |||
vec3 v = normalize(-pass_vertex.xyz); | |||
/* Apply lighting */ | |||
for (int i = 0; i < 8; i++) | |||
{ | |||
vec4 pos = u_lights[i * 2]; | |||
vec4 color = u_lights[i * 2 + 1]; | |||
vec3 s, r; | |||
if (pos.w > 0.0) | |||
{ | |||
/* Point light -- no attenuation yet */ | |||
s = normalize((u_view * pos).xyz - pass_vertex.xyz); | |||
r = reflect(-s, pass_tnormal); | |||
} | |||
else | |||
{ | |||
/* Directional light */ | |||
s = normalize(-pos.xyz); | |||
r = reflect(s, pass_tnormal); | |||
} | |||
float sdotn = max(dot(s, pass_tnormal), 0.0); | |||
diffuse += color.xyz * sdotn; | |||
if (sdotn > 0.0) | |||
specular += color.xyz * specular_reflect | |||
* pow(max(dot(r, v), 0.0), specular_power); | |||
} | |||
vec3 light = ambient + diffuse + specular; | |||
gl_FragColor = texture2D(u_Texture, pass_texcoord.xy) * pass_color * vec4(light, 1.0f); | |||
} | |||
@@ -44,8 +44,6 @@ Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "03_noise", "doc\tutorial\03 | |||
EndProject | |||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "04_texture", "doc\tutorial\04_texture.vcxproj", "{834852DB-EDB6-4FD0-BCF9-45CD01126962}" | |||
EndProject | |||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "meshviewer", "doc\samples\meshviewer\meshviewer.vcxproj", "{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}" | |||
EndProject | |||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "12_Voronoi", "doc\tutorial\12_Voronoi.vcxproj", "{6BF81B39-EDC2-4227-9982-C2D8ABEA95AF}" | |||
EndProject | |||
Project("{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}") = "07_input", "doc\tutorial\07_input.vcxproj", "{572E5B9C-7E19-489C-BD8A-E8401CFBBC47}" | |||
@@ -233,16 +231,6 @@ Global | |||
{834852DB-EDB6-4FD0-BCF9-45CD01126962}.Release|Win32.Build.0 = Release|Win32 | |||
{834852DB-EDB6-4FD0-BCF9-45CD01126962}.Release|x64.ActiveCfg = Release|x64 | |||
{834852DB-EDB6-4FD0-BCF9-45CD01126962}.Release|x64.Build.0 = Release|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|ORBIS.ActiveCfg = Debug|Win32 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|Win32.Build.0 = Debug|Win32 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|x64.ActiveCfg = Debug|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Debug|x64.Build.0 = Debug|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|ORBIS.ActiveCfg = Release|Win32 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|Win32.ActiveCfg = Release|Win32 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|Win32.Build.0 = Release|Win32 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|x64.ActiveCfg = Release|x64 | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E}.Release|x64.Build.0 = Release|x64 | |||
{6BF81B39-EDC2-4227-9982-C2D8ABEA95AF}.Debug|ORBIS.ActiveCfg = Debug|Win32 | |||
{6BF81B39-EDC2-4227-9982-C2D8ABEA95AF}.Debug|Win32.ActiveCfg = Debug|Win32 | |||
{6BF81B39-EDC2-4227-9982-C2D8ABEA95AF}.Debug|x64.ActiveCfg = Debug|x64 | |||
@@ -326,7 +314,6 @@ Global | |||
{BCEE0132-8E24-49BE-AFEB-96DAD14396BA} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{B0A53D75-CBB4-4FDF-93AC-2D12A79ADA0E} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{834852DB-EDB6-4FD0-BCF9-45CD01126962} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{7CE9FE12-E4AB-4A22-90D4-2C15F0C30D4E} = {B6297FF2-63D0-41EE-BE13-EFF720C9B0FA} | |||
{6BF81B39-EDC2-4227-9982-C2D8ABEA95AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{572E5B9C-7E19-489C-BD8A-E8401CFBBC47} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
{E05E23A5-67DE-42B5-98A3-E63CCE0CC0AF} = {E74CF679-CA2A-47E9-B1F4-3779D6AC6B04} | |||
@@ -31,50 +31,6 @@ lolunit_declare_fixture(thread_test) | |||
{ | |||
} | |||
lolunit_declare_test(threads) | |||
{ | |||
msg::info("%s START\n", m_manager.GetName().c_str()); | |||
//Start threads manager | |||
m_manager.Start(); | |||
msg::info("%s STARTED\n", m_manager.GetName().c_str()); | |||
UnitTestJob job[4]; | |||
lolunit_assert_equal(0, m_manager.Test_GetDispatchCount()); | |||
m_manager.AddJob(&job[0]); | |||
lolunit_assert_equal(1, m_manager.Test_GetDispatchCount()); | |||
lolunit_assert_equal(false, job[0].IsDone()); | |||
bool dispatch_check = true; | |||
while (!m_manager.IsDone()) | |||
{ | |||
m_manager.tick_game(1.f / 60.f); | |||
if (dispatch_check) | |||
{ | |||
lolunit_assert_equal(0, m_manager.Test_GetDispatchCount()); | |||
#if !defined(LOL_FEATURE_THREADS) || !LOL_FEATURE_THREADS | |||
lolunit_assert_equal(0, m_manager.Test_GetDispatchedCount()); | |||
#else //LOL_FEATURE_THREADS | |||
lolunit_assert_equal(1, m_manager.Test_GetDispatchedCount()); | |||
#endif | |||
m_manager.AddJob(&job[1]); | |||
m_manager.AddJob(&job[2]); | |||
m_manager.AddJob(&job[3]); | |||
dispatch_check = false; | |||
} | |||
} | |||
lolunit_assert_equal(true, job[0].IsDone()); | |||
lolunit_assert_equal(true, job[1].IsDone()); | |||
lolunit_assert_equal(true, job[2].IsDone()); | |||
lolunit_assert_equal(true, job[3].IsDone()); | |||
array<ThreadJob*> results; | |||
m_manager.GetWorkResult(results); | |||
lolunit_assert_equal(4, results.count()); | |||
msg::info("%s STOP\n", m_manager.GetName().c_str()); | |||
//Stop manager | |||
m_manager.Stop(); | |||
msg::info("%s STOPPED\n", m_manager.GetName().c_str()); | |||
} | |||
lolunit_declare_test(queue_try_push) | |||
{ | |||
queue<int, 1> q; | |||