Error handling in lua code
This commit is contained in:
parent
aec78299ac
commit
abbd5f4f98
@ -1,5 +1,7 @@
|
|||||||
#include "Material.h"
|
#include "Material.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
Texture::Texture() {}
|
Texture::Texture() {}
|
||||||
|
|
||||||
Texture Texture::FromFile(const char *filename) {
|
Texture Texture::FromFile(const char *filename) {
|
||||||
@ -18,7 +20,7 @@ Texture Texture::FromFile(const char *filename) {
|
|||||||
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.width, tex.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
|
glTexImage2D(GL_TEXTURE_2D, 0, GL_RGBA, tex.width, tex.height, 0, GL_RGBA, GL_UNSIGNED_BYTE, data);
|
||||||
glGenerateMipmap(GL_TEXTURE_2D);
|
glGenerateMipmap(GL_TEXTURE_2D);
|
||||||
} else {
|
} else {
|
||||||
Util::Die("Error loading texture file: ", filename);
|
throw std::string() + "Error loading texture file: " + filename;
|
||||||
}
|
}
|
||||||
|
|
||||||
stbi_image_free(data);
|
stbi_image_free(data);
|
||||||
|
@ -96,7 +96,7 @@ int Mesh::GetNumSubmeshes() {
|
|||||||
|
|
||||||
Material Mesh::GetMaterial(int submesh) {
|
Material Mesh::GetMaterial(int submesh) {
|
||||||
if (submesh >= GetNumSubmeshes()) {
|
if (submesh >= GetNumSubmeshes()) {
|
||||||
Util::Die("Submesh index out of range");
|
throw "Submesh index out of range";
|
||||||
}
|
}
|
||||||
return submeshes[submesh]->material;
|
return submeshes[submesh]->material;
|
||||||
}
|
}
|
||||||
|
@ -26,6 +26,7 @@
|
|||||||
#define MESH_H
|
#define MESH_H
|
||||||
|
|
||||||
#include <vector>
|
#include <vector>
|
||||||
|
#include <exception>
|
||||||
|
|
||||||
#include "types.h"
|
#include "types.h"
|
||||||
#include "Spatial.h"
|
#include "Spatial.h"
|
||||||
|
@ -33,10 +33,10 @@ NodeList::NodeList(bool isPrefabList) {
|
|||||||
|
|
||||||
void NodeList::Append(Node *node) {
|
void NodeList::Append(Node *node) {
|
||||||
if (this->isPrefabList and not node->isPrefab) {
|
if (this->isPrefabList and not node->isPrefab) {
|
||||||
Util::Die("Attempt to add instanced node to prefab list!");
|
throw "Attempt to add instanced node to prefab list!";
|
||||||
}
|
}
|
||||||
if (node->isPrefab and not this->isPrefabList) {
|
if (node->isPrefab and not this->isPrefabList) {
|
||||||
Util::Die("Attempt to add prefab node to instanced list!");
|
throw "Attempt to add prefab node to instanced list!";
|
||||||
}
|
}
|
||||||
push_back(node);
|
push_back(node);
|
||||||
}
|
}
|
||||||
@ -83,7 +83,7 @@ void Node::QueueFree() {
|
|||||||
|
|
||||||
void Node::DoFree() {
|
void Node::DoFree() {
|
||||||
if (this != root) {
|
if (this != root) {
|
||||||
Util::Die("Tried to call DoFree from non-root node");
|
throw "Tried to call DoFree from non-root node";
|
||||||
}
|
}
|
||||||
freeList->FreeList();
|
freeList->FreeList();
|
||||||
}
|
}
|
||||||
@ -102,7 +102,7 @@ Node* Node::Duplicate() {
|
|||||||
|
|
||||||
Node* Node::Instance() {
|
Node* Node::Instance() {
|
||||||
if (not isPrefab) {
|
if (not isPrefab) {
|
||||||
Util::Die("Attempt to instance an instanced node!");
|
throw "Attempt to instance an instanced node!";
|
||||||
}
|
}
|
||||||
Node* instance = Duplicate();
|
Node* instance = Duplicate();
|
||||||
instance->isPrefab = false;
|
instance->isPrefab = false;
|
||||||
|
@ -1,4 +1,7 @@
|
|||||||
#include "Lua.h"
|
#include "Lua.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
#include "../Util.h"
|
#include "../Util.h"
|
||||||
|
|
||||||
#ifdef LUA_SCRIPTING
|
#ifdef LUA_SCRIPTING
|
||||||
@ -14,18 +17,14 @@ void Lua::Initialize() {
|
|||||||
// Initialize Lua
|
// Initialize Lua
|
||||||
luaL_openlibs(L);
|
luaL_openlibs(L);
|
||||||
luaopen_couch(L);
|
luaopen_couch(L);
|
||||||
|
lua_atpanic(L, &LuaExceptionHandler);
|
||||||
|
|
||||||
err = luaL_loadfile(L, "main.lua");
|
err = luaL_loadfile(L, "main.lua");
|
||||||
if (err == LUA_OK) {
|
if (err == LUA_OK) {
|
||||||
err = lua_pcall(L, 0, 0, 0);
|
lua_call(L, 0, 0);
|
||||||
if (err != LUA_OK) {
|
|
||||||
Error();
|
|
||||||
}
|
|
||||||
if (HasHook("init")) {
|
if (HasHook("init")) {
|
||||||
lua_getglobal(L, "init");
|
lua_getglobal(L, "init");
|
||||||
err = lua_pcall(L, 0, 0, 0);
|
lua_call(L, 0, 0);
|
||||||
if (err != LUA_OK) {
|
|
||||||
Error();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
} else if (err == LUA_ERRFILE) {
|
} else if (err == LUA_ERRFILE) {
|
||||||
Util::Die("Could not find main.lua.");
|
Util::Die("Could not find main.lua.");
|
||||||
@ -53,10 +52,7 @@ void Lua::Update(double delta) {
|
|||||||
if (HasHook("update")) {
|
if (HasHook("update")) {
|
||||||
lua_getglobal(L, "update");
|
lua_getglobal(L, "update");
|
||||||
lua_pushnumber(L, delta);
|
lua_pushnumber(L, delta);
|
||||||
int err = lua_pcall(L, 1, 0, 0);
|
lua_call(L, 1, 0);
|
||||||
if (err != LUA_OK) {
|
|
||||||
Error();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
#endif // LUA_SCRIPTING
|
#endif // LUA_SCRIPTING
|
||||||
}
|
}
|
||||||
@ -88,16 +84,12 @@ bool Lua::HasHook(const char *name) {
|
|||||||
#ifdef LUA_SCRIPTING
|
#ifdef LUA_SCRIPTING
|
||||||
|
|
||||||
void Lua::LuaKeyHandler(Window *window, int key, int code, int action, int mods) {
|
void Lua::LuaKeyHandler(Window *window, int key, int code, int action, int mods) {
|
||||||
// lua_State *L = (lua_State*) glfwGetWindowUserPointer(window);
|
|
||||||
lua_getglobal(L, "onkey");
|
lua_getglobal(L, "onkey");
|
||||||
lua_pushinteger(L, key);
|
lua_pushinteger(L, key);
|
||||||
lua_pushinteger(L, code);
|
lua_pushinteger(L, code);
|
||||||
lua_pushinteger(L, action);
|
lua_pushinteger(L, action);
|
||||||
lua_pushinteger(L, mods);
|
lua_pushinteger(L, mods);
|
||||||
int err = lua_pcall(L, 4, 0, 0);
|
lua_call(L, 4, 0);
|
||||||
if (err != LUA_OK) {
|
|
||||||
Error();
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void Lua::LuaMousePositionHandler(Window *window, double xpos, double ypos, double relx, double rely) {
|
void Lua::LuaMousePositionHandler(Window *window, double xpos, double ypos, double relx, double rely) {
|
||||||
@ -107,10 +99,18 @@ void Lua::LuaMousePositionHandler(Window *window, double xpos, double ypos, doub
|
|||||||
lua_pushnumber(L, ypos);
|
lua_pushnumber(L, ypos);
|
||||||
lua_pushnumber(L, relx);
|
lua_pushnumber(L, relx);
|
||||||
lua_pushnumber(L, rely);
|
lua_pushnumber(L, rely);
|
||||||
int err = lua_pcall(L, 4, 0, 1);
|
lua_call(L, 4, 0);
|
||||||
if (err != LUA_OK) {
|
}
|
||||||
Error();
|
|
||||||
}
|
int Lua::LuaExceptionHandler(lua_State *L1) {
|
||||||
|
std::string err;
|
||||||
|
err += lua_tostring(L1, -1);
|
||||||
|
err += "\n";
|
||||||
|
luaL_traceback(L1, L1, NULL, 1);
|
||||||
|
err += lua_tostring(L, -1);
|
||||||
|
Util::Die(err);
|
||||||
|
// Should never get here
|
||||||
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
#endif // LUA_SCRIPTING
|
#endif // LUA_SCRIPTING
|
||||||
|
@ -27,6 +27,7 @@ private:
|
|||||||
static lua_State *L;
|
static lua_State *L;
|
||||||
static void LuaKeyHandler(Window *window, int key, int code, int action, int mods);
|
static void LuaKeyHandler(Window *window, int key, int code, int action, int mods);
|
||||||
static void LuaMousePositionHandler(Window *window, double xpos, double ypos, double xrel, double yrel);
|
static void LuaMousePositionHandler(Window *window, double xpos, double ypos, double xrel, double yrel);
|
||||||
|
static int LuaExceptionHandler(lua_State *L1);
|
||||||
#endif // LUA_SCRIPTING
|
#endif // LUA_SCRIPTING
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -1,5 +1,7 @@
|
|||||||
#include "Skybox.h"
|
#include "Skybox.h"
|
||||||
|
|
||||||
|
#include <string>
|
||||||
|
|
||||||
float vertices[] = {
|
float vertices[] = {
|
||||||
// positions
|
// positions
|
||||||
-1.0f, 1.0f, -1.0f,
|
-1.0f, 1.0f, -1.0f,
|
||||||
@ -91,7 +93,7 @@ Skybox *Skybox::FromFiles(const char *right, const char* left, const char* top,
|
|||||||
for (int i = 0; i < 6; i++) {
|
for (int i = 0; i < 6; i++) {
|
||||||
data = stbi_load(files[i], &width, &height, &nrChannels, 3);
|
data = stbi_load(files[i], &width, &height, &nrChannels, 3);
|
||||||
if (!data) {
|
if (!data) {
|
||||||
Util::Die("Could not load skybox image ", files[i]);
|
throw std::string() + "Could not load skybox image " + files[i];
|
||||||
}
|
}
|
||||||
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,
|
glTexImage2D(GL_TEXTURE_CUBE_MAP_POSITIVE_X + i,
|
||||||
0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
|
0, GL_RGB, width, height, 0, GL_RGB, GL_UNSIGNED_BYTE, data);
|
||||||
|
@ -79,7 +79,7 @@ Yeah sure let's do physics
|
|||||||
## Great Refactor
|
## Great Refactor
|
||||||
Things are starting to smell, here's what I need to do
|
Things are starting to smell, here's what I need to do
|
||||||
- [ ] Replace all public attributes with accessors (on classes)
|
- [ ] Replace all public attributes with accessors (on classes)
|
||||||
- [ ] Seperate prefabs from instances
|
- [X] Seperate prefabs from instances
|
||||||
- [ ] Combine related files (shaders)
|
- [ ] Combine related files (shaders)
|
||||||
- [ ] Create a testing suite
|
- [ ] Create a testing suite
|
||||||
- [ ] Have exceptions thrown to Lua if generated from a user program
|
- [ ] Have exceptions thrown to Lua if generated from a user program
|
||||||
|
Loading…
Reference in New Issue
Block a user