LuaParser class which loads a Lua File.
LuaApiInterface header that is overrided by Lua api functions l_Average class to test LuaApiInterfacemaster
parent
e57718f257
commit
67b3a5086e
|
@ -17,6 +17,6 @@ find_package(glfw3 REQUIRED)
|
|||
|
||||
link_directories(lib/glew/lib)
|
||||
|
||||
add_executable(zeus zeus/Main.cpp zeus/engine/graphics/Mesh.cpp zeus/engine/graphics/Mesh.h zeus/engine/PerlinNoise.cpp zeus/engine/PerlinNoise.h zeus/engine/Entity.cpp zeus/engine/Entity.h zeus/engine/graphics/Shader.cpp zeus/engine/graphics/Shader.h zeus/engine/Window.cpp zeus/engine/Window.h zeus/engine/Camera.cpp zeus/engine/Camera.h zeus/engine/graphics/Texture.cpp zeus/engine/graphics/Texture.h zeus/mesh/MeshGenerator.cpp zeus/mesh/MeshGenerator.h zeus/engine/Timer.cpp zeus/engine/Timer.h zeus/blocks/BlockAtlas.cpp zeus/blocks/BlockAtlas.h zeus/blocks/BlockDef.cpp zeus/blocks/BlockDef.h zeus/mesh/MeshPart.cpp zeus/mesh/MeshPart.h zeus/mesh/MeshMod.h zeus/mesh/Vertex.cpp zeus/mesh/Vertex.h zeus/mesh/BlockModel.cpp zeus/mesh/BlockModel.h zeus/engine/TextureAtlas.cpp zeus/engine/TextureAtlas.h zeus/world/World.cpp zeus/world/World.h zeus/world/BlockChunk.cpp zeus/world/BlockChunk.h zeus/engine/helpers/ArrayTrans3D.h zeus/world/MeshChunk.cpp zeus/world/MeshChunk.h zeus/game/GameInstance.cpp zeus/game/GameInstance.h zeus/engine/graphics/Renderer.cpp zeus/engine/graphics/Renderer.h)
|
||||
add_executable(zeus zeus/Main.cpp zeus/engine/graphics/Mesh.cpp zeus/engine/graphics/Mesh.h zeus/engine/PerlinNoise.cpp zeus/engine/PerlinNoise.h zeus/engine/Entity.cpp zeus/engine/Entity.h zeus/engine/graphics/Shader.cpp zeus/engine/graphics/Shader.h zeus/engine/Window.cpp zeus/engine/Window.h zeus/engine/Camera.cpp zeus/engine/Camera.h zeus/engine/graphics/Texture.cpp zeus/engine/graphics/Texture.h zeus/mesh/MeshGenerator.cpp zeus/mesh/MeshGenerator.h zeus/engine/Timer.cpp zeus/engine/Timer.h zeus/blocks/BlockAtlas.cpp zeus/blocks/BlockAtlas.h zeus/blocks/BlockDef.cpp zeus/blocks/BlockDef.h zeus/mesh/MeshPart.cpp zeus/mesh/MeshPart.h zeus/mesh/MeshMod.h zeus/mesh/Vertex.cpp zeus/mesh/Vertex.h zeus/mesh/BlockModel.cpp zeus/mesh/BlockModel.h zeus/engine/TextureAtlas.cpp zeus/engine/TextureAtlas.h zeus/world/World.cpp zeus/world/World.h zeus/world/BlockChunk.cpp zeus/world/BlockChunk.h zeus/engine/helpers/ArrayTrans3D.h zeus/world/MeshChunk.cpp zeus/world/MeshChunk.h zeus/world/GameInstance.cpp zeus/world/GameInstance.h zeus/engine/graphics/Renderer.cpp zeus/engine/graphics/Renderer.h zeus/lua_api/LuaParser.cpp zeus/lua_api/LuaParser.h zeus/lua_api/LuaApiInterface.h zeus/lua_api/apis/l_Average.cpp zeus/lua_api/apis/l_Average.h)
|
||||
|
||||
target_link_libraries(zeus ${OPENGL_gl_LIBRARY} glfw libGLEW.so pthread lua dl)
|
13
lua/file.lua
13
lua/file.lua
|
@ -1,10 +1,9 @@
|
|||
print "Hello, world"
|
||||
print("----\nPrinting the Zeus Global table's contents:\n----")
|
||||
|
||||
-- Add numbers together
|
||||
function add(x, y)
|
||||
return x + y
|
||||
for function_name, _ in pairs(zeus) do
|
||||
print(function_name);
|
||||
end
|
||||
|
||||
avg, sum = average(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10)
|
||||
print("Avg " .. avg)
|
||||
print("Sum " .. sum)
|
||||
print("----")
|
||||
|
||||
print(zeus.average(1, 2, 3, 4, 5));
|
|
@ -8,63 +8,12 @@
|
|||
#include "engine/Camera.h"
|
||||
|
||||
#include "engine/Timer.h"
|
||||
#include "game/GameInstance.h"
|
||||
#include "world/GameInstance.h"
|
||||
#include "engine/graphics/Renderer.h"
|
||||
|
||||
GLfloat deltaTime = 0.0f;
|
||||
GLfloat lastTime = 0.0f;
|
||||
|
||||
//extern "C" {
|
||||
// #include "lua.h"
|
||||
// #include "lualib.h"
|
||||
// #include "lauxlib.h"
|
||||
//}
|
||||
//
|
||||
//lua_State* L;
|
||||
//
|
||||
//static int average(lua_State *L) {
|
||||
// int n = lua_gettop(L);
|
||||
// double sum = 0;
|
||||
//
|
||||
// for (int i = 1; i <= n; i++) {
|
||||
// sum += lua_tonumber(L, i);
|
||||
// }
|
||||
//
|
||||
// lua_pushnumber(L, sum / n);
|
||||
// lua_pushnumber(L, sum);
|
||||
//
|
||||
//
|
||||
//
|
||||
// return 2; //Number of results
|
||||
//}
|
||||
|
||||
// int x = 4, y = 3, sum;
|
||||
//
|
||||
// L = luaL_newstate();
|
||||
//
|
||||
// //Open base libraries
|
||||
// luaL_openlibs(L);
|
||||
// lua_register(L, "average", average);
|
||||
//
|
||||
// luaL_dofile(L, "../file.lua");
|
||||
//
|
||||
// //Call the "add" function
|
||||
// lua_getglobal(L, "add");
|
||||
// lua_pushnumber(L, x);
|
||||
// lua_pushnumber(L, y);
|
||||
//
|
||||
// lua_call(L, 2, 1);
|
||||
//
|
||||
// sum = (int)lua_tointeger(L, -1);
|
||||
// lua_pop(L, 1);
|
||||
//
|
||||
// lua_close(L);
|
||||
//
|
||||
// printf("Hold up %i", sum);
|
||||
// getchar();
|
||||
//
|
||||
// return 0;
|
||||
|
||||
int main(int argc, char* argv[]) {
|
||||
Timer boot("Initialization");
|
||||
|
||||
|
@ -94,7 +43,7 @@ int main(int argc, char* argv[]) {
|
|||
game->draw();
|
||||
renderer->end();
|
||||
|
||||
t.elapsedMs(); //Print frame time
|
||||
// t.elapsedMs(); //Print frame time
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
//
|
||||
// Created by aurailus on 17/12/18.
|
||||
//
|
||||
|
||||
#ifndef ZEUS_LUAAPIINTERFACE_H
|
||||
#define ZEUS_LUAAPIINTERFACE_H
|
||||
|
||||
#include <iostream>
|
||||
#include "LuaParser.h"
|
||||
|
||||
class LuaApiInterface {
|
||||
public:
|
||||
virtual void bind_methods(LuaParser* parser) {};
|
||||
};
|
||||
|
||||
#endif //ZEUS_LUAAPIINTERFACE_H
|
|
@ -0,0 +1,42 @@
|
|||
//
|
||||
// Created by aurailus on 17/12/18.
|
||||
//
|
||||
|
||||
#include <iostream>
|
||||
#include "LuaParser.h"
|
||||
#include "apis/l_Average.h"
|
||||
|
||||
LuaParser::LuaParser(std::string luaFileLoc) {
|
||||
L = luaL_newstate();
|
||||
luaL_openlibs(L);
|
||||
|
||||
regGlobalModule();
|
||||
|
||||
int err = luaL_dofile(L, luaFileLoc.c_str());
|
||||
if (err != 0) {
|
||||
std::cerr << "Failed to compile " << luaFileLoc << " with error code " << err << "." << std::endl;
|
||||
std::cerr << lua_tostring(L, -1) << std::endl;
|
||||
luaL_traceback(L, L, nullptr, 1);
|
||||
std::cerr << lua_tostring(L, -1) << std::endl;
|
||||
}
|
||||
|
||||
getchar(); // Just to pause
|
||||
}
|
||||
|
||||
void LuaParser::regFunc(const char *functionName, lua_CFunction any) {
|
||||
lua_pushcfunction(L, any);
|
||||
lua_setfield(L, -2, functionName);
|
||||
}
|
||||
|
||||
|
||||
void LuaParser::regGlobalModule() {
|
||||
lua_newtable(L);
|
||||
|
||||
l_Average().bind_methods(this);
|
||||
|
||||
lua_setglobal(L, "zeus");
|
||||
}
|
||||
|
||||
LuaParser::~LuaParser() {
|
||||
lua_close(L);
|
||||
}
|
|
@ -0,0 +1,29 @@
|
|||
//
|
||||
// Created by aurailus on 17/12/18.
|
||||
//
|
||||
|
||||
#ifndef ZEUS_LUAPARSER_H
|
||||
#define ZEUS_LUAPARSER_H
|
||||
|
||||
#include <string>
|
||||
|
||||
extern "C" {
|
||||
#include "lua.h"
|
||||
#include "lualib.h"
|
||||
#include "lauxlib.h"
|
||||
}
|
||||
|
||||
class LuaParser {
|
||||
public:
|
||||
explicit LuaParser(std::string luaFileLoc);
|
||||
|
||||
void regGlobalModule();
|
||||
void regFunc(const char *functionName, lua_CFunction any);
|
||||
|
||||
~LuaParser();
|
||||
private:
|
||||
lua_State* L;
|
||||
};
|
||||
|
||||
|
||||
#endif //ZEUS_LUAPARSER_H
|
|
@ -0,0 +1,21 @@
|
|||
//
|
||||
// Created by aurailus on 17/12/18.
|
||||
//
|
||||
|
||||
#include "l_Average.h"
|
||||
|
||||
int average(lua_State *L) {
|
||||
int n = lua_gettop(L);
|
||||
double sum = 0;
|
||||
|
||||
for (int i = 1; i <= n; i++) {
|
||||
sum += lua_tonumber(L, i);
|
||||
}
|
||||
|
||||
lua_pushnumber(L, sum / n);
|
||||
return 1;
|
||||
}
|
||||
|
||||
void l_Average::bind_methods(LuaParser* parser) {
|
||||
parser->regFunc("average", &average);
|
||||
}
|
|
@ -0,0 +1,17 @@
|
|||
//
|
||||
// Created by aurailus on 17/12/18.
|
||||
//
|
||||
|
||||
#ifndef ZEUS_AVERAGE_H
|
||||
#define ZEUS_AVERAGE_H
|
||||
|
||||
|
||||
#include "../LuaApiInterface.h"
|
||||
|
||||
class l_Average : public LuaApiInterface {
|
||||
public:
|
||||
void bind_methods(LuaParser* parser) override;
|
||||
};
|
||||
|
||||
|
||||
#endif //ZEUS_AVERAGE_H
|
|
@ -45,6 +45,8 @@ void GameInstance::initialize(Renderer* renderer) {
|
|||
textureAtlas = new TextureAtlas("../tex");
|
||||
blockAtlas = new BlockAtlas(textureAtlas);
|
||||
|
||||
LuaParser p("../lua/file.lua");
|
||||
|
||||
//TODO: Move block registration to lua code
|
||||
auto* def = new BlockDef("grass", BlockModel::Square(
|
||||
"default_grass_top", "default_dirt", "default_grass_side",
|
|
@ -6,12 +6,13 @@
|
|||
#define SRC_GAMEWORLD_H
|
||||
|
||||
|
||||
#include "../world/World.h"
|
||||
#include "World.h"
|
||||
#include "../engine/Camera.h"
|
||||
#include "../engine/Window.h"
|
||||
#include "../engine/PerlinNoise.h"
|
||||
#include "../engine/graphics/Renderer.h"
|
||||
#include "../engine/helpers/ArrayTrans3D.h"
|
||||
#include "../lua_api/LuaParser.h"
|
||||
|
||||
class GameInstance {
|
||||
public:
|
Loading…
Reference in New Issue