LuaParser class which loads a Lua File.

LuaApiInterface header that is overrided by Lua api functions
l_Average class to test LuaApiInterface
master
aurailus 2018-12-17 20:05:00 -08:00
parent e57718f257
commit 67b3a5086e
10 changed files with 138 additions and 62 deletions

View File

@ -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)

View File

@ -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));

View File

@ -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;

View File

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

View File

@ -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);
}

29
zeus/lua_api/LuaParser.h Normal file
View File

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

View File

@ -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);
}

View File

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

View File

@ -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",

View File

@ -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: